![]() |
OpenAlbum 1.0.b
|
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 }