OpenAlbum 1.0.b

/home/manuel/PFC/open-album/OpenAlbum-Unix/dialogmarcos.cpp

00001 #include "dialogmarcos.h"
00002 #include "ui_dialogmarcos.h"
00003 #include "controladorresolucion.h"
00004 #include <QtGui>
00005 #include "parser.h"
00006 #include "error.h"
00007 
00008 dialogMarcos::dialogMarcos(QWidget *parent, QString plantilla, controladorResolucion *controlador_, QDir directoriodetrabajo) :
00009     QDialog(parent),
00010     ui(new Ui::dialogMarcos)
00011 {
00012     ui->setupUi(this);
00013     this->controlador=controlador_;
00014     this->setDimensiones();
00015     this->directorioPpal=directoriodetrabajo;
00016     this->ActivarSeleccionMarcos();
00017     this->ui->selectorMarcos->setStyle(new QWindowsStyle);
00018     this->nombreLocal=new QString("");
00019     Parser parser(plantilla.toStdString(), this);
00020     ticpp::Element* element = parser.root();
00021     this->numFotosCon=0;
00022     this->numFotosSin=0;
00023     parser.get_attribute("imagen", element, &this->numFotosSin);
00024     ticpp::Element* elementMarcos;
00025     elementMarcos=parser.find("marcos");
00026     std::vector<ticpp::Element*> marcos_fotos;
00027     parser.find("foto", marcos_fotos, elementMarcos);
00028     for(unsigned contador=0; contador<marcos_fotos.size(); contador++){
00029         int id=0;
00030         parser.get_attribute("id", marcos_fotos.at(contador), &id);
00031         QString *tipoX=new QString(QString::fromStdString(parser.get_attribute("tipo", marcos_fotos.at(contador))));
00032         marco m;
00033         m.idFoto=id;
00034         m.tipo=new QString();
00035         m.tipo=tipoX;
00036         m.nombre=new QString("");
00037         this->marcos.push_back(m);
00038         
00039     }
00040     this->ui->numSin->setText(QString::number(this->numFotosSin));
00041     this->ui->numCon->setText(QString::number(this->numFotosCon));
00042     this->ui->seleccionarModo->addItem(tr("Elegir marco para todas las fotos"));
00043     
00044     for(int i=0; i <this->numFotosSin; i++){
00045         QString aux=tr("Elegir marco para la foto ");
00046         aux.append(QString::number(i+1));
00047         this->ui->seleccionarModo->addItem(aux);
00048     }
00049     this->ActivarBotonElegir();
00050      QIcon *iconoVentana=new QIcon(directoriodetrabajo.absolutePath() + "/data/iconlargue.png");
00051     this->setWindowIcon(*iconoVentana);
00052     delete iconoVentana;
00053     
00054 }
00055 
00056 dialogMarcos::~dialogMarcos()
00057 {
00058     delete ui;
00059 }
00060 
00061 void dialogMarcos::setDimensiones(){
00062     this->setFixedSize(this->controlador->getWMarcos(), this->controlador->getHMarcos());
00063     int W=this->controlador->getWMarcos();
00064     int H=this->controlador->getHMarcos();
00065     int x,y;
00066     x=this->ui->labelCon->x();
00067     y=this->ui->labelCon->y();
00068     this->ui->labelCon->setGeometry((x*W)/401, (y*H)/237, (121*W)/401, (17*H)/237);
00069     x=this->ui->labelSin->x();
00070     y=this->ui->labelSin->y();
00071     this->ui->labelSin->setGeometry((x*W)/401, (y*H)/237, (121*W)/401, (17*H)/237);
00072     x=this->ui->numCon->x();
00073     y=this->ui->numCon->y();
00074     this->ui->numCon->setGeometry((x*W)/401, (y*H)/237, (21*W)/401, (17*H)/237);
00075     x=this->ui->numSin->x();
00076     y=this->ui->numSin->y();
00077     this->ui->numSin->setGeometry((x*W)/401, (y*H)/237, (21*W)/401, (17*H)/237);
00078     x=this->ui->pushCancelar->x();
00079     y=this->ui->pushCancelar->y();
00080     this->ui->pushCancelar->setGeometry((x*W)/401, (y*H)/237, (98*W)/401, (27*H)/237);
00081     x=this->ui->pushElegir->x();
00082     y=this->ui->pushElegir->y();
00083     this->ui->pushElegir->setGeometry((x*W)/401, (y*H)/237, (98*W)/401, (27*H)/237);
00084     x=this->ui->pushTerminar->x();
00085     y=this->ui->pushTerminar->y();
00086     this->ui->pushTerminar->setGeometry((x*W)/401, (y*H)/237, (98*W)/401, (27*H)/237);
00087     x=this->ui->seleccionarModo->x();
00088     y=this->ui->seleccionarModo->y();
00089     this->ui->seleccionarModo->setGeometry((x*W)/401, (y*H)/237, (361*W)/401, (27*H)/237);
00090     x=this->ui->selectorMarcos->x();
00091     y=this->ui->selectorMarcos->y();
00092     this->ui->selectorMarcos->setGeometry((x*W)/401, (y*H)/237, (211*W)/401, (111*H)/237);
00093     x=this->ui->visorMarcos->x();
00094     y=this->ui->visorMarcos->y();
00095     this->ui->visorMarcos->setGeometry((x*W)/401, (y*H)/237, (141*W)/401, (111*H)/237);
00096     
00097 }
00098 
00099 void dialogMarcos::SeleccionarPrimerItem(){
00100     this->ui->selectorMarcos->topLevelItem(0)->setSelected(true);
00101 }
00102 
00103 QList<marco> dialogMarcos::getMarcos(){
00104     return this->marcos;
00105 }
00106 
00107 void dialogMarcos::ElegirMarco(){
00108     if(this->ui->seleccionarModo->currentIndex()==0){
00109         this->numFotosCon=this->numFotosSin;
00110         this->numFotosSin=0;
00111         for(int a=0; a<this->marcos.size(); a++){
00112                 QString *cadena=new QString(this->nombreLocal->toStdString().c_str());
00113                 cadena->append(this->marcos.at(a).tipo);
00114                 cadena->append(".png");
00115                 marco m;
00116                 m.idFoto=this->marcos.at(a).idFoto;
00117                 m.tipo=this->marcos.at(a).tipo;
00118                 m.nombre=cadena;
00119                 this->marcos.removeAt(a);
00120                 this->marcos.insert(a, m);
00121                 
00122         }
00123         
00124     }else{
00125         int aux=this->ui->seleccionarModo->currentIndex();
00126         
00127         for(int a=0; a<this->marcos.size(); a++){
00128             if(this->marcos.at(a).idFoto==aux){
00129                 QString *cadena2= new QString(this->nombreLocal->toStdString().c_str());
00130                 cadena2->append(this->marcos.at(a).tipo);
00131                 cadena2->append(".png");
00132                 marco m;
00133                 m.idFoto=aux;
00134                 m.tipo=this->marcos.at(a).tipo;
00135                 m.nombre=cadena2;
00136                 this->marcos.removeAt(a);
00137                 this->marcos.insert(a, m);
00138                 
00139             }
00140         }
00141         
00142         this->numFotosSin= this->numFotosSin - 1;
00143         this->numFotosCon= this->numFotosCon + 1;
00144     }
00145     if(this->numFotosSin==0){
00146         this->ui->pushElegir->setDisabled(true);
00147         this->ui->seleccionarModo->setDisabled(true);
00148     }
00149     this->ui->numCon->setText(QString::number(this->numFotosCon));
00150     this->ui->numSin->setText(QString::number(this->numFotosSin));
00151     
00152     QModelIndex index = this->ui->seleccionarModo->model()->index(this->ui->seleccionarModo->currentIndex(), 0);
00153     QVariant v(0);
00154     this->ui->seleccionarModo->model()->setData( index, v, Qt::UserRole -1);
00155     this->ui->pushElegir->setDisabled(true);
00156 }
00157 
00158 void dialogMarcos::ActivarBotonElegir(){
00159     int marcosB, marcosC, marcosD;
00160     QString modo="";
00161     int aux=this->ui->seleccionarModo->currentIndex();
00162     if(aux==0){
00163         
00164     marcosB=0;
00165     marcosC=0;
00166     marcosD=0;
00167     for(int i=0; i < this->marcos.size(); i++){
00168         if(this->marcos.at(i).tipo->compare("B")==0){
00169            
00170             marcosB++;
00171         }
00172         if(this->marcos.at(i).tipo->compare("C")==0){
00173             
00174            marcosC++; 
00175         }
00176         if(this->marcos.at(i).tipo->compare("D")==0){
00177             
00178            marcosD++; 
00179         }
00180     }
00181     if(marcosB>0){
00182         modo.append("B");
00183         this->ui->pushElegir->setEnabled(true);
00184         if(marcosC>0 || marcosD>0){
00185            
00186             this->ui->pushElegir->setDisabled(true);
00187             QModelIndex index = this->ui->seleccionarModo->model()->index(this->ui->seleccionarModo->currentIndex(), 0);
00188             QVariant v(0);
00189             this->ui->seleccionarModo->model()->setData( index, v, Qt::UserRole -1);
00190         }
00191     }else{
00192         if(marcosC>0){
00193             this->ui->pushElegir->setEnabled(true);
00194                 modo.append("C");
00195                 if(marcosD>0){
00196                   
00197                     this->ui->pushElegir->setDisabled(true);
00198                     QModelIndex index = this->ui->seleccionarModo->model()->index(this->ui->seleccionarModo->currentIndex(), 0);
00199                     QVariant v(0);
00200                     this->ui->seleccionarModo->model()->setData( index, v, Qt::UserRole -1);
00201                 }
00202         }else{
00203             modo.append("D");
00204             this->ui->pushElegir->setEnabled(true);
00205         }
00206     }
00207     }else{
00208         
00209          for(int j=0; j < this->marcos.size(); j++){
00210              if(aux==this->marcos.at(j).idFoto){
00211                  modo.append(this->marcos.at(j).tipo);
00212              }
00213          }
00214         this->ui->pushElegir->setEnabled(true);
00215     }
00216    for (int x = ui->selectorMarcos->topLevelItemCount() - 1; x >= 0; x--){
00217        QString auxiliar=this->ui->selectorMarcos->topLevelItem(x)->text(0);
00218        auxiliar.append(modo);
00219        auxiliar.append(".png");
00220        QDir paracomprobar;
00221        if(!paracomprobar.exists(this->directorioPpal.absolutePath() + "/frames/" + auxiliar)){
00222            this->ui->selectorMarcos->topLevelItem(x)->setDisabled(true);
00223            
00224        }else{
00225            this->ui->selectorMarcos->topLevelItem(x)->setDisabled(false);
00226        }
00227    }
00228     this->ActivarVisualizacionMarcos();
00229     
00230 }
00231 
00232 void dialogMarcos::FinalizarLabor(){
00233     this->accept();
00234 }
00235 
00236 void dialogMarcos::ActivarVisualizacionMarcos(){
00237      ui->visorMarcos->setEnabled(true);
00238     QGraphicsScene *scene;
00239     try{
00240             
00241     scene= new QGraphicsScene();
00242     }catch(std::exception& e){
00243         Error *err=new Error(2, e.what(), this);
00244         err->LanzarDialogo();
00245         delete err;
00246         exit(1);
00247     }
00248     ui->visorMarcos->setScene(scene);
00249     
00250     for (int i = ui->selectorMarcos->topLevelItemCount() - 1; i >= 0; i--){
00251 
00252         if((ui->selectorMarcos->topLevelItem(i))->isSelected()){
00253             this->nombreLocal=new QString(ui->selectorMarcos->topLevelItem(i)->text(0));
00254            
00255             
00256             ui->visorMarcos->setScene(this->miniaturasMarcos.at(i)->scene());
00257         }
00258 
00259     }
00260    
00261 }
00262 
00263 void dialogMarcos::setMiniaturas(std::vector<QGraphicsView*> min){
00264    this->miniaturasMarcos=min; 
00265 }
00266 
00267 void dialogMarcos::ActivarSeleccionMarcos(){
00268     ui->visorMarcos->setDisabled(true);
00269     
00270     QDir *dir;
00271     QStringList *por;
00272     try{
00273    
00274     QString path=this->directorioPpal.absolutePath() +"/frames/";
00275     dir=new QDir(path);
00276     por=new QStringList("*A.png");
00277     }catch(std::exception& e){
00278                 Error *err=new Error(2, e.what(), this);
00279                 err->LanzarDialogo();
00280                 delete err;
00281                 exit(1);
00282     }
00283     ui->selectorMarcos->setEnabled(true);
00284     ui->visorMarcos->setEnabled(true);
00285     ui->selectorMarcos->clear();
00286     ui->pushElegir->setDisabled(true);
00287     QTextCodec *linuxCodec1=QTextCodec::codecForCStrings();
00288     QTextCodec *linuxCodec=QTextCodec::codecForName("UTF-8");
00289     QTextCodec::setCodecForTr(linuxCodec);
00290     QTextCodec::setCodecForCStrings(linuxCodec);
00291     QTextCodec::setCodecForLocale(linuxCodec);
00292     QStringList fileNames = dir->entryList(*por);
00293     
00294     try{
00295     if(fileNames.isEmpty()){
00296         throw std::ios_base::failure(tr("No se pueden cargar los marcos.").toStdString());
00297     }
00298     }catch(std::exception& e){
00299                 Error *err=new Error(4, e.what(), this);
00300                 err->LanzarDialogo();
00301                 delete err;
00302                 exit(1);
00303     }
00304     
00305     for (int i=0; i < fileNames.size(); i++) {
00306         
00307        
00308         QFileInfo fi(fileNames.at(i).toLocal8Bit());
00309         QTreeWidgetItem *item = new QTreeWidgetItem(ui->selectorMarcos);
00310         item->setText(0, fi.fileName().remove("A.png"));
00311         
00312     }
00313      QTextCodec::setCodecForTr(linuxCodec1);
00314     QTextCodec::setCodecForCStrings(linuxCodec1);
00315     QTextCodec::setCodecForLocale(linuxCodec1);
00316     delete dir;
00317     delete por;
00318   
00319 }
 Todo Clases Archivos Funciones Variables