OpenAlbum 1.0.b

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

00001 #include <string>
00002 #include "string.h"
00003 #include <iostream>
00004 #include "formprincipal.h"
00005 #include "ui_formprincipal.h"
00006 #include "eleccionorden.h"
00007 #include "ui_eleccionorden.h"
00008 #include <QString>
00009 #include <QList>
00010 #include <QFileDialog>
00011 #include <QTreeWidget>
00012 #include <QGraphicsView>
00013 #include <QGraphicsScene>
00014 #include <QImage>
00015 #include <QGraphicsPixmapItem>
00016 #include <QPixmap>
00017 #include "parser.h"
00018 #include "Portada.h"
00019 #include "formtextoclass.h"
00020 #include "ui_formtextoclass.h"
00021 #include "fondodialog.h"
00022 #include "ui_fondodialog.h"
00023 #include "dialogtamanno.h"
00024 #include "ui_dialogtamanno.h"
00025 #include <QProgressDialog>
00026 #include <QDateTime>
00027 #include "album.h"
00028 #include <algorithm>
00029 #include "dialogordenpersonalizado.h"
00030 #include "ui_dialogordenpersonalizado.h"
00031 #include "dialogcreacionpaginaspersonalizadas.h"
00032 #include "ui_dialogcreacionpaginaspersonalizadas.h"
00033 #include "dialogcreacionpaginas.h"
00034 #include "ui_dialogcreacionpaginas.h"
00035 #include "Pagina.h"
00036 #include "error.h"
00037 #include <QWizardPage>
00038 #include "introduccionwizard.h"
00039 #include "ui_introduccionwizard.h"
00040 #include "ui_portadawizard.h"
00041 #include "portadawizard.h"
00042 #include "ui_fotoswizard.h"
00043 #include "fotoswizard.h"
00044 #include "finwizard.h"
00045 #include "dialogpropiedades.h"
00046 #include "creditos.h"
00047 #include "introapp.h"
00048 #include "ui_fondoportadawizard.h"
00049 
00050 FormPrincipal::FormPrincipal(QWidget *parent, controladorResolucion *controlador_, QDir directorioDeTrabajo) :
00051     QMainWindow(parent),
00052     ui(new Ui::FormPrincipal)
00053 {
00054     
00055     ui->setupUi(this);
00056     introApp *intro=new introApp(this, directorioDeTrabajo);
00057     intro->setAttribute(Qt::WA_DeleteOnClose);
00058     intro->raise();
00059 
00060     
00061     QDir *dirAux;
00062     QStringList *list;
00063     try{
00064     
00065     QString pathAux=directorioDeTrabajo.absolutePath() + "/textures/";
00066     dirAux=new QDir(pathAux);
00067     list=new QStringList("*.jpg");
00068     }catch(std::exception& e){
00069                 Error *err=new Error(2, e.what(), this);
00070                 err->LanzarDialogo();
00071                 delete err;
00072                 exit(1);
00073     }
00074     QStringList fileNamesAux = dirAux->entryList(*list);
00075     intro->setAttribute(Qt::WA_DeleteOnClose );
00076     intro->setMaximoBarra(fileNamesAux.size()+6);
00077     intro->show();
00078     intro->setValorBarra(0);
00079     delete dirAux;
00080     delete list;
00081     QDir oculto;
00082     intro->setValorBarra(1);
00083     intro->setValorLabel(tr("Inicializando app..."), 1);
00084     
00085         
00086     
00087     
00088     try{     
00089     if(!oculto.exists(directorioDeTrabajo.absolutePath()+"/templates")){
00090             throw std::ios_base::failure(tr("No se encuentra el directorio /templates con las plantillas").toStdString());
00091     }
00092     if(!oculto.exists(directorioDeTrabajo.absolutePath()+"/templates/pages")){
00093             throw std::ios_base::failure(tr("No se encuentra el directorio /templates/pages con las plantillas de página").toStdString());
00094     }
00095     if(!oculto.exists(directorioDeTrabajo.absolutePath()+"/frames")){
00096         throw std::ios_base::failure(tr("No se encuentra el directorio /frames con los marcos de página").toStdString());
00097     }
00098     if(!oculto.exists(directorioDeTrabajo.absolutePath()+"/textures")){
00099         throw std::ios_base::failure(tr("No se encuentra el directorio /textures con las texturas").toStdString());
00100     }
00101     
00102                 
00103     }catch(std::exception& e){
00104         Error *err=new Error(6, e.what(), this);
00105         err->LanzarDialogo();
00106         delete err;
00107         exit(1);
00108     }
00109     
00110     this->paginasPersonalizadas=false;
00111     this->paginasAleatorias=false;
00112     this->paginasFijas=false;
00113     ordenAlfabetico=false;
00114     this->inicializarDespl=true;
00115     ordenFechaCreciente=false;
00116     ordenFechaDecreciente=false; 
00117     ordenPersonalizado=false;
00118     this->mostrandosePaginaActualmente=false;
00119     this->creadoConAsistente=false;
00120     this->seleccionadaTextura=false;
00121     this->insertadoActionSalir=false;
00122     //Establecemos el ancho de cada columna del treeWidget, que servirá para seleccionar las imágenes que contendrá el álbum
00123     this->ejecutadoWizard=false;
00124     ui->treeWidget->setHeaderLabel("          ");
00125     ui->treeWidget->setStyle(new QWindowsStyle);
00126     this->controlador=controlador_;
00127     this->aplicarDimensiones();
00128     
00129     
00130     QString path2=directorioDeTrabajo.absolutePath() + "/data/templatePredef.png";
00131     QPixmap *pix=new QPixmap(path2);
00132     QGraphicsScene *scena=new QGraphicsScene();
00133     
00134     ui->plantillaPreview->setScene(scena);
00135     scena->addPixmap(pix->scaled(this->controlador->getWvisorPlantilla(), this->controlador->getHvisorPlantilla(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
00136     delete pix;
00137     this->ui->toolBar->setIconSize(QSize(18, 18));
00138     this->ui->toolBar->setStyle(new QWindowsStyle);
00139     this->ui->menuBar->setStyle(new QWindowsStyle);
00140     this->ui->action_Propiedades->setDisabled(true);
00141     this->ui->actionPropiedadesBoton->setDisabled(true);
00142     this->ui->selectorPlantilla->setStyle(new QWindowsStyle);
00143     this->ui->groupBox->setStyle(new QWindowsStyle);
00144     this->ui->groupBox_4->setStyle(new QWindowsStyle);
00145     this->ui->groupBox_5->setStyle(new QWindowsStyle);
00146     this->ui->plantillaPreview->setStyle(new QWindowsStyle);
00147     this->ui->imagePreview->setStyle(new QWindowsStyle);
00148     this->ui->visorAlbum->setStyle(new QWindowsStyle);
00149     this->semillaInicializada=false;
00150     this->elegidaFrontalPortada=false;
00151     this->elegidoTexto=false;
00152     this->ui->selectFoto1->setDisabled(true);
00153     this->ui->selectFoto2->setDisabled(true);
00154     this->ui->botonPrueba->setDisabled(true);
00155     this->elegidaTraseraPortada=false;
00156     this->elegidoFondoPortada=false;
00157     this->elegidaPlantilla=false;
00158     this->activadoVisualizadorPrincipal=false;
00159     ui->treeWidget->resizeColumnToContents(0);
00160     this->ActivadoVisorImagenes=false;
00161     this->aceptadaEliminacion=false;
00162     this->preguntaSeguridad=false;
00163     this->ActivadoGuardado=false;
00164     this->DesactivarParteEdicion=false;
00165     this->DesactivarParteEdicionPortada=false;
00166     this->activadaCarga=false;
00167     this->creadaPortada=false;
00168     this->seHaCargado=false;
00169     ui->botonTexto->setDisabled(true);
00170     this->ui->pushUncheckAll->hide();       
00171     try{
00172     
00173     a=new Album(this);
00174     
00175     }catch(std::exception& e){
00176         Error *err=new Error(2, e.what(), this);
00177         err->LanzarDialogo();
00178         delete err;
00179         exit(1);
00180     }
00181     this->hayDesplazamientoPagina=false;
00182     
00183     
00184     this->hayDesplazamientoPortadaFotos=false;
00185     this->hayDesplazamientoPortadaTextos=false;
00186     this->creadasPaginas=false;
00187     QDir directorio, directorioCasa;
00188     this->directorioCasaUsuario=directorioCasa.homePath();
00189    
00190     if(!directorio.exists(directorioCasa.homePath() + "/.openAlbum")){
00191         try{
00192                 if(!directorio.mkdir(directorioCasa.homePath() + "/.openAlbum")){
00193                         //excepción
00194                     throw std::ios_base::failure(tr("No pudo crearse el directorio").toStdString());
00195                 }
00196         }catch(std::exception& e){
00197         Error *err=new Error(5, e.what(), this);
00198         err->LanzarDialogo();
00199         delete err;
00200         exit(1);
00201         }
00202     }
00203      intro->setValorBarra(2);
00204      intro->setValorLabel(tr("Comprobando archivos..."), 2);
00205    
00206      
00207     for(int cont=2; cont<4; cont++){
00208         ui->treeWidget->resizeColumnToContents(cont);}
00209     QFont copiaFuente=this->ui->botonTexto->font();
00210     copiaFuente.setPointSize(this->controlador->getPuntosTexto());
00211      this->ui->treeWidget->headerItem()->setFont(0, copiaFuente);
00212     this->ui->treeWidget->headerItem()->setFont(1, copiaFuente);
00213     this->ui->treeWidget->headerItem()->setFont(2, copiaFuente);
00214     this->ui->treeWidget->headerItem()->setFont(3, copiaFuente);
00215     this->ui->treeWidget->headerItem()->setFont(4, copiaFuente);
00216     this->ui->treeWidget->headerItem()->setFont(5, copiaFuente);
00217     ui->pushButtonEditar->hide();
00218     ui->pushButtonTerminar->hide();
00219     ui->pushPagSiguiente->setDisabled(true);
00220     ui->action_Avanzar_P_gina->setDisabled(true);
00221     ui->actionAvanzarBoton->setDisabled(true);
00222     ui->pushPagAnterior->setDisabled(true);
00223     ui->action_Retroceder_p_gina->setDisabled(true);
00224     ui->actionRetrocederBoton->setDisabled(true);
00225     ui->pushButtonEditarPagina->show();
00226     ui->pushButtonTerminarPagina->show();
00227     ui->pushButtonEditarPagina->setDisabled(true);
00228     ui->actionEditar->setDisabled(true);
00229     ui->actionEditarBoton->setDisabled(true);
00230     ui->actionTerminar_edici_n->setDisabled(true);
00231     ui->actionTerminarBoton->setDisabled(true);
00232     ui->pushButtonTerminarPagina->setDisabled(true);
00233     ui->action_Guardar->setDisabled(true);
00234     ui->actionGuardarBoton->setDisabled(true);
00235     ui->actionG_uardar_como->setDisabled(true);
00236     ui->actionGuardarComoBoton->setDisabled(true);
00237     IndicePaginas=0;
00238     dimensionWpagina=0;
00239     dimensionHpagina=0;
00240     
00241     //Cargamos las miniaturas de las texturas
00242     
00243     QDir *dir, *dirmarcos;
00244     QStringList *por, *pormarcos;
00245     QString path, pathmarcos;
00246    
00247     
00248     
00249     try{
00250     
00251     path=directorioDeTrabajo.absolutePath()+"/textures/prev/";
00252     pathmarcos=directorioDeTrabajo.absolutePath()+"/frames/";
00253     dir=new QDir(path);
00254     dirmarcos=new QDir(pathmarcos);
00255     por=new QStringList("*.jpg");
00256     pormarcos=new QStringList("*A.png");
00257     }catch(std::exception& e){
00258                 Error *err=new Error(2, e.what(), this);
00259                 err->LanzarDialogo();
00260                 delete err;
00261                 exit(1);
00262     }
00263     QStringList fileNames = dir->entryList(*por);
00264     QStringList fileNamesMarcos = dirmarcos->entryList(*pormarcos);
00265     delete dir;
00266     delete dirmarcos;
00267     delete por;
00268     delete pormarcos;
00269     try{
00270     if(fileNames.isEmpty()){
00271         throw std::ios_base::failure(tr("No se pueden cargar las texturas.").toStdString());
00272     }
00273     if(fileNamesMarcos.isEmpty()){
00274         throw std::ios_base::failure(tr("No se pueden cargar los marcos.").toStdString());
00275     }
00276     }catch(std::exception& e){
00277                 Error *err=new Error(4, e.what(), this);
00278                 err->LanzarDialogo();
00279                 delete err;
00280                 exit(1);
00281     }
00282     
00283     
00284     intro->setValorLabel(tr("Generando marcos..."), 3);
00285     intro->setValorBarra(3);
00286     for (int l =0; l < fileNamesMarcos.count(); l++){
00287         
00288         QGraphicsView *miniaturaMarco;
00289     QGraphicsScene *escenaMarco;
00290     
00291     miniaturaMarco= new QGraphicsView();
00292         miniaturaMarco->setFixedSize(141, 111);
00293         escenaMarco = new QGraphicsScene();
00294         miniaturaMarco->setScene(escenaMarco);
00295         QImage *img=new QImage();
00296         if(l==3){
00297             intro->setValorBarra(4);
00298         }
00299         if(l==6){
00300             intro->setValorBarra(5);
00301         }
00302             try{
00303                 QString filename= pathmarcos + fileNamesMarcos.at(l); 
00304                 img->load(filename);
00305             }catch(std::exception& e){
00306                 Error *err=new Error(4, e.what(), this);
00307                 err->LanzarDialogo();
00308                 delete err;
00309                 exit(1);
00310                 }
00311         QPixmap image=QPixmap::fromImage(*img);
00312         miniaturaMarco->scene()->addPixmap(image.scaled((141*this->controlador->getWtexturas())/401, (111*this->controlador->getHtexturas())/184, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
00313         this->miniaturasMarcos.push_back(miniaturaMarco);
00314         delete img;
00315     }
00316     intro->setValorLabel(tr("Generando texturas..."), 4);
00317     
00318     for (int i = 0; i < fileNames.count(); i++) {
00319         intro->setValorBarra(6+i);
00320         QGraphicsView *miniatura;
00321         QGraphicsScene *escena;
00322         miniatura= new QGraphicsView();
00323         miniatura->setFixedSize(141, 111);
00324         escena = new QGraphicsScene();
00325         miniatura->setScene(escena);
00326         QImage *img=new QImage();
00327             try{
00328                 QString filename= path + fileNames.at(i); 
00329                 img->load(filename);
00330             }catch(std::exception& e){
00331                 Error *err=new Error(4, e.what(), this);
00332                 err->LanzarDialogo();
00333                 delete err;
00334                 exit(1);
00335                 }
00336         QPixmap image=QPixmap::fromImage(*img);
00337         miniatura->scene()->addPixmap(image.scaled((141*this->controlador->getWtexturas())/401, (111*this->controlador->getHtexturas())/184, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
00338         this->miniaturasTexturas.push_back(miniatura);
00339         delete img;
00340     }
00341     
00342     
00343     QGraphicsScene *escena;
00344     QImage *img;
00345         try{
00346         escena = new QGraphicsScene();
00347         this->ui->imagePreview->setScene(escena);
00348         img = new QImage();
00349         }catch(std::exception& e){
00350                         Error *err=new Error(2, e.what(), this);
00351                         err->LanzarDialogo();
00352                         delete err;
00353                         exit(1);
00354         }
00355         try{
00356         img->load(directorioDeTrabajo.absolutePath() + "/data/imagePrev.png");
00357         if(img->isNull()){
00358             throw std::ios_base::failure(tr("No pudo previsualizarse la imagen.").toStdString());
00359         }
00360         }catch(std::exception& e){
00361                         Error *err=new Error(4, e.what(), this);
00362                         err->LanzarDialogo();
00363                         delete err;
00364                         exit(1);
00365         }
00366             
00367         QPixmap image=QPixmap::fromImage(*img);
00368         
00369         this->ui->imagePreview->scene()->addPixmap(image.scaled(this->controlador->getWvisorImagenes(), this->controlador->getHvisorImagenes(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
00370         this->ui->imagePreview->setStyleSheet("background: transparent; border: none");
00371         delete img;
00372     
00373     ui->action_Nuevo->setDisabled(true);
00374     ui->actionNuevoBoton->setDisabled(true);
00375     this->nadacreado=true;
00376     this->directoriodetrabajo=directorioDeTrabajo;
00377     intro->hide();
00378     
00379     delete intro;
00380     QIcon *iconoVentana=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/iconlargue.png");
00381     this->setWindowIcon(*iconoVentana);
00382     delete iconoVentana;
00383     
00384     QIcon *icono=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/add.png");
00385     this->ui->actionA_adir_im_genes->setIcon(*icono);
00386     this->ui->actionAnnadirBoton->setIcon(*icono);
00387     delete icono;
00388     QIcon *icono1=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/textura.jpg");
00389     this->ui->actionA_adir_te_xtura->setIcon(*icono1);
00390     delete icono1;
00391     
00392     QIcon *icono2=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/abrir.png");
00393     this->ui->actionAbrirBoton->setIcon(*icono2);
00394     this->ui->actionCar_gar->setIcon(*icono2);
00395     delete icono2;
00396     
00397     QIcon *icono3=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/estrella.png");
00398     this->ui->actionAcerca_de->setIcon(*icono3);
00399     delete icono3;
00400     
00401     QIcon *icono4=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/icon_flecha_drch.png");
00402     this->ui->actionAvanzarBoton->setIcon(*icono4);
00403     this->ui->action_Avanzar_P_gina->setIcon(*icono4);
00404     this->ui->pushPagSiguiente->setIcon(*icono4);
00405     delete icono4;
00406     
00407     QIcon *icono5=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/elimina.png");
00408     this->ui->actionEliminacion->setIcon(*icono5);
00409     this->ui->actionEliminarFotosBoton->setIcon(*icono5);
00410     this->ui->actionBorrar_selecci_n->setIcon(*icono5);
00411     delete icono5;
00412     
00413     QIcon *icono6=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/deseleccionartodo.png");
00414     this->ui->actionDeseleccionarTodoBoton->setIcon(*icono6);
00415     this->ui->actionDeseleccionar_todo->setIcon(*icono6);
00416     delete icono6;
00417     
00418     QIcon *icono7=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/editar.png");
00419     this->ui->actionEdicion->setIcon(*icono7);
00420     this->ui->actionEditar->setIcon(*icono7);
00421     this->ui->actionEditarBoton->setIcon(*icono7);
00422     delete icono7;
00423     
00424     QIcon *icono8=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/tamannoboton.png");
00425     this->ui->actionEditarTamBoton->setIcon(*icono8);
00426     this->ui->actionTama_o->setIcon(*icono8);
00427     delete icono8;
00428     
00429     QIcon *icono9=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/borrar.png");
00430     this->ui->actionBorrarBoton->setIcon(*icono9);
00431     this->ui->action_Eliminar->setIcon(*icono9);
00432     delete icono9;
00433     
00434     QIcon *icono10=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/jpg.png");
00435     this->ui->actionExportarJPGBoton->setIcon(*icono10);
00436     delete icono10;
00437     
00438     QIcon *icono11=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/pdf.png");
00439     this->ui->actionExportarPDFBoton->setIcon(*icono11);
00440     this->ui->actionE_xportar->setIcon(*icono11);
00441     this->ui->actionExportacion->setIcon(*icono11);
00442     delete icono11;
00443     
00444     QIcon *icono12=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/guardarcomo.png");
00445     this->ui->actionG_uardar_como->setIcon(*icono12);
00446     this->ui->actionGuardarComoBoton->setIcon(*icono12);
00447     delete icono12;
00448     
00449     QIcon *icono13=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/guardar.png");
00450     this->ui->actionGuardado->setIcon(*icono13);
00451     this->ui->actionGuardarBoton->setIcon(*icono13);
00452     this->ui->action_Guardar->setIcon(*icono13);
00453     delete icono13;
00454     
00455     QIcon *icono14=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/imprimir.png");
00456     this->ui->actionI_mprimir->setIcon(*icono14);
00457     this->ui->actionImprimirBoton->setIcon(*icono14);
00458     delete icono14;
00459     
00460     QIcon *icono15=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/notificacion.png");
00461     this->ui->actionNotificar_fallos->setIcon(*icono15);
00462     delete icono15;
00463     
00464     QIcon *icono16=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/nuevo.png");
00465     this->ui->actionNuevoBoton->setIcon(*icono16);
00466     this->ui->action_Nuevo->setIcon(*icono16);
00467     delete icono16;
00468     
00469     QIcon *icono17=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/propiedades.png");
00470     this->ui->actionPropiedades->setIcon(*icono17);
00471     this->ui->actionPropiedadesBoton->setIcon(*icono17);
00472     this->ui->action_Propiedades->setIcon(*icono17);
00473     delete icono17;
00474     
00475     QIcon *icono18=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/icon_flecha_izq.png");
00476     this->ui->actionRetrocederBoton->setIcon(*icono18);
00477     this->ui->action_Retroceder_p_gina->setIcon(*icono18);
00478     this->ui->pushPagAnterior->setIcon(*icono18);
00479     delete icono18;
00480     
00481     QIcon *icono19=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/wizard.png");
00482     this->ui->actionWizardBoton->setIcon(*icono19);
00483     this->ui->action_Lanzar_asistente->setIcon(*icono19);
00484     delete icono19;
00485     
00486     QIcon *icono20=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/fineditar.png");
00487     this->ui->actionTerminar_edici_n->setIcon(*icono20);
00488     this->ui->actionTerminarBoton->setIcon(*icono20);
00489     delete icono20;
00490     
00491     QIcon *icono21=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/salir.png");
00492     this->ui->action_Cerrar->setIcon(*icono21);
00493     this->ui->action_Salir->setIcon(*icono21);
00494     delete icono21;
00495     
00496     QIcon *icono22=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/licencia.png");
00497     this->ui->action_Licencia->setIcon(*icono22);
00498     delete icono22;
00499     
00500     QIcon *icono23=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/indiceayuda.png");
00501     this->ui->action_ndice->setIcon(*icono23);
00502     delete icono23;
00503     
00504     QIcon *icono24=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/seleccionartodo.png");
00505     this->ui->actionSeleccionarTodoBoton->setIcon(*icono24);
00506     this->ui->actionSeleccionar_todo->setIcon(*icono24);
00507     delete icono24;
00508     
00509     
00510 }
00511 
00512 FormPrincipal::~FormPrincipal()
00513 {
00514     for(int i=0; i < ui->imagePreview->items().size(); i++){
00515         delete ui->imagePreview->items().at(i);
00516     }
00517     delete ui->imagePreview->scene();
00518     delete ui->imagePreview;
00519     for(int i=0; i < ui->plantillaPreview->items().size(); i++){
00520         delete ui->plantillaPreview->items().at(i);
00521     }
00522     delete ui->plantillaPreview->scene();
00523     delete ui->plantillaPreview;
00524     delete ui;
00525     delete this->a;
00526     for(unsigned i=0; i < this->miniaturas.size(); i++){
00527         delete this->miniaturas[i];
00528     }
00529     this->miniaturas.clear();
00530     for(unsigned j=0; j < this->miniaturasTexturas.size(); j++){
00531         delete this->miniaturasTexturas[j];
00532     }
00533     this->miniaturasTexturas.clear();
00534     for(unsigned t=0; t < this->miniaturasMarcos.size(); t++){
00535         delete this->miniaturasMarcos[t];
00536     }
00537     this->miniaturasMarcos.clear();
00538     
00539 }
00540 
00541 void FormPrincipal::BotonEditar(){
00542     if(this->ui->pushButtonEditar->isEnabled()){
00543         this->ActivarEdicion();
00544     }else{
00545         if(this->ui->pushButtonEditarPagina->isEnabled()){
00546             this->ActivarEdicionPagina();
00547         }
00548     }
00549 }
00550 
00551 void FormPrincipal::AddTextura(){
00552     QDir dir; 
00553     QString fileName = (QFileDialog::getOpenFileName(this, tr("Abrir Imagen"), dir.homePath(), tr("Imágenes: JPEG (*.jpg *.jpeg *.jpe)")));
00554     QTextCodec *linuxCodec1=QTextCodec::codecForCStrings();
00555     QTextCodec *linuxCodec=QTextCodec::codecForName("UTF-8");
00556     QTextCodec::setCodecForTr(linuxCodec);
00557     QTextCodec::setCodecForCStrings(linuxCodec);
00558     QTextCodec::setCodecForLocale(linuxCodec);
00559     QString pathOrigen="cp -r " + fileName;
00560     QString pathDestino=" " + this->directoriodetrabajo.absolutePath() + "/textures";
00561     QTextCodec::setCodecForTr(linuxCodec1);
00562     QTextCodec::setCodecForCStrings(linuxCodec1);
00563     QTextCodec::setCodecForLocale(linuxCodec1);
00564     try{
00565         int resultado=system(pathOrigen.append(pathDestino).toStdString().c_str());
00566         if(resultado==1){
00567                 throw std::ios_base::failure(tr("El usuario no tiene permisos de root para añadir nuevas texturas").toStdString());
00568         }
00569     }catch(std::exception& e){
00570                 Error *err=new Error(5, e.what(), this);
00571                 err->LanzarDialogo();
00572                 delete err;
00573                 exit(1);
00574     }
00575     QString pathDestinoTexPrev=this->directoriodetrabajo.absolutePath() + "/textures/prev/" + fileName.section("/", -1);
00576     QPixmap *pixTexNew;
00577          try{
00578                 pixTexNew= new QPixmap(fileName);
00579                 if(pixTexNew->isNull()){
00580                     throw std::ios_base::failure(tr("No pudo abrirse la imagen de fondo de la portada.").toStdString());
00581                 }
00582          }catch(std::exception& e){
00583                 Error *err=new Error(4, e.what(), this);
00584                 err->LanzarDialogo();
00585                 delete err;
00586                 exit(1);
00587         }
00588         try{
00589                 if(!(pixTexNew->scaled(141, 111, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)).save(pathDestinoTexPrev)){
00590                 //excepción
00591                         throw std::ios_base::failure(tr("No se pudo guardar la imagen").toStdString());
00592                 }
00593          }catch(std::exception& e){
00594                 Error *err=new Error(5, e.what(), this);
00595                 err->LanzarDialogo();
00596                 delete err;
00597                 exit(1);
00598          }
00599          delete pixTexNew;
00600     
00601     
00602     QDir *dir2=new QDir(QString(this->directoriodetrabajo.absolutePath() + "/textures/prev"));
00603     QStringList *por=new QStringList("*.jpg");
00604     
00605     QStringList fileNamesNew = dir2->entryList(*por);
00606     delete dir2;
00607     delete por;
00608     for(unsigned eliminador=0; eliminador < this->miniaturasTexturas.size(); eliminador++){
00609         delete this->miniaturasTexturas.at(eliminador);
00610     }
00611     this->miniaturasTexturas.clear();
00612     for(int i=0; i < fileNamesNew.size(); i++){
00613     //Ahora se crea la miniatura y se añade a las demás
00614     QGraphicsView *miniatura;
00615     QGraphicsScene *escena;
00616     
00617     miniatura= new QGraphicsView();
00618         miniatura->setFixedSize(141, 111);
00619         escena = new QGraphicsScene();
00620         miniatura->setScene(escena);
00621         QImage *img=new QImage();
00622             try{
00623                  
00624                 img->load(QString(this->directoriodetrabajo.absolutePath() + "/textures/" + fileNamesNew.at(i)));
00625             }catch(std::exception& e){
00626                 Error *err=new Error(4, e.what(), this);
00627                 err->LanzarDialogo();
00628                 delete err;
00629                 exit(1);
00630                 }
00631         QPixmap image=QPixmap::fromImage(*img);
00632         delete img;
00633         miniatura->scene()->addPixmap(image.scaled((141*this->controlador->getWtexturas())/401, (111*this->controlador->getHtexturas())/184, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
00634         this->miniaturasTexturas.push_back(miniatura);
00635     }
00636     
00637 }
00638 
00639 void FormPrincipal::BotonTerminar(){
00640     if(this->ui->pushButtonTerminar->isEnabled()){
00641         this->DesactivarEdicion();
00642     }else{
00643         if(this->ui->pushButtonTerminarPagina->isEnabled()){
00644             this->DesactivarEdicionPagina();
00645         }
00646         
00647     }
00648 }
00649 
00650 void FormPrincipal::aplicarDimensiones(){
00651     this->setFixedSize(this->controlador->getWPrincipal(), this->controlador->getHPrincipal());
00652     //Visor de álbumes
00653     this->ui->visorAlbum->setGeometry(this->ui->visorAlbum->x()*(this->controlador->getWPrincipal())/1014, this->ui->visorAlbum->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWVisorAlbum(), this->controlador->getHVisorAlbum());
00654     
00655     //Visor de plantillas
00656     this->ui->plantillaPreview->setGeometry(this->ui->plantillaPreview->x()*(this->controlador->getWPrincipal())/1014, this->ui->plantillaPreview->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWvisorPlantilla(), this->controlador->getHvisorPlantilla());
00657     
00658     //Visor de imágenes
00659     this->ui->imagePreview->setGeometry(this->ui->imagePreview->x()*(this->controlador->getWPrincipal())/1014, this->ui->imagePreview->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWvisorImagenes(), this->controlador->getHvisorImagenes());
00660     
00661     //Treewidget de imágenes
00662     this->ui->treeWidget->setGeometry(this->ui->treeWidget->x()*(this->controlador->getWPrincipal())/1014, this->ui->treeWidget->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWtreeImagenes(), this->controlador->getHtreeImagenes());
00663     
00664     //Selector plantilla
00665     this->ui->selectorPlantilla->setGeometry(this->ui->selectorPlantilla->x()*(this->controlador->getWPrincipal())/1014, this->ui->selectorPlantilla->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWselectorPlantilla(), this->controlador->getHselectorPlantilla());
00666     
00667     //Botones
00668     this->ui->botonTexto->setGeometry(this->ui->botonTexto->x()*(this->controlador->getWPrincipal())/1014, this->ui->botonTexto->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWbotonTexto(), this->controlador->getHbotonTexto());
00669     this->ui->selectFoto1->setGeometry(this->ui->selectFoto1->x()*(this->controlador->getWPrincipal())/1014, this->ui->selectFoto1->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWbotonFrontal(), this->controlador->getHbotonFrontal());
00670     this->ui->selectFoto2->setGeometry(this->ui->selectFoto2->x()*(this->controlador->getWPrincipal())/1014, this->ui->selectFoto2->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWbotonTrasero(), this->controlador->getHbotonTrasero());
00671     this->ui->activatedPlantilla->setGeometry(this->ui->activatedPlantilla->x()*(this->controlador->getWPrincipal())/1014, this->ui->activatedPlantilla->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWbotonPlantilla(), this->controlador->getHbotonPlantilla());
00672     this->ui->botonPrueba->setGeometry(this->ui->botonPrueba->x()*(this->controlador->getWPrincipal())/1014, this->ui->botonPrueba->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWbotonCrearPortada(), this->controlador->getHbotonCrearPortada());
00673     this->ui->pushButtonFondoPortada->setGeometry(this->ui->pushButtonFondoPortada->x()*(this->controlador->getWPrincipal())/1014, this->ui->pushButtonFondoPortada->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWbotonFondo(), this->controlador->getHbotonFondo());
00674     this->ui->pushCrearPaginas->setGeometry(this->ui->pushCrearPaginas->x()*(this->controlador->getWPrincipal())/1014, this->ui->pushCrearPaginas->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWbotonCrearPagina(), this->controlador->getHbotonCrearPagina());
00675     this->ui->pushButtonEditar->setGeometry(this->ui->pushButtonEditar->x()*(this->controlador->getWPrincipal())/1014, this->ui->pushButtonEditar->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWbotonEditarPortada(), this->controlador->getHbotonEditarPortada());
00676     this->ui->pushButtonEditarPagina->setGeometry(this->ui->pushButtonEditarPagina->x()*(this->controlador->getWPrincipal())/1014, this->ui->pushButtonEditarPagina->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWbotonEditarPagina(), this->controlador->getHbotonEditarPagina());
00677     this->ui->pushButtonTerminar->setGeometry(this->ui->pushButtonTerminar->x()*(this->controlador->getWPrincipal())/1014, this->ui->pushButtonTerminar->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWbotonTerminarPortada(), this->controlador->getHbotonTerminarPortada());
00678     this->ui->pushButtonTerminarPagina->setGeometry(this->ui->pushButtonTerminarPagina->x()*(this->controlador->getWPrincipal())/1014, this->ui->pushButtonTerminarPagina->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWbotonTerminarPagina(), this->controlador->getHbotonTerminarPagina());
00679     this->ui->pushOpen->setGeometry(this->ui->pushOpen->x()*(this->controlador->getWPrincipal())/1014, this->ui->pushOpen->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWbotonAbrir(), this->controlador->getHbotonAbrir());
00680     this->ui->pushCheckAll->setGeometry(this->ui->pushCheckAll->x()*(this->controlador->getWPrincipal())/1014, this->ui->pushCheckAll->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWbotonCheck(), this->controlador->getHbotonCheck());
00681     this->ui->pushUncheckAll->setGeometry(this->ui->pushUncheckAll->x()*(this->controlador->getWPrincipal())/1014, this->ui->pushUncheckAll->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWbotonUncheck(), this->controlador->getHbotonUncheck());
00682     this->ui->pushPagAnterior->setGeometry(this->ui->pushPagAnterior->x()*(this->controlador->getWPrincipal())/1014, this->ui->pushPagAnterior->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWbotonAnterior(), this->controlador->getHbotonAnterior());
00683     this->ui->pushPagSiguiente->setGeometry(this->ui->pushPagSiguiente->x()*(this->controlador->getWPrincipal())/1014, this->ui->pushPagSiguiente->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWbotonSiguiente(), this->controlador->getHbotonSiguiente());
00684     this->ui->pushRemoveSelect->setGeometry(this->ui->pushRemoveSelect->x()*(this->controlador->getWPrincipal())/1014, this->ui->pushRemoveSelect->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWbotonRemove(), this->controlador->getHbotonRemove());
00685     
00686     this->ui->groupBox->setGeometry(this->ui->groupBox->x()*(this->controlador->getWPrincipal())/1014, this->ui->groupBox->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWgroupBox(), this->controlador->getHgroupBox());
00687     this->ui->groupBox_4->setGeometry(this->ui->groupBox_4->x()*(this->controlador->getWPrincipal())/1014, this->ui->groupBox_4->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWgroupBox_4(), this->controlador->getHgroupBox_4());
00688     this->ui->groupBox_5->setGeometry(this->ui->groupBox_5->x()*(this->controlador->getWPrincipal())/1014, this->ui->groupBox_5->y()*(this->controlador->getHPrincipal())/705, this->controlador->getWgroupBox_5(), this->controlador->getHgroupBox_5());
00689     
00690     //Texto de los botones
00691     
00692     QFont copiaFuente=this->ui->botonTexto->font();
00693     copiaFuente.setPointSize(this->controlador->getPuntosTexto());
00694     this->ui->botonTexto->setFont(copiaFuente);
00695     this->ui->activatedPlantilla->setFont(copiaFuente);
00696     this->ui->botonPrueba->setFont(copiaFuente);
00697     this->ui->pushButtonEditar->setFont(copiaFuente);
00698     this->ui->pushButtonEditarPagina->setFont(copiaFuente);
00699     this->ui->pushButtonFondoPortada->setFont(copiaFuente);
00700     this->ui->pushButtonTerminar->setFont(copiaFuente);
00701     this->ui->pushButtonTerminarPagina->setFont(copiaFuente);
00702     this->ui->pushCheckAll->setFont(copiaFuente);
00703     this->ui->pushCrearPaginas->setFont(copiaFuente);
00704     this->ui->pushOpen->setFont(copiaFuente);
00705     this->ui->pushRemoveSelect->setFont(copiaFuente);
00706     this->ui->selectFoto1->setFont(copiaFuente);
00707     this->ui->pushUncheckAll->setFont(copiaFuente);
00708     this->ui->selectFoto2->setFont(copiaFuente);
00709     this->ui->pushPagAnterior->setIconSize(QSize(this->controlador->getTamIconoFlechas(), this->controlador->getTamIconoFlechas()));
00710     this->ui->pushPagSiguiente->setIconSize(QSize(this->controlador->getTamIconoFlechas(), this->controlador->getTamIconoFlechas()));
00711     this->ui->selectorPlantilla->headerItem()->setFont(0, copiaFuente);
00712     this->ui->selectorPlantilla->headerItem()->setFont(1, copiaFuente);
00713     
00714     ui->selectorPlantilla->headerItem()->setFont(0, copiaFuente);
00715     ui->selectorPlantilla->headerItem()->setFont(1, copiaFuente);
00716 }
00717 
00718 void FormPrincipal::CreacionPaginasFijas(QString file, QString imagenfondo){
00719 
00720     int numfotosporpag;
00721     Parser parser(file.toStdString(), this);
00722     ticpp::Element* element = parser.root();
00723     parser.get_attribute("imagen", element, &numfotosporpag);
00724     unsigned contad=0;
00725 
00726     while(contad<a->GetVectorImagenes().size()){
00727         Pagina *pag;
00728         try{
00729                 pag=new Pagina(0,0,this);
00730                 pag->LoadRutaPlantilla(file);
00731         }catch(std::exception& e){
00732                 Error *err=new Error(2, e.what(), this);
00733                 err->LanzarDialogo();
00734                 delete err;
00735                 exit(1);
00736         }
00737         std::vector<ticpp::Element*> areas;
00738         std::string mascara=parser.get_attribute("mascara", element);
00739         if(mascara!="no"){
00740             QString ruta=QString::fromStdString(mascara);
00741             pag->activarMascara(ruta);
00742         }
00743         parser.find("area_imagen", areas, parser.find("areas_imagen"));
00744         for(std::vector<ticpp::Element*>::iterator i = areas.begin(); i != areas.end(); i++){
00745             QString ruta;
00746             int w, h, x, y;
00747             if(contad < a->GetVectorImagenes().size()){
00748                 try{
00749                         ruta=a->GetVectorImagenes().at(contad).ruta;
00750                 }catch(std::exception& e){
00751                         Error *err=new Error(1, e.what(), this);
00752                         err->LanzarDialogo();
00753                         delete err;
00754                         exit(1);
00755                 }
00756                 std::string pos;
00757                 parser.get_attribute("w", *i, &w);
00758                 parser.get_attribute("h", *i, &h);
00759                 parser.get_attribute("pos_x", *i, &x);
00760                 parser.get_attribute("pos_y", *i, &y);
00761                 pos=parser.get_attribute("pos", *i);
00762                  pag->LoadFoto(ruta, w*(this->controlador->getWVisorAlbum())/462, h*(this->controlador->getHVisorAlbum())/321, x*(this->controlador->getWVisorAlbum())/462, y*(this->controlador->getHVisorAlbum())/321, pos);
00763             
00764             }
00765             contad++;
00766         }
00767         
00768         
00769         pag->DesactivarColordefondo();
00770         pag->LoadFondo(imagenfondo);
00771         a->paginas.push_back(pag);
00772     }
00773     ui->pushPagSiguiente->show();
00774     ui->pushPagAnterior->show();
00775     if(this->IndicePaginas==0){
00776         ui->pushPagAnterior->setDisabled(true);
00777         ui->action_Retroceder_p_gina->setDisabled(true);
00778         ui->actionRetrocederBoton->setDisabled(true);
00779     }
00780     
00781 }
00782 Album* FormPrincipal::getAlbum(){
00783     return this->a;
00784 }
00785 QString FormPrincipal::GetFechaCreacion(){
00786     return this->fechaCreacion;
00787 }
00788 
00789 QString FormPrincipal::GetRutaGuardado(){
00790     return this->rutaGuardado;
00791 }
00792 
00793 QWizardPage* FormPrincipal::crearPaginaIntro(){
00794     this->intro=new introduccionWizard(this,this);
00795     QPixmap *pix=new QPixmap(this->directoriodetrabajo.absolutePath() + "/data/img_intro_wizard.bmp");
00796     
00797     intro->setPixmap(QWizard::WatermarkPixmap, *pix);
00798     QFile existencia;
00799     QDir dir;
00800     intro->setWindowFlags(Qt::WindowCloseButtonHint);
00801     if(existencia.exists(dir.homePath() + "/.openAlbum/configuracion.xml")){
00802         Parser par(dir.homePath().toStdString() + "/.openAlbum/configuracion.xml",0);
00803         ticpp::Element* element = par.root();
00804         std::string aux=par.get_attribute("wizard", element);
00805         if(aux!="si"){
00806             intro->checkCasilla();
00807             
00808         }
00809     }
00810     
00811     delete pix;
00812     return intro;
00813 }
00814 
00815 QWizardPage* FormPrincipal::crearPaginaFinal(bool cambio){
00816     finWizard *fin=new finWizard(this);
00817     QPixmap *pix=new QPixmap(this->directoriodetrabajo.absolutePath() + "/data/img_intro_wizard.bmp");
00818     
00819     fin->setPixmap(QWizard::WatermarkPixmap, *pix);
00820     if(cambio){
00821         fin->setTexto(tr("Lo sentimos, el asistente de creación de álbum no ha finalizado correctamente. No se ha podido crear el álbum de fotos digital."), tr("Gracias por utilizar este asistente. Una vez cierre el asistente podrá crear su álbum de forma manual. Si necesita volver a utilizar el asistente solo tiene que hacer click en Archivo -> Lanzar asistente."), tr("Si desconoce el fallo por el cual no se ha finalizado correctamente, indiquenoslo en Ayuda -> Contacto. Intentaremos solucionarlo en la próxima actualización."));
00822        
00823     }
00824     delete pix;
00825     
00826     return fin;
00827 }
00828 
00829 QWizardPage* FormPrincipal::crearPaginaFotos(){
00830     this->fotos= new fotosWizard(this, this);
00831     QPixmap *pix=new QPixmap(this->directoriodetrabajo.absolutePath() + "/data/logo_pequenno.bmp");
00832     this->fotos->setPixmap(QWizard::LogoPixmap, *pix);
00833     this->fotos->setTitle(tr("Selección de Fotos."));
00834     this->fotos->setSubTitle(tr("Selecciona las fotos que desea incluir en el álbum y haz click en \"Siguiente\"."));
00835     this->fotos->isCommitPage();   
00836     delete pix;
00837     
00838     return fotos;
00839 }
00840 
00841 QWizardPage* FormPrincipal::crearPaginaTamanno(){
00842    tamannoWizard *tamanno=new tamannoWizard(this, this);
00843    QPixmap *pix=new QPixmap(this->directoriodetrabajo.absolutePath() + "/data/logo_pequenno.bmp");
00844     tamanno->setPixmap(QWizard::LogoPixmap, *pix);
00845     tamanno->setTitle(tr("Tamaño del álbum."));
00846     tamanno->setSubTitle(tr("Selecciona el tamaño deseado para el álbum y haz click en \"Siguiente\"."));
00847     
00848     delete pix;
00849     
00850    return tamanno;
00851 }
00852 void FormPrincipal::ResetSelectorPlantilla(){
00853     
00854     this->ui->selectorPlantilla->clear();
00855     this->ui->botonTexto->setDisabled(true);
00856     this->ui->botonPrueba->setDisabled(true);
00857     this->ui->activatedPlantilla->setEnabled(true);
00858     this->ui->selectFoto1->setDisabled(true);
00859     this->ui->selectFoto2->setDisabled(true);
00860     this->ui->pushButtonFondoPortada->setDisabled(true);
00861 }
00862 
00863 QWizardPage* FormPrincipal::crearPaginaFondoPortada(){
00864     fondoPortadaWizard *fondoportada= new fondoPortadaWizard(this, this);
00865      QPixmap *pix=new QPixmap(this->directoriodetrabajo.absolutePath() + "/data/logo_pequenno.bmp");
00866     fondoportada->setPixmap(QWizard::LogoPixmap, *pix);
00867     fondoportada->setTitle(tr("Creación de la portada."));
00868     fondoportada->setSubTitle(tr("Para finalizar la portada, selecciona el fondo y las imágenes a incluir, y haz click en \"Siguiente\"."));
00869     
00870   
00871     this->ui->plantillaPreview->scene()->clear();
00872     this->ResetSelectorPlantilla();
00873     this->fondoPortada=fondoportada;
00874     delete pix;
00875     return fondoportada;
00876 } 
00877 
00878 QWizardPage* FormPrincipal::crearPaginaPortada(){
00879     this->portada=new portadaWizard(this, this);
00880     QPixmap *pix=new QPixmap(this->directoriodetrabajo.absolutePath() + "/data/logo_pequenno.bmp");
00881     this->portada->setPixmap(QWizard::LogoPixmap, *pix);
00882     this->portada->setTitle(tr("Creación de la portada."));
00883     this->portada->setSubTitle(tr("Para comenzar a crear tu álbum, selecciona una plantilla para la portada y haz click en \"Siguiente\"."));
00884     
00885     this->portada->activarSelectorPlantillas();
00886     delete pix;
00887     
00888     return portada;
00889 }
00890 
00891 void FormPrincipal::Guardar(){
00892     QProgressBar *barra= new QProgressBar(this);
00893     int wAux=this->ui->statusBar->width();
00894     barra->setFixedWidth((294*this->controlador->getWPrincipal())/1014);
00895     barra->setFixedHeight((23*this->controlador->getHPrincipal())/705);
00896     this->ui->statusBar->setMaximumWidth(((986-270)*this->controlador->getWPrincipal())/1014);
00897     barra->move((this->controlador->getWPrincipal()*720)/1014, (this->controlador->getHPrincipal()*683)/705);
00898     static int ii;
00899     barra->setMinimum(0);
00900     barra->setMaximum(8+this->a->paginas.size());
00901      QString texto, imagenFondoPortada, redPortada, greenPortada, bluePortada;
00902      bool cancelado=false;
00903      if(!this->ActivadoGuardado){
00904          //Abrimos el diálogo
00905          QFileDialog::Options options;
00906          QString selectedFilter="OPA: Open Album File (*.opa)";
00907          QString directorio= this->directorioCasaUsuario;
00908          QString fileName = QFileDialog::getSaveFileName(this,tr("Guardar album"), directorio , tr("OPA: Open Album File (*.opa)"), &selectedFilter, options);
00909         
00910          if(fileName.isEmpty()){
00911              cancelado=true;
00912          }else{
00913          this->rutaGuardado= fileName;
00914          this->ActivadoGuardado=true;
00915          }
00916          QString fileNm;
00917      if(!this->rutaGuardado.contains(".opa")){
00918        fileNm=this->rutaGuardado + ".opa"; 
00919        this->rutaGuardado= this->rutaGuardado + ".opa";
00920      }else{
00921        fileNm=this->rutaGuardado;  
00922      }
00923         QFile existencia;
00924      if(existencia.exists(fileNm)){
00925          this->EliminarAlbum(fileNm, false);
00926      }
00927      }
00928      if(!cancelado){
00929      barra->show();
00930      barra->setValue(1);
00931     QString fileNm;
00932      if(!this->rutaGuardado.contains(".opa")){
00933        fileNm=this->rutaGuardado + ".opa"; 
00934        this->rutaGuardado= this->rutaGuardado + ".opa";
00935      }else{
00936        fileNm=this->rutaGuardado;  
00937      }
00938       
00939      
00940      barra->setValue(2);
00941      
00942      QFile file(fileNm.toStdString().c_str());
00943      
00944      try{
00945      
00946      file.open(QIODevice::WriteOnly | QIODevice::Truncate);         
00947      
00948      }catch(std::exception& e){
00949         Error *err=new Error(5, e.what(), this);
00950         err->LanzarDialogo();
00951         delete err;
00952         exit(1);
00953     }
00954      QTextStream textStream(&file);
00955      bool ColorFondo=this->a->portada->ColordeFondo();
00956      QString subrayadoFrontal, subrayadoTrasero, subrayadoLateral, negritaFrontal, negritaLateral, negritaTrasero, cursivaFrontal, cursivaLateral, cursivaTrasero;
00957      if(this->a->portada->SubrayadoTextoFrontal()){
00958          subrayadoFrontal="si";
00959      }else{
00960          subrayadoFrontal="no";
00961      }
00962      
00963      if(this->a->portada->SubrayadoTextoLateral()){
00964          subrayadoLateral="si";
00965      }else{
00966          subrayadoLateral="no";
00967      }
00968      
00969      if(this->a->portada->SubrayadoTextoTrasera()){
00970          subrayadoTrasero="si";
00971      }else{
00972          subrayadoTrasero="no";
00973      }
00974      barra->setValue(3);
00975      if(this->a->portada->NegritaTextoFrontal()){
00976          negritaFrontal="si";
00977      }else{
00978          negritaFrontal="no";
00979      }
00980      
00981      if(this->a->portada->NegritaTextoLateral()){
00982          negritaLateral="si";
00983      }else{
00984          negritaLateral="no";
00985      }
00986      
00987      if(this->a->portada->NegritaTextoTrasera()){
00988          negritaTrasero="si";
00989      }else{
00990          negritaTrasero="no";
00991      }
00992      barra->setValue(4);
00993      if(this->a->portada->CursivaTextoFrontal()){
00994          cursivaFrontal="si";
00995      }else{
00996          cursivaFrontal="no";
00997      }
00998      
00999      
01000      if(this->a->portada->CursivaTextoLateral()){
01001          cursivaLateral="si";
01002      }else{
01003          cursivaLateral="no";
01004      }
01005      
01006      
01007      if(this->a->portada->CursivaTextoTrasera()){
01008          cursivaTrasero="si";
01009      }else{
01010          cursivaTrasero="no";
01011      }
01012      
01013      
01014      if(ColorFondo){
01015          
01016          redPortada=QString::number(this->a->portada->FondoClr().red());
01017          greenPortada=QString::number(this->a->portada->FondoClr().green());
01018          bluePortada=QString::number(this->a->portada->FondoClr().blue());
01019      }else{
01020          
01021          
01022          redPortada="0";
01023          greenPortada="0";
01024          bluePortada="0";
01025      }
01026      barra->setValue(5);
01027      QString siOno="";
01028      if(this->creadasPaginas){
01029          siOno="si";
01030      }else{
01031          siOno="no";
01032          
01033      }
01034      QString nombreSerieFondoPortada="";
01035      QString separador= "_";
01036      if(!ColorFondo){
01037          QPixmap *pixFondo;
01038          try{
01039                 pixFondo= new QPixmap(this->a->portada->FondoImg());
01040                 if(pixFondo->isNull()){
01041                     throw std::ios_base::failure(tr("No pudo abrirse la imagen de fondo de la portada.").toStdString());
01042                 }
01043          }catch(std::exception& e){
01044                 Error *err=new Error(4, e.what(), this);
01045                 err->LanzarDialogo();
01046                 delete err;
01047                 exit(1);
01048         }
01049          nombreSerieFondoPortada= nombreSerieFondoPortada + this->directorioCasaUsuario +"/.openAlbum/" + this->rutaGuardado.section("/", -1) + separador + "fondo" + separador + "portada.JPG";
01050          try{
01051                 if(!pixFondo->save(nombreSerieFondoPortada)){
01052                 //excepción
01053                         throw std::ios_base::failure(tr("No se pudo guardar la imagen").toStdString());
01054                 }
01055          }catch(std::exception& e){
01056                 Error *err=new Error(5, e.what(), this);
01057                 err->LanzarDialogo();
01058                 delete err;
01059                 exit(1);
01060          }
01061          delete pixFondo;
01062      }else{
01063          nombreSerieFondoPortada="no";
01064      }
01065      static QPixmap *pixFron, *pixTras;
01066      try{
01067         if(this->a->portada->hayImagenFrontal()){ 
01068         pixFron= new QPixmap(this->a->portada->RutaFotoFrontal());
01069         if(pixFron->isNull()){
01070            throw std::ios_base::failure(tr("No pudo abrirse la imagen frontal de la portada.").toStdString()); 
01071         }
01072         }
01073         if(this->a->portada->hayImagenTrasera()){
01074         pixTras= new QPixmap(this->a->portada->RutaFotoTrasera());
01075         if(pixTras->isNull()){
01076             throw std::ios_base::failure(tr("No pudo abrirse la imagen trasera de la portada.").toStdString());
01077         }
01078         }
01079         
01080         
01081      }catch(std::exception& e){
01082         Error *err=new Error(4, e.what(), this);
01083         err->LanzarDialogo();
01084         delete err;
01085         exit(1);
01086     }
01087      QString nombreSerieFron;
01088      QString nombreSerieTras;
01089      if(this->a->portada->hayImagenFrontal()){
01090         nombreSerieFron= this->directorioCasaUsuario + "/.openAlbum/";
01091      }else{
01092         nombreSerieFron="no"; 
01093      }
01094      if(this->a->portada->hayImagenTrasera()){
01095         nombreSerieTras= this->directorioCasaUsuario + "/.openAlbum/";
01096      }else{
01097         nombreSerieTras="no"; 
01098      }
01099      
01100      QString portada, fotoFron, fotoTras;
01101      portada="portada";
01102      if(this->a->portada->hayImagenFrontal()){
01103      fotoFron="frontal";
01104      nombreSerieFron= nombreSerieFron + this->rutaGuardado.section("/", -1) + separador + portada + separador + fotoFron +".JPG";
01105      }
01106      if(this->a->portada->hayImagenTrasera()){
01107      fotoTras="trasera";
01108      nombreSerieTras= nombreSerieTras + this->rutaGuardado.section("/", -1) + separador + portada + separador + fotoTras +".JPG";
01109      }
01110      barra->setValue(6);
01111      
01112      try{
01113         if(this->a->portada->hayImagenFrontal()){ 
01114         if(!pixFron->save(nombreSerieFron)){
01115                 //excepción
01116                 throw std::ios_base::failure(tr("No se pudo guardar la imagen").toStdString());
01117         }
01118         }
01119         if(this->a->portada->hayImagenTrasera()){
01120         if(!pixTras->save(nombreSerieTras)){
01121                 //excepción
01122                 throw std::ios_base::failure(tr("No se pudo guardar la imagen").toStdString());
01123         }
01124         }
01125      }catch(std::exception& e){
01126         Error *err=new Error(5, e.what(), this);
01127         err->LanzarDialogo();
01128         delete err;
01129         exit(1);
01130     }
01131      delete pixFron;
01132      delete pixTras;
01133      QString despFP, despTP;
01134      QString posXNuevoFrontal, posYNuevoFrontal, posXNuevoTrasero, posYNuevoTrasero;
01135      QString totalFrontal="";
01136      QString totalTrasero="";
01137      if(this->hayDesplazamientoPortadaFotos){
01138          despFP="si";
01139          posXNuevoFrontal.setNum(this->a->portada->PosicionXImagenFrontal());
01140          posYNuevoFrontal.setNum(this->a->portada->PosicionYImagenFrontal());
01141          posXNuevoTrasero.setNum(this->a->portada->PosicionXImagenTrasera());
01142          posYNuevoTrasero.setNum(this->a->portada->PosicionYImagenTrasera());
01143          totalFrontal= totalFrontal + "\" posXNueva=\"" + posXNuevoFrontal + "\" posYNueva=\"" + posYNuevoFrontal;
01144          totalTrasero= totalTrasero + "\" posXNueva=\"" + posXNuevoTrasero + "\" posYNueva=\"" + posYNuevoTrasero;
01145      }else{
01146          despFP="no";
01147      }
01148      barra->setValue(7);
01149      if(this->hayDesplazamientoPortadaTextos){
01150          despTP="si";
01151      }else{
01152          despTP="no";   
01153      }
01154      //Ahora tratamos los caracteres especiales de los xml
01155      QString textoFrontal, textoTrasero, textoLateral;
01156      textoFrontal = this->a->portada->TextoFrontal();
01157      if(this->a->portada->TextoFrontal().contains("&")){
01158          
01159          int index=0;
01160          while(textoFrontal.contains("&")){
01161           index = textoFrontal.indexOf("&", 0); 
01162           textoFrontal.replace(index,1, "#amp");
01163          }       
01164      }
01165      
01166      if(this->a->portada->TextoFrontal().contains("\"")){
01167          
01168          int index=0;
01169          while(textoFrontal.contains("\"")){
01170           index = textoFrontal.indexOf("\"", 0); 
01171           textoFrontal.replace(index,1, "#quot");
01172          }     
01173      }
01174      
01175      if(this->a->portada->TextoFrontal().contains("<")){
01176          
01177          int index=0;
01178          while(textoFrontal.contains("<")){
01179           index = textoFrontal.indexOf("<", 0); 
01180           textoFrontal.replace(index,1, "#lt");
01181          }      
01182      }
01183      
01184      if(this->a->portada->TextoFrontal().contains(">")){
01185        
01186          int index=0;
01187          while(textoFrontal.contains(">")){
01188           index = textoFrontal.indexOf(">", 0); 
01189           textoFrontal.replace(index,1, "#gt");
01190          }      
01191      }
01192      
01193      if(this->a->portada->TextoFrontal().contains("'")){
01194          
01195          int index=0;
01196          while(textoFrontal.contains("'")){
01197           index = textoFrontal.indexOf("'", 0); 
01198           textoFrontal.replace(index,1, "#apos");
01199          }     
01200      }
01201      textoLateral = this->a->portada->TextoLateral();
01202      if(this->a->portada->TextoLateral().contains("&")){
01203          
01204          int index=0;
01205          while(textoLateral.contains("&")){
01206           index = textoLateral.indexOf("&", 0); 
01207           textoLateral.replace(index,1, "#amp");
01208          }      
01209      }
01210      
01211      if(this->a->portada->TextoLateral().contains("\"")){
01212          
01213          int index=0;
01214          while(textoLateral.contains("\"")){
01215           index = textoLateral.indexOf("\"", 0); 
01216           textoLateral.replace(index,1, "#quot");
01217          }    
01218      }
01219      
01220      
01221      if(this->a->portada->TextoLateral().contains("<")){
01222          
01223          int index=0;
01224          while(textoLateral.contains("<")){
01225           index = textoLateral.indexOf("<", 0); 
01226           textoLateral.replace(index,1, "#lt");
01227          }    
01228      }
01229      
01230      if(this->a->portada->TextoLateral().contains(">")){
01231          
01232          int index=0;
01233          while(textoLateral.contains(">")){
01234           index = textoLateral.indexOf(">", 0); 
01235           textoLateral.replace(index,1, "#gt");
01236          }      
01237      }
01238      
01239      if(this->a->portada->TextoLateral().contains("'")){
01240          
01241          int index=0;
01242          while(textoLateral.contains("'")){
01243           index = textoLateral.indexOf("'", 0); 
01244           textoLateral.replace(index,1, "#apos");
01245          }   
01246      }
01247      textoTrasero = this->a->portada->TextoTrasera();
01248      if(this->a->portada->TextoTrasera().contains("&")){
01249          
01250          int index=0;
01251          while(textoTrasero.contains("&")){
01252           index = textoTrasero.indexOf("&", 0); 
01253           textoTrasero.replace(index,1, "#amp");
01254          }      
01255      }
01256      
01257      
01258      if(this->a->portada->TextoTrasera().contains("\"")){
01259          
01260          int index=0;
01261          while(textoTrasero.contains("\"")){
01262           index = textoTrasero.indexOf("\"", 0); 
01263           textoTrasero.replace(index,1, "#quot");
01264          }      
01265      }
01266      
01267      
01268      if(this->a->portada->TextoTrasera().contains("<")){
01269          
01270          int index=0;
01271          while(textoTrasero.contains("<")){
01272           index = textoTrasero.indexOf("<", 0); 
01273           textoTrasero.replace(index,1, "#lt");
01274          }      
01275      }
01276      
01277      
01278      if(this->a->portada->TextoTrasera().contains(">")){
01279          
01280          int index=0;
01281          while(textoTrasero.contains(">")){
01282           index = textoTrasero.indexOf(">", 0); 
01283           textoTrasero.replace(index,1, "#gt");
01284          }      
01285      }
01286      
01287      
01288      if(this->a->portada->TextoTrasera().contains("'")){
01289          
01290          int index=0;
01291          while(textoTrasero.contains("'")){
01292           index = textoTrasero.indexOf("'", 0); 
01293           textoTrasero.replace(index,1, "#apos");
01294          }      
01295      }
01296      // ahora modificar la carga y posteriormente hacer lo mismo para página
01297      QString creado("no");
01298      if(this->creadoConAsistente){
01299          creado="si";
01300      }
01301      QString textura("no");
01302      if(this->seleccionadaTextura){
01303          textura="si";
01304      }
01305      QString orden("");
01306      if(this->getOrdenacionAlfabetica()){
01307          orden="alfabetica";
01308         }else{
01309             if(this->getOrdenacionFechaCreciente()){
01310                 orden="fechascreciente";
01311             }else{
01312                 if(this->getOrdenacionFechaDecreciente()){
01313                     orden="fechasdecreciente";
01314                 }else{
01315                     orden="ordenpersonalizado";
01316                 }
01317             }
01318         }
01319      QString cadenaTextoLateral="";
01320      QString cadenaTextoFrontal="";
01321      QString cadenaTextoTrasero="";
01322      if(this->a->portada->hayTextoLateral()){
01323         cadenaTextoLateral="          <texto_lat texto=\"" + textoLateral + "\" fuente=\"" + this->a->portada->FuenteTextoLateral().toString() + "\" negrita=\"" + negritaLateral + "\" subrayado=\"" + subrayadoLateral + "\" cursiva=\"" + cursivaLateral +"\" red=\"" + QString::number(this->a->portada->ColorTextoLateral().red()) + "\" green=\"" + QString::number(this->a->portada->ColorTextoLateral().green()) + "\" blue=\"" + QString::number(this->a->portada->ColorTextoLateral().blue()) + "\"/>\n";
01324      }
01325      if(this->a->portada->hayTextoFrontal()){
01326         cadenaTextoFrontal="          <texto_fro texto=\"" + textoFrontal + "\" fuente=\"" + this->a->portada->FuenteTextoFrontal().toString() + "\" negrita=\"" + negritaFrontal + "\" subrayado=\"" + subrayadoFrontal + "\" cursiva=\"" + cursivaFrontal + "\" red=\"" + QString::number(this->a->portada->ColorTextoFrontal().red()) + "\" green=\"" + QString::number(this->a->portada->ColorTextoFrontal().green()) + "\" blue=\"" + QString::number(this->a->portada->ColorTextoFrontal().blue()) + "\"/>\n";
01327      }
01328      if(this->a->portada->hayTextoTrasero()){
01329         cadenaTextoTrasero="          <texto_tra texto=\"" + textoTrasero + "\" fuente=\"" + this->a->portada->FuenteTextoTrasera().toString() + "\" negrita=\"" + negritaTrasero + "\" subrayado=\"" + subrayadoTrasero + "\" cursiva=\"" + cursivaTrasero + "\" red=\"" + QString::number(this->a->portada->ColorTextoTrasera().red()) + "\" green=\"" + QString::number(this->a->portada->ColorTextoTrasera().green()) + "\" blue=\"" + QString::number(this->a->portada->ColorTextoTrasera().blue()) + "\"/>\n";
01330      }
01331      if(this->a->portada->GetEditada()){
01332      texto = "<album orden=\"" + orden + "\" asistente=\"" + creado + "\" fecha=\"" + this->fechaCreacion + "\" paginas=\"" + siOno + "\">\n     <portada textura=\"" + textura + "\" plantilla=\"" + this->a->portada->RutaPlantilla() + "\" imagen_fondo=\"" + nombreSerieFondoPortada +"\" red=\""+ redPortada +"\" green=\"" + greenPortada + "\" blue=\""+ bluePortada +"\" tam_w=\"" + QString::number(this->a->portada->GetW()) + "\" tam_h=\"" + QString::number(this->a->portada->GetH()) + "\" despFotos=\"" + despFP + "\" despTextos=\"" + despTP + "\">\n" + cadenaTextoLateral + cadenaTextoFrontal + cadenaTextoTrasero + "          <imagen_fro ruta=\"" + nombreSerieFron + totalFrontal + "\"/>\n          <imagen_tra ruta=\"" + nombreSerieTras + totalTrasero +"\"/>\n          <Desplazamientos>\n" + this->portadaDesplazada + "          </Desplazamientos>\n     </portada>\n";
01333      }else{
01334      texto = "<album orden=\"" + orden + "\" asistente=\"" + creado + "\" fecha=\"" + this->fechaCreacion + "\" paginas=\"" + siOno + "\">\n     <portada textura=\"" + textura + "\" plantilla=\"" + this->a->portada->RutaPlantilla() + "\" imagen_fondo=\"" + nombreSerieFondoPortada +"\" red=\""+ redPortada +"\" green=\"" + greenPortada + "\" blue=\""+ bluePortada +"\" tam_w=\"" + QString::number(this->a->portada->GetW()) + "\" tam_h=\"" + QString::number(this->a->portada->GetH()) + "\" despFotos=\"" + despFP + "\" despTextos=\"" + despTP + "\">\n" + cadenaTextoLateral + cadenaTextoFrontal + cadenaTextoTrasero + "          <imagen_fro ruta=\"" + nombreSerieFron + totalFrontal +"\"/>\n          <imagen_tra ruta=\"" + nombreSerieTras + totalTrasero + "\"/>\n     </portada>\n";
01335      }
01336      QString texto2, texto3, texto4, texto5, texto6, texto8, texto9, textoFinal;
01337      texto5="";
01338      texto2="";
01339      barra->setValue(8);
01340      if(this->creadasPaginas){
01341          int contadNumPagina=0;
01342          
01343          
01344      for(unsigned i=0; i< this->a->paginas.size(); i++){
01345          barra->setValue(8+i);
01346          QString imagenFondoPagina, redFondoPagina, greenFondoPagina, blueFondoPagina, editada;
01347          editada="";
01348          if(this->a->GetPagina(i)->ColordeFondo()){
01349              imagenFondoPagina="no";
01350              redFondoPagina=QString::number(this->a->GetPagina(i)->GetFondoColor().red());
01351              greenFondoPagina=QString::number(this->a->GetPagina(i)->GetFondoColor().green());
01352              blueFondoPagina=QString::number(this->a->GetPagina(i)->GetFondoColor().blue());
01353          }else{
01354              QPixmap *pixFondoPag;
01355              try{
01356                 pixFondoPag= new QPixmap(this->a->GetPagina(i)->GetFondoImagen());
01357                 if(pixFondoPag->isNull()){
01358                     throw std::ios_base::failure(tr("No pudo abrirse la imagen de fondo de la pagina.").toStdString());
01359                 }
01360              }catch(std::exception& e){
01361                 Error *err=new Error(4, e.what(), this);
01362                 err->LanzarDialogo();
01363                 delete err;
01364                 exit(1);
01365              }
01366              imagenFondoPagina=imagenFondoPagina + this->directorioCasaUsuario +"/.openAlbum/" + this->rutaGuardado.section("/", -1) + separador + "fondo" + separador + "pagina" + separador + QString::number(i) + ".JPG";
01367              redFondoPagina="0";
01368              greenFondoPagina="0";
01369              blueFondoPagina="0";
01370              try{
01371                 if(!pixFondoPag->save(imagenFondoPagina)){
01372                   //excepción
01373                   throw std::ios_base::failure(tr("No se pudo guardar la imagen").toStdString());
01374                 }
01375              }catch(std::exception& e){
01376                 Error *err=new Error(5, e.what(), this);
01377                 err->LanzarDialogo();
01378                 delete err;
01379                 exit(1);
01380              }
01381              delete pixFondoPag;
01382          }
01383          
01384          if(i==0){
01385              if(this->a->GetPagina(i)->GetPaginaEditada()){
01386                  editada="si";
01387              }else{
01388                  editada="no";
01389              }
01390              if(this->a->GetPagina(i)->ContieneMarcos()){
01391                 texto2= "          <pagina plantilla=\"" + this->a->GetPagina(i)->RutaPlantilla() + "\" imagen_fondo=\"" + imagenFondoPagina + "\" red=\"" + redFondoPagina + "\" green=\"" + greenFondoPagina + "\" blue=\"" + blueFondoPagina + "\" editada=\"" + editada + "\" tam_w=\"" + QString::number(this->a->GetPagina(i)->GetW()) + "\" tam_h=\"" + QString::number(this->a->GetPagina(i)->GetH()) + "\" marcos=\"si\">\n";
01392              }else{
01393                 texto2= "          <pagina plantilla=\"" + this->a->GetPagina(i)->RutaPlantilla() + "\" imagen_fondo=\"" + imagenFondoPagina + "\" red=\"" + redFondoPagina + "\" green=\"" + greenFondoPagina + "\" blue=\"" + blueFondoPagina + "\" editada=\"" + editada + "\" tam_w=\"" + QString::number(this->a->GetPagina(i)->GetW()) + "\" tam_h=\"" + QString::number(this->a->GetPagina(i)->GetH()) + "\" marcos=\"no\">\n"; 
01394              }
01395              texto3="               <fotos>\n";
01396              int contadNumFoto=0;
01397              for(unsigned j=0; j< this->a->GetPagina(i)->GetVectorImagenes().size(); j++){
01398                  
01399                  QPixmap *pix;
01400                  try{
01401                  pix= new QPixmap(this->a->GetPagina(i)->GetVectorImagenes().at(j).ruta);
01402                  }catch(std::exception& e){
01403                         Error *err=new Error(2, e.what(), this);
01404                         err->LanzarDialogo();
01405                         delete err;
01406                         exit(1);
01407                  }
01408                  QString nombreSerie= this->directorioCasaUsuario + "/.openAlbum/";
01409                  QString separador= "_";
01410                  QString pagina, foto;
01411                  pagina.setNum(contadNumPagina);
01412                  foto.setNum(contadNumFoto);
01413                  nombreSerie= nombreSerie + this->rutaGuardado.section("/", -1) + foto + separador + pagina +".JPG";
01414                  
01415                  
01416                  try{
01417                  if(!pix->save(nombreSerie)){
01418                      throw std::ios_base::failure(tr("No se pudo guardar la imagen").toStdString());
01419                  }
01420                  }catch(std::exception& e){
01421                         Error *err=new Error(5, e.what(), this);
01422                         err->LanzarDialogo();
01423                         delete err;
01424                         exit(1);
01425                  }
01426                  delete pix;
01427                  texto3=texto3 + "                    <foto ruta=\"" + nombreSerie + "\"/>\n";
01428                  contadNumFoto++;
01429              }
01430              
01431              if(this->a->GetPagina(i)->ContieneTextos()){
01432                  texto5="               <textos>\n";
01433                 for(unsigned t=0; t<this->a->GetPagina(i)->GetVectorTextos().size(); t++){
01434                     QString subrayado, negrita, cursiva, texto;
01435                     try{
01436                     texto = this->a->GetPagina(i)->GetVectorTextos().at(t).texto;
01437                     
01438                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).texto.contains("&")){
01439                         int index=0;
01440                         while(texto.contains("&")){
01441                                 index = texto.indexOf("&", 0); 
01442                                 texto.replace(index,1, "#amp");
01443                         }      
01444                     }
01445                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).texto.contains("\"")){
01446                         int index=0;
01447                         while(texto.contains("\"")){
01448                                 index = texto.indexOf("\"", 0); 
01449                                 texto.replace(index,1, "#quot");
01450                         }      
01451                     }
01452                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).texto.contains("<")){
01453                         int index=0;
01454                         while(texto.contains("<")){
01455                                 index = texto.indexOf("<", 0); 
01456                                 texto.replace(index,1, "#lt");
01457                         }      
01458                     }
01459                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).texto.contains(">")){
01460                         int index=0;
01461                         while(texto.contains(">")){
01462                                 index = texto.indexOf(">", 0); 
01463                                 texto.replace(index,1, "#gt");
01464                         }      
01465                     }
01466                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).texto.contains("'")){
01467                         int index=0;
01468                         while(texto.contains("'")){
01469                                 index = texto.indexOf("'", 0); 
01470                                 texto.replace(index,1, "#apos");
01471                         }      
01472                     }
01473      
01474                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).cursiva){
01475                         cursiva="si";
01476                     }else{
01477                         cursiva="no";
01478                     }
01479                     
01480                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).negrita){
01481                         negrita="si";
01482                     }else{
01483                         negrita="no";
01484                     }
01485                     
01486                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).subrayado){
01487                         subrayado="si";
01488                     }else{
01489                         subrayado="no";
01490                     }
01491                     texto5= texto5 + "                    <texto contenido=\"" + texto + "\" fuente=\"" + this->a->GetPagina(i)->GetVectorTextos().at(t).fuente.toString() + "\" negrita=\"" + negrita + "\" subrayado=\"" + subrayado + "\" cursiva=\"" + cursiva + "\" red=\"" + QString::number(this->a->GetPagina(i)->GetVectorTextos().at(t).color.red()) + "\" green=\"" + QString::number(this->a->GetPagina(i)->GetVectorTextos().at(t).color.green()) + "\" blue=\"" + QString::number(this->a->GetPagina(i)->GetVectorTextos().at(t).color.blue()) + "\"/>\n";
01492                 }catch(std::exception& e){
01493                         Error *err=new Error(1, e.what(), this);
01494                         err->LanzarDialogo();
01495                         delete err;
01496                         exit(1);
01497                 }
01498                 }
01499                  texto5=texto5 + "               </textos>\n";
01500              }
01501              
01502      
01503              QString textoM="";
01504              for(int contadormarcos=0; contadormarcos<this->a->GetPagina(i)->getMarcos().size(); contadormarcos++){
01505                  QString texto= "                    <marco id=\""+ QString::number(this->a->GetPagina(i)->getMarcos().at(contadormarcos).idFoto) + "\" nombre=\"" + this->a->GetPagina(i)->getMarcos().at(contadormarcos).nombre->toStdString().c_str() + "\" tipo=\"" + this->a->GetPagina(i)->getMarcos().at(contadormarcos).tipo->toStdString().c_str() + "\"/>\n";
01506                  textoM.append(texto);
01507              }
01508              if(this->a->GetPagina(i)->ContieneTextos()){
01509                  if(this->a->GetPagina(i)->ContieneMarcos()){
01510                  texto2="     <paginas>\n" + texto2 + texto3 + "               </fotos>\n" + "               <marcos>\n" + textoM + "               </marcos>\n" + texto5;
01511                  }else{
01512                     texto2="     <paginas>\n" + texto2 + texto3 + "               </fotos>\n" + texto5;
01513                    
01514                  }
01515              }else{
01516                  if(this->a->GetPagina(i)->ContieneMarcos()){
01517                 texto2="     <paginas>\n" + texto2 + texto3 + "               </fotos>\n" + "               <marcos>\n" + textoM + "               </marcos>\n"; 
01518                  }else{
01519                     texto2="     <paginas>\n" + texto2 + texto3 + "               </fotos>\n"; 
01520                  
01521                  }
01522              }
01523              
01524                  texto2= texto2 + "          </pagina>\n";
01525              
01526          }else{
01527                 if(this->a->GetPagina(i)->GetPaginaEditada()){
01528                         editada="si";
01529                 }else{
01530                         editada="no";
01531                 }
01532                 if(this->a->GetPagina(i)->ContieneMarcos()){
01533                         texto2= texto2 + "          <pagina plantilla=\"" + this->a->GetPagina(i)->RutaPlantilla() + "\" imagen_fondo=\"" + imagenFondoPagina + "\" red=\"" + redFondoPagina + "\" green=\"" + greenFondoPagina + "\" blue=\"" + blueFondoPagina + "\" editada=\"" + editada + "\" tam_w=\"" + QString::number(this->a->GetPagina(i)->GetW()) + "\" tam_h=\"" + QString::number(this->a->GetPagina(i)->GetH()) + "\" marcos=\"si\">\n";
01534                 }else{
01535                         texto2= texto2 + "          <pagina plantilla=\"" + this->a->GetPagina(i)->RutaPlantilla() + "\" imagen_fondo=\"" + imagenFondoPagina + "\" red=\"" + redFondoPagina + "\" green=\"" + greenFondoPagina + "\" blue=\"" + blueFondoPagina + "\" editada=\"" + editada + "\" tam_w=\"" + QString::number(this->a->GetPagina(i)->GetW()) + "\" tam_h=\"" + QString::number(this->a->GetPagina(i)->GetH()) + "\" marcos=\"no\">\n";
01536                 }
01537                 texto4="               <fotos>\n";
01538                 int contadNumFoto2=0;
01539                 for(unsigned y=0; y< this->a->GetPagina(i)->GetVectorImagenes().size(); y++){
01540                     
01541                     QPixmap *pix;
01542                     try{
01543                     pix= new QPixmap(this->a->GetPagina(i)->GetVectorImagenes().at(y).ruta);
01544                     if(pix->isNull()){
01545                         throw std::ios_base::failure(tr("No pudo abrirse una de las imagenes.").toStdString());
01546                     }
01547                     }catch(std::exception& e){
01548                         Error *err=new Error(4, e.what(), this);
01549                         err->LanzarDialogo();
01550                         delete err;
01551                         exit(1);
01552                     }
01553                     
01554                     QString nombreSerie= this->directorioCasaUsuario + "/.openAlbum/";
01555                  QString separador= "_";
01556                  QString pagina, foto;
01557                  pagina.setNum(contadNumPagina);
01558                  foto.setNum(contadNumFoto2);
01559                  nombreSerie= nombreSerie + this->rutaGuardado.section("/", -1) + foto + separador + pagina +".JPG";
01560                  
01561                  try{
01562                         if(!pix->save(nombreSerie)){
01563                                 throw std::ios_base::failure(tr("No se pudo guardar la imagen").toStdString());
01564                         }   
01565                  }catch(std::exception& e){
01566                         Error *err=new Error(5, e.what(), this);
01567                         err->LanzarDialogo();
01568                         delete err;
01569                         exit(1);
01570                  }
01571                  delete pix;
01572                  texto4=texto4 + "                    <foto ruta=\"" + nombreSerie + "\"/>\n";
01573                  contadNumFoto2++;
01574                 }
01575                 
01576                 if(this->a->GetPagina(i)->ContieneTextos()){
01577                  texto6="               <textos>\n";
01578                 for(unsigned t=0; t<this->a->GetPagina(i)->GetVectorTextos().size(); t++){
01579                     QString subrayado, negrita, cursiva, texto;
01580                     
01581                     try{
01582                     texto = this->a->GetPagina(i)->GetVectorTextos().at(t).texto;
01583                     
01584                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).texto.contains("&")){
01585                         int index=0;
01586                         while(texto.contains("&")){
01587                                 index = texto.indexOf("&", 0); 
01588                                 texto.replace(index,1, "#amp");
01589                         }      
01590                     }
01591                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).texto.contains("\"")){
01592                         int index=0;
01593                         while(texto.contains("\"")){
01594                                 index = texto.indexOf("\"", 0); 
01595                                 texto.replace(index,1, "#quot");
01596                         }      
01597                     }
01598                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).texto.contains("<")){
01599                         int index=0;
01600                         while(texto.contains("<")){
01601                                 index = texto.indexOf("<", 0); 
01602                                 texto.replace(index,1, "#lt");
01603                         }      
01604                     }
01605                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).texto.contains(">")){
01606                         int index=0;
01607                         while(texto.contains(">")){
01608                                 index = texto.indexOf(">", 0); 
01609                                 texto.replace(index,1, "#gt");
01610                         }      
01611                     }
01612                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).texto.contains("'")){
01613                         int index=0;
01614                         while(texto.contains("'")){
01615                                 index = texto.indexOf("'", 0); 
01616                                 texto.replace(index,1, "#apos");
01617                         }      
01618                     }
01619                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).cursiva){
01620                         cursiva="si";
01621                     }else{
01622                         cursiva="no";
01623                     }
01624                     
01625                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).negrita){
01626                         negrita="si";
01627                     }else{
01628                         negrita="no";
01629                     }
01630                     
01631                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).subrayado){
01632                         subrayado="si";
01633                     }else{
01634                         subrayado="no";
01635                     }
01636                     texto6= texto6 + "                    <texto contenido=\"" + texto + "\" fuente=\"" + this->a->GetPagina(i)->GetVectorTextos().at(t).fuente.toString() + "\" negrita=\"" + negrita + "\" subrayado=\"" + subrayado + "\" cursiva=\"" + cursiva + "\" red=\"" + QString::number(this->a->GetPagina(i)->GetVectorTextos().at(t).color.red()) + "\" green=\"" + QString::number(this->a->GetPagina(i)->GetVectorTextos().at(t).color.green()) + "\" blue=\"" + QString::number(this->a->GetPagina(i)->GetVectorTextos().at(t).color.blue()) + "\"/>\n";
01637                 }catch(std::exception& e){
01638                         Error *err=new Error(1, e.what(), this);
01639                         err->LanzarDialogo();
01640                         delete err;
01641                         exit(1);
01642                 }
01643                 }
01644                  texto6=texto6 + "               </textos>\n";
01645              }
01646              QString textoM2="";
01647              for(int contadormarcos=0; contadormarcos<this->a->GetPagina(i)->getMarcos().size(); contadormarcos++){
01648                  QString texto="                    <marco id=\""+ QString::number(this->a->GetPagina(i)->getMarcos().at(contadormarcos).idFoto) + "\" nombre=\"" + this->a->GetPagina(i)->getMarcos().at(contadormarcos).nombre->toStdString().c_str() + "\" tipo=\"" + this->a->GetPagina(i)->getMarcos().at(contadormarcos).tipo->toStdString().c_str() + "\"/>\n";
01649                  textoM2.append(texto);
01650              }   
01651              if(this->a->GetPagina(i)->ContieneTextos()){ 
01652                  if(this->a->GetPagina(i)->ContieneMarcos()){
01653                       texto2=texto2 + texto4 + "               </fotos>\n" + "               <marcos>\n" + textoM2 + "               </marcos>\n" + texto6;
01654                  }else{
01655                        texto2=texto2 + texto4 + "               </fotos>\n" + texto6;
01656                  }
01657              }else{
01658                  if(this->a->GetPagina(i)->ContieneMarcos()){
01659                       texto2=texto2 + texto4 + "               </fotos>\n" + "               <marcos>\n" + textoM2 + "               </marcos>\n";
01660                  }else{
01661                       texto2=texto2 + texto4 + "               </fotos>\n";
01662                  }
01663              }
01664               
01665              
01666              texto2=texto2 + "          </pagina>\n";
01667                  
01668              
01669          }
01670          contadNumPagina++;
01671          ii=i;
01672      }
01673          
01674      }
01675      
01676      for(int x=0; x<this->paginasDesplazadas.size(); x++){
01677          try{
01678          texto9=texto9 + this->paginasDesplazadas.at(x);
01679          }catch(std::exception& e){
01680                 Error *err=new Error(1, e.what(), this);
01681                 err->LanzarDialogo();
01682                 delete err;
01683                 exit(1);
01684          }
01685      }
01686      
01687      if(this->creadasPaginas){
01688         texto2= texto2 + "     </paginas>\n" + "     <DesplazamientosPaginas>\n" + texto9 + "     </DesplazamientosPaginas>\n"; 
01689       
01690         textoFinal= texto + texto2;
01691      }else{
01692          texto2= texto2 + "          <Desplazamientos>\n" + texto9 + "          </Desplazamientos>\n"; 
01693       
01694         textoFinal= texto + texto2;
01695      }
01696      textoFinal= textoFinal + "</album>\n";
01697      textStream << textoFinal;
01698      file.close();
01699      
01700      this->paginasDesplazadas.clear();
01701      this->portadaDesplazada.clear();
01702      
01703      QString lineaConfig="<album nombre=\"";
01704      lineaConfig.append(this->rutaGuardado);
01705      lineaConfig.append("\"/>\n</creados_recientemente></general>");
01706      QString directorio=this->directorioCasaUsuario;
01707      directorio.append("/.openAlbum/configuracion.xml");
01708      QFile filename(directorio);
01709      if (filename.open(QIODevice::ReadOnly | QIODevice::Text))
01710      { 
01711          QFile filename2(directorio); 
01712          if (filename2.open(QIODevice::ReadWrite))
01713         {
01714                 QTextStream in(&filename);
01715                 QTextStream out(&filename2);
01716                 bool aux=false;
01717                 while(!aux) {
01718                        QString linea=in.readLine();
01719                        if(linea=="</creados_recientemente></general>"){
01720                            aux=true;
01721                        }else{
01722                            out << linea.append("\n");
01723                        }
01724                 } 
01725                 out << lineaConfig; 
01726                 filename2.close();
01727         } 
01728         filename.close();   
01729      }
01730 
01731 
01732      barra->setValue(9+ii);
01733      }
01734      this->ui->statusBar->setMaximumWidth(wAux);
01735      delete barra;
01736 }
01737 
01738 bool FormPrincipal::getCreadoconAsistente(){
01739     return this->creadoConAsistente;
01740 }
01741 
01742     bool FormPrincipal::seleccionadoFondoPortada(){
01743         return this->elegidoFondoPortada;
01744     }
01745     
01746     bool FormPrincipal::seleccionadoFrontalPortada(){
01747         return this->elegidaFrontalPortada;
01748     }
01749     
01750     bool FormPrincipal::seleccionadoTraseraPortada(){
01751         return this->elegidaTraseraPortada;
01752     }
01753 
01754     void FormPrincipal::Cargar0(){
01755         this->Cargar(this->nombresAlbumsCreadosRecientemente[0]);
01756     }
01757     
01758     void FormPrincipal::Cargar1(){
01759         this->Cargar(this->nombresAlbumsCreadosRecientemente[1]);
01760     }
01761     void FormPrincipal::Cargar2(){
01762         this->Cargar(this->nombresAlbumsCreadosRecientemente[2]);
01763     }
01764     
01765     void FormPrincipal::Cargar3(){
01766         this->Cargar(this->nombresAlbumsCreadosRecientemente[3]);
01767     }
01768     
01769     void FormPrincipal::Cargar4(){
01770         this->Cargar(this->nombresAlbumsCreadosRecientemente[4]);
01771     }
01772     
01773     void FormPrincipal::Cargar5(){
01774         this->Cargar(this->nombresAlbumsCreadosRecientemente[5]);
01775     }
01776     void FormPrincipal::Cargar6(){
01777         this->Cargar(this->nombresAlbumsCreadosRecientemente[6]);
01778     }
01779     
01780     void FormPrincipal::MostrarLineasPaginas(){
01781         if(this->creadasPaginas){
01782                 if(this->ui->actionLineaSeparacionPaginas->isChecked()){
01783                     for(unsigned contador=0; contador< a->paginas.size(); contador++){    
01784                         a->paginas[contador]->versionReducida->scene()->addLine(231*(this->controlador->getWVisorAlbum())/462, 2, 231*(this->controlador->getWVisorAlbum())/462, 318*(this->controlador->getHVisorAlbum())/321)->setAcceptHoverEvents(false);
01785                     }
01786                 }else{
01787                     for(unsigned contador=0; contador< a->paginas.size(); contador++){    
01788                         a->paginas[contador]->versionReducida->scene()->removeItem(a->paginas[contador]->versionReducida->scene()->itemAt(231*(this->controlador->getWVisorAlbum())/462, 2));
01789                     }
01790                 }
01791         }
01792     }
01793     
01794     void FormPrincipal::LanzarCreditos(){
01795         creditos *formcreditos=new creditos(this, this->controlador, this->directoriodetrabajo);
01796         formcreditos->exec();
01797         delete formcreditos;
01798     }
01799     
01800     void FormPrincipal::MostrarLicencia(){
01801         QDesktopServices::openUrl(QUrl("file://" + this->directoriodetrabajo.absolutePath() + "/license/copying.txt"));
01802     }
01803     
01804     void FormPrincipal::EnviarEmail(){
01805         
01806         QDesktopServices::openUrl(QUrl("mailto:manuel.brihuega@gmail.com"));
01807     }
01808     
01809     void FormPrincipal::MostrarAyuda(){
01810        
01811         QDesktopServices::openUrl(QUrl("file://" + this->directoriodetrabajo.absolutePath() + "/FAQ/index.htm"));
01812 }
01813     
01814 void FormPrincipal::MostrarLineasPortada(){
01815         if(this->creadaPortada){
01816                 if(this->ui->actionLineaSeparacionPortada->isChecked()){
01817                         a->portada->versionReducida->scene()->addLine(213*(this->controlador->getWVisorAlbum())/462, 2, 213*(this->controlador->getWVisorAlbum())/462, 318*(this->controlador->getHVisorAlbum())/321)->setAcceptHoverEvents(false);
01818                         a->portada->versionReducida->scene()->addLine(245*(this->controlador->getWVisorAlbum())/462, 2, 245*(this->controlador->getWVisorAlbum())/462, 318*(this->controlador->getHVisorAlbum())/321)->setAcceptHoverEvents(false);
01819                 }else{
01820                         a->portada->versionReducida->scene()->removeItem(a->portada->versionReducida->scene()->itemAt(213*(this->controlador->getWVisorAlbum())/462, 2));
01821                         a->portada->versionReducida->scene()->removeItem(a->portada->versionReducida->scene()->itemAt(245*(this->controlador->getWVisorAlbum())/462, 2));
01822                         a->portada->versionReducida->scene()->addLine(this->controlador->getWVisorAlbum(), 2, this->controlador->getWVisorAlbum(), this->controlador->getHVisorAlbum())->setAcceptHoverEvents(false);
01823                         a->portada->versionReducida->scene()->addLine(this->controlador->getWVisorAlbum(), 2, this->controlador->getWVisorAlbum(), this->controlador->getHVisorAlbum())->setAcceptHoverEvents(false);
01824                 
01825                 }
01826         }
01827     }
01828 
01829 void FormPrincipal::LanzarWizard(bool visible){
01830         
01831         this->wizard=new QWizard(this);
01832     QFile existencia;
01833     QDir dir;
01834     bool activarWizard=false;
01835     
01836     if(existencia.exists(dir.homePath() + "/.openAlbum/configuracion.xml")){
01837         
01838         Parser par(dir.homePath().toStdString() + "/.openAlbum/configuracion.xml",0);
01839        
01840         ticpp::Element* element = par.root();
01841         ticpp::Element* elementAlbum;
01842         std::vector<ticpp::Element*> albums;
01843         std::string aux=par.get_attribute("wizard", element);
01844         elementAlbum=par.find("creados_recientemente", element);
01845         par.find("album", albums, elementAlbum);
01846         
01847         if(aux=="si"){
01848             activarWizard=true;
01849         }else{
01850             
01851             activarWizard=false;
01852         }
01853         
01854         //Ahora añadimos los últimos álbumes generados en el menu de Archivo
01855         //De esto solo queda ordenar inversamente
01856         unsigned iniciobucle=0;
01857         if(albums.size()>7){
01858             iniciobucle=albums.size()-7;
01859         }
01860         unsigned contadorauxiliar=0;
01861         QSet<QString> controlrepetidos;
01862         for(unsigned x=iniciobucle; x<albums.size(); x++){
01863             if(x<(7+iniciobucle)){
01864             std::string nombre=par.get_attribute("nombre", albums.at(x));
01865             nombresAlbumsCreadosRecientemente.insert(contadorauxiliar, QString::fromStdString(nombre));
01866             controlrepetidos.insert(QString::fromStdString(nombre));
01867             contadorauxiliar++;
01868             }
01869         }
01870          
01871         QStack<QString> pila;
01872         for(int z=0; z < nombresAlbumsCreadosRecientemente.size(); z++){
01873             if(controlrepetidos.contains(nombresAlbumsCreadosRecientemente[z])){
01874                 pila.push(nombresAlbumsCreadosRecientemente[z]);
01875                 controlrepetidos.remove(nombresAlbumsCreadosRecientemente[z]);
01876             }
01877         }
01878         unsigned contadorAux=0;
01879         nombresAlbumsCreadosRecientemente.clear();
01880         while(!pila.isEmpty()){
01881             nombresAlbumsCreadosRecientemente.insert(contadorAux, pila.top());
01882             pila.pop();
01883             contadorAux++;
01884         }
01885       
01886         if(!this->insertadoActionSalir){
01887         for(int y=0; y < nombresAlbumsCreadosRecientemente.size(); y++){
01888             QString nombreDefinitivo="&";
01889             nombreDefinitivo.append(QString::number(y+1));
01890             nombreDefinitivo.append(". ");
01891             nombreDefinitivo.append(nombresAlbumsCreadosRecientemente[y].section("/", -1));
01892             
01893             QAction *a=this->ui->menu_Archivo->addAction(nombreDefinitivo);
01894             QIcon *icono=new QIcon(this->directoriodetrabajo.absolutePath() + "/data/albumgeneral.png");
01895             a->setIcon(*icono);
01896             a->setIconVisibleInMenu(true);
01897             if(y==0){
01898             QObject::connect(a, SIGNAL(triggered() ), this, SLOT(Cargar0()));
01899             }
01900             if(y==1){
01901             QObject::connect(a, SIGNAL(triggered() ), this, SLOT(Cargar1()));
01902             }
01903             if(y==2){
01904             QObject::connect(a, SIGNAL(triggered() ), this, SLOT(Cargar2()));
01905             }
01906             if(y==3){
01907             QObject::connect(a, SIGNAL(triggered() ), this, SLOT(Cargar3()));
01908             }
01909             if(y==4){
01910             QObject::connect(a, SIGNAL(triggered() ), this, SLOT(Cargar4()));
01911             }
01912             if(y==5){
01913             QObject::connect(a, SIGNAL(triggered() ), this, SLOT(Cargar5()));
01914             }
01915             if(y==6){
01916             QObject::connect(a, SIGNAL(triggered() ), this, SLOT(Cargar6()));
01917             }
01918             
01919             delete icono;
01920         }
01921         this->ui->menu_Archivo->addSeparator();
01922         this->ui->menu_Archivo->addAction(this->ui->action_Salir);
01923         this->insertadoActionSalir=true;
01924         }
01925          
01926     }else{
01927         activarWizard=true;
01928     }
01929     if(!this->insertadoActionSalir){
01930         this->ui->menu_Archivo->addSeparator();
01931         this->ui->menu_Archivo->addAction(this->ui->action_Salir);
01932         this->insertadoActionSalir=true;
01933     }
01934     
01935     this->wizard->setWizardStyle(QWizard::ModernStyle);
01936     
01937      this->wizard->setWindowTitle(tr("Asistente de creación"));
01938      
01939      
01940       QList<QWizard::WizardButton> layout;
01941      layout << QWizard::Stretch << QWizard::BackButton << QWizard::NextButton << QWizard::FinishButton <<  QWizard::CancelButton;
01942      this->wizard->setButtonLayout(layout);
01943      this->wizard->setButtonText(QWizard::NextButton, tr("&Siguiente >"));
01944      this->wizard->setButtonText(QWizard::BackButton, tr("< &Atrás"));
01945      this->wizard->setButtonText(QWizard::CancelButton, tr("&Cancelar"));
01946      this->wizard->setButtonText(QWizard::FinishButton, tr("&Finalizar"));
01947      this->wizard->addPage(this->crearPaginaIntro());
01948      this->wizard->setFixedSize(510, 390);
01949      this->wizard->setOption(QWizard::DisabledBackButtonOnLastPage);
01950       
01951      
01952     this->wizard->addPage(this->crearPaginaPortada());
01953    
01954     this->wizard->addPage(this->crearPaginaFondoPortada());
01955     this->wizard->addPage(this->crearPaginaTamanno());
01956     
01957     this->wizard->addPage(this->crearPaginaFotos());
01958     
01959     this->wizard->addPage(this->crearPaginaFinal());
01960     
01961      
01962     if(activarWizard){
01963          
01964                 QString pathAuxiliar=this->directoriodetrabajo.absolutePath() + "/data/templatePredef.png";
01965                 QPixmap *pix=new QPixmap(pathAuxiliar);
01966                 QGraphicsScene *scena=new QGraphicsScene();
01967 
01968                 this->ui->plantillaPreview->setScene(scena);
01969                 scena->addPixmap(pix->scaled(this->controlador->getWvisorPlantilla(), this->controlador->getHvisorPlantilla(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
01970                 delete pix;
01971     this->wizard->exec();
01972     this->ejecutadoWizard=true;
01973     if(this->wizard->result()==QDialog::Rejected){
01974         this->intro->setConfiguracion();
01975         this->NuevoAlbum(false);
01976         
01977     }
01978     }else{
01979               
01980         if(visible){
01981                 
01982                 QString pathAuxiliar=this->directoriodetrabajo.absolutePath() + "/data/templatePredef.png";
01983                 QPixmap *pix=new QPixmap(pathAuxiliar);
01984                 QGraphicsScene *scena=new QGraphicsScene();
01985 
01986                 this->ui->plantillaPreview->setScene(scena);
01987                 scena->addPixmap(pix->scaled(this->controlador->getWvisorPlantilla(), this->controlador->getHvisorPlantilla(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
01988                 delete pix;
01989             this->wizard->exec();
01990             this->ejecutadoWizard=true;
01991             if(this->wizard->result()==QDialog::Rejected){
01992                 this->intro->setConfiguracion();
01993                 this->NuevoAlbum(false);
01994                 
01995                 }
01996         }else{
01997                 
01998                 QString pathAuxiliar=this->directoriodetrabajo.absolutePath() + "/data/templatePredef.png";
01999                 QPixmap *pix=new QPixmap(pathAuxiliar);
02000                 QGraphicsScene *scena=new QGraphicsScene();
02001 
02002                 this->ui->plantillaPreview->setScene(scena);
02003                 scena->addPixmap(pix->scaled(this->controlador->getWvisorPlantilla(), this->controlador->getHvisorPlantilla(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
02004                 delete pix;
02005         }
02006     }
02007     
02008     
02009     
02010     
02011   
02012     
02013 }
02014     
02015     bool FormPrincipal::getUsadasTexturas(){
02016         return this->seleccionadaTextura;
02017     }
02018     
02019     
02020     
02021 void FormPrincipal::Cargar(QString AbrirDialogo){
02022     QProgressDialog *barra= new QProgressDialog(this);
02023     barra->setWindowTitle(tr("Cargando álbum..."));
02024     barra->setFixedSize(361, 90);
02025     
02026     barra->setMinimum(0);
02027     barra->setStyle(new QWindowsStyle);
02028     
02029     QString fileName;
02030     if(AbrirDialogo=="si"){
02031         QFileDialog::Options options;
02032         QString selectedFilter="OPA: Open Album File (*.opa)";
02033         fileName= QFileDialog::getOpenFileName(this, tr("Abrir album"), this->directorioCasaUsuario, tr("OPA: Open Album File (*.opa)"), &selectedFilter, options);
02034     }else{
02035         fileName=AbrirDialogo;
02036     }
02037     
02038     if(!fileName.isNull()){
02039     this->activadaCarga=true;
02040     Parser parser(fileName.toStdString(), this);
02041     this->ActivadoGuardado=true;
02042     this->rutaGuardado=fileName;
02043     ticpp::Element* element = parser.root();
02044     ticpp::Element* portadaElement = parser.find("portada", element);
02045     ticpp::Element* desplazamientosPaginasElement = parser.find("DesplazamientosPaginas", element);
02046      std::string sionotrasera = parser.get_attribute("img_tras", element);
02047      std::string sionofrontal = parser.get_attribute("img_fron", element);
02048      std::string sionoTlateral = parser.get_attribute("texto_lat", element);
02049      std::string sionoTfrontal = parser.get_attribute("texto_fron", element);
02050      std::string sionoTtrasero = parser.get_attribute("texto_tras", element);
02051      static ticpp::Element* imagenTraseraPortadaElement;
02052      static ticpp::Element* imagenFrontalPortadaElement;
02053      static ticpp::Element* textoLateralPortadaElement;
02054      static ticpp::Element* textoFrontalPortadaElement;
02055      static ticpp::Element* textoTraseroPortadaElement;
02056      if(sionotrasera=="no"){
02057          this->a->portada->DesactivarImagenTrasera();
02058      }else{
02059          imagenTraseraPortadaElement = parser.find("imagen_tra", portadaElement);
02060          this->a->portada->ActivarImagenTrasera();
02061      }
02062      if(sionofrontal=="no"){
02063          this->a->portada->DesactivarImagenFrontal();
02064      }else{
02065          imagenFrontalPortadaElement = parser.find("imagen_fro", portadaElement);
02066          this->a->portada->ActivarImagenFrontal();
02067      }
02068      if(sionoTlateral=="no"){
02069          this->a->portada->DesactivarTextoLateral();
02070      }else{
02071          textoLateralPortadaElement = parser.find("texto_lat", portadaElement);
02072          this->a->portada->ActivarTextoLateral();
02073      }
02074      if(sionoTfrontal=="no"){
02075          this->a->portada->DesactivarTextoFrontal();
02076      }else{
02077          textoFrontalPortadaElement = parser.find("texto_fro", portadaElement);
02078          this->a->portada->ActivarTextoFrontal();
02079      }
02080      if(sionoTtrasero=="no"){
02081          this->a->portada->DesactivarTextoTrasero();
02082      }else{
02083          textoTraseroPortadaElement = parser.find("texto_tra", portadaElement);
02084          this->a->portada->ActivarTextoTrasero();
02085      }
02086     ticpp::Element* paginasElement = parser.find("paginas", element);
02087     std::string hayPaginasString = parser.get_attribute("paginas", element);
02088     std::vector<ticpp::Element*> DesplazamientosPaginas;
02089  
02090     std::vector<ticpp::Element*> DesplazamientosPortada;
02091     std::vector<ticpp::Element*> vectorPaginas;
02092     parser.find("pagina", vectorPaginas, paginasElement);
02093     
02094     bool hayDesplPaginas = parser.find("Desplazamientos", DesplazamientosPaginas, desplazamientosPaginasElement);
02095    
02096     bool hayDesplPortada = parser.find("DesplazamientoPortada", DesplazamientosPortada, parser.find("Desplazamientos", portadaElement));
02097     
02098     bool hayPaginas;
02099     
02100     
02101     
02102     
02103     this->NuevoAlbum();
02104     
02105     if(hayPaginasString=="si"){
02106         hayPaginas=true;
02107         barra->setMaximum(8+vectorPaginas.size());
02108         this->creadasPaginas=true;
02109          
02110     }else{
02111         hayPaginas=false;
02112         
02113         this->creadasPaginas=false;
02114     }
02115     
02116     //Primero comenzamos con la portada
02117     
02118    
02119     
02120     this->ActivadoGuardado=true;
02121     this->rutaGuardado=fileName;
02122     
02123     this->ActivarSeleccionPlantilla();
02124     
02125     QString plantillaPortadaQ= (parser.get_attribute("plantilla", portadaElement)).c_str();
02126    
02127     
02128     for (int i = ui->selectorPlantilla->topLevelItemCount() - 1; i >= 0; i--){
02129         
02130         
02131         QString plantillaAuxiliar=this->directoriodetrabajo.absolutePath() + "/templates/" + (ui->selectorPlantilla->topLevelItem(i))->text(0)+".xml";
02132         
02133         if(ui->selectorPlantilla->topLevelItem(i)->isSelected()){
02134             ui->selectorPlantilla->topLevelItem(i)->setSelected(false);
02135         }
02136         if(plantillaAuxiliar==plantillaPortadaQ){
02137             ui->selectorPlantilla->topLevelItem(i)->setSelected(true);
02138            
02139         }
02140     }
02141     
02142     
02143     this->visualizarPlantilla();
02144    
02145     if(this->a->portada->hayImagenFrontal()){
02146     QString rutaFotoFrontalPortadaQ= (parser.get_attribute("ruta", imagenFrontalPortadaElement)).c_str();
02147     this->a->portada->LoadFotoFrontalRuta(rutaFotoFrontalPortadaQ);
02148     this->elegidaFrontalPortada=true;
02149     }
02150 
02151     if(this->a->portada->hayImagenTrasera()){
02152     QString rutaFotoTraseraPortadaQ= (parser.get_attribute("ruta", imagenTraseraPortadaElement)).c_str();
02153     this->a->portada->LoadFotoTraseraRuta(rutaFotoTraseraPortadaQ);
02154     this->elegidaTraseraPortada=true;
02155     }
02156    
02157     if(this->a->portada->hayTextoFrontal()){
02158  
02159     QString textoFrontalPortada= QString::fromUtf8((parser.get_attribute("texto", textoFrontalPortadaElement)).c_str());
02160    
02161     if(textoFrontalPortada.contains("#amp")){
02162         int index=0;
02163         QString codificacion= "#amp";
02164         while(textoFrontalPortada.contains(codificacion)){
02165             index=textoFrontalPortada.indexOf(codificacion, 0);
02166             textoFrontalPortada.replace(index,codificacion.size(),"&");
02167         }
02168     }
02169     
02170     if(textoFrontalPortada.contains("#quot")){
02171         int index=0;
02172         QString codificacion= "#quot";
02173         while(textoFrontalPortada.contains(codificacion)){
02174             index=textoFrontalPortada.indexOf(codificacion, 0);
02175             textoFrontalPortada.replace(index,codificacion.size(),"\"");
02176         }
02177     }
02178   
02179     if(textoFrontalPortada.contains("#apos")){
02180         int index=0;
02181         QString codificacion= "#apos";
02182         while(textoFrontalPortada.contains(codificacion)){
02183             index=textoFrontalPortada.indexOf(codificacion, 0);
02184             textoFrontalPortada.replace(index,codificacion.size(),"'");
02185         }
02186     }
02187     if(textoFrontalPortada.contains("#lt")){
02188         int index=0;
02189         QString codificacion= "#lt";
02190         while(textoFrontalPortada.contains(codificacion)){
02191             index=textoFrontalPortada.indexOf(codificacion, 0);
02192             textoFrontalPortada.replace(index,codificacion.size(),"<");
02193         }
02194     }
02195     
02196     if(textoFrontalPortada.contains("#gt")){
02197         int index=0;
02198         QString codificacion= "#gt";
02199         while(textoFrontalPortada.contains(codificacion)){
02200             index=textoFrontalPortada.indexOf(codificacion, 0);
02201             textoFrontalPortada.replace(index,codificacion.size(),">");
02202         }
02203     }
02204 
02205     QFont fuenteFrontalPortada;
02206     QString fuenteFrontalPortadaQ=(parser.get_attribute("fuente", textoFrontalPortadaElement)).c_str();
02207     fuenteFrontalPortada.fromString(fuenteFrontalPortadaQ);
02208     bool negritaFrontalPortada;
02209     if(parser.get_attribute("negrita", textoFrontalPortadaElement)=="si"){
02210         negritaFrontalPortada=true;
02211     }else{
02212         negritaFrontalPortada=false;   
02213     }
02214     bool cursivaFrontalPortada;
02215     if(parser.get_attribute("cursiva", textoFrontalPortadaElement)=="si"){
02216         cursivaFrontalPortada=true;
02217     }else{
02218         cursivaFrontalPortada=false;   
02219     }
02220     bool subrayadoFrontalPortada;
02221     if(parser.get_attribute("subrayado", textoFrontalPortadaElement)=="si"){
02222         subrayadoFrontalPortada=true;
02223     }else{
02224         subrayadoFrontalPortada=false;   
02225     }
02226     
02227     this->a->portada->LoadTextoFrontal(cursivaFrontalPortada, negritaFrontalPortada, subrayadoFrontalPortada, textoFrontalPortada, fuenteFrontalPortada);
02228     // Ahora cargamos los colores del texto
02229     int redTextoFrontalPortada, greenTextoFrontalPortada, blueTextoFrontalPortada;
02230     parser.get_attribute("red", textoFrontalPortadaElement, &redTextoFrontalPortada);
02231    parser.get_attribute("green", textoFrontalPortadaElement, &greenTextoFrontalPortada);
02232     parser.get_attribute("blue", textoFrontalPortadaElement, &blueTextoFrontalPortada);
02233     this->a->portada->LoadColorTextoFrontal(QColor(redTextoFrontalPortada, greenTextoFrontalPortada, blueTextoFrontalPortada));
02234     
02235     }
02236     
02237     if(this->a->portada->hayTextoTrasero()){
02238     QString textoTraseroPortada= QString::fromUtf8((parser.get_attribute("texto", textoTraseroPortadaElement)).c_str());
02239     if(textoTraseroPortada.contains("#amp")){
02240         int index=0;
02241         QString codificacion= "#amp";
02242         while(textoTraseroPortada.contains(codificacion)){
02243             index=textoTraseroPortada.indexOf(codificacion, 0);
02244             textoTraseroPortada.replace(index,codificacion.size(),"&");
02245         }
02246     }
02247    
02248     if(textoTraseroPortada.contains("#quot")){
02249         int index=0;
02250         QString codificacion= "#quot";
02251         while(textoTraseroPortada.contains(codificacion)){
02252             index=textoTraseroPortada.indexOf(codificacion, 0);
02253             textoTraseroPortada.replace(index,codificacion.size(),"\"");
02254         }
02255     }
02256     if(textoTraseroPortada.contains("#apos")){
02257         int index=0;
02258         QString codificacion= "#apos";
02259         while(textoTraseroPortada.contains(codificacion)){
02260             index=textoTraseroPortada.indexOf(codificacion, 0);
02261             textoTraseroPortada.replace(index,codificacion.size(),"'");
02262         }
02263     }
02264    
02265      if(textoTraseroPortada.contains("#lt")){
02266         int index=0;
02267         QString codificacion= "#lt";
02268         while(textoTraseroPortada.contains(codificacion)){
02269             index=textoTraseroPortada.indexOf(codificacion, 0);
02270             textoTraseroPortada.replace(index,codificacion.size(),"<");
02271         }
02272     }
02273      if(textoTraseroPortada.contains("#gt")){
02274         int index=0;
02275         QString codificacion= "#gt";
02276         while(textoTraseroPortada.contains(codificacion)){
02277             index=textoTraseroPortada.indexOf(codificacion, 0);
02278             textoTraseroPortada.replace(index,codificacion.size(),">");
02279         }
02280     }
02281     QFont fuenteTraseraPortada;
02282     QString fuenteTraseraPortadaQ=(parser.get_attribute("fuente", textoTraseroPortadaElement)).c_str();
02283     fuenteTraseraPortada.fromString(fuenteTraseraPortadaQ);
02284     bool negritaTraseraPortada;
02285     if(parser.get_attribute("negrita", textoTraseroPortadaElement)=="si"){
02286         negritaTraseraPortada=true;
02287     }else{
02288         negritaTraseraPortada=false;   
02289     }
02290     bool cursivaTraseraPortada;
02291     if(parser.get_attribute("cursiva", textoTraseroPortadaElement)=="si"){
02292         cursivaTraseraPortada=true;
02293     }else{
02294         cursivaTraseraPortada=false;   
02295     }
02296     bool subrayadoTraseroPortada;
02297     if(parser.get_attribute("subrayado", textoTraseroPortadaElement)=="si"){
02298         subrayadoTraseroPortada=true;
02299     }else{
02300         subrayadoTraseroPortada=false;   
02301     }
02302     this->a->portada->LoadTextoTrasero(cursivaTraseraPortada, negritaTraseraPortada, subrayadoTraseroPortada, textoTraseroPortada, fuenteTraseraPortada);
02303     int redTextoTraseroPortada, greenTextoTraseroPortada, blueTextoTraseroPortada;
02304      parser.get_attribute("red", textoTraseroPortadaElement, &redTextoTraseroPortada);
02305      parser.get_attribute("green", textoTraseroPortadaElement, &greenTextoTraseroPortada);
02306      parser.get_attribute("blue", textoTraseroPortadaElement, &blueTextoTraseroPortada);
02307     this->a->portada->LoadColorTextoTrasera(QColor(redTextoTraseroPortada, greenTextoTraseroPortada, blueTextoTraseroPortada));
02308     
02309     }
02310     if(this->a->portada->hayTextoLateral()){
02311     QString textoLateralPortada= QString::fromUtf8((parser.get_attribute("texto", textoLateralPortadaElement).c_str()));
02312     if(textoLateralPortada.contains("#amp")){
02313         int index=0;
02314         QString codificacion= "#amp";
02315         while(textoLateralPortada.contains(codificacion)){
02316             index=textoLateralPortada.indexOf(codificacion, 0);
02317             textoLateralPortada.replace(index,codificacion.size(),"&");
02318         }
02319     }
02320     if(textoLateralPortada.contains("#quot")){
02321         int index=0;
02322         QString codificacion= "#quot";
02323         while(textoLateralPortada.contains(codificacion)){
02324             index=textoLateralPortada.indexOf(codificacion, 0);
02325             textoLateralPortada.replace(index,codificacion.size(),"\"");
02326         }
02327     }
02328     
02329     if(textoLateralPortada.contains("#apos")){
02330         int index=0;
02331         QString codificacion= "#apos";
02332         while(textoLateralPortada.contains(codificacion)){
02333             index=textoLateralPortada.indexOf(codificacion, 0);
02334             textoLateralPortada.replace(index,codificacion.size(),"'");
02335         }
02336     }
02337     if(textoLateralPortada.contains("#lt")){
02338         int index=0;
02339         QString codificacion= "#lt";
02340         while(textoLateralPortada.contains(codificacion)){
02341             index=textoLateralPortada.indexOf(codificacion, 0);
02342             textoLateralPortada.replace(index,codificacion.size(),"<");
02343         }
02344     }
02345     if(textoLateralPortada.contains("#gt")){
02346         int index=0;
02347         QString codificacion= "#gt";
02348         while(textoLateralPortada.contains(codificacion)){
02349             index=textoLateralPortada.indexOf(codificacion, 0);
02350             textoLateralPortada.replace(index,codificacion.size(),">");
02351         }
02352     }
02353     QFont fuenteLateralPortada;
02354     QString fuenteLateralPortadaQ= (parser.get_attribute("fuente", textoLateralPortadaElement)).c_str();
02355     fuenteLateralPortada.fromString(fuenteLateralPortadaQ);
02356     bool negritaLateralPortada;
02357     if(parser.get_attribute("negrita", textoLateralPortadaElement)=="si"){
02358         negritaLateralPortada=true;
02359     }else{
02360         negritaLateralPortada=false;   
02361     }
02362     bool cursivaLateralPortada;
02363     if(parser.get_attribute("cursiva", textoLateralPortadaElement)=="si"){
02364         cursivaLateralPortada=true;
02365     }else{
02366         cursivaLateralPortada=false;   
02367     }
02368     bool subrayadoLateralPortada;
02369     if(parser.get_attribute("subrayado", textoLateralPortadaElement)=="si"){
02370         subrayadoLateralPortada=true;
02371     }else{
02372         subrayadoLateralPortada=false;   
02373     }
02374     this->a->portada->LoadTextoLateral(cursivaLateralPortada, negritaLateralPortada, subrayadoLateralPortada, textoLateralPortada, fuenteLateralPortada);
02375     //Ahora el color
02376     int blueTextoLateralPortada, redTextoLateralPortada, greenTextoLateralPortada;
02377     parser.get_attribute("red", textoLateralPortadaElement, &redTextoLateralPortada);
02378     parser.get_attribute("green", textoLateralPortadaElement, &greenTextoLateralPortada);
02379     parser.get_attribute("blue", textoLateralPortadaElement, &blueTextoLateralPortada);
02380     this->a->portada->LoadColorTextoLateral(QColor(redTextoLateralPortada, greenTextoLateralPortada, blueTextoLateralPortada));
02381     }
02382     
02383     
02384     QString imagenFondoPortada= (parser.get_attribute("imagen_fondo", portadaElement)).c_str();
02385     bool avisador=false;
02386     if(imagenFondoPortada=="no"){
02387         this->a->portada->ActivarColordefondo();
02388         int redFondoPortada, greenFondoPortada, blueFondoPortada;
02389         parser.get_attribute("red", portadaElement, &redFondoPortada);
02390         parser.get_attribute("green", portadaElement, &greenFondoPortada);
02391         parser.get_attribute("blue", portadaElement, &blueFondoPortada);
02392         this->a->portada->LoadFondo(QColor(redFondoPortada, greenFondoPortada, blueFondoPortada));
02393         this->elegidoFondoPortada=true;
02394         avisador=false;
02395     }else{
02396         this->a->portada->DesactivarColordefondo();
02397         this->a->portada->LoadFondo(imagenFondoPortada);
02398         this->elegidoFondoPortada=true;
02399         avisador=true;
02400     }
02401     
02402     //ahora cargamos las dimensiones, y los aumentos que hay que añadir al guardar
02403     int wPortada, hPortada;
02404     parser.get_attribute("tam_w", portadaElement, &wPortada);
02405     parser.get_attribute("tam_h", portadaElement, &hPortada);
02406     float wPDFPortada, hPDFPortada, wAumentoPortada, hAumentoPortada;
02407     parser.get_attribute("PDF_w", portadaElement, &wPDFPortada);
02408     parser.get_attribute("PDF_h", portadaElement, &hPDFPortada);
02409     parser.get_attribute("aumento_w", portadaElement, &wAumentoPortada);
02410     parser.get_attribute("aumento_h", portadaElement, &hAumentoPortada);
02411     
02412     a->portada->LoadDimensiones(hPortada, wPortada);
02413     this->dimensionHpagina=hPortada;
02414         this->dimensionWpagina=wPortada;
02415    
02416     this->CargarPreview();
02417 
02418     if(parser.get_attribute("orden", element)=="alfabetica"){
02419         this->ordenAlfabetico=true;
02420         
02421     }
02422     if(parser.get_attribute("orden", element)=="fechascreciente"){
02423         this->ordenFechaCreciente=true;
02424     }
02425     if(parser.get_attribute("orden", element)=="fechasdecreciente"){
02426         this->ordenFechaDecreciente=true;
02427     }
02428     if(parser.get_attribute("orden", element)=="ordenpersonalizado"){
02429         this->ordenPersonalizado=true;
02430     }
02431     this->fechaCreacion="";
02432     this->fechaCreacion=QString::fromStdString(parser.get_attribute("fecha", element));
02433     if(parser.get_attribute("asistente", element)=="si"){
02434     this->creadoConAsistente=true;
02435     }else{
02436         this->creadoConAsistente=false;
02437     }
02438     if(parser.get_attribute("textura", portadaElement)=="si"){
02439         this->seleccionadaTextura=true;
02440     }else{
02441         this->seleccionadaTextura=false;
02442     }
02443    
02444     
02445     if(hayDesplPortada){
02446         this->DesactivarParteEdicionPortada=true;
02447         this->a->portada->ActivarEdicion();
02448        
02449         
02450         try{
02451         for(unsigned j=0; j<DesplazamientosPortada.size(); j++){
02452             
02453                 static tipoCoordenadas auxiliar;
02454                 int posX, posY;
02455                 parser.get_attribute("posx", DesplazamientosPortada.at(j), &posX);
02456                 parser.get_attribute("posy", DesplazamientosPortada.at(j), &posY);
02457                 auxiliar.x=posX;
02458                 auxiliar.y=posY;
02459                 this->posicionesItemsPortada.insert(j, auxiliar);
02460          }
02461          }catch(std::exception& e){
02462                 Error *err=new Error(1, e.what(), this);
02463                 err->LanzarDialogo();
02464                 delete err;
02465                 exit(1);
02466          }
02467         int y=0;
02468         try{
02469         for(int j=0; j<this->a->portada->getObjetosPortada().size(); j++){
02470             if(this->a->portada->getObjetosPortada().at(j)->acceptHoverEvents()){
02471                 this->a->portada->setPosicionObjeto(j, this->posicionesItemsPortada[y].x, this->posicionesItemsPortada[y].y);
02472                 ui->visorAlbum->items().at(j)->setPos(this->posicionesItemsPortada[y].x, this->posicionesItemsPortada[y].y);
02473                 if(this->a->portada->getObjetosPortada().at(j)->type()==8){
02474                     this->posicionesItemsPortada[y].tipo=8;
02475                 }
02476                 if(this->a->portada->getObjetosPortada().at(j)->type()==7){
02477                   this->posicionesItemsPortada[y].tipo=7;
02478                 }
02479                 y++;
02480             }
02481         }
02482         
02483             QString texto9P;
02484             texto9P="";
02485             for(int x=0; x <this->posicionesItemsPortada.size(); x++){
02486                 texto9P= texto9P + "               <DesplazamientoPortada posx=\"" + QString::number(this->posicionesItemsPortada[x].x) + "\" posy=\"" + QString::number(this->posicionesItemsPortada[x].y) + "\"/>\n";
02487             }
02488             this->portadaDesplazada= texto9P;
02489         }catch(std::exception& e){
02490                 Error *err=new Error(1, e.what(), this);
02491                 err->LanzarDialogo();
02492                 delete err;
02493                 exit(1);
02494          }
02495        
02496     }
02497     
02498     this->creadaPortada=true;
02499     ui->actionE_xportar->setEnabled(true);
02500     ui->actionExportarJPGBoton->setEnabled(true);
02501     ui->actionExportarPDFBoton->setEnabled(true);
02502     ui->actionI_mprimir->setEnabled(true);
02503     ui->actionImprimirBoton->setEnabled(true);
02504     this->ui->plantillaPreview->setHidden(false);
02505     
02506     //Ya hemos cargado la portada, ahora haremos lo mismo con las páginas
02507     QList<bool> avisadorPagina;
02508     static int ii;
02509     if(hayPaginas){
02510          barra->show();
02511         barra->setValue(1);
02512     for(unsigned contador=0; contador<vectorPaginas.size(); contador++){
02513         
02514         ii=contador;
02515         
02516         barra->setValue(2+ii);
02517         int tamWPagina, tamHPagina;
02518         try{
02519         parser.get_attribute("tam_w", vectorPaginas.at(contador), &tamWPagina);
02520         parser.get_attribute("tam_h", vectorPaginas.at(contador), &tamHPagina);
02521         }catch(std::exception& e){
02522                 Error *err=new Error(1, e.what(), this);
02523                 err->LanzarDialogo();
02524                 delete err;
02525                 exit(1);
02526          }
02527         
02528         Pagina *pag;
02529         QGraphicsScene *escena;
02530         try{
02531         pag= new Pagina(0,0,this);
02532         pag->versionReducida->setFixedSize(this->controlador->getWVisorAlbum(), (this->controlador->getHVisorAlbum()));
02533         escena= new QGraphicsScene(0, 0, this->controlador->getWVisorAlbum(), (this->controlador->getHVisorAlbum()));
02534         }catch(std::exception& e){
02535                 Error *err=new Error(2, e.what(), this);
02536                 err->LanzarDialogo();
02537                 delete err;
02538                 exit(1);
02539         }
02540         pag->versionReducida->setScene(escena);
02541         this->dimensionHpagina= tamHPagina;
02542         this->dimensionWpagina= tamWPagina;
02543         pag->LoadDimensiones(tamHPagina, tamWPagina);
02544         
02545         barra->setValue(3+ii);
02546         QString plantillaPagina, imagenFondoPagina;
02547         try{
02548         plantillaPagina=parser.get_attribute("plantilla", vectorPaginas.at(contador)).c_str();
02549         imagenFondoPagina = parser.get_attribute("imagen_fondo", vectorPaginas.at(contador)).c_str();
02550         }catch(std::exception& e){
02551                 Error *err=new Error(1, e.what(), this);
02552                 err->LanzarDialogo();
02553                 delete err;
02554                 exit(1);
02555         }
02556         pag->LoadRutaPlantilla(plantillaPagina);
02557         ticpp::Element *elemento;
02558         Parser parseador(plantillaPagina.toStdString(), this);
02559         elemento=parseador.root();
02560         std::string mascara=parseador.get_attribute("mascara", elemento);
02561         if(mascara!="no"){
02562             QString ruta=QString::fromStdString(mascara);
02563             pag->activarMascara(ruta);
02564         }
02565         if(imagenFondoPagina=="no"){
02566             avisadorPagina.push_back(false);
02567             pag->ActivarColordefondo();
02568             int redFondoPagina, greenFondoPagina, blueFondoPagina;
02569             try{
02570             parser.get_attribute("red", vectorPaginas.at(contador), &redFondoPagina);
02571             parser.get_attribute("green", vectorPaginas.at(contador), &greenFondoPagina);
02572             parser.get_attribute("blue", vectorPaginas.at(contador), &blueFondoPagina);
02573             }catch(std::exception& e){
02574                 Error *err=new Error(2, e.what(), this);
02575                 err->LanzarDialogo();
02576                 delete err;
02577                 exit(1);
02578             }
02579             pag->LoadFondoColor(QColor(redFondoPagina, greenFondoPagina, blueFondoPagina));
02580             if(!pag->activadaMascara()){
02581             QBrush *wall= new QBrush(QColor(redFondoPagina, greenFondoPagina, blueFondoPagina));
02582             
02583             pag->versionReducida->scene()->setBackgroundBrush(*wall);
02584             delete wall;
02585             }
02586            
02587         }else{
02588             
02589             avisadorPagina.push_back(true);
02590             pag->DesactivarColordefondo();
02591             pag->LoadFondo(imagenFondoPagina);
02592             if(!pag->activadaMascara()){
02593             QPixmap *g;
02594             try{
02595             g=new QPixmap(imagenFondoPagina);
02596             if(g->isNull()){
02597                 throw std::ios_base::failure(tr("No pudo abrirse la imagen de fondo de una de las paginas.").toStdString());
02598             }
02599             }catch(std::exception& e){
02600                 Error *err=new Error(4, e.what(), this);
02601                 err->LanzarDialogo();
02602                 delete err;
02603                 exit(1);
02604             }
02605             QGraphicsPixmapItem *item=new QGraphicsPixmapItem(g->scaled((this->controlador->getWVisorAlbum())-2, (this->controlador->getHVisorAlbum())-2, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
02606             delete g;
02607             item->setPos(0, 0);
02608             item->setAcceptHoverEvents(false);
02609             pag->versionReducida->scene()->addItem(item);
02610             }
02611         }
02612         barra->setValue(4+ii);
02613         QString editadaPagina= parser.get_attribute("editada", vectorPaginas.at(contador)).c_str();
02614         Parser parserDos(plantillaPagina.toStdString(), this);
02615         ticpp::Element* elementDos = parserDos.root();
02616         int textoPagina;
02617         
02618         
02619         
02620         
02621         std::vector<ticpp::Element*> vectorFotosPagina;
02622         std::vector<ticpp::Element*> vectorMarcosPagina;
02623         ticpp::Element *fotosPaginaElement;
02624         ticpp::Element *marcosPaginaElement;
02625         bool hayMarcos=false;
02626         try{
02627         fotosPaginaElement= parser.find("fotos", vectorPaginas.at(contador));
02628         
02629         parser.find("foto", vectorFotosPagina, fotosPaginaElement);
02630 
02631         if(parser.get_attribute("marcos", vectorPaginas.at(contador))=="si"){
02632                 marcosPaginaElement=parser.find("marcos", vectorPaginas.at(contador));
02633                 parser.find("marco", vectorMarcosPagina, marcosPaginaElement);
02634                 hayMarcos=true;
02635                 
02636         
02637         }else{
02638             hayMarcos=false;
02639         }
02640        
02641         
02642         }catch(std::exception& e){
02643                 Error *err=new Error(1, e.what(), this);
02644                 err->LanzarDialogo();
02645                 delete err;
02646                 exit(1);
02647         }
02648         for(unsigned contadorFotos=0; contadorFotos < vectorFotosPagina.size(); contadorFotos++){
02649             QString rutaFotoPagina;
02650             int wFotoPagina, hFotoPagina, xFotoPagina, yFotoPagina;
02651             try{
02652             rutaFotoPagina= QString::fromAscii(parser.get_attribute("ruta", vectorFotosPagina.at(contadorFotos)).c_str());
02653             std::vector<ticpp::Element*> areasImagenPagina;
02654             std::string pos;
02655             parserDos.find("area_imagen", areasImagenPagina, parserDos.find("areas_imagen", elementDos));
02656             parserDos.get_attribute("w", areasImagenPagina.at(contadorFotos), &wFotoPagina);
02657             parserDos.get_attribute("h", areasImagenPagina.at(contadorFotos), &hFotoPagina);
02658             parserDos.get_attribute("pos_x", areasImagenPagina.at(contadorFotos), &xFotoPagina);
02659             parserDos.get_attribute("pos_y", areasImagenPagina.at(contadorFotos), &yFotoPagina);
02660             pos=parserDos.get_attribute("pos", areasImagenPagina.at(contadorFotos));
02661             pag->LoadFoto(rutaFotoPagina, wFotoPagina*(this->controlador->getWVisorAlbum())/462, hFotoPagina*(this->controlador->getHVisorAlbum())/321, xFotoPagina*(this->controlador->getWVisorAlbum())/462, yFotoPagina*(this->controlador->getHVisorAlbum())/321, pos);
02662             }catch(std::exception& e){
02663                 Error *err=new Error(1, e.what(), this);
02664                 err->LanzarDialogo();
02665                 delete err;
02666                 exit(1);
02667             }
02668             QPixmap *h;
02669             try{
02670             h=new QPixmap(rutaFotoPagina.toAscii());
02671             if(h->isNull()){
02672                 throw std::ios_base::failure(tr("No pudo abrirse una imagen de una de las páginas.").toStdString());
02673             }
02674             }catch(std::exception& e){
02675                 Error *err=new Error(4, e.what(), this);
02676                 err->LanzarDialogo();
02677                 delete err;
02678                 exit(1);
02679             }
02680             QGraphicsPixmapItem *item2;
02681             if(h->width() > h->height()){
02682                 if(pag->getImagenPosVertical(contadorFotos)){
02683                     item2=new QGraphicsPixmapItem(h->scaled(hFotoPagina*(this->controlador->getHVisorAlbum())/321, wFotoPagina*(this->controlador->getWVisorAlbum())/462, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
02684                     item2->setPos((xFotoPagina*(this->controlador->getWVisorAlbum())/462) + (wFotoPagina*(this->controlador->getWVisorAlbum())/462), yFotoPagina*(this->controlador->getHVisorAlbum())/321);
02685                     item2->setRotation(90);
02686                     item2->setAcceptTouchEvents(true);
02687                 }else{
02688                     item2=new QGraphicsPixmapItem(h->scaled(wFotoPagina*(this->controlador->getWVisorAlbum())/462, hFotoPagina*(this->controlador->getHVisorAlbum())/321, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
02689                     item2->setPos(xFotoPagina*(this->controlador->getWVisorAlbum())/462, yFotoPagina*(this->controlador->getHVisorAlbum())/321);
02690             
02691                 }
02692             }else{
02693                  if(!pag->getImagenPosVertical(contadorFotos)){
02694                     item2=new QGraphicsPixmapItem(h->scaled(hFotoPagina*(this->controlador->getHVisorAlbum())/321, wFotoPagina*(this->controlador->getWVisorAlbum())/462, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
02695                     item2->setPos((xFotoPagina*(this->controlador->getWVisorAlbum())/462) + (wFotoPagina*(this->controlador->getWVisorAlbum())/462), yFotoPagina*(this->controlador->getHVisorAlbum())/321);
02696                      item2->setRotation(90);
02697                      item2->setAcceptTouchEvents(true);
02698                  }else{
02699                     item2=new QGraphicsPixmapItem(h->scaled(wFotoPagina*(this->controlador->getWVisorAlbum())/462, hFotoPagina*(this->controlador->getHVisorAlbum())/321, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
02700                     item2->setPos(xFotoPagina*(this->controlador->getWVisorAlbum())/462, yFotoPagina*(this->controlador->getHVisorAlbum())/321);
02701              
02702                  }
02703             }
02704             delete h;
02705             if(!pag->activadaMascara()){
02706             
02707             item2->setAcceptHoverEvents(true);
02708             }
02709             pag->versionReducida->scene()->addItem(item2);  
02710         }
02711         
02712         if(pag->activadaMascara() && pag->ColordeFondo()){
02713             
02714                
02715                 
02716                 QString path= this->directoriodetrabajo.absolutePath() + "/templates/pages/" + pag->getMascara(); 
02717                 QImage *img=new QImage(path);
02718                 QRgb color=pag->GetFondoColor().rgb();
02719                 for(int a=0; a < img->width(); a++){
02720                     for(int b=0; b < img->height(); b++){
02721                         if(img->pixel(a,b)!=0){
02722                         img->setPixel(a,b,color);
02723                         }
02724                     }
02725                 }
02726                 QPixmap *g=new QPixmap();
02727                 g->convertFromImage(*img, Qt::AutoColor);
02728                 
02729                 
02730                 QGraphicsPixmapItem *item=new QGraphicsPixmapItem(g->scaled((this->controlador->getWVisorAlbum())-2, (this->controlador->getHVisorAlbum())-2, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
02731                 item->setPos(0, 0);
02732                 item->setAcceptHoverEvents(false);
02733                 pag->versionReducida->scene()->addItem(item);
02734                 delete img;
02735                 delete g;
02736         }
02737         
02738         if(pag->activadaMascara() && !pag->ColordeFondo()){
02739             
02740                 QString path= this->directoriodetrabajo.absolutePath() + "/templates/pages/" + pag->getMascara(); 
02741                 QImage *img=new QImage(path);
02742                 QImage *img2=new QImage(pag->GetFondoImagen());
02743                 QImage img22=img2->scaled(img->width(), img->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
02744                 
02745                 
02746                 for(int a=0; a < img->width(); a++){
02747                     for(int b=0; b < img->height(); b++){
02748                         if(img->pixel(a,b)!=0){
02749                         img->setPixel(a,b,img22.pixel(a,b));
02750                        
02751                         }
02752                     }
02753                 }
02754                 QPixmap *g=new QPixmap();
02755                 
02756                 g->convertFromImage(*img, Qt::AutoColor);
02757                 QGraphicsPixmapItem *item=new QGraphicsPixmapItem(g->scaled((this->controlador->getWVisorAlbum())-2, (this->controlador->getHVisorAlbum())-2, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
02758                 item->setPos(0, 0);
02759                 item->setAcceptHoverEvents(false);
02760                 pag->versionReducida->scene()->addItem(item);
02761                 delete img;
02762                 delete img2;
02763                 delete g;
02764         }
02765         
02766         
02767         
02768         
02769         parserDos.get_attribute("texto", elementDos, &textoPagina);
02770            try{     
02771            if(textoPagina!=0){
02772                 std::vector<ticpp::Element*> vectorTextosPagina;
02773                 
02774               
02775                 parser.find("texto", vectorTextosPagina, parser.find("textos", vectorPaginas.at(contador)));
02776                 
02777             for(unsigned contadorTextos=0; contadorTextos < vectorTextosPagina.size(); contadorTextos++){
02778                 
02779                 
02780                 QString contenidoTextoPagina= QString::fromUtf8(parser.get_attribute("contenido", vectorTextosPagina.at(contadorTextos)).c_str());
02781                 if(contenidoTextoPagina.contains("#amp")){
02782                         int index=0;
02783                         QString codificacion= "#amp";
02784                         while(contenidoTextoPagina.contains(codificacion)){
02785                                 index=contenidoTextoPagina.indexOf(codificacion, 0);
02786                                 contenidoTextoPagina.replace(index,codificacion.size(),"&");
02787                         }
02788                 }
02789                 if(contenidoTextoPagina.contains("#quot")){
02790                         int index=0;
02791                         QString codificacion= "#quot";
02792                         while(contenidoTextoPagina.contains(codificacion)){
02793                                 index=contenidoTextoPagina.indexOf(codificacion, 0);
02794                                 contenidoTextoPagina.replace(index,codificacion.size(),"\"");
02795                         }
02796                 }
02797                 if(contenidoTextoPagina.contains("#apos")){
02798                         int index=0;
02799                         QString codificacion= "#apos";
02800                         while(contenidoTextoPagina.contains(codificacion)){
02801                                 index=contenidoTextoPagina.indexOf(codificacion, 0);
02802                                 contenidoTextoPagina.replace(index,codificacion.size(),"'");
02803                         }
02804                 }
02805                 if(contenidoTextoPagina.contains("#lt")){
02806                         int index=0;
02807                         QString codificacion= "#lt";
02808                         while(contenidoTextoPagina.contains(codificacion)){
02809                                 index=contenidoTextoPagina.indexOf(codificacion, 0);
02810                                 contenidoTextoPagina.replace(index,codificacion.size(),"<");
02811                         }
02812                 }
02813                 if(contenidoTextoPagina.contains("#gt")){
02814                         int index=0;
02815                         QString codificacion= "#gt";
02816                         while(contenidoTextoPagina.contains(codificacion)){
02817                                 index=contenidoTextoPagina.indexOf(codificacion, 0);
02818                                 contenidoTextoPagina.replace(index,codificacion.size(),">");
02819                         }
02820                 }
02821                 QGraphicsTextItem *TF=new QGraphicsTextItem(contenidoTextoPagina);
02822                 
02823                 QFont fuenteTextoPagina;
02824                 QString fuenteTextoPaginaQ= QString::fromUtf8(parser.get_attribute("fuente", vectorTextosPagina.at(contadorTextos)).c_str());
02825                 fuenteTextoPagina.fromString(fuenteTextoPaginaQ);
02826                 
02827                 bool negritaTextoPagina, subrayadoTextoPagina, cursivaTextoPagina, centradoTextoPagina, verticalTextoPagina;
02828                 
02829                 
02830                 if(parser.get_attribute("negrita", vectorTextosPagina.at(contadorTextos))=="si"){
02831                     negritaTextoPagina=true;
02832                     fuenteTextoPagina.setBold(true);
02833                 }else{
02834                     fuenteTextoPagina.setBold(false);
02835                     negritaTextoPagina=false;
02836                 }
02837                 
02838                 if(parser.get_attribute("subrayado", vectorTextosPagina.at(contadorTextos))=="si"){
02839                     subrayadoTextoPagina=true;
02840                     fuenteTextoPagina.setUnderline(true);
02841                     
02842                 }else{
02843                     fuenteTextoPagina.setUnderline(false);
02844                     subrayadoTextoPagina=false;
02845                 }
02846                 
02847                 if(parser.get_attribute("cursiva", vectorTextosPagina.at(contadorTextos))=="si"){
02848                     cursivaTextoPagina=true;
02849                     fuenteTextoPagina.setItalic(true);
02850                 }else{
02851                     cursivaTextoPagina=false;
02852                     fuenteTextoPagina.setItalic(false);
02853                 }
02854                 int ptTextoPagina;
02855                 std::vector<ticpp::Element*> areasTextoPagina;
02856                 parserDos.find("area_texto", areasTextoPagina, parserDos.find("areas_texto", elementDos));
02857                 parserDos.get_attribute("pt", areasTextoPagina.at(contadorTextos), &ptTextoPagina);
02858                 
02859                 
02860                 
02861                 int redTextoPagina, greenTextoPagina, blueTextoPagina;
02862                 parser.get_attribute("red", vectorTextosPagina.at(contadorTextos), &redTextoPagina);
02863                 parser.get_attribute("green", vectorTextosPagina.at(contadorTextos), &greenTextoPagina);
02864                 parser.get_attribute("blue", vectorTextosPagina.at(contadorTextos), &blueTextoPagina);
02865                 pag->LoadTexto(cursivaTextoPagina, negritaTextoPagina, subrayadoTextoPagina, contenidoTextoPagina, fuenteTextoPagina, QColor(redTextoPagina, greenTextoPagina, blueTextoPagina));
02866                 pag->LoadNumTextos(textoPagina);
02867                 
02868                 int wTextoPagina, posXTextoPagina, posYTextoPagina;
02869                 parserDos.get_attribute("w", areasTextoPagina.at(contadorTextos), &wTextoPagina);
02870                 parserDos.get_attribute("pos_x", areasTextoPagina.at(contadorTextos), &posXTextoPagina);
02871                 parserDos.get_attribute("pos_y", areasTextoPagina.at(contadorTextos), &posYTextoPagina);
02872                 if(parserDos.get_attribute("centrado", areasTextoPagina.at(contadorTextos))=="si"){
02873                     centradoTextoPagina=true;
02874                     QTextCursor cursor = TF->textCursor();
02875                     QTextBlockFormat bfmt = cursor.blockFormat();
02876                     bfmt.setAlignment(Qt::AlignCenter);
02877                     cursor.setBlockFormat(bfmt);
02878                     TF->setTextCursor(cursor);
02879                 }else{
02880                     centradoTextoPagina=false;
02881                 }
02882                 
02883                 if(parserDos.get_attribute("orientacion", areasTextoPagina.at(contadorTextos))=="vertical"){
02884                     verticalTextoPagina=true;
02885                     TF->setRotation(90);
02886                     
02887                 }else{
02888                     verticalTextoPagina=false;
02889                 }
02890                 pag->LoadTextoResto(contadorTextos, wTextoPagina*(this->controlador->getWVisorAlbum())/462, ptTextoPagina*(this->controlador->getWVisorAlbum())/462, posXTextoPagina*(this->controlador->getWVisorAlbum())/462, posYTextoPagina*(this->controlador->getHVisorAlbum())/321, parserDos.get_attribute("orientacion", areasTextoPagina.at(contadorTextos)), parserDos.get_attribute("centrado", areasTextoPagina.at(contadorTextos)));
02891                
02892                 QFont *fuenteFinalTexto=new QFont(pag->GetVectorTextos().at(contadorTextos).fuente.family(), pag->GetVectorTextos().at(contadorTextos).puntos, 50, pag->GetVectorTextos().at(contadorTextos).cursiva);
02893                 TF->setDefaultTextColor(QColor(redTextoPagina, greenTextoPagina, blueTextoPagina));
02894                 TF->setFont(*fuenteFinalTexto);
02895                 delete fuenteFinalTexto;
02896                 TF->setTextWidth(pag->GetVectorTextos().at(contadorTextos).w);
02897                 
02898                 TF->setPos(pag->GetVectorTextos().at(contadorTextos).pos_x, pag->GetVectorTextos().at(contadorTextos).pos_y);
02899                 TF->setAcceptHoverEvents(true);
02900                 pag->versionReducida->scene()->addItem(TF);
02901                
02902             }
02903         }
02904     }catch(std::exception& e){
02905         Error *err=new Error(1, e.what(), this);
02906         err->LanzarDialogo();
02907         delete err;
02908         exit(1);
02909     }
02910       
02911         if(hayMarcos){
02912         QList<marco> listaMarcos;
02913         for(unsigned contadorMarcos=0; contadorMarcos < vectorMarcosPagina.size(); contadorMarcos++){
02914             QString rutaMarco= QString::fromAscii(parser.get_attribute("nombre", vectorMarcosPagina.at(contadorMarcos)).c_str());
02915             QString tipo= QString::fromAscii(parser.get_attribute("tipo", vectorMarcosPagina.at(contadorMarcos)).c_str());
02916             int id;
02917             parser.get_attribute("id", vectorMarcosPagina.at(contadorMarcos), &id);
02918             marco m;
02919             m.nombre=new QString(rutaMarco);
02920             m.tipo=new QString(tipo);
02921             m.idFoto=id;
02922             listaMarcos.push_back(m);
02923         }
02924         pag->SetMarcos(listaMarcos);
02925         //Ahora introducimos los marcos, si es que los hay
02926         if(pag->ContieneMarcos()){
02927             for(int contadorMarcos2=0; contadorMarcos2 < pag->getMarcos().size(); contadorMarcos2++){
02928                 if(!pag->getMarcos().at(contadorMarcos2).nombre->isEmpty()){
02929                     
02930                 QPixmap *h;
02931                 
02932                 QString marcoName=this->directoriodetrabajo.absolutePath()+"/frames/";
02933                 marcoName.append(pag->getMarcos().at(contadorMarcos2).nombre);
02934                 h=new QPixmap(marcoName);
02935                 
02936             try{
02937             if(h->isNull()){
02938                 throw std::ios::failure(tr("No se pudo abrir una imagen de una de las páginas.").toStdString());
02939             }
02940             }catch(std::exception& e){
02941                         Error *err=new Error(4, e.what(), this);
02942                         err->LanzarDialogo();
02943                         delete err;
02944                         exit(1);
02945                     }
02946             QGraphicsPixmapItem *item2;
02947             int numeroFoto=pag->getMarcos().at(contadorMarcos2).idFoto;
02948            
02949                     item2=new QGraphicsPixmapItem(h->scaled(pag->GetVectorImagenes().at(numeroFoto-1).w, pag->GetVectorImagenes().at(numeroFoto-1).h, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
02950                     item2->setPos(pag->GetVectorImagenes().at(numeroFoto-1).pos_x, pag->GetVectorImagenes().at(numeroFoto-1).pos_y);
02951                     delete h;
02952                     item2->setAcceptHoverEvents(true);
02953                     pag->versionReducida->scene()->addItem(item2);
02954                      }}
02955         }
02956         }  
02957         barra->setValue(5+ii);
02958         
02959         barra->setValue(6+ii);
02960         if(editadaPagina=="si"){
02961             pag->SetPaginaEditada();
02962             
02963         }
02964         ui->pushPagAnterior->show();
02965         ui->pushPagSiguiente->show();
02966         ui->pushPagSiguiente->setEnabled(true);
02967         ui->action_Avanzar_P_gina->setEnabled(true);
02968         ui->actionAvanzarBoton->setEnabled(true);
02969         ui->pushPagAnterior->setEnabled(true);
02970         ui->action_Retroceder_p_gina->setEnabled(true);
02971         ui->actionRetrocederBoton->setEnabled(true);
02972         if(this->IndicePaginas==0){
02973             ui->pushPagAnterior->setDisabled(true);
02974             ui->action_Retroceder_p_gina->setDisabled(true);
02975             ui->actionRetrocederBoton->setDisabled(true);
02976         }
02977         
02978         pag->setObjetosPagina(pag->versionReducida->items());
02979         
02980         this->a->paginas.push_back(pag);
02981         
02982     }
02983     }
02984     
02985     if(hayPaginas){
02986         
02987     if(hayDesplPaginas){
02988         try{
02989         
02990         for(unsigned ultimo=0; ultimo < this->a->paginas.size(); ultimo++){
02991         tipoPosicionesItems aux;
02992         this->posicionesItemsPaginas.insert(ultimo, aux);
02993         this->paginasDesplazadas.insert(ultimo, "");
02994     }
02995         this->DesactivarParteEdicion=true;
02996         for(unsigned a=0; a<DesplazamientosPaginas.size(); a++){
02997             
02998             int numPagina;
02999             parser.get_attribute("pagina", DesplazamientosPaginas.at(a), &numPagina);
03000             
03001             std::vector<ticpp::Element*> desplazamientos;
03002             parser.find("Desplazamiento", desplazamientos, DesplazamientosPaginas.at(a));
03003             
03004             tipoPosicionesItems auxItems;
03005            
03006             for(unsigned b=0; b < desplazamientos.size(); b++){
03007                 int posX, posY;
03008                 static tipoCoordenadas aux;
03009                 parser.get_attribute("posx", desplazamientos.at(b), &posX);
03010                 parser.get_attribute("posy", desplazamientos.at(b), &posY);
03011                 aux.x=posX;
03012                 aux.y=posY;
03013                 auxItems.insert(b, aux);
03014                        
03015             }       
03016             this->posicionesItemsPaginas.replace(numPagina, auxItems);            
03017             this->hayDesplazamientoPagina=true;
03018             QString texto9;
03019             texto9="          <Desplazamientos pagina=\"" + QString::number(numPagina) + "\">\n";
03020             for(int h=0; h <this->posicionesItemsPaginas[numPagina].size(); h++){
03021                 texto9= texto9 + "               <Desplazamiento posx=\"" + QString::number(this->posicionesItemsPaginas[numPagina].at(h).x) + "\" posy=\"" + QString::number(this->posicionesItemsPaginas[numPagina].at(h).y) + "\"/>\n";
03022             }
03023             texto9= texto9 + "          </Desplazamientos>\n";
03024                
03025             this->paginasDesplazadas.replace(numPagina, texto9);
03026             
03027             int x=0;
03028             for(int z=0; z<this->a->paginas[numPagina]->GetObjetosPagina().size(); z++){
03029                 if(this->a->paginas[numPagina]->GetObjetosPagina().at(z)->acceptHoverEvents()){
03030                     this->a->paginas[numPagina]->setPosicionObjeto(z, this->posicionesItemsPaginas[numPagina].at(x).x, this->posicionesItemsPaginas[numPagina].at(x).y);
03031                     x++;
03032                 }
03033             }
03034             
03035         }
03036      }catch(std::exception& e){
03037                 Error *err=new Error(1, e.what(), this);
03038                 err->LanzarDialogo();
03039                 delete err;
03040                 exit(1);
03041     }   
03042     }else{
03043         for(unsigned ultimo=0; ultimo < this->a->paginas.size(); ultimo++){
03044         tipoPosicionesItems aux;
03045         this->posicionesItemsPaginas.insert(ultimo, aux);
03046         this->paginasDesplazadas.insert(ultimo, "");
03047     }
03048     }
03049     
03050     if(this->ui->actionLineaSeparacionPaginas->isChecked()){
03051         for(unsigned contadorPaginasLinea=0; contadorPaginasLinea < this->a->paginas.size(); contadorPaginasLinea++){
03052                 a->paginas[contadorPaginasLinea]->versionReducida->scene()->addLine(231*(this->controlador->getWVisorAlbum())/462, 2, 231*(this->controlador->getWVisorAlbum())/462, 318*(this->controlador->getHVisorAlbum())/321)->setAcceptHoverEvents(false);
03053                 
03054         }
03055     } 
03056     }
03057     
03058     
03059     barra->setValue(7+ii);
03060     
03061     barra->setValue(8+ii);
03062     barra->hide();
03063     }else{
03064         ui->plantillaPreview->setHidden(false);
03065     }
03066     delete barra;
03067     this->activadaCarga=false;
03068     this->seHaCargado=true;
03069     this->preguntaSeguridad=true;
03070   
03071 }   
03072 
03073 void FormPrincipal::closeEvent(QCloseEvent *evento)
03074 {
03075   QMessageBox::StandardButton reply;
03076     reply = QMessageBox::question(this, tr("Advertencia"), tr("¿Esta seguro de que desea salir de oPenAlbum?"), QMessageBox::Yes | QMessageBox::No);
03077     if (reply == QMessageBox::Yes){
03078     this->NuevoAlbum();
03079     evento->accept();
03080     this->close();
03081     }else{
03082         evento->ignore();
03083     }   
03084 }
03085 
03086 
03087 void FormPrincipal::GuardarComo(){
03088     QProgressBar *barra= new QProgressBar(this);
03089     static int ii;
03090     int wAux=this->ui->statusBar->width();
03091     barra->setFixedWidth((294*this->controlador->getWPrincipal())/1014);
03092     barra->setFixedHeight((23*this->controlador->getHPrincipal())/705);
03093     this->ui->statusBar->setMaximumWidth(((986-270)*this->controlador->getWPrincipal())/1014);
03094       
03095     barra->move((this->controlador->getWPrincipal()*720)/1014, (this->controlador->getHPrincipal()*683)/705);
03096     
03097     
03098     
03099     barra->setMinimum(0);
03100     barra->setMaximum(8+this->a->paginas.size());
03101     QString texto, imagenFondoPortada, redPortada, greenPortada, bluePortada;
03102          //Abrimos el diálogo
03103          QFileDialog::Options options;
03104          QString selectedFilter="OPA: Open Album File (*.opa)";
03105          QString fileName = QFileDialog::getSaveFileName(this,tr("Guardar album"), this->directorioCasaUsuario, tr("OPA: Open Album File (*.opa)"), &selectedFilter, options);
03106           this->ui->statusBar->setMaximumWidth(986-270);
03107           bool cancelado=false;
03108           if(fileName.isEmpty()){
03109              cancelado=true;
03110          }else{
03111          this->rutaGuardado= fileName;
03112          this->ActivadoGuardado=true;
03113          }
03114          QString fileNm;
03115      if(!this->rutaGuardado.contains(".opa")){
03116        fileNm=this->rutaGuardado + ".opa"; 
03117        this->rutaGuardado= this->rutaGuardado + ".opa";
03118      }else{
03119        fileNm=this->rutaGuardado;  
03120      }
03121         QFile existencia;
03122      if(existencia.exists(fileNm)){
03123          this->EliminarAlbum(fileNm, false);
03124      }
03125           
03126          if(!cancelado){
03127      barra->show();
03128      barra->setValue(1);
03129     QString fileNm;
03130      if(!this->rutaGuardado.contains(".opa")){
03131        fileNm=this->rutaGuardado + ".opa"; 
03132        this->rutaGuardado= this->rutaGuardado + ".opa";
03133      }else{
03134        fileNm=this->rutaGuardado;  
03135      }
03136       
03137      
03138      barra->setValue(2);
03139      
03140      QFile file(fileNm.toStdString().c_str());
03141      
03142      try{
03143      
03144      file.open(QIODevice::WriteOnly | QIODevice::Truncate);         
03145      
03146      }catch(std::exception& e){
03147         Error *err=new Error(5, e.what(), this);
03148         err->LanzarDialogo();
03149         delete err;
03150         exit(1);
03151     }
03152      QTextStream textStream(&file);
03153      bool ColorFondo=this->a->portada->ColordeFondo();
03154      QString subrayadoFrontal, subrayadoTrasero, subrayadoLateral, negritaFrontal, negritaLateral, negritaTrasero, cursivaFrontal, cursivaLateral, cursivaTrasero;
03155      if(this->a->portada->SubrayadoTextoFrontal()){
03156          subrayadoFrontal="si";
03157      }else{
03158          subrayadoFrontal="no";
03159      }
03160      
03161      if(this->a->portada->SubrayadoTextoLateral()){
03162          subrayadoLateral="si";
03163      }else{
03164          subrayadoLateral="no";
03165      }
03166      
03167      if(this->a->portada->SubrayadoTextoTrasera()){
03168          subrayadoTrasero="si";
03169      }else{
03170          subrayadoTrasero="no";
03171      }
03172      barra->setValue(3);
03173      if(this->a->portada->NegritaTextoFrontal()){
03174          negritaFrontal="si";
03175      }else{
03176          negritaFrontal="no";
03177      }
03178      
03179      if(this->a->portada->NegritaTextoLateral()){
03180          negritaLateral="si";
03181      }else{
03182          negritaLateral="no";
03183      }
03184      
03185      if(this->a->portada->NegritaTextoTrasera()){
03186          negritaTrasero="si";
03187      }else{
03188          negritaTrasero="no";
03189      }
03190      barra->setValue(4);
03191      if(this->a->portada->CursivaTextoFrontal()){
03192          cursivaFrontal="si";
03193      }else{
03194          cursivaFrontal="no";
03195      }
03196      
03197      
03198      if(this->a->portada->CursivaTextoLateral()){
03199          cursivaLateral="si";
03200      }else{
03201          cursivaLateral="no";
03202      }
03203      
03204      
03205      if(this->a->portada->CursivaTextoTrasera()){
03206          cursivaTrasero="si";
03207      }else{
03208          cursivaTrasero="no";
03209      }
03210      
03211      
03212      if(ColorFondo){
03213          
03214          redPortada=QString::number(this->a->portada->FondoClr().red());
03215          greenPortada=QString::number(this->a->portada->FondoClr().green());
03216          bluePortada=QString::number(this->a->portada->FondoClr().blue());
03217      }else{
03218          
03219          
03220          redPortada="0";
03221          greenPortada="0";
03222          bluePortada="0";
03223      }
03224      barra->setValue(5);
03225      QString siOno="";
03226      if(this->creadasPaginas){
03227          siOno="si";
03228      }else{
03229          siOno="no";
03230          
03231      }
03232      QString nombreSerieFondoPortada="";
03233      QString separador= "_";
03234      if(!ColorFondo){
03235          QPixmap *pixFondo;
03236          try{
03237                 pixFondo= new QPixmap(this->a->portada->FondoImg());
03238                 if(pixFondo->isNull()){
03239                     throw std::ios_base::failure(tr("No pudo abrirse la imagen de fondo de la portada.").toStdString());
03240                 }
03241          }catch(std::exception& e){
03242                 Error *err=new Error(4, e.what(), this);
03243                 err->LanzarDialogo();
03244                 delete err;
03245                 exit(1);
03246         }
03247          nombreSerieFondoPortada= nombreSerieFondoPortada + this->directorioCasaUsuario +"/.openAlbum/" + this->rutaGuardado.section("/", -1) + separador + "fondo" + separador + "portada.JPG";
03248          try{
03249                 if(!pixFondo->save(nombreSerieFondoPortada)){
03250                 //excepción
03251                         throw std::ios_base::failure(tr("No se pudo guardar la imagen").toStdString());
03252                 }
03253          }catch(std::exception& e){
03254                 Error *err=new Error(5, e.what(), this);
03255                 err->LanzarDialogo();
03256                 delete err;
03257                 exit(1);
03258          }
03259          delete pixFondo;
03260      }else{
03261          nombreSerieFondoPortada="no";
03262      }
03263      QPixmap *pixFron, *pixTras;
03264      try{
03265         pixFron= new QPixmap(this->a->portada->RutaFotoFrontal());
03266         pixTras= new QPixmap(this->a->portada->RutaFotoTrasera());
03267         if(pixFron->isNull()){
03268            throw std::ios_base::failure(tr("No pudo abrirse la imagen frontal de la portada.").toStdString()); 
03269         }
03270         if(pixTras->isNull()){
03271             throw std::ios_base::failure(tr("No pudo abrirse la imagen trasera de la portada.").toStdString());
03272         }
03273      }catch(std::exception& e){
03274         Error *err=new Error(4, e.what(), this);
03275         err->LanzarDialogo();
03276         delete err;
03277         exit(1);
03278     }
03279      QString nombreSerieFron= this->directorioCasaUsuario + "/.openAlbum/";
03280      QString nombreSerieTras= this->directorioCasaUsuario + "/.openAlbum/";
03281      
03282      
03283      QString portada, fotoFron, fotoTras;
03284      portada="portada";
03285      fotoFron="frontal";
03286      fotoTras="trasera";
03287      nombreSerieFron= nombreSerieFron + this->rutaGuardado.section("/", -1) + separador + portada + separador + fotoFron +".JPG";
03288      nombreSerieTras= nombreSerieTras + this->rutaGuardado.section("/", -1) + separador + portada + separador + fotoTras +".JPG";
03289      barra->setValue(6);
03290      
03291      try{
03292         if(!pixFron->save(nombreSerieFron)){
03293                 //excepción
03294                 throw std::ios_base::failure(tr("No se pudo guardar la imagen").toStdString());
03295         }
03296         if(!pixTras->save(nombreSerieTras)){
03297                 //excepción
03298                 throw std::ios_base::failure(tr("No se pudo guardar la imagen").toStdString());
03299         }
03300      }catch(std::exception& e){
03301         Error *err=new Error(5, e.what(), this);
03302         err->LanzarDialogo();
03303         delete err;
03304         exit(1);
03305     }
03306      delete pixFron;
03307      delete pixTras;
03308      QString despFP, despTP;
03309      QString posXNuevoFrontal, posYNuevoFrontal, posXNuevoTrasero, posYNuevoTrasero;
03310      QString totalFrontal="";
03311      QString totalTrasero="";
03312      if(this->hayDesplazamientoPortadaFotos){
03313          despFP="si";
03314          posXNuevoFrontal.setNum(this->a->portada->PosicionXImagenFrontal());
03315          posYNuevoFrontal.setNum(this->a->portada->PosicionYImagenFrontal());
03316          posXNuevoTrasero.setNum(this->a->portada->PosicionXImagenTrasera());
03317          posYNuevoTrasero.setNum(this->a->portada->PosicionYImagenTrasera());
03318          totalFrontal= totalFrontal + "\" posXNueva=\"" + posXNuevoFrontal + "\" posYNueva=\"" + posYNuevoFrontal;
03319          totalTrasero= totalTrasero + "\" posXNueva=\"" + posXNuevoTrasero + "\" posYNueva=\"" + posYNuevoTrasero;
03320      }else{
03321          despFP="no";
03322      }
03323      barra->setValue(7);
03324      if(this->hayDesplazamientoPortadaTextos){
03325          despTP="si";
03326      }else{
03327          despTP="no";   
03328      }
03329      //Ahora tratamos los caracteres especiales de los xml
03330      QString textoFrontal, textoTrasero, textoLateral;
03331      textoFrontal = this->a->portada->TextoFrontal();
03332      if(this->a->portada->TextoFrontal().contains("&")){
03333          
03334          int index=0;
03335          while(textoFrontal.contains("&")){
03336           index = textoFrontal.indexOf("&", 0); 
03337           textoFrontal.replace(index,1, "#amp");
03338          }       
03339      }
03340      
03341      if(this->a->portada->TextoFrontal().contains("\"")){
03342          
03343          int index=0;
03344          while(textoFrontal.contains("\"")){
03345           index = textoFrontal.indexOf("\"", 0); 
03346           textoFrontal.replace(index,1, "#quot");
03347          }     
03348      }
03349      
03350      if(this->a->portada->TextoFrontal().contains("<")){
03351          
03352          int index=0;
03353          while(textoFrontal.contains("<")){
03354           index = textoFrontal.indexOf("<", 0); 
03355           textoFrontal.replace(index,1, "#lt");
03356          }      
03357      }
03358      
03359      if(this->a->portada->TextoFrontal().contains(">")){
03360        
03361          int index=0;
03362          while(textoFrontal.contains(">")){
03363           index = textoFrontal.indexOf(">", 0); 
03364           textoFrontal.replace(index,1, "#gt");
03365          }      
03366      }
03367      
03368      if(this->a->portada->TextoFrontal().contains("'")){
03369          
03370          int index=0;
03371          while(textoFrontal.contains("'")){
03372           index = textoFrontal.indexOf("'", 0); 
03373           textoFrontal.replace(index,1, "#apos");
03374          }     
03375      }
03376      textoLateral = this->a->portada->TextoLateral();
03377      if(this->a->portada->TextoLateral().contains("&")){
03378          
03379          int index=0;
03380          while(textoLateral.contains("&")){
03381           index = textoLateral.indexOf("&", 0); 
03382           textoLateral.replace(index,1, "#amp");
03383          }      
03384      }
03385      
03386      if(this->a->portada->TextoLateral().contains("\"")){
03387          
03388          int index=0;
03389          while(textoLateral.contains("\"")){
03390           index = textoLateral.indexOf("\"", 0); 
03391           textoLateral.replace(index,1, "#quot");
03392          }    
03393      }
03394      
03395      
03396      if(this->a->portada->TextoLateral().contains("<")){
03397          
03398          int index=0;
03399          while(textoLateral.contains("<")){
03400           index = textoLateral.indexOf("<", 0); 
03401           textoLateral.replace(index,1, "#lt");
03402          }    
03403      }
03404      
03405      if(this->a->portada->TextoLateral().contains(">")){
03406          
03407          int index=0;
03408          while(textoLateral.contains(">")){
03409           index = textoLateral.indexOf(">", 0); 
03410           textoLateral.replace(index,1, "#gt");
03411          }      
03412      }
03413      
03414      if(this->a->portada->TextoLateral().contains("'")){
03415          
03416          int index=0;
03417          while(textoLateral.contains("'")){
03418           index = textoLateral.indexOf("'", 0); 
03419           textoLateral.replace(index,1, "#apos");
03420          }   
03421      }
03422      textoTrasero = this->a->portada->TextoTrasera();
03423      if(this->a->portada->TextoTrasera().contains("&")){
03424          
03425          int index=0;
03426          while(textoTrasero.contains("&")){
03427           index = textoTrasero.indexOf("&", 0); 
03428           textoTrasero.replace(index,1, "#amp");
03429          }      
03430      }
03431      
03432      
03433      if(this->a->portada->TextoTrasera().contains("\"")){
03434          
03435          int index=0;
03436          while(textoTrasero.contains("\"")){
03437           index = textoTrasero.indexOf("\"", 0); 
03438           textoTrasero.replace(index,1, "#quot");
03439          }      
03440      }
03441      
03442      
03443      if(this->a->portada->TextoTrasera().contains("<")){
03444          
03445          int index=0;
03446          while(textoTrasero.contains("<")){
03447           index = textoTrasero.indexOf("<", 0); 
03448           textoTrasero.replace(index,1, "#lt");
03449          }      
03450      }
03451      
03452      
03453      if(this->a->portada->TextoTrasera().contains(">")){
03454          
03455          int index=0;
03456          while(textoTrasero.contains(">")){
03457           index = textoTrasero.indexOf(">", 0); 
03458           textoTrasero.replace(index,1, "#gt");
03459          }      
03460      }
03461      
03462      
03463      if(this->a->portada->TextoTrasera().contains("'")){
03464          
03465          int index=0;
03466          while(textoTrasero.contains("'")){
03467           index = textoTrasero.indexOf("'", 0); 
03468           textoTrasero.replace(index,1, "#apos");
03469          }      
03470      }
03471      // ahora modificar la carga y posteriormente hacer lo mismo para las páginas
03472      QString creado("no");
03473      if(this->creadoConAsistente){
03474          creado="si";
03475      }
03476      QString textura("no");
03477      if(this->seleccionadaTextura){
03478          textura="si";
03479      }
03480      QString orden("");
03481      if(this->getOrdenacionAlfabetica()){
03482          orden="alfabetica";
03483         }else{
03484             if(this->getOrdenacionFechaCreciente()){
03485                 orden="fechascreciente";
03486             }else{
03487                 if(this->getOrdenacionFechaDecreciente()){
03488                     orden="fechasdecreciente";
03489                 }else{
03490                     orden="ordenpersonalizado";
03491                 }
03492             }
03493         }
03494      if(this->a->portada->GetEditada()){
03495      texto = "<album orden=\"" + orden + "\" asistente=\"" + creado + "\" fecha=\"" + this->fechaCreacion + "\" paginas=\"" + siOno + "\">\n     <portada textura=\"" + textura + "\" plantilla=\"" + this->a->portada->RutaPlantilla() + "\" imagen_fondo=\"" + nombreSerieFondoPortada +"\" red=\""+ redPortada +"\" green=\"" + greenPortada + "\" blue=\""+ bluePortada +"\" tam_w=\"" + QString::number(this->a->portada->GetW()) + "\" tam_h=\"" + QString::number(this->a->portada->GetH()) + "\" despFotos=\"" + despFP + "\" despTextos=\"" + despTP + "\">\n          <texto_lat texto=\"" + textoLateral + "\" fuente=\"" + this->a->portada->FuenteTextoLateral().toString() + "\" negrita=\"" + negritaLateral + "\" subrayado=\"" + subrayadoLateral + "\" cursiva=\"" + cursivaLateral +"\" red=\"" + QString::number(this->a->portada->ColorTextoLateral().red()) + "\" green=\"" + QString::number(this->a->portada->ColorTextoLateral().green()) + "\" blue=\"" + QString::number(this->a->portada->ColorTextoLateral().blue()) + "\"/>\n          <texto_fro texto=\"" + textoFrontal + "\" fuente=\"" + this->a->portada->FuenteTextoFrontal().toString() + "\" negrita=\"" + negritaFrontal + "\" subrayado=\"" + subrayadoFrontal + "\" cursiva=\"" + cursivaFrontal + "\" red=\"" + QString::number(this->a->portada->ColorTextoFrontal().red()) + "\" green=\"" + QString::number(this->a->portada->ColorTextoFrontal().green()) + "\" blue=\"" + QString::number(this->a->portada->ColorTextoFrontal().blue()) + "\"/>\n          <texto_tra texto=\"" + textoTrasero + "\" fuente=\"" + this->a->portada->FuenteTextoTrasera().toString() + "\" negrita=\"" + negritaTrasero + "\" subrayado=\"" + subrayadoTrasero + "\" cursiva=\"" + cursivaTrasero + "\" red=\"" + QString::number(this->a->portada->ColorTextoTrasera().red()) + "\" green=\"" + QString::number(this->a->portada->ColorTextoTrasera().green()) + "\" blue=\"" + QString::number(this->a->portada->ColorTextoTrasera().blue()) + "\"/>\n          <imagen_fro ruta=\"" + nombreSerieFron + totalFrontal + "\"/>\n          <imagen_tra ruta=\"" + nombreSerieTras + totalTrasero +"\"/>\n          <Desplazamientos>\n" + this->portadaDesplazada + "          </Desplazamientos>\n     </portada>\n";
03496      }else{
03497      texto = "<album orden=\"" + orden + "\" asistente=\"" + creado + "\" fecha=\"" + this->fechaCreacion + "\" paginas=\"" + siOno + "\">\n     <portada textura=\"" + textura + "\" plantilla=\"" + this->a->portada->RutaPlantilla() + "\" imagen_fondo=\"" + nombreSerieFondoPortada +"\" red=\""+ redPortada +"\" green=\"" + greenPortada + "\" blue=\""+ bluePortada +"\" tam_w=\"" + QString::number(this->a->portada->GetW()) + "\" tam_h=\"" + QString::number(this->a->portada->GetH()) + "\" despFotos=\"" + despFP + "\" despTextos=\"" + despTP + "\">\n          <texto_lat texto=\"" + textoLateral + "\" fuente=\"" + this->a->portada->FuenteTextoLateral().toString() + "\" negrita=\"" + negritaLateral + "\" subrayado=\"" + subrayadoLateral + "\" cursiva=\"" + cursivaLateral +"\" red=\"" + QString::number(this->a->portada->ColorTextoLateral().red()) + "\" green=\"" + QString::number(this->a->portada->ColorTextoLateral().green()) + "\" blue=\"" + QString::number(this->a->portada->ColorTextoLateral().blue()) + "\"/>\n          <texto_fro texto=\"" + textoFrontal + "\" fuente=\"" + this->a->portada->FuenteTextoFrontal().toString() + "\" negrita=\"" + negritaFrontal + "\" subrayado=\"" + subrayadoFrontal + "\" cursiva=\"" + cursivaFrontal + "\" red=\"" + QString::number(this->a->portada->ColorTextoFrontal().red()) + "\" green=\"" + QString::number(this->a->portada->ColorTextoFrontal().green()) + "\" blue=\"" + QString::number(this->a->portada->ColorTextoFrontal().blue()) + "\"/>\n          <texto_tra texto=\"" + textoTrasero + "\" fuente=\"" + this->a->portada->FuenteTextoTrasera().toString() + "\" negrita=\"" + negritaTrasero + "\" subrayado=\"" + subrayadoTrasero + "\" cursiva=\"" + cursivaTrasero + "\" red=\"" + QString::number(this->a->portada->ColorTextoTrasera().red()) + "\" green=\"" + QString::number(this->a->portada->ColorTextoTrasera().green()) + "\" blue=\"" + QString::number(this->a->portada->ColorTextoTrasera().blue()) + "\"/>\n          <imagen_fro ruta=\"" + nombreSerieFron + totalFrontal + "\"/>\n          <imagen_tra ruta=\"" + nombreSerieTras + totalTrasero + "\"/>\n     </portada>\n";
03498      }
03499      QString texto2, texto3, texto4, texto5, texto6, texto8, texto9, textoFinal;
03500      texto5="";
03501      texto2="";
03502      barra->setValue(8);
03503      if(this->creadasPaginas){
03504          int contadNumPagina=0;
03505          
03506          
03507      for(unsigned i=0; i< this->a->paginas.size(); i++){
03508          barra->setValue(8+i);
03509          QString imagenFondoPagina, redFondoPagina, greenFondoPagina, blueFondoPagina, editada;
03510          editada="";
03511          if(this->a->GetPagina(i)->ColordeFondo()){
03512              imagenFondoPagina="no";
03513              redFondoPagina=QString::number(this->a->GetPagina(i)->GetFondoColor().red());
03514              greenFondoPagina=QString::number(this->a->GetPagina(i)->GetFondoColor().green());
03515              blueFondoPagina=QString::number(this->a->GetPagina(i)->GetFondoColor().blue());
03516          }else{
03517              QPixmap *pixFondoPag;
03518              try{
03519                 pixFondoPag= new QPixmap(this->a->GetPagina(i)->GetFondoImagen());
03520                 if(pixFondoPag->isNull()){
03521                     throw std::ios_base::failure(tr("No pudo abrirse la imagen de fondo de la pagina.").toStdString());
03522                 }
03523              }catch(std::exception& e){
03524                 Error *err=new Error(4, e.what(), this);
03525                 err->LanzarDialogo();
03526                 delete err;
03527                 exit(1);
03528              }
03529              imagenFondoPagina=imagenFondoPagina + this->directorioCasaUsuario +"/.openAlbum/" + this->rutaGuardado.section("/", -1) + separador + "fondo" + separador + "pagina" + separador + QString::number(i) + ".JPG";
03530              redFondoPagina="0";
03531              greenFondoPagina="0";
03532              blueFondoPagina="0";
03533              try{
03534                 if(!pixFondoPag->save(imagenFondoPagina)){
03535                   //excepción
03536                   throw std::ios_base::failure(tr("No se pudo guardar la imagen").toStdString());
03537                 }
03538              }catch(std::exception& e){
03539                 Error *err=new Error(5, e.what(), this);
03540                 err->LanzarDialogo();
03541                 delete err;
03542                 exit(1);
03543              }
03544              delete pixFondoPag;
03545          }
03546          
03547          if(i==0){
03548              if(this->a->GetPagina(i)->GetPaginaEditada()){
03549                  editada="si";
03550              }else{
03551                  editada="no";
03552              }
03553              if(this->a->GetPagina(i)->ContieneMarcos()){
03554                 texto2= "          <pagina plantilla=\"" + this->a->GetPagina(i)->RutaPlantilla() + "\" imagen_fondo=\"" + imagenFondoPagina + "\" red=\"" + redFondoPagina + "\" green=\"" + greenFondoPagina + "\" blue=\"" + blueFondoPagina + "\" editada=\"" + editada + "\" tam_w=\"" + QString::number(this->a->GetPagina(i)->GetW()) + "\" tam_h=\"" + QString::number(this->a->GetPagina(i)->GetH()) + "\" marcos=\"si\">\n";
03555              }else{
03556                 texto2= "          <pagina plantilla=\"" + this->a->GetPagina(i)->RutaPlantilla() + "\" imagen_fondo=\"" + imagenFondoPagina + "\" red=\"" + redFondoPagina + "\" green=\"" + greenFondoPagina + "\" blue=\"" + blueFondoPagina + "\" editada=\"" + editada + "\" tam_w=\"" + QString::number(this->a->GetPagina(i)->GetW()) + "\" tam_h=\"" + QString::number(this->a->GetPagina(i)->GetH()) + "\" marcos=\"no\">\n";
03557              }
03558              texto3="               <fotos>\n";
03559              int contadNumFoto=0;
03560              for(unsigned j=0; j< this->a->GetPagina(i)->GetVectorImagenes().size(); j++){
03561                  
03562                  QPixmap *pix;
03563                  try{
03564                  pix= new QPixmap(this->a->GetPagina(i)->GetVectorImagenes().at(j).ruta);
03565                  }catch(std::exception& e){
03566                         Error *err=new Error(2, e.what(), this);
03567                         err->LanzarDialogo();
03568                         delete err;
03569                         exit(1);
03570                  }
03571                  QString nombreSerie= this->directorioCasaUsuario + "/.openAlbum/";
03572                  QString separador= "_";
03573                  QString pagina, foto;
03574                  pagina.setNum(contadNumPagina);
03575                  foto.setNum(contadNumFoto);
03576                  nombreSerie= nombreSerie + this->rutaGuardado.section("/", -1) + foto + separador + pagina +".JPG";
03577                  
03578                  
03579                  try{
03580                  if(!pix->save(nombreSerie)){
03581                      throw std::ios_base::failure(tr("No se pudo guardar la imagen").toStdString());
03582                  }
03583                  }catch(std::exception& e){
03584                         Error *err=new Error(5, e.what(), this);
03585                         err->LanzarDialogo();
03586                         delete err;
03587                         exit(1);
03588                  }
03589                  delete pix;
03590                  texto3=texto3 + "                    <foto ruta=\"" + nombreSerie + "\"/>\n";
03591                  contadNumFoto++;
03592              }
03593              
03594              if(this->a->GetPagina(i)->ContieneTextos()){
03595                  texto5="               <textos>\n";
03596                 for(unsigned t=0; t<this->a->GetPagina(i)->GetVectorTextos().size(); t++){
03597                     QString subrayado, negrita, cursiva, texto;
03598                     try{
03599                     texto = this->a->GetPagina(i)->GetVectorTextos().at(t).texto;
03600                     
03601                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).texto.contains("&")){
03602                         int index=0;
03603                         while(texto.contains("&")){
03604                                 index = texto.indexOf("&", 0); 
03605                                 texto.replace(index,1, "#amp");
03606                         }      
03607                     }
03608                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).texto.contains("\"")){
03609                         int index=0;
03610                         while(texto.contains("\"")){
03611                                 index = texto.indexOf("\"", 0); 
03612                                 texto.replace(index,1, "#quot");
03613                         }      
03614                     }
03615                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).texto.contains("<")){
03616                         int index=0;
03617                         while(texto.contains("<")){
03618                                 index = texto.indexOf("<", 0); 
03619                                 texto.replace(index,1, "#lt");
03620                         }      
03621                     }
03622                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).texto.contains(">")){
03623                         int index=0;
03624                         while(texto.contains(">")){
03625                                 index = texto.indexOf(">", 0); 
03626                                 texto.replace(index,1, "#gt");
03627                         }      
03628                     }
03629                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).texto.contains("'")){
03630                         int index=0;
03631                         while(texto.contains("'")){
03632                                 index = texto.indexOf("'", 0); 
03633                                 texto.replace(index,1, "#apos");
03634                         }      
03635                     }
03636      
03637                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).cursiva){
03638                         cursiva="si";
03639                     }else{
03640                         cursiva="no";
03641                     }
03642                     
03643                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).negrita){
03644                         negrita="si";
03645                     }else{
03646                         negrita="no";
03647                     }
03648                     
03649                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).subrayado){
03650                         subrayado="si";
03651                     }else{
03652                         subrayado="no";
03653                     }
03654                     texto5= texto5 + "                    <texto contenido=\"" + texto + "\" fuente=\"" + this->a->GetPagina(i)->GetVectorTextos().at(t).fuente.toString() + "\" negrita=\"" + negrita + "\" subrayado=\"" + subrayado + "\" cursiva=\"" + cursiva + "\" red=\"" + QString::number(this->a->GetPagina(i)->GetVectorTextos().at(t).color.red()) + "\" green=\"" + QString::number(this->a->GetPagina(i)->GetVectorTextos().at(t).color.green()) + "\" blue=\"" + QString::number(this->a->GetPagina(i)->GetVectorTextos().at(t).color.blue()) + "\"/>\n";
03655                 }catch(std::exception& e){
03656                         Error *err=new Error(1, e.what(), this);
03657                         err->LanzarDialogo();
03658                         delete err;
03659                         exit(1);
03660                 }
03661                 }
03662                  texto5=texto5 + "               </textos>\n";
03663              }
03664              
03665      
03666              QString textoM="";
03667              for(int contadormarcos=0; contadormarcos<this->a->GetPagina(i)->getMarcos().size(); contadormarcos++){
03668                  QString texto= "                    <marco id=\""+ QString::number(this->a->GetPagina(i)->getMarcos().at(contadormarcos).idFoto) + "\" nombre=\"" + this->a->GetPagina(i)->getMarcos().at(contadormarcos).nombre->toStdString().c_str() + "\" tipo=\"" + this->a->GetPagina(i)->getMarcos().at(contadormarcos).tipo->toStdString().c_str() + "\"/>\n";
03669                  textoM.append(texto);
03670              }
03671              if(this->a->GetPagina(i)->ContieneTextos()){
03672                  if(this->a->GetPagina(i)->ContieneMarcos()){
03673                  texto2="     <paginas>\n" + texto2 + texto3 + "               </fotos>\n" + "               <marcos>\n" + textoM + "               </marcos>\n" + texto5;
03674                  }else{
03675                     texto2="     <paginas>\n" + texto2 + texto3 + "               </fotos>\n" + texto5;
03676                    
03677                  }
03678              }else{
03679                  if(this->a->GetPagina(i)->ContieneMarcos()){
03680                 texto2="     <paginas>\n" + texto2 + texto3 + "               </fotos>\n" + "               <marcos>\n" + textoM + "               </marcos>\n"; 
03681                  }else{
03682                     texto2="     <paginas>\n" + texto2 + texto3 + "               </fotos>\n"; 
03683                  
03684                  }
03685              }
03686              
03687                  texto2= texto2 + "          </pagina>\n";
03688              
03689          }else{
03690                 if(this->a->GetPagina(i)->GetPaginaEditada()){
03691                         editada="si";
03692                 }else{
03693                         editada="no";
03694                 }
03695                 if(this->a->GetPagina(i)->ContieneMarcos()){
03696                         texto2= texto2 + "          <pagina plantilla=\"" + this->a->GetPagina(i)->RutaPlantilla() + "\" imagen_fondo=\"" + imagenFondoPagina + "\" red=\"" + redFondoPagina + "\" green=\"" + greenFondoPagina + "\" blue=\"" + blueFondoPagina + "\" editada=\"" + editada + "\" tam_w=\"" + QString::number(this->a->GetPagina(i)->GetW()) + "\" tam_h=\"" + QString::number(this->a->GetPagina(i)->GetH()) + "\" marcos=\"si\">\n";
03697                 }else{
03698                         texto2= texto2 + "          <pagina plantilla=\"" + this->a->GetPagina(i)->RutaPlantilla() + "\" imagen_fondo=\"" + imagenFondoPagina + "\" red=\"" + redFondoPagina + "\" green=\"" + greenFondoPagina + "\" blue=\"" + blueFondoPagina + "\" editada=\"" + editada + "\" tam_w=\"" + QString::number(this->a->GetPagina(i)->GetW()) + "\" tam_h=\"" + QString::number(this->a->GetPagina(i)->GetH()) + "\" marcos=\"no\">\n";
03699                 }
03700                 texto4="               <fotos>\n";
03701                 int contadNumFoto2=0;
03702                 for(unsigned y=0; y< this->a->GetPagina(i)->GetVectorImagenes().size(); y++){
03703                     
03704                     QPixmap *pix;
03705                     try{
03706                     pix= new QPixmap(this->a->GetPagina(i)->GetVectorImagenes().at(y).ruta);
03707                     if(pix->isNull()){
03708                         throw std::ios_base::failure(tr("No pudo abrirse una de las imagenes.").toStdString());
03709                     }
03710                     }catch(std::exception& e){
03711                         Error *err=new Error(4, e.what(), this);
03712                         err->LanzarDialogo();
03713                         delete err;
03714                         exit(1);
03715                     }
03716                     
03717                     QString nombreSerie= this->directorioCasaUsuario + "/.openAlbum/";
03718                  QString separador= "_";
03719                  QString pagina, foto;
03720                  pagina.setNum(contadNumPagina);
03721                  foto.setNum(contadNumFoto2);
03722                  nombreSerie= nombreSerie + this->rutaGuardado.section("/", -1) + foto + separador + pagina +".JPG";
03723                  
03724                  try{
03725                         if(!pix->save(nombreSerie)){
03726                                 throw std::ios_base::failure(tr("No se pudo guardar la imagen").toStdString());
03727                         }   
03728                  }catch(std::exception& e){
03729                         Error *err=new Error(5, e.what(), this);
03730                         err->LanzarDialogo();
03731                         delete err;
03732                         exit(1);
03733                  } 
03734                  delete pix;
03735                     texto4=texto4 + "                       <foto ruta=\"" + nombreSerie + "\"/>\n";
03736                 contadNumFoto2++;
03737                 }
03738                 
03739                 if(this->a->GetPagina(i)->ContieneTextos()){
03740                  texto6="               <textos>\n";
03741                 for(unsigned t=0; t<this->a->GetPagina(i)->GetVectorTextos().size(); t++){
03742                     QString subrayado, negrita, cursiva, texto;
03743                     
03744                     try{
03745                     texto = this->a->GetPagina(i)->GetVectorTextos().at(t).texto;
03746                     
03747                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).texto.contains("&")){
03748                         int index=0;
03749                         while(texto.contains("&")){
03750                                 index = texto.indexOf("&", 0); 
03751                                 texto.replace(index,1, "#amp");
03752                         }      
03753                     }
03754                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).texto.contains("\"")){
03755                         int index=0;
03756                         while(texto.contains("\"")){
03757                                 index = texto.indexOf("\"", 0); 
03758                                 texto.replace(index,1, "#quot");
03759                         }      
03760                     }
03761                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).texto.contains("<")){
03762                         int index=0;
03763                         while(texto.contains("<")){
03764                                 index = texto.indexOf("<", 0); 
03765                                 texto.replace(index,1, "#lt");
03766                         }      
03767                     }
03768                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).texto.contains(">")){
03769                         int index=0;
03770                         while(texto.contains(">")){
03771                                 index = texto.indexOf(">", 0); 
03772                                 texto.replace(index,1, "#gt");
03773                         }      
03774                     }
03775                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).texto.contains("'")){
03776                         int index=0;
03777                         while(texto.contains("'")){
03778                                 index = texto.indexOf("'", 0); 
03779                                 texto.replace(index,1, "#apos");
03780                         }      
03781                     }
03782                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).cursiva){
03783                         cursiva="si";
03784                     }else{
03785                         cursiva="no";
03786                     }
03787                     
03788                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).negrita){
03789                         negrita="si";
03790                     }else{
03791                         negrita="no";
03792                     }
03793                     
03794                     if(this->a->GetPagina(i)->GetVectorTextos().at(t).subrayado){
03795                         subrayado="si";
03796                     }else{
03797                         subrayado="no";
03798                     }
03799                     texto6= texto6 + "                  <texto contenido=\"" + texto + "\" fuente=\"" + this->a->GetPagina(i)->GetVectorTextos().at(t).fuente.toString() + "\" negrita=\"" + negrita + "\" subrayado=\"" + subrayado + "\" cursiva=\"" + cursiva + "\" red=\"" + QString::number(this->a->GetPagina(i)->GetVectorTextos().at(t).color.red()) + "\" green=\"" + QString::number(this->a->GetPagina(i)->GetVectorTextos().at(t).color.green()) + "\" blue=\"" + QString::number(this->a->GetPagina(i)->GetVectorTextos().at(t).color.blue()) + "\"/>\n";
03800                 }catch(std::exception& e){
03801                         Error *err=new Error(1, e.what(), this);
03802                         err->LanzarDialogo();
03803                         delete err;
03804                         exit(1);
03805                 }
03806                 }
03807                  texto6=texto6 + "              </textos>\n";
03808              }
03809              QString textoM2="";
03810              for(int contadormarcos=0; contadormarcos<this->a->GetPagina(i)->getMarcos().size(); contadormarcos++){
03811                  QString texto="                    <marco id=\""+ QString::number(this->a->GetPagina(i)->getMarcos().at(contadormarcos).idFoto) + "\" nombre=\"" + this->a->GetPagina(i)->getMarcos().at(contadormarcos).nombre->toStdString().c_str() + "\" tipo=\"" + this->a->GetPagina(i)->getMarcos().at(contadormarcos).tipo->toStdString().c_str() + "\"/>\n";
03812                  textoM2.append(texto);
03813              }   
03814              if(this->a->GetPagina(i)->ContieneTextos()){ 
03815                  if(this->a->GetPagina(i)->ContieneMarcos()){
03816                       texto2=texto2 + texto4 + "               </fotos>\n" + "               <marcos>\n" + textoM2 + "               </marcos>\n" + texto6;
03817                  }else{
03818                        texto2=texto2 + texto4 + "              </fotos>\n" + texto6;
03819                  }
03820              }else{
03821                  if(this->a->GetPagina(i)->ContieneMarcos()){
03822                       texto2=texto2 + texto4 + "               </fotos>\n" + "               <marcos>\n" + textoM2 + "               </marcos>\n";
03823                  }else{
03824                       texto2=texto2 + texto4 + "               </fotos>\n";
03825                  }
03826              }
03827               
03828              
03829              texto2=texto2 + "          </pagina>\n";
03830                  
03831              
03832          }
03833          contadNumPagina++;
03834          ii=i;
03835      }
03836          
03837      }
03838      
03839      for(int x=0; x<this->paginasDesplazadas.size(); x++){
03840          try{
03841          texto9=texto9 + this->paginasDesplazadas.at(x);
03842          }catch(std::exception& e){
03843                 Error *err=new Error(1, e.what(), this);
03844                 err->LanzarDialogo();
03845                 delete err;
03846                 exit(1);
03847          }
03848      }
03849      
03850      if(this->creadasPaginas){
03851         texto2= texto2 + "     </paginas>\n" + "     <DesplazamientosPaginas>\n" + texto9 + "     </DesplazamientosPaginas>\n"; 
03852       
03853         textoFinal= texto + texto2;
03854      }else{
03855          texto2= texto2 + "          <Desplazamientos>\n" + texto9 + "          </Desplazamientos>\n"; 
03856       
03857         textoFinal= texto + texto2;
03858      }
03859      textoFinal= textoFinal + "</album>\n";
03860      textStream << textoFinal;
03861      file.close();
03862      this->paginasDesplazadas.clear();
03863      this->portadaDesplazada.clear();
03864      
03865      QString lineaConfig="<album nombre=\"";
03866      lineaConfig.append(this->rutaGuardado);
03867      lineaConfig.append("\"/>\n</creados_recientemente></general>");
03868      QString directorio=this->directorioCasaUsuario;
03869      directorio.append("/.openAlbum/configuracion.xml");
03870      QFile filename(directorio);
03871      if (filename.open(QIODevice::ReadOnly | QIODevice::Text))
03872      { 
03873          QFile filename2(directorio); 
03874          if (filename2.open(QIODevice::ReadWrite))
03875         {
03876                 QTextStream in(&filename);
03877                 QTextStream out(&filename2);
03878                 bool aux=false;
03879                 while(!aux) {
03880                        QString linea=in.readLine();
03881                        if(linea=="</creados_recientemente></general>"){
03882                            aux=true;
03883                        }else{
03884                            out << linea.append("\n");
03885                        }
03886                 } 
03887                 out << lineaConfig; 
03888                 filename2.close();
03889         } 
03890         filename.close();   
03891      }
03892 
03893 
03894      barra->setValue(9+ii);
03895      }
03896          this->ui->statusBar->setMaximumWidth(wAux);
03897          barra->hide();
03898          delete barra;
03899 }
03900 
03901 void FormPrincipal::EliminarAlbum(QString album, bool activarPregunta){
03902     QFileSystemModel *sistema=new QFileSystemModel();
03903     if(album==""){
03904        QFileDialog::Options options;
03905         QString selectedFilter="OPA: Open Album File (*.opa)";
03906         QString fileName= QFileDialog::getOpenFileName(this, tr("Eliminar álbum"), this->directorioCasaUsuario, tr("OPA: Open Album File (*.opa)"), &selectedFilter, options);
03907         album=fileName;
03908     }
03909     if(!album.isNull()){
03910         if(activarPregunta){
03911         QMessageBox::StandardButton reply;
03912         QString mensaje="¿Está seguro de que desea eliminar el álbum \"";
03913         mensaje= mensaje + album.section("/", -1);
03914         if(mensaje.contains(".opa")){
03915             
03916             mensaje.remove(".opa");
03917         }
03918         mensaje= mensaje + "\" del sistema definitivamente?";
03919         reply = QMessageBox::question(this, tr("Advertencia"), tr(mensaje.toStdString().c_str()), QMessageBox::Yes | QMessageBox::No);
03920     if (reply == QMessageBox::Yes){
03921         this->aceptadaEliminacion=true;
03922        Parser parser(album.toStdString(), this);
03923        ticpp::Element* element = parser.root();
03924         ticpp::Element* portadaElement = parser.find("portada", element);
03925         ticpp::Element* imagenFrontalPortadaElement = parser.find("imagen_fro", portadaElement);
03926         ticpp::Element* imagenTraseraPortadaElement = parser.find("imagen_tra", portadaElement);
03927         ticpp::Element* paginasElement = parser.find("paginas", element);
03928         std::string hayPaginasString = parser.get_attribute("paginas", element);
03929         QString imagenFondoPortada= (parser.get_attribute("imagen_fondo", portadaElement)).c_str();
03930         if(imagenFondoPortada!="no"){
03931            sistema->remove(sistema->index(imagenFondoPortada));
03932         }
03933         QString rutaFotoFrontalPortada= (parser.get_attribute("ruta", imagenFrontalPortadaElement)).c_str();
03934         QString rutaFotoTraseraPortada= (parser.get_attribute("ruta", imagenTraseraPortadaElement)).c_str();
03935     
03936         if(rutaFotoFrontalPortada!="no"){
03937             sistema->remove(sistema->index(rutaFotoFrontalPortada));
03938         }
03939         if(rutaFotoTraseraPortada!="no"){
03940             sistema->remove(sistema->index(rutaFotoTraseraPortada));
03941         }
03942         
03943         
03944         std::vector<ticpp::Element*> vectorPaginas;
03945         try{
03946         if(hayPaginasString=="si"){
03947                 parser.find("pagina", vectorPaginas, paginasElement);
03948                 for(unsigned contador=0; contador<vectorPaginas.size(); contador++){
03949                     QString imagenFondoPagina = parser.get_attribute("imagen_fondo", vectorPaginas.at(contador)).c_str();
03950                     if(imagenFondoPagina!="no"){
03951                         sistema->remove(sistema->index(imagenFondoPagina));
03952                     }
03953                     std::vector<ticpp::Element*> vectorFotosPagina;
03954                     ticpp::Element* fotosPaginaElement = parser.find("fotos", vectorPaginas.at(contador));
03955                     parser.find("foto", vectorFotosPagina, fotosPaginaElement);
03956                     for(unsigned contadorFotos=0; contadorFotos < vectorFotosPagina.size(); contadorFotos++){
03957                         QString rutaFotoPagina= QString::fromAscii(parser.get_attribute("ruta", vectorFotosPagina.at(contadorFotos)).c_str());
03958                         sistema->remove(sistema->index(rutaFotoPagina));
03959                     
03960                     }
03961                 }
03962         }
03963         }catch(std::exception& e){
03964              Error *err=new Error(1, e.what(), this);
03965              err->LanzarDialogo();
03966              delete err;
03967              exit(1);
03968         }
03969       sistema->remove(sistema->index(album));  
03970     }else{
03971         this->aceptadaEliminacion=false;
03972     }
03973         }else{
03974             this->aceptadaEliminacion=true;
03975        Parser parser(album.toStdString(), this);
03976        ticpp::Element* element = parser.root();
03977         ticpp::Element* portadaElement = parser.find("portada", element);
03978         ticpp::Element* imagenFrontalPortadaElement = parser.find("imagen_fro", portadaElement);
03979         ticpp::Element* imagenTraseraPortadaElement = parser.find("imagen_tra", portadaElement);
03980         ticpp::Element* paginasElement = parser.find("paginas", element);
03981         std::string hayPaginasString = parser.get_attribute("paginas", element);
03982         QString imagenFondoPortada= (parser.get_attribute("imagen_fondo", portadaElement)).c_str();
03983         if(imagenFondoPortada!="no"){
03984            sistema->remove(sistema->index(imagenFondoPortada));
03985         }
03986         QString rutaFotoFrontalPortada= (parser.get_attribute("ruta", imagenFrontalPortadaElement)).c_str();
03987         QString rutaFotoTraseraPortada= (parser.get_attribute("ruta", imagenTraseraPortadaElement)).c_str();
03988     
03989         if(rutaFotoFrontalPortada!="no"){
03990             sistema->remove(sistema->index(rutaFotoFrontalPortada));
03991         }
03992         if(rutaFotoTraseraPortada!="no"){
03993             sistema->remove(sistema->index(rutaFotoTraseraPortada));
03994         }
03995         
03996         
03997         std::vector<ticpp::Element*> vectorPaginas;
03998         try{
03999         if(hayPaginasString=="si"){
04000                 parser.find("pagina", vectorPaginas, paginasElement);
04001                 for(unsigned contador=0; contador<vectorPaginas.size(); contador++){
04002                     QString imagenFondoPagina = parser.get_attribute("imagen_fondo", vectorPaginas.at(contador)).c_str();
04003                     if(imagenFondoPagina!="no"){
04004                         sistema->remove(sistema->index(imagenFondoPagina));
04005                     }
04006                     std::vector<ticpp::Element*> vectorFotosPagina;
04007                     ticpp::Element* fotosPaginaElement = parser.find("fotos", vectorPaginas.at(contador));
04008                     parser.find("foto", vectorFotosPagina, fotosPaginaElement);
04009                     for(unsigned contadorFotos=0; contadorFotos < vectorFotosPagina.size(); contadorFotos++){
04010                         QString rutaFotoPagina= QString::fromAscii(parser.get_attribute("ruta", vectorFotosPagina.at(contadorFotos)).c_str());
04011                         sistema->remove(sistema->index(rutaFotoPagina));
04012                     
04013                     }
04014                 }
04015         }
04016         }catch(std::exception& e){
04017              Error *err=new Error(1, e.what(), this);
04018              err->LanzarDialogo();
04019              delete err;
04020              exit(1);
04021         }
04022       sistema->remove(sistema->index(album));
04023         }
04024     }
04025     delete sistema;
04026 }
04027 
04028 void FormPrincipal::Eliminar(){
04029     if(this->creadaPortada){
04030         if(this->ActivadoGuardado){
04031                 QMessageBox::StandardButton reply;
04032                 QString mensaje=tr("¿Está seguro de que desea eliminar el álbum actual?");
04033                 reply = QMessageBox::question(this, tr("Advertencia"), mensaje, QMessageBox::Yes | QMessageBox::No);
04034                 if (reply == QMessageBox::Yes){
04035                     this->preguntaSeguridad=false;
04036                     this->EliminarAlbum(this->rutaGuardado, true);
04037                     if(this->aceptadaEliminacion){
04038                     this->NuevoAlbum();
04039                     }
04040                 }else{
04041                     this->EliminarAlbum("", true);
04042                 }
04043     
04044                 
04045         }else{
04046             this->EliminarAlbum("", true);
04047         }
04048     }else{
04049         this->EliminarAlbum("", true);
04050     }
04051 }
04052 
04053 void FormPrincipal::activarCreadoconAsistente(){
04054     this->creadoConAsistente=true;
04055 }
04056 
04057 
04058 bool FormPrincipal::getOrdenacionAlfabetica(){
04059     return this->ordenAlfabetico;
04060 }
04061 
04062 bool FormPrincipal::getOrdenacionFechaCreciente(){
04063     return this->ordenFechaCreciente;
04064 }
04065 
04066 bool FormPrincipal::getOrdenacionFechaDecreciente(){
04067     return this->ordenFechaDecreciente;
04068 }
04069 
04070 bool FormPrincipal::getOrdenacionPersonalizada(){
04071     return this->ordenPersonalizado;
04072 }
04073 
04074 void FormPrincipal::NuevoAlbum(bool pregunta){
04075     
04076     
04077     this->elegidoFondoPortada=false;
04078     this->elegidaFrontalPortada=false;
04079     this->elegidaTraseraPortada=false;
04080     this->elegidaPlantilla=false;
04081     this->elegidoTexto=false;
04082     // Mostrar formulario
04083     bool generarNuevoAlbum=false;
04084     if(this->preguntaSeguridad && pregunta && !this->nadacreado){
04085     QMessageBox::StandardButton reply;
04086     reply = QMessageBox::question(this, tr("Advertencia"), tr("¿Desea guardar los cambios efectuados en el album actual?"), QMessageBox::Yes | QMessageBox::No);
04087     if (reply == QMessageBox::Yes){
04088         generarNuevoAlbum=true;
04089         this->Guardar();
04090         
04091     }else if (reply == QMessageBox::No){
04092         generarNuevoAlbum=true;
04093     }else{
04094         generarNuevoAlbum=false;
04095     }
04096     }else{
04097         generarNuevoAlbum=true;
04098     }
04099     this->inicializarDespl=true;
04100     this->paginasPersonalizadas=false;
04101     this->paginasAleatorias=false;
04102     this->paginasFijas=false;
04103     
04104     
04105     ordenAlfabetico=false;
04106     ordenFechaCreciente=false;
04107     ordenFechaDecreciente=false; 
04108     ordenPersonalizado=false;
04109     this->creadasPaginas=false;
04110     this->creadoConAsistente=false;
04111     this->seleccionadaTextura=false;
04112     this->mostrandosePaginaActualmente=false;
04113     this->ui->action_Propiedades->setDisabled(true);
04114     this->ui->actionPropiedadesBoton->setDisabled(true);
04115     this->rutaGuardado.clear();
04116     if(this->ejecutadoWizard){
04117         
04118         this->ejecutadoWizard=false;
04119         for(int t=0; t < this->wizard->pageIds().size(); t++){
04120             delete this->wizard->page(this->wizard->pageIds().at(t));
04121         }
04122         delete this->wizard;
04123     }
04124     this->ui->action_Lanzar_asistente->setEnabled(true);
04125     this->ui->actionWizardBoton->setEnabled(true);
04126     this->ActivadoGuardado=false;
04127     
04128     this->seHaCargado=false;
04129     if(generarNuevoAlbum){
04130         if(this->creadasPaginas){
04131             this->paginasDesplazadas.clear();
04132             this->posicionesItemsPaginas.clear();
04133         try{    
04134         for(unsigned eliminador=0; eliminador < this->a->paginas.size(); eliminador++){
04135             if(!this->edicionPaginaFinalX.isEmpty()){
04136             this->edicionPaginaFinalX[eliminador].clear();
04137             this->edicionPaginaFinalY[eliminador].clear();
04138             }
04139             if(!this->desplazamientoPaginaFinalX.isEmpty()){
04140                 this->desplazamientoPaginaFinalX[eliminador].clear();
04141                 this->desplazamientoPaginaFinalY[eliminador].clear();
04142             }
04143             
04144              
04145         }
04146         }catch(std::exception& e){
04147                         Error *err=new Error(1, e.what(), this);
04148                         err->LanzarDialogo();
04149                         delete err;
04150                         exit(1);
04151                     }   
04152         }
04153         if(this->creadaPortada){
04154             
04155             this->creadaPortada=false;         
04156           
04157                 delete this->a;   
04158         }
04159         ui->pushButtonEditar->hide();
04160         ui->pushButtonTerminar->hide();
04161         ui->pushPagSiguiente->setDisabled(true);
04162         ui->action_Avanzar_P_gina->setDisabled(true);
04163         ui->actionAvanzarBoton->setDisabled(true);
04164         ui->pushPagAnterior->setDisabled(true);
04165         ui->action_Retroceder_p_gina->setDisabled(true);
04166         ui->actionRetrocederBoton->setDisabled(true);
04167         ui->pushButtonEditarPagina->setDisabled(true);
04168         ui->actionEditar->setDisabled(true);
04169         ui->actionEditarBoton->setDisabled(true);
04170         ui->pushButtonEditarPagina->show();
04171         ui->pushButtonTerminarPagina->setDisabled(true);
04172         ui->pushButtonTerminarPagina->show();
04173         IndicePaginas=0;
04174         dimensionWpagina=0;
04175         dimensionHpagina=0;
04176         
04177         ui->selectFoto1->setDisabled(true);
04178         ui->selectFoto2->setDisabled(true);
04179         ui->botonPrueba->setDisabled(true);
04180         ui->botonTexto->setDisabled(true);
04181         ui->pushButtonFondoPortada->setDisabled(true);
04182         ui->pushCrearPaginas->setDisabled(true);
04183         ui->pushOpen->setDisabled(true);
04184         ui->actionAnnadirBoton->setDisabled(true);
04185         ui->actionA_adir_im_genes->setDisabled(true);
04186         ui->pushRemoveSelect->setDisabled(true);
04187         this->ui->actionBorrar_selecci_n->setDisabled(true);
04188         this->ui->actionEliminarFotosBoton->setDisabled(true);
04189         ui->pushCheckAll->setDisabled(true);
04190         ui->actionSeleccionarTodoBoton->setDisabled(true);
04191         ui->actionSeleccionar_todo->setDisabled(true);
04192         ui->pushUncheckAll->setDisabled(true);
04193          ui->actionDeseleccionarTodoBoton->setDisabled(true);
04194         this->ui->actionDeseleccionar_todo->setDisabled(true);
04195         ui->activatedPlantilla->setEnabled(true);
04196         ui->selectorPlantilla->clear();
04197         ui->treeWidget->clear();
04198         ui->treeWidget->setEnabled(true);
04199         if(this->activadoVisualizadorPrincipal){
04200             
04201            
04202             this->activadoVisualizadorPrincipal=false;
04203             
04204         }
04205           
04206          
04207         if(this->ActivadoVisorImagenes){
04208                 ui->imagePreview->scene()->clear();
04209                 this->ActivadoVisorImagenes=false;
04210         }
04211           
04212         ui->actionG_uardar_como->setDisabled(true);
04213         ui->actionGuardarComoBoton->setDisabled(true);
04214         ui->action_Guardar->setDisabled(true);
04215         ui->actionGuardarBoton->setDisabled(true);
04216       
04217         
04218         
04219         
04220         try{
04221         this->a=new Album(this);
04222         }catch(std::exception& e){
04223                         Error *err=new Error(1, e.what(), this);
04224                         err->LanzarDialogo();
04225                         delete err;
04226                         exit(1);
04227                     }
04228         for(unsigned eliminador=0; eliminador < this->miniaturas.size(); eliminador++){
04229                 delete this->miniaturas.at(eliminador);
04230         }
04231         this->miniaturas.clear();
04232         this->iAList.clear();
04233         this->readableFiltersString.clear();
04234         ui->action_Nuevo->setDisabled(true);
04235         ui->actionNuevoBoton->setDisabled(true);
04236         ui->actionE_xportar->setDisabled(true);
04237         ui->actionExportarJPGBoton->setDisabled(true);
04238         ui->actionExportarPDFBoton->setDisabled(true);
04239         ui->actionI_mprimir->setDisabled(true);
04240         ui->actionImprimirBoton->setDisabled(true);
04241     }
04242     this->DesactivarParteEdicion=false;
04243     this->DesactivarParteEdicionPortada=false;
04244     this->paginasDesplazadas.clear();
04245     this->portadaDesplazada.clear();
04246     this->portadaDesplazada="";
04247     this->posicionesItemsPortada.clear();
04248     this->posXFotoDesplazada.clear();
04249     this->posXFotoDesplazadaPortada.clear();
04250     this->posXTextoDesplazado.clear();
04251     this->posXTextoDesplazadoPortada.clear();
04252     this->posYFotoDesplazada.clear();
04253     this->posYFotoDesplazadaPortada.clear();
04254     this->posYTextoDesplazado.clear();
04255     this->posYTextoDesplazadoPortada.clear();
04256     ui->actionTama_o->setDisabled(true);
04257     ui->actionEditarTamBoton->setDisabled(true);
04258     this->preguntaSeguridad=false;
04259     
04260     QString path=this->directoriodetrabajo.absolutePath() + "/data/templatePredef.png";
04261     QPixmap *pix=new QPixmap(path);
04262     QGraphicsScene *scena=new QGraphicsScene();
04263     
04264     ui->plantillaPreview->setScene(scena);
04265     scena->addPixmap(pix->scaled(this->controlador->getWvisorPlantilla(), this->controlador->getHvisorPlantilla(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
04266     delete pix;
04267     
04268     QGraphicsScene *escenaP;
04269     QImage *imgP;
04270         try{
04271         escenaP = new QGraphicsScene();
04272         this->ui->imagePreview->setScene(escenaP);
04273         imgP = new QImage();
04274         }catch(std::exception& e){
04275                         Error *err=new Error(2, e.what(), this);
04276                         err->LanzarDialogo();
04277                         delete err;
04278                         exit(1);
04279         }
04280         try{
04281         imgP->load(this->directoriodetrabajo.absolutePath() + "/data/imagePrev.png");
04282         if(imgP->isNull()){
04283             throw std::ios_base::failure(tr("No pudo previsualizarse la imagen.").toStdString());
04284         }
04285         }catch(std::exception& e){
04286                         Error *err=new Error(4, e.what(), this);
04287                         err->LanzarDialogo();
04288                         delete err;
04289                         exit(1);
04290         }
04291             
04292         QPixmap imageP=QPixmap::fromImage(*imgP);
04293         this->nadacreado=true;
04294         this->ui->imagePreview->scene()->addPixmap(imageP.scaled(this->controlador->getWvisorImagenes(), this->controlador->getHvisorImagenes(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
04295         this->ui->imagePreview->setStyleSheet("background: transparent; border: none");
04296         delete imgP;
04297 }
04298 
04299 bool FormPrincipal::seleccionadaPlantilla(){
04300     return this->elegidaPlantilla;
04301 }
04302 
04303 void FormPrincipal::Imprimir(){
04304     
04305     QSizeF tam(a->portada->GetW(), a->portada->GetH());
04306     QString mensaje= "Para poder imprimir el álbum en el tamaño definido ";
04307     if(a->portada->GetW()==1687){
04308         mensaje=mensaje+"(22 x 31 mm)";
04309     }
04310     if(a->portada->GetW()==1207){
04311         mensaje=mensaje+"(16 x 22 mm)";
04312     }
04313     if(a->portada->GetW()==2229){
04314         mensaje=mensaje+"(29 x 41 mm)";
04315     }
04316     mensaje=mensaje+ ", procure que su impresora sea apta y esté configurada para ello.";
04317     QMessageBox::information(this, tr("Advertencia"), tr(mensaje.toStdString().c_str()), QMessageBox::Accepted);
04318     
04319     QPrintDialog *impresora;
04320     try{
04321     impresora= new QPrintDialog();
04322     }catch(std::exception& e){
04323           Error *err=new Error(2, e.what(), this);
04324           err->LanzarDialogo();
04325           delete err;
04326           exit(1);
04327     }
04328     impresora->exec();
04329     if(impresora->result()==1){
04330     
04331     impresora->printer()->setPageMargins(0, 0, 0, 0, QPrinter::DevicePixel);
04332     if(this->creadasPaginas){
04333     impresora->printer()->setFromTo(0,a->paginas.size()+1);
04334     }else{
04335         impresora->printer()->setFromTo(0,0);
04336     }
04337     QPainter painter(impresora->printer());
04338     QGraphicsScene *escenaFinal;
04339     try{
04340     escenaFinal= new QGraphicsScene();
04341     }catch(std::exception& e){
04342                         Error *err=new Error(2, e.what(), this);
04343                         err->LanzarDialogo();
04344                         delete err;
04345                         exit(1);
04346                     } 
04347     a->portada->versionFinal->setScene(escenaFinal);
04348     a->portada->versionFinal->setSceneRect(0,0,a->portada->GetW(), a->portada->GetH());
04349     
04350     if(a->portada->ColordeFondo()){
04351         //Establecemos de fondo un color.
04352         if(!this->a->portada->activadaMascara()){
04353         QBrush *wallFinal= new QBrush(a->portada->FondoClr());
04354         a->portada->versionFinal->scene()->setBackgroundBrush(*wallFinal);
04355         delete wallFinal;
04356         if(a->portada->GetW()>1711 && a->portada->GetW()<2000){
04357             a->portada->versionFinal->scene()->addLine(0, 0, a->portada->GetW(), 0);
04358             
04359         }else{
04360 
04361             if(a->portada->GetW()>2000){
04362                 a->portada->versionFinal->scene()->addLine(0, 0, a->portada->GetW(), 0);
04363 
04364 
04365             }else{
04366                 
04367                 a->portada->versionFinal->scene()->addLine(0,0,a->portada->GetW(),0);
04368                 
04369                 
04370             }
04371 
04372         }
04373         }
04374     }else{
04375         if(!this->a->portada->activadaMascara()){
04376         //Establecemos de fondo una imagen, escalaremos todo al final
04377         QPixmap *gfinal;
04378         try{
04379         gfinal=new QPixmap(a->portada->FondoImg());
04380         if(gfinal->isNull()){
04381             throw std::ios_base::failure(tr("No pudo abrirse la imagen de fondo de la portada.").toStdString());
04382         }
04383         }catch(std::exception& e){
04384                         Error *err=new Error(4, e.what(), this);
04385                         err->LanzarDialogo();
04386                         delete err;
04387                         exit(1);
04388                     } 
04389        
04390         QGraphicsPixmapItem *itemfinal=new QGraphicsPixmapItem(gfinal->scaled(a->portada->GetW(), a->portada->GetH(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
04391         itemfinal->setPos(0, 0);
04392         a->portada->versionFinal->scene()->addItem(itemfinal);
04393         delete gfinal;
04394     }
04395     }
04396     if(this->a->portada->hayImagenTrasera()){
04397     // Imagen Trasera
04398     QPixmap *hfinal;
04399     try{
04400     hfinal=new QPixmap(a->portada->RutaFotoTrasera());
04401     if(hfinal->isNull()){
04402         throw std::ios_base::failure(tr("No pudo abrirse la imagen trasera de la portada.").toStdString());
04403     }
04404     }catch(std::exception& e){
04405                         Error *err=new Error(4, e.what(), this);
04406                         err->LanzarDialogo();
04407                         delete err;
04408                         exit(1);
04409                     } 
04410     
04411     QGraphicsPixmapItem *item2final;
04412     
04413     
04414     if(hfinal->width() > hfinal->height()){
04415         if(a->portada->getImagenPosVertical("trasera")){
04416             item2final=new QGraphicsPixmapItem(hfinal->scaled((a->portada->DimensionHImagenTrasera()*a->portada->GetW())/(this->controlador->getWVisorAlbum()), (a->portada->DimensionWImagenTrasera()*a->portada->GetH())/(this->controlador->getHVisorAlbum()), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
04417             item2final->setPos(((((a->portada->PosicionXImagenTrasera()+a->portada->DimensionWImagenTrasera())*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosicionYImagenTrasera()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
04418 
04419             item2final->setRotation(90);
04420             item2final->setAcceptTouchEvents(true);    
04421         }else{
04422              item2final=new QGraphicsPixmapItem(hfinal->scaled((a->portada->DimensionWImagenTrasera()*a->portada->GetW())/(this->controlador->getWVisorAlbum()), (a->portada->DimensionHImagenTrasera()*a->portada->GetH())/(this->controlador->getHVisorAlbum()), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
04423              item2final->setPos((((a->portada->PosicionXImagenTrasera()*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosicionYImagenTrasera()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
04424 
04425         }
04426     }else{
04427         if(!a->portada->getImagenPosVertical("trasera")){
04428             item2final=new QGraphicsPixmapItem(hfinal->scaled((a->portada->DimensionHImagenTrasera()*a->portada->GetW())/(this->controlador->getWVisorAlbum()), (a->portada->DimensionWImagenTrasera()*a->portada->GetH())/(this->controlador->getHVisorAlbum()), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
04429             item2final->setPos(((((a->portada->PosicionXImagenTrasera()+a->portada->DimensionWImagenTrasera())*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosicionYImagenTrasera()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
04430 
04431             item2final->setRotation(90);
04432               item2final->setAcceptTouchEvents(true);
04433         }else{
04434              item2final=new QGraphicsPixmapItem(hfinal->scaled((a->portada->DimensionWImagenTrasera()*a->portada->GetW())/(this->controlador->getWVisorAlbum()), (a->portada->DimensionHImagenTrasera()*a->portada->GetH())/(this->controlador->getHVisorAlbum()), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
04435              item2final->setPos((((a->portada->PosicionXImagenTrasera()*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosicionYImagenTrasera()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
04436 
04437             
04438         }
04439         
04440     }     
04441     if(!this->a->portada->activadaMascara()){
04442             
04443    item2final->setAcceptHoverEvents(true);
04444     }
04445     a->portada->versionFinal->scene()->addItem(item2final);
04446     delete hfinal;
04447     }
04448     
04449     if(this->a->portada->hayImagenFrontal()){
04450     // Imagen Frontal
04451     QPixmap *ifinal;
04452     try{
04453     ifinal=new QPixmap(a->portada->RutaFotoFrontal());
04454     if(ifinal->isNull()){
04455         throw std::ios_base::failure(tr("No pudo abrirse la imagen frontal de la portada.").toStdString());
04456     }
04457     }catch(std::exception& e){
04458           Error *err=new Error(4, e.what(), this);
04459           err->LanzarDialogo();
04460           delete err;
04461           exit(1);
04462     } 
04463     QGraphicsPixmapItem *item3final;
04464     
04465     if(ifinal->width() > ifinal->height()){
04466         if(a->portada->getImagenPosVertical("frontal")){
04467             item3final=new QGraphicsPixmapItem(ifinal->scaled(((a->portada->DimensionHImagenFrontal()*a->portada->GetW())/(this->controlador->getWVisorAlbum())), ((a->portada->DimensionWImagenFrontal()*a->portada->GetH())/(this->controlador->getHVisorAlbum())), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
04468             item3final->setPos(((((a->portada->PosicionXImagenFrontal() + a->portada->DimensionWImagenFrontal())*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosicionYImagenFrontal()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
04469 
04470             item3final->setRotation(90);
04471             item3final->setAcceptTouchEvents(true);    
04472         }else{
04473             item3final=new QGraphicsPixmapItem(ifinal->scaled(((a->portada->DimensionWImagenFrontal()*a->portada->GetW())/(this->controlador->getWVisorAlbum())), ((a->portada->DimensionHImagenFrontal()*a->portada->GetH())/(this->controlador->getHVisorAlbum())), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
04474             item3final->setPos((((a->portada->PosicionXImagenFrontal()*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosicionYImagenFrontal()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
04475 
04476         }
04477     }else{
04478         if(!a->portada->getImagenPosVertical("frontal")){
04479             item3final=new QGraphicsPixmapItem(ifinal->scaled(((a->portada->DimensionHImagenFrontal()*a->portada->GetW())/(this->controlador->getWVisorAlbum())), ((a->portada->DimensionWImagenFrontal()*a->portada->GetH())/(this->controlador->getHVisorAlbum())), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
04480             item3final->setPos(((((a->portada->PosicionXImagenFrontal() + a->portada->DimensionWImagenFrontal())*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosicionYImagenFrontal()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
04481 
04482              item3final->setRotation(90);
04483               item3final->setAcceptTouchEvents(true);
04484         }else{
04485             item3final=new QGraphicsPixmapItem(ifinal->scaled(((a->portada->DimensionWImagenFrontal()*a->portada->GetW())/(this->controlador->getWVisorAlbum())), ((a->portada->DimensionHImagenFrontal()*a->portada->GetH())/(this->controlador->getHVisorAlbum())), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
04486             item3final->setPos((((a->portada->PosicionXImagenFrontal()*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosicionYImagenFrontal()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
04487 
04488             
04489         }
04490         
04491     }
04492     if(!this->a->portada->activadaMascara()){
04493             
04494     item3final->setAcceptHoverEvents(true);
04495     }
04496     a->portada->versionFinal->scene()->addItem(item3final);
04497     delete ifinal;
04498     }
04499     
04500     if(this->a->portada->activadaMascara() && this->a->portada->ColordeFondo()){
04501             
04502                 
04503                 QString path= this->directoriodetrabajo.absolutePath() + "/templates/" + this->a->portada->getMascara(); 
04504                 QImage *img=new QImage(path);
04505                 QRgb color=this->a->portada->FondoClr().rgb();
04506                 for(int a=0; a < img->width(); a++){
04507                     for(int b=0; b < img->height(); b++){
04508                         if(img->pixel(a,b)!=0){
04509                         img->setPixel(a,b,color);
04510                         }
04511                     }
04512                 }
04513                 QPixmap *g=new QPixmap();
04514                 g->convertFromImage(*img, Qt::AutoColor);
04515                
04516                 QGraphicsPixmapItem *item=new QGraphicsPixmapItem(g->scaled(this->a->portada->GetW(), this->a->portada->GetH(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
04517                 item->setPos(0, 0);
04518                 item->setAcceptHoverEvents(false);
04519                 this->a->portada->versionFinal->scene()->addItem(item);
04520                 delete img;
04521                 delete g;
04522         }
04523         
04524         if(this->a->portada->activadaMascara() && !this->a->portada->ColordeFondo()){
04525             
04526                 QString path= this->directoriodetrabajo.absolutePath() + "/templates/" + this->a->portada->getMascara(); 
04527                 QImage *mascara=new QImage(path);
04528                 QImage *imgFondo=new QImage(this->a->portada->FondoImg());
04529                 QImage imgFinal=mascara->scaled(imgFondo->width(), imgFondo->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
04530                 
04531                 for(int a=0; a < imgFinal.width(); a++){
04532                     for(int b=0; b < imgFinal.height(); b++){
04533                         if(imgFinal.pixel(a,b)!=0){
04534                         imgFinal.setPixel(a,b,imgFondo->pixel(a,b));
04535                         }
04536                     }
04537                 }
04538                 QPixmap *g=new QPixmap();
04539                 
04540                 g->convertFromImage(imgFinal, Qt::AutoColor);
04541                 QGraphicsPixmapItem *item=new QGraphicsPixmapItem(g->scaled(this->a->portada->GetW(), this->a->portada->GetH(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
04542                 item->setPos(0, 0);
04543                 item->setAcceptHoverEvents(false);
04544                 this->a->portada->versionFinal->scene()->addItem(item);
04545                 delete mascara;
04546                 delete imgFondo;
04547                 delete g;
04548         }
04549     
04550     
04551     if(this->a->portada->hayTextoFrontal()){
04552     // Texto Frontal
04553     QGraphicsTextItem *TFFinal=new QGraphicsTextItem(a->portada->TextoFrontal());
04554     QFont *fuenteFFinal=new QFont(a->portada->FuenteTextoFrontal().family(),((a->portada->TamTextoFrontal()*(a->portada->GetW()))/(this->controlador->getWVisorAlbum())), 50, a->portada->CursivaTextoFrontal());
04555     if(a->portada->NegritaTextoFrontal()){
04556         fuenteFFinal->setBold(true);
04557     }
04558     if(a->portada->SubrayadoTextoFrontal()){
04559         fuenteFFinal->setUnderline(true);
04560     }
04561 
04562     TFFinal->setDefaultTextColor(a->portada->ColorTextoFrontal());
04563     TFFinal->setFont(*fuenteFFinal);
04564 
04565     TFFinal->setTextWidth(((a->portada->WTextoFrontal()*a->portada->GetW())/(this->controlador->getWVisorAlbum())));
04566     if(a->portada->VerticalTextoFrontal()){
04567         TFFinal->setRotation(90);
04568     }
04569 
04570     TFFinal->setPos((((a->portada->PosXTextoFrontal()*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosYTextoFrontal()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
04571     if(a->portada->CentradoTextoFrontal()){
04572         // Para centrar el texto
04573         QTextCursor cursorFronFin = TFFinal->textCursor();
04574         QTextBlockFormat bfmtFronFin = cursorFronFin.blockFormat();
04575         bfmtFronFin.setAlignment(Qt::AlignCenter);
04576         cursorFronFin.setBlockFormat(bfmtFronFin);
04577         TFFinal->setTextCursor(cursorFronFin);
04578     }
04579 
04580     a->portada->versionFinal->scene()->addItem(TFFinal);
04581     delete fuenteFFinal;
04582     }
04583     
04584     if(this->a->portada->hayTextoTrasero()){
04585     // Texto Trasero
04586     QGraphicsTextItem *TTFinal=new QGraphicsTextItem(a->portada->TextoTrasera());
04587     QFont *fuenteTFinal=new QFont(a->portada->FuenteTextoTrasera().family(),((a->portada->TamTextoTrasera()*(a->portada->GetW()))/(this->controlador->getWVisorAlbum())), 50, a->portada->CursivaTextoTrasera());
04588     if(a->portada->NegritaTextoTrasera()){
04589         fuenteTFinal->setBold(true);
04590     }
04591     if(a->portada->SubrayadoTextoTrasera()){
04592         fuenteTFinal->setUnderline(true);
04593     }
04594     TTFinal->setFont(*fuenteTFinal);
04595     TTFinal->setTextWidth(((a->portada->WTextoTrasera()*a->portada->GetW())/(this->controlador->getWVisorAlbum())));
04596     if(a->portada->VerticalTextoTrasera()){
04597         TTFinal->setRotation(90);
04598     }
04599     TTFinal->setPos((((a->portada->PosXTextoTrasera()*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosYTextoTrasera()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
04600     TTFinal->setDefaultTextColor(a->portada->ColorTextoTrasera());
04601     if(a->portada->CentradoTextoTrasera()){
04602         // Para centrar el texto
04603         QTextCursor cursorTTrasFin = TTFinal->textCursor();
04604         QTextBlockFormat bfmtTTrasFin = cursorTTrasFin.blockFormat();
04605         bfmtTTrasFin.setAlignment(Qt::AlignCenter);
04606         cursorTTrasFin.setBlockFormat(bfmtTTrasFin);
04607         TTFinal->setTextCursor(cursorTTrasFin);
04608     }
04609     
04610     
04611     a->portada->versionFinal->scene()->addItem(TTFinal);
04612     delete fuenteTFinal;
04613     }
04614     // Dimensiones PDF W: 5402.45 H: 3730.8
04615     if(this->ui->actionLineaSeparacionPortada->isChecked()){
04616         if(a->portada->GetW()>1711 && a->portada->GetW()<2000){
04617                 //Tamaño clásico
04618                 a->portada->versionFinal->scene()->addLine((a->portada->GetW()*216/462), 2, ((a->portada->GetW())*216/462), a->portada->GetH());
04619                 a->portada->versionFinal->scene()->addLine(((a->portada->GetW())*247/462), 2, ((a->portada->GetW())*247/462), a->portada->GetH());
04620     }else{
04621         if(a->portada->GetW()>2000){
04622             //Tamaño Maxi
04623             a->portada->versionFinal->scene()->addLine(((a->portada->GetW())*216/462), 2, ((a->portada->GetW())*216/462), a->portada->GetH());
04624             a->portada->versionFinal->scene()->addLine(((a->portada->GetW())*247/462), 2, ((a->portada->GetW())*247/462), a->portada->GetH());
04625 
04626         }else{
04627             //Tamaño Mini
04628             a->portada->versionFinal->scene()->addLine(((a->portada->GetW())*216/462), 2, ((a->portada->GetW())*216/462), a->portada->GetH());
04629             a->portada->versionFinal->scene()->addLine(((a->portada->GetW())*247/462), 2, ((a->portada->GetW())*247/462), a->portada->GetH());
04630 
04631         }
04632 
04633     }
04634     }else{
04635        if(a->portada->GetW()>1711 && a->portada->GetW()<2000){
04636                 //Tamaño clásico
04637                 a->portada->versionFinal->scene()->addLine((a->portada->GetW()), 2, ((a->portada->GetW())), a->portada->GetH());
04638                 a->portada->versionFinal->scene()->addLine((a->portada->GetW()), 2, ((a->portada->GetW())), a->portada->GetH());
04639        
04640        }else{
04641         if(a->portada->GetW()>2000){
04642             
04643             a->portada->versionFinal->scene()->addLine(((a->portada->GetW())), 2, ((a->portada->GetW())), a->portada->GetH());
04644             a->portada->versionFinal->scene()->addLine(((a->portada->GetW())), 2, ((a->portada->GetW())), a->portada->GetH());
04645             
04646         }else{
04647             //Tamaño Mini
04648             a->portada->versionFinal->scene()->addLine(((a->portada->GetW())), 2, ((a->portada->GetW())), a->portada->GetH());
04649             a->portada->versionFinal->scene()->addLine(((a->portada->GetW())), 2, ((a->portada->GetW())), a->portada->GetH());
04650             
04651         }
04652 
04653     } 
04654     }
04655     if(this->a->portada->hayTextoLateral()){
04656     // Texto Lateral
04657     QGraphicsTextItem *TLFinal=new QGraphicsTextItem(a->portada->TextoLateral());
04658     QFont *fuenteLFinal=new QFont(a->portada->FuenteTextoLateral().family(), ((a->portada->TamTextoLateral()*(a->portada->GetW()))/(this->controlador->getWVisorAlbum())), 50, a->portada->CursivaTextoLateral());
04659     if(a->portada->NegritaTextoLateral()){
04660         fuenteLFinal->setBold(true);
04661     }
04662 
04663     if(a->portada->SubrayadoTextoLateral()){
04664         fuenteLFinal->setUnderline(true);
04665     }
04666     TLFinal->setFont(*fuenteLFinal);
04667     
04668     if(a->portada->VerticalTextoLateral()){
04669         TLFinal->setRotation(90);
04670         
04671     }
04672     TLFinal->setPos((((a->portada->PosXTextoLateral()*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosYTextoLateral()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
04673     TLFinal->setDefaultTextColor(a->portada->ColorTextoLateral());
04674     if(a->portada->CentradoTextoLateral()){
04675         // Para centrar el texto
04676         QTextCursor cursorLLatFin = TLFinal->textCursor();
04677         QTextBlockFormat bfmtLLatFin = cursorLLatFin.blockFormat();
04678         bfmtLLatFin.setAlignment(Qt::AlignCenter);
04679         cursorLLatFin.setBlockFormat(bfmtLLatFin);
04680         TLFinal->setTextCursor(cursorLLatFin);
04681     }
04682 
04683 
04684     a->portada->versionFinal->scene()->addItem(TLFinal);
04685     delete fuenteLFinal;
04686     }
04687     unsigned iItem, itexto;
04688     iItem=0;
04689     itexto=0;
04690     try{
04691     if(!this->posicionesItemsPortada.isEmpty()){
04692         for(int d=0; d < this->a->portada->getObjetosPortada().size(); d++){
04693             float x, y, posx, posy;
04694             if(this->a->portada->getObjetosPortada().at(d)->acceptHoverEvents()){
04695             posx=this->posicionesItemsPortada[iItem].x;
04696             posy=this->posicionesItemsPortada[iItem].y;
04697             x=((posx*(a->portada->GetW()))/(this->controlador->getWVisorAlbum()));
04698             y=((posy*(a->portada->GetH()))/(this->controlador->getHVisorAlbum()));
04699             a->portada->versionFinal->items().at(d)->setPos(x,y);
04700             iItem++;
04701             }
04702             
04703         }
04704     }
04705     }catch(std::exception& e){
04706                         Error *err=new Error(1, e.what(), this);
04707                         err->LanzarDialogo();
04708                         delete err;
04709                         exit(1);
04710                     } 
04711     
04712    
04713     
04714     a->portada->versionFinal->scene()->render(&painter);
04715     
04716     
04717     if(this->creadasPaginas){
04718        
04719      QProgressBar *barra= new QProgressBar(this);
04720       int wAux=this->ui->statusBar->width();
04721       barra->setFixedWidth((294*this->controlador->getWPrincipal())/1014);
04722       barra->setFixedHeight((23*this->controlador->getHPrincipal())/705);
04723       this->ui->statusBar->setMaximumWidth(((986-270)*this->controlador->getWPrincipal())/1014);
04724       barra->move((this->controlador->getWPrincipal()*720)/1014, (this->controlador->getHPrincipal()*683)/705);
04725     
04726     
04727      
04728         barra->setRange(0, a->paginas.size()+1);
04729         barra->show();
04730         try{
04731     for(unsigned contador=0; contador < a->paginas.size(); contador++){
04732         barra->setValue(contador);
04733         if(this->ui->actionLineaSeparacionPaginas->isChecked()){
04734             a->paginas[contador]->versionReducida->scene()->removeItem(a->paginas[contador]->versionReducida->scene()->itemAt(231*(this->controlador->getWVisorAlbum())/462, 2));
04735         }
04736         
04737              impresora->printer()->newPage();
04738         painter.begin(impresora->printer());
04739         
04740         
04741         
04742         this->a->paginas[contador]->versionFinal->setSceneRect(0,0, this->dimensionWpagina, this->dimensionHpagina);
04743         QGraphicsScene *escenaFinal;
04744         try{
04745         escenaFinal= new QGraphicsScene();
04746         }catch(std::exception& e){
04747                         Error *err=new Error(2, e.what(), this);
04748                         err->LanzarDialogo();
04749                         delete err;
04750                         exit(1);
04751         } 
04752         this->a->paginas[contador]->versionFinal->setScene(escenaFinal);
04753         bool avisador=false;
04754         if(this->a->paginas[contador]->ColordeFondo() && !this->a->paginas[contador]->activadaMascara()){
04755             QBrush *wallFinal= new QBrush(this->a->paginas[contador]->GetFondoColor());
04756             this->a->paginas[contador]->versionFinal->scene()->setBackgroundBrush(*wallFinal);
04757             if(this->dimensionWpagina>1711 && this->dimensionWpagina<2000){
04758                 this->a->paginas[contador]->versionFinal->scene()->addLine(0, 0, this->dimensionWpagina, 0);
04759                 QPen *pen=new QPen(this->a->paginas[contador]->GetFondoColor());
04760                 this->a->paginas[contador]->versionFinal->scene()->addLine(((this->dimensionWpagina)*216/462), 2, ((this->dimensionWpagina)*216/462), (this->dimensionHpagina), *pen);
04761             }else{
04762 
04763                 if(this->dimensionWpagina>2000){
04764                     this->a->paginas[contador]->versionFinal->scene()->addLine(0, 0, this->dimensionWpagina, 0);
04765                     QPen *pen=new QPen(this->a->paginas[contador]->GetFondoColor());
04766                     this->a->paginas[contador]->versionFinal->scene()->addLine(((this->dimensionWpagina)*216/462), 2, ((this->dimensionWpagina)*216/462), ((this->dimensionHpagina)), *pen);
04767                 }else{
04768                     this->a->paginas[contador]->versionFinal->scene()->addLine(0, 0, this->dimensionWpagina, 0);
04769                     QPen *pen=new QPen(this->a->paginas[contador]->GetFondoColor());
04770                     this->a->paginas[contador]->versionFinal->scene()->addLine(((this->dimensionWpagina)*216/462), 2, ((this->dimensionWpagina)*216/462), ((this->dimensionHpagina)), *pen);
04771                 }
04772 
04773             }
04774             delete wallFinal;
04775         }else{
04776             if(!this->a->paginas[contador]->activadaMascara()){
04777             avisador=true;
04778             QPixmap *gfinal;
04779             try{
04780             gfinal=new QPixmap(this->a->paginas[contador]->GetFondoImagen());
04781             if(gfinal->isNull()){
04782                 throw std::ios_base::failure(tr("No pudo abrirse la imagen de fondo de una de las páginas.").toStdString());
04783             }
04784             }catch(std::exception& e){
04785                         Error *err=new Error(4, e.what(), this);
04786                         err->LanzarDialogo();
04787                         delete err;
04788                         exit(1);
04789                     } 
04790             QGraphicsPixmapItem *itemfinal=new QGraphicsPixmapItem(gfinal->scaled(this->dimensionWpagina, this->dimensionHpagina, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
04791             itemfinal->setPos(0, 0);
04792             this->a->paginas[contador]->versionFinal->scene()->addItem(itemfinal);
04793             delete gfinal;
04794         }
04795         }
04796         
04797         
04798         
04799         
04800         for(unsigned contador2=0; contador2 < this->a->paginas[contador]->GetVectorImagenes().size(); contador2++){
04801             QPixmap *hfinal;
04802             try{
04803             hfinal=new QPixmap(this->a->paginas[contador]->GetVectorImagenes().at(contador2).ruta);
04804             if(hfinal->isNull()){
04805                 throw std::ios_base::failure(tr("No pudo abrirse una de las imagenes de una de las páginas.").toStdString());
04806             }
04807             }catch(std::exception& e){
04808                         Error *err=new Error(4, e.what(), this);
04809                         err->LanzarDialogo();
04810                         delete err;
04811                         exit(1);
04812                     } 
04813             QGraphicsPixmapItem *item2final;
04814             if(hfinal->width() > hfinal->height()){
04815                 if(this->a->paginas[contador]->getImagenPosVertical(contador2)){
04816                     item2final=new QGraphicsPixmapItem(hfinal->scaled(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).h)*(this->dimensionWpagina/(this->controlador->getWVisorAlbum()))), (((this->a->paginas[contador]->GetVectorImagenes().at(contador2).w)*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum())), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
04817                     item2final->setPos(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).pos_x + this->a->paginas[contador]->GetVectorImagenes().at(contador2).w)*(this->dimensionWpagina/(this->controlador->getWVisorAlbum()))),(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).pos_y)*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum())));
04818                     item2final->setRotation(90);
04819                     item2final->setAcceptTouchEvents(true);
04820                 }else{
04821                     item2final=new QGraphicsPixmapItem(hfinal->scaled(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).w)*(this->dimensionWpagina/(this->controlador->getWVisorAlbum()))), (((this->a->paginas[contador]->GetVectorImagenes().at(contador2).h)*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum())), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
04822                      item2final->setPos(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).pos_x)*(this->dimensionWpagina/(this->controlador->getWVisorAlbum()))),(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).pos_y)*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum())));
04823             
04824                 }
04825             }else{
04826                if(!this->a->paginas[contador]->getImagenPosVertical(contador2)){
04827                    item2final=new QGraphicsPixmapItem(hfinal->scaled(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).h)*(this->dimensionWpagina/(this->controlador->getWVisorAlbum()))), (((this->a->paginas[contador]->GetVectorImagenes().at(contador2).w)*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum())), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
04828                    item2final->setPos(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).pos_x + this->a->paginas[contador]->GetVectorImagenes().at(contador2).w)*(this->dimensionWpagina/(this->controlador->getWVisorAlbum()))),(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).pos_y)*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum())));
04829                    item2final->setRotation(90);
04830                    item2final->setAcceptTouchEvents(true);
04831                }else{
04832                   item2final=new QGraphicsPixmapItem(hfinal->scaled(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).w)*(this->dimensionWpagina/(this->controlador->getWVisorAlbum()))), (((this->a->paginas[contador]->GetVectorImagenes().at(contador2).h)*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum())), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
04833                   item2final->setPos(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).pos_x)*(this->dimensionWpagina/(this->controlador->getWVisorAlbum()))),(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).pos_y)*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum())));
04834             
04835                }
04836                  
04837             }
04838             if(!this->a->GetPagina(contador)->activadaMascara()){
04839             
04840             item2final->setAcceptHoverEvents(true);
04841             }
04842             this->a->paginas[contador]->versionFinal->scene()->addItem(item2final);
04843             delete hfinal;
04844         }
04845        //Imágenes ya cargadas
04846         
04847         
04848         if(this->a->GetPagina(contador)->activadaMascara() && this->a->GetPagina(contador)->ColordeFondo()){
04849             
04850                
04851                 QString path= this->directoriodetrabajo.absolutePath() + "/templates/pages/" + a->GetPagina(contador)->getMascara(); 
04852                 QImage *img=new QImage(path);
04853                 QRgb color=this->a->GetPagina(contador)->GetFondoColor().rgb();
04854                 for(int ap=0; ap < img->width(); ap++){
04855                     for(int b=0; b < img->height(); b++){
04856                         if(img->pixel(ap,b)!=0){
04857                         img->setPixel(ap,b,color);
04858                         }
04859                     }
04860                 }
04861                 QPixmap *g=new QPixmap();
04862                 g->convertFromImage(*img, Qt::AutoColor);
04863                
04864                 QGraphicsPixmapItem *item=new QGraphicsPixmapItem(g->scaled(this->dimensionWpagina, this->dimensionHpagina, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
04865                 item->setPos(0, 0);
04866                 item->setAcceptHoverEvents(false);
04867                 this->a->paginas[contador]->versionFinal->scene()->addItem(item);
04868                 delete img;
04869                 delete g;
04870         }
04871         
04872         if(this->a->GetPagina(contador)->activadaMascara() && !this->a->GetPagina(contador)->ColordeFondo()){
04873             
04874           
04875                 QString path= this->directoriodetrabajo.absolutePath() + "/templates/pages/" + a->GetPagina(contador)->getMascara(); 
04876                 QImage *mascara=new QImage(path);
04877                 QImage *imgFondo=new QImage(this->a->GetPagina(contador)->GetFondoImagen());
04878                 QImage imgFinal=mascara->scaled(imgFondo->width(), imgFondo->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
04879                 
04880                 for(int z=0; z < imgFinal.width(); z++){
04881                     for(int b=0; b < imgFinal.height(); b++){
04882                         if(imgFinal.pixel(z,b)!=0){
04883                         imgFinal.setPixel(z,b,imgFondo->pixel(z,b));
04884                         }
04885                     }
04886                 }
04887                 QPixmap *g=new QPixmap();
04888                 
04889                 g->convertFromImage(imgFinal, Qt::AutoColor);
04890                 QGraphicsPixmapItem *item=new QGraphicsPixmapItem(g->scaled(this->dimensionWpagina, this->dimensionHpagina, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
04891                 item->setPos(0, 0);
04892                 item->setAcceptHoverEvents(false);
04893                 a->paginas[contador]->versionFinal->scene()->addItem(item);
04894                 delete mascara;
04895                 delete imgFondo;
04896                 delete g;
04897         }
04898         
04899         
04900         
04901         if(this->a->paginas[contador]->GetNumTextos()!=0){
04902             for(unsigned contador3=0; contador3 < this->a->paginas[contador]->GetVectorTextos().size(); contador3++){
04903                 ATexto txt=this->a->paginas[contador]->GetVectorTextos().at(contador3);
04904                  QGraphicsTextItem *TFFinal=new QGraphicsTextItem(this->a->paginas[contador]->Texto(txt));
04905                 QFont *fuenteFFinal=new QFont(this->a->paginas[contador]->FuenteTexto(txt).family(),((this->a->paginas[contador]->TamTexto(txt)*(a->portada->GetW()))/(this->controlador->getWVisorAlbum())), 50, this->a->paginas[contador]->CursivaTexto(txt));
04906                 if(this->a->paginas[contador]->NegritaTexto(txt)){
04907                         fuenteFFinal->setBold(true);
04908                 }
04909                 if(this->a->paginas[contador]->SubrayadoTexto(txt)){
04910                         fuenteFFinal->setUnderline(true);
04911                 }
04912 
04913                 TFFinal->setDefaultTextColor(this->a->paginas[contador]->ColorTexto(txt));
04914                 TFFinal->setFont(*fuenteFFinal);
04915 
04916                 TFFinal->setTextWidth(((this->a->paginas[contador]->WTexto(txt)*a->portada->GetW())/(this->controlador->getWVisorAlbum())));
04917                 if(this->a->paginas[contador]->VerticalTexto(txt)){
04918                         TFFinal->setRotation(90);
04919                 }
04920 
04921                 TFFinal->setPos(((this->a->paginas[contador]->PosXTexto(txt)*(a->portada->GetW()))/(this->controlador->getWVisorAlbum())), ((this->a->paginas[contador]->PosYTexto(txt)*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
04922                 if(txt.centrado){
04923                     // Para centrar el texto
04924                          QTextCursor cursorFronFin = TFFinal->textCursor();
04925                         QTextBlockFormat bfmtFronFin = cursorFronFin.blockFormat();
04926                         bfmtFronFin.setAlignment(Qt::AlignCenter);
04927                         cursorFronFin.setBlockFormat(bfmtFronFin);
04928                         TFFinal->setTextCursor(cursorFronFin);
04929                 }
04930                 
04931                this->a->paginas[contador]->versionFinal->scene()->addItem(TFFinal); 
04932              delete fuenteFFinal;    
04933             }
04934             
04935         }
04936         
04937         // El texto ya está cargado
04938         if(a->paginas[contador]->ContieneMarcos()){
04939             for(int contadorMarcos=0; contadorMarcos < a->paginas[contador]->getMarcos().size(); contadorMarcos++){
04940                 if(!a->paginas[contador]->getMarcos().at(contadorMarcos).nombre->isEmpty()){
04941                         QPixmap *h;
04942                         QString marcoName=this->directoriodetrabajo.absolutePath()+"/frames/";
04943                         marcoName.append(a->paginas[contador]->getMarcos().at(contadorMarcos).nombre);
04944                         h=new QPixmap(marcoName);
04945                         try{
04946                                 if(h->isNull()){
04947                                 throw std::ios::failure(tr("No se pudo abrir una imagen de una de las páginas.").toStdString());
04948                                 }
04949                         }catch(std::exception& e){
04950                                 Error *err=new Error(4, e.what(), this);
04951                                 err->LanzarDialogo();
04952                                 delete err;
04953                                 exit(1);
04954                         }
04955                         QGraphicsPixmapItem *item2;
04956                         int numeroFoto=a->paginas[contador]->getMarcos().at(contadorMarcos).idFoto;
04957                         item2=new QGraphicsPixmapItem(h->scaled((a->GetPagina(contador)->GetVectorImagenes().at(numeroFoto-1).w)*(this->dimensionWpagina/(this->controlador->getWVisorAlbum())), (((a->GetPagina(contador)->GetVectorImagenes().at(numeroFoto-1).h)*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum())), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
04958                         item2->setPos((a->GetPagina(contador)->GetVectorImagenes().at(numeroFoto-1).pos_x)*(this->dimensionWpagina/(this->controlador->getWVisorAlbum())), (((a->GetPagina(contador)->GetVectorImagenes().at(numeroFoto-1).pos_y)*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum())));
04959                         item2->setAcceptHoverEvents(true);
04960                         a->paginas[contador]->versionFinal->scene()->addItem(item2);
04961                         delete h;
04962                 }
04963             }
04964         }
04965         if(this->a->paginas[contador]->GetPaginaEditada()){
04966                 unsigned pl=0;
04967                 for(int d=0; d < this->a->paginas[contador]->GetObjetosPagina().size(); d++){
04968                         float x, y, posx, posy;
04969                         if(this->a->paginas[contador]->GetObjetosPagina().at(d)->acceptHoverEvents()){ 
04970                                 posx=this->posicionesItemsPaginas[contador].at(pl).x ;
04971                                 posy=this->posicionesItemsPaginas[contador].at(pl).y;
04972                                 x=((posx*(this->dimensionWpagina))/(this->controlador->getWVisorAlbum()));
04973                                 y=((posy*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum()));
04974                                 this->a->paginas[contador]->versionFinal->items().at(d)->setPos(x,y);
04975                                 pl++;
04976                         }
04977                 }
04978         }
04979       
04980         
04981         
04982         if(this->ui->actionLineaSeparacionPaginas->isChecked()){
04983                 a->paginas[contador]->versionFinal->scene()->addLine(231*(a->portada->GetW())/462, 2, 231*(a->portada->GetW())/462, 318*(a->portada->GetH())/321)->setAcceptHoverEvents(false);
04984         }
04985         
04986         a->paginas[contador]->versionFinal->scene()->render(&painter);
04987         
04988             
04989         barra->setValue(contador+1);
04990          
04991         
04992         this->a->paginas[contador]->versionFinal->scene()->clear();
04993         if(this->ui->actionLineaSeparacionPaginas->isChecked()){
04994             a->paginas[contador]->versionReducida->scene()->addLine(231*(this->controlador->getWVisorAlbum())/462, 2, 231*(this->controlador->getWVisorAlbum())/462, 318*(this->controlador->getHVisorAlbum())/321)->setAcceptHoverEvents(false);
04995                     
04996         }            
04997         
04998     }
04999     }catch(std::exception& e){
05000                         Error *err=new Error(1, e.what(), this);
05001                         err->LanzarDialogo();
05002                         delete err;
05003                         exit(1);
05004                     } 
05005         barra->setValue(a->paginas.size()+1);
05006         this->ui->statusBar->setMaximumWidth(wAux);
05007         barra->hide();
05008         delete barra;
05009     }
05010     }
05011     delete impresora;
05012 }
05013 
05014 void FormPrincipal::ExportarJPG(){
05015     this->Exportar(false, true);
05016 }
05017 
05018 void FormPrincipal::ExportarPDF(){
05019     this->Exportar(true, false);
05020 }
05021 
05022 void FormPrincipal::Exportar(bool pdf, bool jpg){
05023     // Prueba de impresión en PDF de la portada
05024     QPrinter printer(QPrinter::ScreenResolution);
05025     QFileDialog::Options options;
05026     QString selectedFilter;
05027     QString fileName;
05028     if(!pdf && !jpg){
05029         selectedFilter="PDF: Portable Document Format (*.pdf);;JPEG: Archivo de imagen (*.jpeg)";
05030         fileName = QFileDialog::getSaveFileName(this,tr("Exportar album"), this->directorioCasaUsuario, selectedFilter, &selectedFilter, options);
05031     }else{
05032         if(pdf && !jpg){
05033             selectedFilter="PDF: Portable Document Format (*.pdf)";
05034             fileName = QFileDialog::getSaveFileName(this,tr("Exportar album"), this->directorioCasaUsuario, selectedFilter, &selectedFilter, options);
05035         }else{
05036             if(!pdf && jpg){
05037                 selectedFilter="JPEG: Archivo de imagen (*.jpeg)";
05038                 fileName = QFileDialog::getSaveFileName(this,tr("Exportar album"), this->directorioCasaUsuario, selectedFilter, &selectedFilter, options);
05039             }else{
05040                 selectedFilter="PDF: Portable Document Format (*.pdf);;JPEG: Archivo de imagen (*.jpeg)";
05041                 fileName = QFileDialog::getSaveFileName(this,tr("Exportar album"), this->directorioCasaUsuario, selectedFilter, &selectedFilter, options);
05042             }
05043         }
05044     }
05045     if(selectedFilter!="JPEG: Archivo de imagen (*.jpeg)"){
05046         
05047         QSizeF tam(a->portada->GetW(), a->portada->GetH());
05048         printer.setPaperSize(tam, QPrinter::DevicePixel);
05049     }
05050     if(!fileName.isEmpty()){
05051         if(selectedFilter!="JPEG: Archivo de imagen (*.jpeg)"){
05052          printer.setOutputFormat(QPrinter::PdfFormat);
05053          if(!fileName.contains(".pdf")){
05054             fileName=fileName + ".pdf";
05055          }
05056         }else{
05057            
05058            if(!fileName.contains(".jpeg")){
05059             fileName=fileName + ".jpeg";
05060            } 
05061         }
05062         
05063     try{    
05064         if(selectedFilter!="JPEG: Archivo de imagen (*.jpeg)"){
05065     printer.setOutputFileName(fileName);
05066         }
05067     }catch(std::exception& e){
05068                         Error *err=new Error(5, e.what(), this);
05069                         err->LanzarDialogo();
05070                         delete err;
05071                         exit(1);
05072     } 
05073         if(selectedFilter!="JPEG: Archivo de imagen (*.jpeg)"){
05074     printer.setPageMargins(0, 0, 0, 0, QPrinter::DevicePixel);
05075         
05076         
05077     if(this->creadasPaginas){
05078     printer.setFromTo(0,a->paginas.size()+1);
05079     }else{
05080         printer.setFromTo(0,0);
05081     }
05082         }
05083     QPainter painter(&printer);
05084        
05085     QImage img(a->portada->GetW(), a->portada->GetH(), QImage::Format_RGB32);
05086     QPainter painter2(&img);
05087     QGraphicsScene *escenaFinal;
05088     try{
05089     escenaFinal= new QGraphicsScene();
05090     }catch(std::exception& e){
05091                         Error *err=new Error(2, e.what(), this);
05092                         err->LanzarDialogo();
05093                         delete err;
05094                         exit(1);
05095     } 
05096     a->portada->versionFinal->setScene(escenaFinal);
05097     a->portada->versionFinal->setSceneRect(0,0,a->portada->GetW(), a->portada->GetH());
05098     
05099     if(a->portada->ColordeFondo()){
05100         //Establecemos de fondo un color.
05101         if(!this->a->portada->activadaMascara()){
05102         QBrush *wallFinal= new QBrush(a->portada->FondoClr());
05103         a->portada->versionFinal->scene()->setBackgroundBrush(*wallFinal);
05104         delete wallFinal;
05105         if(a->portada->GetW()>1711 && a->portada->GetW()<2000){
05106             a->portada->versionFinal->scene()->addLine(0, 0, a->portada->GetW(), 0);
05107             
05108         }else{
05109 
05110             if(a->portada->GetW()>2000){
05111                 a->portada->versionFinal->scene()->addLine(0, 0, a->portada->GetW(), 0);
05112 
05113 
05114             }else{
05115                 
05116                 a->portada->versionFinal->scene()->addLine(0,0,a->portada->GetW(),0);
05117                 
05118                 
05119             }
05120 
05121         }
05122         }
05123     }else{
05124         if(!this->a->portada->activadaMascara()){
05125         //Establecemos de fondo una imagen, escalaremos todo al final
05126         QPixmap *gfinal;
05127         try{
05128         gfinal=new QPixmap(a->portada->FondoImg());
05129         if(gfinal->isNull()){
05130             throw std::ios_base::failure(tr("No pudo abrirse la imagen de fondo de la portada.").toStdString());
05131         }
05132         }catch(std::exception& e){
05133                         Error *err=new Error(4, e.what(), this);
05134                         err->LanzarDialogo();
05135                         delete err;
05136                         exit(1);
05137                     } 
05138        
05139         QGraphicsPixmapItem *itemfinal=new QGraphicsPixmapItem(gfinal->scaled(a->portada->GetW(), a->portada->GetH(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
05140         itemfinal->setPos(0, 0);
05141         a->portada->versionFinal->scene()->addItem(itemfinal);
05142         delete gfinal;
05143     }
05144     }
05145     if(this->a->portada->hayImagenTrasera()){
05146     // Imagen Trasera
05147     QPixmap *hfinal;
05148     try{
05149     hfinal=new QPixmap(a->portada->RutaFotoTrasera());
05150     if(hfinal->isNull()){
05151         throw std::ios_base::failure(tr("No pudo abrirse la imagen trasera de la portada.").toStdString());
05152     }
05153     }catch(std::exception& e){
05154                         Error *err=new Error(4, e.what(), this);
05155                         err->LanzarDialogo();
05156                         delete err;
05157                         exit(1);
05158                     } 
05159     
05160     QGraphicsPixmapItem *item2final;
05161     
05162     
05163     if(hfinal->width() > hfinal->height()){
05164         if(a->portada->getImagenPosVertical("trasera")){
05165             item2final=new QGraphicsPixmapItem(hfinal->scaled((a->portada->DimensionHImagenTrasera()*a->portada->GetW())/(this->controlador->getWVisorAlbum()), (a->portada->DimensionWImagenTrasera()*a->portada->GetH())/(this->controlador->getHVisorAlbum()), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
05166             item2final->setPos(((((a->portada->PosicionXImagenTrasera()+a->portada->DimensionWImagenTrasera())*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosicionYImagenTrasera()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
05167 
05168             item2final->setRotation(90);
05169             item2final->setAcceptTouchEvents(true);    
05170         }else{
05171              item2final=new QGraphicsPixmapItem(hfinal->scaled((a->portada->DimensionWImagenTrasera()*a->portada->GetW())/(this->controlador->getWVisorAlbum()), (a->portada->DimensionHImagenTrasera()*a->portada->GetH())/(this->controlador->getHVisorAlbum()), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
05172              item2final->setPos((((a->portada->PosicionXImagenTrasera()*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosicionYImagenTrasera()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
05173 
05174         }
05175     }else{
05176         if(!a->portada->getImagenPosVertical("trasera")){
05177             item2final=new QGraphicsPixmapItem(hfinal->scaled((a->portada->DimensionHImagenTrasera()*a->portada->GetW())/(this->controlador->getWVisorAlbum()), (a->portada->DimensionWImagenTrasera()*a->portada->GetH())/(this->controlador->getHVisorAlbum()), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
05178             item2final->setPos(((((a->portada->PosicionXImagenTrasera()+a->portada->DimensionWImagenTrasera())*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosicionYImagenTrasera()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
05179 
05180             item2final->setRotation(90);
05181               item2final->setAcceptTouchEvents(true);
05182         }else{
05183              item2final=new QGraphicsPixmapItem(hfinal->scaled((a->portada->DimensionWImagenTrasera()*a->portada->GetW())/(this->controlador->getWVisorAlbum()), (a->portada->DimensionHImagenTrasera()*a->portada->GetH())/(this->controlador->getHVisorAlbum()), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
05184              item2final->setPos((((a->portada->PosicionXImagenTrasera()*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosicionYImagenTrasera()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
05185 
05186             
05187         }
05188         
05189     }     
05190     if(!this->a->portada->activadaMascara()){
05191             
05192    item2final->setAcceptHoverEvents(true);
05193     }
05194     a->portada->versionFinal->scene()->addItem(item2final);
05195     delete hfinal;
05196     }
05197     
05198     if(this->a->portada->hayImagenFrontal()){
05199     // Imagen Frontal
05200     QPixmap *ifinal;
05201     try{
05202     ifinal=new QPixmap(a->portada->RutaFotoFrontal());
05203     if(ifinal->isNull()){
05204         throw std::ios_base::failure(tr("No pudo abrirse la imagen frontal de la portada.").toStdString());
05205     }
05206     }catch(std::exception& e){
05207           Error *err=new Error(4, e.what(), this);
05208           err->LanzarDialogo();
05209           delete err;
05210           exit(1);
05211     } 
05212     QGraphicsPixmapItem *item3final;
05213     
05214     if(ifinal->width() > ifinal->height()){
05215         if(a->portada->getImagenPosVertical("frontal")){
05216             item3final=new QGraphicsPixmapItem(ifinal->scaled(((a->portada->DimensionHImagenFrontal()*a->portada->GetW())/(this->controlador->getWVisorAlbum())), ((a->portada->DimensionWImagenFrontal()*a->portada->GetH())/(this->controlador->getHVisorAlbum())), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
05217             item3final->setPos(((((a->portada->PosicionXImagenFrontal() + a->portada->DimensionWImagenFrontal())*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosicionYImagenFrontal()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
05218 
05219             item3final->setRotation(90);
05220             item3final->setAcceptTouchEvents(true);    
05221         }else{
05222             item3final=new QGraphicsPixmapItem(ifinal->scaled(((a->portada->DimensionWImagenFrontal()*a->portada->GetW())/(this->controlador->getWVisorAlbum())), ((a->portada->DimensionHImagenFrontal()*a->portada->GetH())/(this->controlador->getHVisorAlbum())), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
05223             item3final->setPos((((a->portada->PosicionXImagenFrontal()*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosicionYImagenFrontal()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
05224 
05225         }
05226     }else{
05227         if(!a->portada->getImagenPosVertical("frontal")){
05228             item3final=new QGraphicsPixmapItem(ifinal->scaled(((a->portada->DimensionHImagenFrontal()*a->portada->GetW())/(this->controlador->getWVisorAlbum())), ((a->portada->DimensionWImagenFrontal()*a->portada->GetH())/(this->controlador->getHVisorAlbum())), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
05229             item3final->setPos(((((a->portada->PosicionXImagenFrontal() + a->portada->DimensionWImagenFrontal())*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosicionYImagenFrontal()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
05230 
05231              item3final->setRotation(90);
05232               item3final->setAcceptTouchEvents(true);
05233         }else{
05234             item3final=new QGraphicsPixmapItem(ifinal->scaled(((a->portada->DimensionWImagenFrontal()*a->portada->GetW())/(this->controlador->getWVisorAlbum())), ((a->portada->DimensionHImagenFrontal()*a->portada->GetH())/(this->controlador->getHVisorAlbum())), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
05235             item3final->setPos((((a->portada->PosicionXImagenFrontal()*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosicionYImagenFrontal()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
05236 
05237             
05238         }
05239         
05240     }
05241     if(!this->a->portada->activadaMascara()){
05242             
05243     item3final->setAcceptHoverEvents(true);
05244     }
05245     a->portada->versionFinal->scene()->addItem(item3final);
05246     delete ifinal;
05247     }
05248     
05249     if(this->a->portada->activadaMascara() && this->a->portada->ColordeFondo()){
05250             
05251                 
05252                 QString path= this->directoriodetrabajo.absolutePath() + "/templates/" + this->a->portada->getMascara(); 
05253                 QImage *img=new QImage(path);
05254                 QRgb color=this->a->portada->FondoClr().rgb();
05255                 for(int a=0; a < img->width(); a++){
05256                     for(int b=0; b < img->height(); b++){
05257                         if(img->pixel(a,b)!=0){
05258                         img->setPixel(a,b,color);
05259                         }
05260                     }
05261                 }
05262                 QPixmap *g=new QPixmap();
05263                 g->convertFromImage(*img, Qt::AutoColor);
05264             
05265                 QGraphicsPixmapItem *item=new QGraphicsPixmapItem(g->scaled(this->a->portada->GetW(), this->a->portada->GetH(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
05266                 item->setPos(0, 0);
05267                 item->setAcceptHoverEvents(false);
05268                 this->a->portada->versionFinal->scene()->addItem(item);
05269                 delete img;
05270                 delete g;
05271         }
05272         
05273         if(this->a->portada->activadaMascara() && !this->a->portada->ColordeFondo()){
05274             
05275                 QString path= this->directoriodetrabajo.absolutePath() + "/templates/" + this->a->portada->getMascara(); 
05276                 QImage *mascara=new QImage(path);
05277                 QImage *imgFondo=new QImage(this->a->portada->FondoImg());
05278                 QImage imgFinal=mascara->scaled(imgFondo->width(), imgFondo->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
05279                 
05280                 for(int a=0; a < imgFinal.width(); a++){
05281                     for(int b=0; b < imgFinal.height(); b++){
05282                         if(imgFinal.pixel(a,b)!=0){
05283                         imgFinal.setPixel(a,b,imgFondo->pixel(a,b));
05284                         }
05285                     }
05286                 }
05287                 QPixmap *g=new QPixmap();
05288                 
05289                 g->convertFromImage(imgFinal, Qt::AutoColor);
05290                 QGraphicsPixmapItem *item=new QGraphicsPixmapItem(g->scaled(this->a->portada->GetW(), this->a->portada->GetH(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
05291                 item->setPos(0, 0);
05292                 item->setAcceptHoverEvents(false);
05293                 this->a->portada->versionFinal->scene()->addItem(item);
05294                 delete mascara;
05295                 delete imgFondo;
05296                 delete g;
05297         }
05298     
05299     
05300     if(this->a->portada->hayTextoFrontal()){
05301     // Texto Frontal
05302     QGraphicsTextItem *TFFinal=new QGraphicsTextItem(a->portada->TextoFrontal());
05303     QFont *fuenteFFinal=new QFont(a->portada->FuenteTextoFrontal().family(),((a->portada->TamTextoFrontal()*(a->portada->GetW()))/(this->controlador->getWVisorAlbum())), 50, a->portada->CursivaTextoFrontal());
05304     if(a->portada->NegritaTextoFrontal()){
05305         fuenteFFinal->setBold(true);
05306     }
05307     if(a->portada->SubrayadoTextoFrontal()){
05308         fuenteFFinal->setUnderline(true);
05309     }
05310 
05311     TFFinal->setDefaultTextColor(a->portada->ColorTextoFrontal());
05312     TFFinal->setFont(*fuenteFFinal);
05313 
05314     TFFinal->setTextWidth(((a->portada->WTextoFrontal()*a->portada->GetW())/(this->controlador->getWVisorAlbum())));    
05315     if(a->portada->VerticalTextoFrontal()){
05316         TFFinal->setRotation(90);
05317     }
05318 
05319     TFFinal->setPos((((a->portada->PosXTextoFrontal()*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosYTextoFrontal()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
05320     if(a->portada->CentradoTextoFrontal()){
05321         // Para centrar el texto
05322         QTextCursor cursorFronFin = TFFinal->textCursor();
05323         QTextBlockFormat bfmtFronFin = cursorFronFin.blockFormat();
05324         bfmtFronFin.setAlignment(Qt::AlignCenter);
05325         cursorFronFin.setBlockFormat(bfmtFronFin);
05326         TFFinal->setTextCursor(cursorFronFin);
05327     }
05328 
05329     a->portada->versionFinal->scene()->addItem(TFFinal);
05330     delete fuenteFFinal;
05331     }
05332     if(this->a->portada->hayTextoTrasero()){
05333     // Texto Trasero
05334     QGraphicsTextItem *TTFinal=new QGraphicsTextItem(a->portada->TextoTrasera());
05335     QFont *fuenteTFinal=new QFont(a->portada->FuenteTextoTrasera().family(),((a->portada->TamTextoTrasera()*(a->portada->GetW()))/(this->controlador->getWVisorAlbum())), 50, a->portada->CursivaTextoTrasera());
05336     if(a->portada->NegritaTextoTrasera()){
05337         fuenteTFinal->setBold(true);
05338     }
05339     if(a->portada->SubrayadoTextoTrasera()){
05340         fuenteTFinal->setUnderline(true);
05341     }
05342     TTFinal->setFont(*fuenteTFinal);
05343     TTFinal->setTextWidth(((a->portada->WTextoTrasera()*a->portada->GetW())/(this->controlador->getWVisorAlbum())));
05344     if(a->portada->VerticalTextoTrasera()){
05345         TTFinal->setRotation(90);
05346     }
05347     TTFinal->setPos((((a->portada->PosXTextoTrasera()*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosYTextoTrasera()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
05348     TTFinal->setDefaultTextColor(a->portada->ColorTextoTrasera());
05349     if(a->portada->CentradoTextoTrasera()){
05350         // Para centrar el texto
05351         QTextCursor cursorTTrasFin = TTFinal->textCursor();
05352         QTextBlockFormat bfmtTTrasFin = cursorTTrasFin.blockFormat();
05353         bfmtTTrasFin.setAlignment(Qt::AlignCenter);
05354         cursorTTrasFin.setBlockFormat(bfmtTTrasFin);
05355         TTFinal->setTextCursor(cursorTTrasFin);
05356     }
05357     
05358     a->portada->versionFinal->scene()->addItem(TTFinal);
05359     delete fuenteTFinal;
05360     }
05361     // Dimensiones PDF W: 5402.45 H: 3730.8
05362     if(this->ui->actionLineaSeparacionPortada->isChecked()){
05363         if(a->portada->GetW()>1711 && a->portada->GetW()<2000){
05364                 //Tamaño clásico
05365                 a->portada->versionFinal->scene()->addLine((a->portada->GetW()*216/462), 2, ((a->portada->GetW())*216/462), a->portada->GetH());
05366                 a->portada->versionFinal->scene()->addLine(((a->portada->GetW())*247/462), 2, ((a->portada->GetW())*247/462), a->portada->GetH());
05367     }else{
05368         if(a->portada->GetW()>2000){
05369             //Tamaño Maxi
05370             a->portada->versionFinal->scene()->addLine(((a->portada->GetW())*216/462), 2, ((a->portada->GetW())*216/462), a->portada->GetH());
05371             a->portada->versionFinal->scene()->addLine(((a->portada->GetW())*247/462), 2, ((a->portada->GetW())*247/462), a->portada->GetH());
05372 
05373         }else{
05374             //Tamaño Mini
05375             a->portada->versionFinal->scene()->addLine(((a->portada->GetW())*216/462), 2, ((a->portada->GetW())*216/462), a->portada->GetH());
05376             a->portada->versionFinal->scene()->addLine(((a->portada->GetW())*247/462), 2, ((a->portada->GetW())*247/462), a->portada->GetH());
05377 
05378         }
05379 
05380     }
05381     }else{
05382        if(a->portada->GetW()>1711 && a->portada->GetW()<2000){
05383                 //Tamaño clásico
05384                 a->portada->versionFinal->scene()->addLine((a->portada->GetW()), 2, ((a->portada->GetW())), a->portada->GetH());
05385                 a->portada->versionFinal->scene()->addLine((a->portada->GetW()), 2, ((a->portada->GetW())), a->portada->GetH());
05386        
05387        }else{
05388         if(a->portada->GetW()>2000){
05389             //Tamaño Maxi
05390             a->portada->versionFinal->scene()->addLine(((a->portada->GetW())), 2, ((a->portada->GetW())), a->portada->GetH());
05391             a->portada->versionFinal->scene()->addLine(((a->portada->GetW())), 2, ((a->portada->GetW())), a->portada->GetH());
05392             
05393         }else{
05394             //Tamaño Mini
05395             a->portada->versionFinal->scene()->addLine(((a->portada->GetW())), 2, ((a->portada->GetW())), a->portada->GetH());
05396             a->portada->versionFinal->scene()->addLine(((a->portada->GetW())), 2, ((a->portada->GetW())), a->portada->GetH());
05397             
05398         }
05399 
05400     } 
05401     }
05402     if(this->a->portada->hayTextoLateral()){
05403     // Texto Lateral
05404     QGraphicsTextItem *TLFinal=new QGraphicsTextItem(a->portada->TextoLateral());
05405     QFont *fuenteLFinal=new QFont(a->portada->FuenteTextoLateral().family(), ((a->portada->TamTextoLateral()*(a->portada->GetW()))/(this->controlador->getWVisorAlbum())), 50, a->portada->CursivaTextoLateral());
05406     if(a->portada->NegritaTextoLateral()){
05407         fuenteLFinal->setBold(true);
05408     }
05409 
05410     if(a->portada->SubrayadoTextoLateral()){
05411         fuenteLFinal->setUnderline(true);
05412     }
05413     TLFinal->setFont(*fuenteLFinal);
05414     
05415     if(a->portada->VerticalTextoLateral()){
05416         TLFinal->setRotation(90);
05417         
05418     }
05419     TLFinal->setPos((((a->portada->PosXTextoLateral()*(a->portada->GetW())))/(this->controlador->getWVisorAlbum())), ((a->portada->PosYTextoLateral()*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
05420     TLFinal->setDefaultTextColor(a->portada->ColorTextoLateral());
05421     if(a->portada->CentradoTextoLateral()){
05422         // Para centrar el texto
05423         QTextCursor cursorLLatFin = TLFinal->textCursor();
05424         QTextBlockFormat bfmtLLatFin = cursorLLatFin.blockFormat();
05425         bfmtLLatFin.setAlignment(Qt::AlignCenter);
05426         cursorLLatFin.setBlockFormat(bfmtLLatFin);
05427         TLFinal->setTextCursor(cursorLLatFin);
05428     }
05429 
05430 
05431     a->portada->versionFinal->scene()->addItem(TLFinal);
05432     delete fuenteLFinal;
05433     }
05434     unsigned iItem, itexto;
05435     iItem=0;
05436     itexto=0;
05437     try{
05438     if(!this->posicionesItemsPortada.isEmpty()){
05439         for(int d=0; d < this->a->portada->getObjetosPortada().size(); d++){
05440             float x, y, posx, posy;
05441             if(this->a->portada->getObjetosPortada().at(d)->acceptHoverEvents()){
05442             posx=this->posicionesItemsPortada[iItem].x;
05443             posy=this->posicionesItemsPortada[iItem].y;
05444             x=((posx*(a->portada->GetW()))/(this->controlador->getWVisorAlbum()));
05445             y=((posy*(a->portada->GetH()))/(this->controlador->getHVisorAlbum()));
05446             a->portada->versionFinal->items().at(d)->setPos(x,y);
05447             iItem++;
05448             }
05449             
05450         }
05451     }
05452     }catch(std::exception& e){
05453         Error *err=new Error(1, e.what(), this);
05454         err->LanzarDialogo();
05455         delete err;
05456         exit(1);
05457     } 
05458     
05459     if(selectedFilter!="JPEG: Archivo de imagen (*.jpeg)"){
05460         a->portada->versionFinal->scene()->render(&painter);
05461     }else{
05462         painter2.setRenderHint(QPainter::Antialiasing);
05463 
05464         a->portada->versionFinal->scene()->render(&painter2);
05465         img.save(fileName.remove(".jpeg").append("_Portada.jpeg"));
05466         fileName.remove("_Portada.jpeg");
05467         fileName.append(".jpeg");
05468         
05469     }
05470     
05471     if(this->creadasPaginas){
05472       QProgressBar *barra= new QProgressBar(this);
05473       int wAux=this->ui->statusBar->width();
05474       barra->setFixedWidth((294*this->controlador->getWPrincipal())/1014);
05475       barra->setFixedHeight((23*this->controlador->getHPrincipal())/705);
05476       this->ui->statusBar->setMaximumWidth(((986-270)*this->controlador->getWPrincipal())/1014);
05477       
05478       barra->move((this->controlador->getWPrincipal()*720)/1014, (this->controlador->getHPrincipal()*683)/705);
05479     
05480     
05481       barra->setMinimum(0);
05482         barra->setRange(0, a->paginas.size()+1);
05483         barra->show();
05484         barra->setValue(1);
05485         try{
05486     for(unsigned contador=0; contador < a->paginas.size(); contador++){
05487         if(contador!=0){
05488         barra->setValue(contador);
05489         }
05490         if(this->ui->actionLineaSeparacionPaginas->isChecked()){
05491             a->paginas[contador]->versionReducida->scene()->removeItem(a->paginas[contador]->versionReducida->scene()->itemAt(231*(this->controlador->getWVisorAlbum())/462, 2));
05492         }
05493         if(selectedFilter!="JPEG: Archivo de imagen (*.jpeg)"){
05494             printer.newPage();
05495             painter.begin(&printer);
05496         }
05497         
05498         
05499         this->a->paginas[contador]->versionFinal->setSceneRect(0,0, this->dimensionWpagina, this->dimensionHpagina);
05500         QGraphicsScene *escenaFinal;
05501         try{
05502         escenaFinal= new QGraphicsScene();
05503         }catch(std::exception& e){
05504                         Error *err=new Error(2, e.what(), this);
05505                         err->LanzarDialogo();
05506                         delete err;
05507                         exit(1);
05508         } 
05509         this->a->paginas[contador]->versionFinal->setScene(escenaFinal);
05510         bool avisador=false;
05511         if(this->a->paginas[contador]->ColordeFondo() && !this->a->paginas[contador]->activadaMascara()){
05512             QBrush *wallFinal= new QBrush(this->a->paginas[contador]->GetFondoColor());
05513             this->a->paginas[contador]->versionFinal->scene()->setBackgroundBrush(*wallFinal);
05514             delete wallFinal;
05515             if(this->dimensionWpagina>1711 && this->dimensionWpagina<2000){
05516                 this->a->paginas[contador]->versionFinal->scene()->addLine(0, 0, this->dimensionWpagina, 0);
05517                 QPen *pen=new QPen(this->a->paginas[contador]->GetFondoColor());
05518                 this->a->paginas[contador]->versionFinal->scene()->addLine(((this->dimensionWpagina)*216/462), 2, ((this->dimensionWpagina)*216/462), (this->dimensionHpagina), *pen);
05519             }else{
05520 
05521                 if(this->dimensionWpagina>2000){
05522                     this->a->paginas[contador]->versionFinal->scene()->addLine(0, 0, this->dimensionWpagina, 0);
05523                     QPen *pen=new QPen(this->a->paginas[contador]->GetFondoColor());
05524                     this->a->paginas[contador]->versionFinal->scene()->addLine(((this->dimensionWpagina)*216/462), 2, ((this->dimensionWpagina)*216/462), ((this->dimensionHpagina)), *pen);
05525                 }else{
05526                     this->a->paginas[contador]->versionFinal->scene()->addLine(0, 0, this->dimensionWpagina, 0);
05527                     QPen *pen=new QPen(this->a->paginas[contador]->GetFondoColor());
05528                     this->a->paginas[contador]->versionFinal->scene()->addLine(((this->dimensionWpagina)*216/462), 2, ((this->dimensionWpagina)*216/462), ((this->dimensionHpagina)), *pen);
05529                 }
05530 
05531             }
05532         }else{
05533             if(!this->a->paginas[contador]->activadaMascara()){
05534             avisador=true;
05535             QPixmap *gfinal;
05536             try{
05537             gfinal=new QPixmap(this->a->paginas[contador]->GetFondoImagen());
05538             if(gfinal->isNull()){
05539                 throw std::ios_base::failure(tr("No pudo abrirse la imagen de fondo de una de las páginas.").toStdString());
05540             }
05541             }catch(std::exception& e){
05542                         Error *err=new Error(4, e.what(), this);
05543                         err->LanzarDialogo();
05544                         delete err;
05545                         exit(1);
05546                     } 
05547             QGraphicsPixmapItem *itemfinal=new QGraphicsPixmapItem(gfinal->scaled(this->dimensionWpagina, this->dimensionHpagina, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
05548             itemfinal->setPos(0, 0);
05549             this->a->paginas[contador]->versionFinal->scene()->addItem(itemfinal);
05550             delete gfinal;
05551         }
05552         }
05553         
05554         for(unsigned contador2=0; contador2 < this->a->paginas[contador]->GetVectorImagenes().size(); contador2++){
05555             QPixmap *hfinal;
05556             try{
05557             hfinal=new QPixmap(this->a->paginas[contador]->GetVectorImagenes().at(contador2).ruta);
05558             if(hfinal->isNull()){
05559                 throw std::ios_base::failure(tr("No pudo abrirse una de las imagenes de una de las páginas.").toStdString());
05560             }
05561             }catch(std::exception& e){
05562                         Error *err=new Error(4, e.what(), this);
05563                         err->LanzarDialogo();
05564                         delete err;
05565                         exit(1);
05566                     } 
05567             QGraphicsPixmapItem *item2final;
05568             if(hfinal->width() > hfinal->height()){
05569                 if(this->a->paginas[contador]->getImagenPosVertical(contador2)){
05570                     item2final=new QGraphicsPixmapItem(hfinal->scaled(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).h)*(this->dimensionWpagina/(this->controlador->getWVisorAlbum()))), (((this->a->paginas[contador]->GetVectorImagenes().at(contador2).w)*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum())), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
05571                     item2final->setPos(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).pos_x + this->a->paginas[contador]->GetVectorImagenes().at(contador2).w)*(this->dimensionWpagina/(this->controlador->getWVisorAlbum()))),(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).pos_y)*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum())));
05572                     item2final->setRotation(90);
05573                     item2final->setAcceptTouchEvents(true);
05574                 }else{
05575                     item2final=new QGraphicsPixmapItem(hfinal->scaled(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).w)*(this->dimensionWpagina/(this->controlador->getWVisorAlbum()))), (((this->a->paginas[contador]->GetVectorImagenes().at(contador2).h)*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum())), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
05576                      item2final->setPos(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).pos_x)*(this->dimensionWpagina/(this->controlador->getWVisorAlbum()))),(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).pos_y)*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum())));
05577             
05578                 }
05579             }else{
05580                if(!this->a->paginas[contador]->getImagenPosVertical(contador2)){
05581                    item2final=new QGraphicsPixmapItem(hfinal->scaled(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).h)*(this->dimensionWpagina/(this->controlador->getWVisorAlbum()))), (((this->a->paginas[contador]->GetVectorImagenes().at(contador2).w)*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum())), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
05582                    item2final->setPos(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).pos_x + this->a->paginas[contador]->GetVectorImagenes().at(contador2).w)*(this->dimensionWpagina/(this->controlador->getWVisorAlbum()))),(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).pos_y)*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum())));
05583                    item2final->setRotation(90);
05584                    item2final->setAcceptTouchEvents(true);
05585                }else{
05586                   item2final=new QGraphicsPixmapItem(hfinal->scaled(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).w)*(this->dimensionWpagina/(this->controlador->getWVisorAlbum()))), (((this->a->paginas[contador]->GetVectorImagenes().at(contador2).h)*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum())), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
05587                   item2final->setPos(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).pos_x)*(this->dimensionWpagina/(this->controlador->getWVisorAlbum()))),(((this->a->paginas[contador]->GetVectorImagenes().at(contador2).pos_y)*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum())));
05588             
05589                }
05590                  
05591             }
05592             if(!this->a->GetPagina(contador)->activadaMascara()){
05593             
05594             item2final->setAcceptHoverEvents(true);
05595             }
05596             this->a->paginas[contador]->versionFinal->scene()->addItem(item2final);
05597             delete hfinal;
05598         }
05599        //Imágenes ya cargadas
05600         
05601         if(this->a->GetPagina(contador)->activadaMascara() && this->a->GetPagina(contador)->ColordeFondo()){
05602                 QString path= this->directoriodetrabajo.absolutePath() + "/templates/pages/" + a->GetPagina(contador)->getMascara(); 
05603                 QImage *img=new QImage(path);
05604                 QRgb color=this->a->GetPagina(contador)->GetFondoColor().rgb();
05605                 for(int ap=0; ap < img->width(); ap++){
05606                     for(int b=0; b < img->height(); b++){
05607                         if(img->pixel(ap,b)!=0){
05608                         img->setPixel(ap,b,color);
05609                         }
05610                     }
05611                 }
05612                 QPixmap *g=new QPixmap();
05613                 g->convertFromImage(*img, Qt::AutoColor);
05614                
05615                 QGraphicsPixmapItem *item=new QGraphicsPixmapItem(g->scaled(this->dimensionWpagina, this->dimensionHpagina, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
05616                 item->setPos(0, 0);
05617                 item->setAcceptHoverEvents(false);
05618                 this->a->paginas[contador]->versionFinal->scene()->addItem(item);
05619                 delete img;
05620                 delete g;
05621         }
05622         
05623         if(this->a->GetPagina(contador)->activadaMascara() && !this->a->GetPagina(contador)->ColordeFondo()){
05624             
05625             
05626                 QString path= this->directoriodetrabajo.absolutePath() + "/templates/pages/" + a->GetPagina(contador)->getMascara(); 
05627                 QImage *mascara=new QImage(path);
05628                 QImage *imgFondo=new QImage(this->a->GetPagina(contador)->GetFondoImagen());
05629                 QImage imgFinal=mascara->scaled(imgFondo->width(), imgFondo->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
05630                 
05631                 for(int z=0; z < imgFinal.width(); z++){
05632                     for(int b=0; b < imgFinal.height(); b++){
05633                         if(imgFinal.pixel(z,b)!=0){
05634                         imgFinal.setPixel(z,b,imgFondo->pixel(z,b));
05635                         }
05636                     }
05637                 }
05638                 QPixmap *g=new QPixmap();
05639                 
05640                 g->convertFromImage(imgFinal, Qt::AutoColor);
05641                 QGraphicsPixmapItem *item=new QGraphicsPixmapItem(g->scaled(this->dimensionWpagina, this->dimensionHpagina, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
05642                 item->setPos(0, 0);
05643                 item->setAcceptHoverEvents(false);
05644                 a->paginas[contador]->versionFinal->scene()->addItem(item);
05645                 delete mascara;
05646                 delete imgFondo;
05647                 delete g;
05648         }
05649         
05650         if(this->a->paginas[contador]->GetNumTextos()!=0){
05651             for(unsigned contador3=0; contador3 < this->a->paginas[contador]->GetVectorTextos().size(); contador3++){
05652                 ATexto txt=this->a->paginas[contador]->GetVectorTextos().at(contador3);
05653                  QGraphicsTextItem *TFFinal=new QGraphicsTextItem(this->a->paginas[contador]->Texto(txt));
05654                 QFont *fuenteFFinal=new QFont(this->a->paginas[contador]->FuenteTexto(txt).family(),((this->a->paginas[contador]->TamTexto(txt)*(a->portada->GetW()))/(this->controlador->getWVisorAlbum())), 50, this->a->paginas[contador]->CursivaTexto(txt));
05655                 if(this->a->paginas[contador]->NegritaTexto(txt)){
05656                         fuenteFFinal->setBold(true);
05657                 }
05658                 if(this->a->paginas[contador]->SubrayadoTexto(txt)){
05659                         fuenteFFinal->setUnderline(true);
05660                 }
05661 
05662                 TFFinal->setDefaultTextColor(this->a->paginas[contador]->ColorTexto(txt));
05663                 TFFinal->setFont(*fuenteFFinal);
05664 
05665                 TFFinal->setTextWidth(((this->a->paginas[contador]->WTexto(txt)*a->portada->GetW())/(this->controlador->getWVisorAlbum())));
05666                 if(this->a->paginas[contador]->VerticalTexto(txt)){
05667                         TFFinal->setRotation(90);
05668                 }
05669 
05670                 TFFinal->setPos(((this->a->paginas[contador]->PosXTexto(txt)*(a->portada->GetW()))/(this->controlador->getWVisorAlbum())), ((this->a->paginas[contador]->PosYTexto(txt)*(a->portada->GetH()))/(this->controlador->getHVisorAlbum())));
05671                 if(txt.centrado){
05672                     // Para centrar el texto
05673                          QTextCursor cursorFronFin = TFFinal->textCursor();
05674                         QTextBlockFormat bfmtFronFin = cursorFronFin.blockFormat();
05675                         bfmtFronFin.setAlignment(Qt::AlignCenter);
05676                         cursorFronFin.setBlockFormat(bfmtFronFin);
05677                         TFFinal->setTextCursor(cursorFronFin);
05678                 }
05679                 
05680                this->a->paginas[contador]->versionFinal->scene()->addItem(TFFinal); 
05681                delete fuenteFFinal;
05682             }
05683              
05684         }
05685         
05686         // El texto ya está cargado
05687         if(a->paginas[contador]->ContieneMarcos()){
05688             for(int contadorMarcos=0; contadorMarcos < a->paginas[contador]->getMarcos().size(); contadorMarcos++){
05689                 if(!a->paginas[contador]->getMarcos().at(contadorMarcos).nombre->isEmpty()){
05690                 QPixmap *h;
05691                 QString marcoName=this->directoriodetrabajo.absolutePath() +"/frames/";
05692                 marcoName.append(a->paginas[contador]->getMarcos().at(contadorMarcos).nombre);
05693                 h=new QPixmap(marcoName);
05694             try{
05695             if(h->isNull()){
05696                 throw std::ios::failure(tr("No se pudo abrir una imagen de una de las páginas.").toStdString());
05697             }
05698             }catch(std::exception& e){
05699                         Error *err=new Error(4, e.what(), this);
05700                         err->LanzarDialogo();
05701                         delete err;
05702                         exit(1);
05703                     }
05704             QGraphicsPixmapItem *item2;
05705             int numeroFoto=a->paginas[contador]->getMarcos().at(contadorMarcos).idFoto;
05706                    item2=new QGraphicsPixmapItem(h->scaled((a->GetPagina(contador)->GetVectorImagenes().at(numeroFoto-1).w)*(this->dimensionWpagina/(this->controlador->getWVisorAlbum())), (((a->GetPagina(contador)->GetVectorImagenes().at(numeroFoto-1).h)*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum())), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
05707                     item2->setPos((a->GetPagina(contador)->GetVectorImagenes().at(numeroFoto-1).pos_x)*(this->dimensionWpagina/(this->controlador->getWVisorAlbum())), (((a->GetPagina(contador)->GetVectorImagenes().at(numeroFoto-1).pos_y)*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum())));
05708                     
05709                     item2->setAcceptHoverEvents(true);
05710                     a->paginas[contador]->versionFinal->scene()->addItem(item2);
05711                     delete h;
05712                 }
05713                 
05714             }
05715         }
05716     if(this->a->paginas[contador]->GetPaginaEditada()){
05717         unsigned pl=0;
05718         for(int d=0; d < this->a->paginas[contador]->GetObjetosPagina().size(); d++){
05719             float x, y, posx, posy;
05720             if(this->a->paginas[contador]->GetObjetosPagina().at(d)->acceptHoverEvents()){ 
05721             posx=this->posicionesItemsPaginas[contador].at(pl).x ;
05722             posy=this->posicionesItemsPaginas[contador].at(pl).y;
05723             x=((posx*(this->dimensionWpagina))/(this->controlador->getWVisorAlbum()));
05724             y=((posy*(this->dimensionHpagina))/(this->controlador->getHVisorAlbum()));
05725             
05726             this->a->paginas[contador]->versionFinal->items().at(d)->setPos(x,y);
05727             pl++;
05728             }
05729         }
05730    
05731     }
05732       
05733         
05734         
05735         if(this->ui->actionLineaSeparacionPaginas->isChecked()){
05736                 a->paginas[contador]->versionFinal->scene()->addLine(231*(a->portada->GetW())/462, 2, 231*(a->portada->GetW())/462, 318*(a->portada->GetH())/321)->setAcceptHoverEvents(false);
05737         }
05738         if(selectedFilter!="JPEG: Archivo de imagen (*.jpeg)"){
05739         a->paginas[contador]->versionFinal->scene()->render(&painter);
05740         }else{
05741             QImage img2(a->portada->GetW(), a->portada->GetH(), QImage::Format_RGB32);
05742             QPainter painter3(&img2);
05743             painter3.setRenderHint(QPainter::Antialiasing);
05744 
05745         a->paginas[contador]->versionFinal->scene()->render(&painter3);
05746         QString aux("_");
05747         aux.append(QString::number(contador)).append(".jpeg");
05748         img2.save(fileName.remove(".jpeg").append("_").append(QString::number(contador)).append(".jpeg"));
05749         
05750         fileName.remove(aux);
05751         fileName.append(".jpeg");
05752         }
05753             
05754         barra->setValue(contador+1);
05755          
05756         
05757         this->a->paginas[contador]->versionFinal->scene()->clear();
05758         if(this->ui->actionLineaSeparacionPaginas->isChecked()){
05759             a->paginas[contador]->versionReducida->scene()->addLine(231*(this->controlador->getWVisorAlbum())/462, 2, 231*(this->controlador->getWVisorAlbum())/462, 318*(this->controlador->getHVisorAlbum())/321)->setAcceptHoverEvents(false);
05760                     
05761         }            
05762         
05763     }
05764     }catch(std::exception& e){
05765                         Error *err=new Error(1, e.what(), this);
05766                         err->LanzarDialogo();
05767                         delete err;
05768                         exit(1);
05769     } 
05770         barra->setValue(a->paginas.size()+1);
05771         barra->hide();
05772         this->ui->statusBar->setMaximumWidth(wAux);
05773         delete barra;
05774     }
05775     }
05776    
05777 }
05778 
05779 bool FormPrincipal::CreacionPaginasPersonalizadas(){
05780     int paginas=a->GetVectorImagenes().size();
05781     int contador=0;
05782     int fotosRestantes=paginas;
05783     bool estado=true;
05784     unsigned contadorAuxiliar=0;
05785     while(fotosRestantes>0){
05786         
05787         dialogcreacionpaginaspersonalizadas *DialogoPaginasPersonalizadas;
05788         try{
05789         DialogoPaginasPersonalizadas= new dialogcreacionpaginaspersonalizadas(fotosRestantes, contador, this->controlador, this->directoriodetrabajo);
05790         }catch(std::exception& e){
05791                         Error *err=new Error(2, e.what(), this);
05792                         err->LanzarDialogo();
05793                         delete err;
05794                         exit(1);
05795         } 
05796         DialogoPaginasPersonalizadas->setMiniaturasTexturas(this->miniaturasTexturas);
05797         DialogoPaginasPersonalizadas->setMiniaturasMarcos(this->miniaturasMarcos);
05798         
05799         DialogoPaginasPersonalizadas->exec();
05800         if(DialogoPaginasPersonalizadas->result()==1){
05801         Pagina *pag;
05802         try{
05803         pag=new Pagina(0,0,this);
05804         }catch(std::exception& e){
05805                         Error *err=new Error(2, e.what(), this);
05806                         err->LanzarDialogo();
05807                         delete err;
05808                         exit(1);
05809         } 
05810         if(DialogoPaginasPersonalizadas->EscogidosMarcos()){
05811             pag->SetMarcos(DialogoPaginasPersonalizadas->getMarcos());
05812         }
05813         if(DialogoPaginasPersonalizadas->ElegidoImagen()){
05814             pag->DesactivarColordefondo();
05815             pag->LoadFondo(DialogoPaginasPersonalizadas->GetImagenFondo());
05816         }else{
05817             if(DialogoPaginasPersonalizadas->ElegidoColor()){
05818                 pag->ActivarColordefondo();
05819                 pag->LoadFondoColor(DialogoPaginasPersonalizadas->GetColorFondo());
05820             }
05821         }
05822         pag->LoadRutaPlantilla(DialogoPaginasPersonalizadas->GetNombrePlantilla());
05823         QString aux=pag->RutaPlantilla();
05824         Parser parser(aux.toStdString(), this);
05825         std::vector<ticpp::Element*> areas;
05826 
05827         parser.find("area_imagen", areas, parser.find("areas_imagen"));
05828         ticpp::Element* element=parser.root();
05829         std::string mascara=parser.get_attribute("mascara", element);
05830         if(mascara!="no"){
05831             QString ruta=QString::fromStdString(mascara);
05832             pag->activarMascara(ruta);
05833         }
05834         for(std::vector<ticpp::Element*>::iterator i = areas.begin(); i != areas.end(); i++){
05835             
05836             QString ruta;
05837             int w, h, x, y;
05838             
05839             try{
05840             if(contadorAuxiliar < a->GetVectorImagenes().size()){
05841                 ruta=a->GetVectorImagenes().at(contadorAuxiliar).ruta;
05842                 std::string pos;
05843                 parser.get_attribute("w", *i, &w);
05844                 parser.get_attribute("h", *i, &h);
05845                 parser.get_attribute("pos_x", *i, &x);
05846                 parser.get_attribute("pos_y", *i, &y);
05847                 pos=parser.get_attribute("pos", *i);
05848                 pag->LoadFoto(ruta, w*(this->controlador->getWVisorAlbum())/462, h*(this->controlador->getHVisorAlbum())/321, x*(this->controlador->getWVisorAlbum())/462, y*(this->controlador->getHVisorAlbum())/321, pos);
05849             }
05850             }catch(std::exception& e){
05851                         Error *err=new Error(1, e.what(), this);
05852                         err->LanzarDialogo();
05853                         delete err;
05854                         exit(1);
05855                     } 
05856             contadorAuxiliar++;
05857         }
05858        
05859         if(DialogoPaginasPersonalizadas->EscritoOno1()){
05860             
05861             pag->LoadNumTextos(1);
05862            Parser parser2(pag->RutaPlantilla().toStdString(), this);
05863             std::vector<ticpp::Element*> areas2;
05864             parser2.find("area_texto", areas2, parser2.find("areas_texto"));
05865             unsigned contador=0;
05866             
05867             if(DialogoPaginasPersonalizadas->TextoColoreadoOno1()){
05868                 pag->LoadTexto(DialogoPaginasPersonalizadas->CursivaOno1(), DialogoPaginasPersonalizadas->NegritaOno1(), DialogoPaginasPersonalizadas->SubrayadoOno1(), DialogoPaginasPersonalizadas->Texto1(), DialogoPaginasPersonalizadas->Fuente1(), DialogoPaginasPersonalizadas->Color1());
05869             }else{
05870                 pag->LoadTexto(DialogoPaginasPersonalizadas->CursivaOno1(), DialogoPaginasPersonalizadas->NegritaOno1(), DialogoPaginasPersonalizadas->SubrayadoOno1(), DialogoPaginasPersonalizadas->Texto1(), DialogoPaginasPersonalizadas->Fuente1());
05871             }
05872             
05873             if(DialogoPaginasPersonalizadas->EscritoOno2()){
05874 
05875                 pag->LoadNumTextos(2);
05876                 
05877                 if(DialogoPaginasPersonalizadas->TextoColoreadoOno2()){
05878                     pag->LoadTexto(DialogoPaginasPersonalizadas->CursivaOno2(), DialogoPaginasPersonalizadas->NegritaOno2(), DialogoPaginasPersonalizadas->SubrayadoOno2(), DialogoPaginasPersonalizadas->Texto2(), DialogoPaginasPersonalizadas->Fuente2(), DialogoPaginasPersonalizadas->Color2());
05879                 }else{
05880                     pag->LoadTexto(DialogoPaginasPersonalizadas->CursivaOno2(), DialogoPaginasPersonalizadas->NegritaOno2(), DialogoPaginasPersonalizadas->SubrayadoOno2(), DialogoPaginasPersonalizadas->Texto2(), DialogoPaginasPersonalizadas->Fuente2());
05881                 }
05882                 
05883                 if(DialogoPaginasPersonalizadas->EscritoOno3()){
05884 
05885                     pag->LoadNumTextos(3);
05886                     
05887                     if(DialogoPaginasPersonalizadas->TextoColoreadoOno3()){
05888                         pag->LoadTexto(DialogoPaginasPersonalizadas->CursivaOno3(), DialogoPaginasPersonalizadas->NegritaOno3(), DialogoPaginasPersonalizadas->SubrayadoOno3(), DialogoPaginasPersonalizadas->Texto3(), DialogoPaginasPersonalizadas->Fuente3(), DialogoPaginasPersonalizadas->Color3());
05889                     }else{
05890                         pag->LoadTexto(DialogoPaginasPersonalizadas->CursivaOno3(), DialogoPaginasPersonalizadas->NegritaOno3(), DialogoPaginasPersonalizadas->SubrayadoOno3(), DialogoPaginasPersonalizadas->Texto3(), DialogoPaginasPersonalizadas->Fuente3());
05891                     }
05892                     
05893                     if(DialogoPaginasPersonalizadas->EscritoOno4()){
05894                         pag->LoadNumTextos(4);
05895                         
05896                         if(DialogoPaginasPersonalizadas->TextoColoreadoOno4()){
05897                             pag->LoadTexto(DialogoPaginasPersonalizadas->CursivaOno4(), DialogoPaginasPersonalizadas->NegritaOno4(), DialogoPaginasPersonalizadas->SubrayadoOno4(), DialogoPaginasPersonalizadas->Texto4(), DialogoPaginasPersonalizadas->Fuente4(), DialogoPaginasPersonalizadas->Color4());
05898                         }else{
05899                             pag->LoadTexto(DialogoPaginasPersonalizadas->CursivaOno4(), DialogoPaginasPersonalizadas->NegritaOno4(), DialogoPaginasPersonalizadas->SubrayadoOno4(), DialogoPaginasPersonalizadas->Texto4(), DialogoPaginasPersonalizadas->Fuente4());
05900                         }
05901                         
05902                     }
05903                 }
05904             }
05905             for(std::vector<ticpp::Element*>::iterator i2 = areas2.begin(); i2 != areas2.end(); i2++){
05906                 int w, pt, x, y;
05907                 std::string cen, ver;
05908                 parser2.get_attribute("w", *i2, &w);
05909                 parser2.get_attribute("pt", *i2, &pt);
05910                 parser2.get_attribute("pos_x", *i2, &x);
05911                 parser2.get_attribute("pos_y", *i2, &y);
05912                 cen = parser2.get_attribute("centrado", *i2);
05913                 ver = parser2.get_attribute("orientacion", *i2);
05914                
05915                 pag->LoadTextoResto(contador,w*(this->controlador->getWVisorAlbum())/462,pt*(this->controlador->getWVisorAlbum())/462,x*(this->controlador->getWVisorAlbum())/462,y*(this->controlador->getHVisorAlbum())/321,ver,cen);
05916                 contador++;
05917                 
05918             }
05919         }
05920 
05921         contador++;
05922         contador++;
05923         fotosRestantes=DialogoPaginasPersonalizadas->GetFotosRestantes();
05924 
05925         a->paginas.push_back(pag);
05926     }else{
05927             a->ResetImagenes();
05928             for(unsigned eliminador=0; eliminador < this->a->paginas.size(); eliminador++){
05929                 delete this->a->paginas.at(eliminador);
05930             }
05931             a->paginas.clear();
05932             fotosRestantes=0;
05933             estado=false;
05934     }
05935         delete DialogoPaginasPersonalizadas;
05936     }
05937     ui->pushPagSiguiente->show();
05938     ui->pushPagAnterior->show();
05939     if(this->IndicePaginas==0){
05940         ui->pushPagAnterior->setDisabled(true);
05941         ui->action_Retroceder_p_gina->setDisabled(true);
05942         ui->actionRetrocederBoton->setDisabled(true);
05943     }
05944     return estado;
05945 }
05946 
05947 void FormPrincipal::CreacionPaginasAleatorias(){
05948     unsigned contad=0;
05949 
05950     while(contad<a->GetVectorImagenes().size()){
05951         int numfotosporpag;
05952         QString file;
05953         if((a->GetVectorImagenes().size() - contad)<=4){
05954             file= this->GetPlantillaAleatoria((a->GetVectorImagenes().size() - contad));
05955         }else{
05956             file= this->GetPlantillaAleatoria();
05957         }
05958         Parser parser(file.toStdString(), this);
05959         ticpp::Element* element = parser.root();
05960         parser.get_attribute("imagen", element, &numfotosporpag);
05961 
05962         Pagina *pag;
05963         try{
05964         pag=new Pagina(0,0,this);
05965         }catch(std::exception& e){
05966                         Error *err=new Error(2, e.what(), this);
05967                         err->LanzarDialogo();
05968                         delete err;
05969                         exit(1);
05970         } 
05971         pag->LoadRutaPlantilla(file);
05972         std::vector<ticpp::Element*> areas;
05973         std::string mascara=parser.get_attribute("mascara", element);
05974         if(mascara!="no"){
05975             QString ruta=QString::fromStdString(mascara);
05976             pag->activarMascara(ruta);
05977         }
05978         parser.find("area_imagen", areas, parser.find("areas_imagen"));
05979         for(std::vector<ticpp::Element*>::iterator i = areas.begin(); i != areas.end(); i++){
05980             QString ruta;
05981             int w, h, x, y;
05982             
05983             
05984             try{
05985             if(contad < a->GetVectorImagenes().size()){
05986                 std::string pos;
05987                 ruta=a->GetVectorImagenes().at(contad).ruta;
05988                 parser.get_attribute("w", *i, &w);
05989                 parser.get_attribute("h", *i, &h);
05990                 parser.get_attribute("pos_x", *i, &x);
05991                 parser.get_attribute("pos_y", *i, &y);
05992                 pos=parser.get_attribute("pos", *i);
05993                 pag->LoadFoto(ruta, w*(this->controlador->getWVisorAlbum())/462, h*(this->controlador->getHVisorAlbum())/321, x*(this->controlador->getWVisorAlbum())/462, y*(this->controlador->getHVisorAlbum())/321, pos);
05994             }
05995             }catch(std::exception& e){
05996                         Error *err=new Error(2, e.what(), this);
05997                         err->LanzarDialogo();
05998                         delete err;
05999                         exit(1);
06000                     } 
06001             contad++;
06002         }
06003         pag->LoadFondoColor(this->GetColorAleatorio());
06004         pag->ActivarColordefondo();
06005         a->paginas.push_back(pag);
06006 
06007     }
06008     ui->pushPagSiguiente->show();
06009     ui->pushPagAnterior->show();
06010     if(this->IndicePaginas==0){
06011         ui->pushPagAnterior->setDisabled(true);
06012         ui->action_Retroceder_p_gina->setDisabled(true);
06013         ui->actionRetrocederBoton->setDisabled(true);
06014     }
06015    
06016 
06017 }
06018 
06019 
06020 void FormPrincipal::CreacionPaginasFijas(QString file, QColor colorfondo){
06021 
06022     int numfotosporpag;
06023     Parser parser(file.toStdString(), this);
06024     ticpp::Element* element = parser.root();
06025     parser.get_attribute("imagen", element, &numfotosporpag);
06026     unsigned contad=0;
06027 
06028     while(contad<a->GetVectorImagenes().size()){
06029         Pagina *pag;
06030         try{
06031         pag=new Pagina(0,0,this);
06032         }catch(std::exception& e){
06033                         Error *err=new Error(2, e.what(), this);
06034                         err->LanzarDialogo();
06035                         delete err;
06036                         exit(1);
06037                     } 
06038         std::vector<ticpp::Element*> areas;
06039         std::string mascara=parser.get_attribute("mascara", element);
06040         if(mascara!="no"){
06041             QString ruta=QString::fromStdString(mascara);
06042             pag->activarMascara(ruta);
06043         }
06044         parser.find("area_imagen", areas, parser.find("areas_imagen"));
06045         for(std::vector<ticpp::Element*>::iterator i = areas.begin(); i != areas.end(); i++){
06046             QString ruta;
06047             int w, h, x, y;
06048             
06049             
06050             try{
06051             if(contad < a->GetVectorImagenes().size()){
06052                 std::string pos;
06053                 ruta=a->GetVectorImagenes().at(contad).ruta;
06054                 parser.get_attribute("w", *i, &w);
06055                 parser.get_attribute("h", *i, &h);
06056                 parser.get_attribute("pos_x", *i, &x);
06057                 parser.get_attribute("pos_y", *i, &y);
06058                 pos=parser.get_attribute("pos", *i);
06059                pag->LoadFoto(ruta, w*(this->controlador->getWVisorAlbum())/462, h*(this->controlador->getHVisorAlbum())/321, x*(this->controlador->getWVisorAlbum())/462, y*(this->controlador->getHVisorAlbum())/321, pos);
06060             
06061             }
06062             }catch(std::exception& e){
06063                         Error *err=new Error(1, e.what(), this);
06064                         err->LanzarDialogo();
06065                         delete err;
06066                         exit(1);
06067                     } 
06068             contad++;
06069         }
06070         
06071             pag->LoadFondoColor(colorfondo);
06072             pag->ActivarColordefondo();
06073         
06074 
06075         a->paginas.push_back(pag);
06076         
06077     }
06078     ui->pushPagSiguiente->show();
06079     ui->pushPagAnterior->show();
06080     if(this->IndicePaginas==0){
06081         ui->pushPagAnterior->setDisabled(true);
06082         ui->action_Retroceder_p_gina->setDisabled(true);
06083         ui->actionRetrocederBoton->setDisabled(true);
06084     }
06085     
06086     
06087 }
06088 
06089 void FormPrincipal::MostrarBarraHerramientas(){
06090     if(this->ui->actionBarraHerramientas->isChecked()){
06091         this->ui->toolBar->show();
06092         //Submenu
06093         this->ui->actionArchivo->setEnabled(true);
06094         this->ui->actionEdicion->setEnabled(true);
06095         this->ui->actionEliminacion->setEnabled(true);
06096         this->ui->actionExportacion->setEnabled(true);
06097         this->ui->actionGuardado->setEnabled(true);
06098         this->ui->actionImagenes->setEnabled(true);
06099         this->ui->actionPaginas->setEnabled(true);
06100         this->ui->actionPropiedades->setEnabled(true);
06101         
06102     }else{
06103         this->ui->toolBar->hide();
06104         //Submenu
06105         this->ui->actionArchivo->setDisabled(true);
06106         this->ui->actionEdicion->setDisabled(true);
06107         this->ui->actionEliminacion->setDisabled(true);
06108         this->ui->actionExportacion->setDisabled(true);
06109         this->ui->actionGuardado->setDisabled(true);
06110         this->ui->actionImagenes->setDisabled(true);
06111         this->ui->actionPaginas->setDisabled(true);
06112         this->ui->actionPropiedades->setDisabled(true);
06113         
06114     }
06115 }
06116 
06117 
06118 
06119 void FormPrincipal::MostrarBarraArchivo(){
06120     if(this->ui->actionArchivo->isChecked()){
06121         this->ui->toolBar->show();
06122         this->ui->actionAbrirBoton->setVisible(true);
06123         this->ui->actionNuevoBoton->setVisible(true);
06124         this->ui->actionWizardBoton->setVisible(true);
06125         this->ui->toolBar->actions().at(3)->setVisible(true);
06126     }else{
06127         this->ui->actionAbrirBoton->setVisible(false);
06128         this->ui->actionNuevoBoton->setVisible(false);
06129         this->ui->actionWizardBoton->setVisible(false);
06130         this->ui->toolBar->actions().at(3)->setVisible(false);
06131     }
06132     bool vigilante=false;
06133     for(int i=0; i <this->ui->toolBar->actions().size(); i++){
06134         if(this->ui->toolBar->actions().at(i)->isVisible()){
06135             vigilante=true;
06136         }
06137     }
06138     if(!vigilante){
06139         this->ui->toolBar->hide();
06140         this->ui->actionBarraHerramientas->setChecked(false);
06141          this->ui->actionArchivo->setDisabled(true);
06142         this->ui->actionEdicion->setDisabled(true);
06143         this->ui->actionEliminacion->setDisabled(true);
06144         this->ui->actionExportacion->setDisabled(true);
06145         this->ui->actionGuardado->setDisabled(true);
06146         this->ui->actionImagenes->setDisabled(true);
06147         this->ui->actionPaginas->setDisabled(true);
06148         this->ui->actionPropiedades->setDisabled(true);
06149     }
06150 }
06151   
06152 void FormPrincipal::MostrarBarraEdicion(){
06153     if(this->ui->actionEdicion->isChecked()){
06154         this->ui->toolBar->show();
06155         this->ui->actionEditarBoton->setVisible(true);
06156         this->ui->actionTerminarBoton->setVisible(true);
06157         this->ui->actionEditarTamBoton->setVisible(true);
06158         this->ui->toolBar->actions().at(16)->setVisible(true);
06159     }else{
06160         this->ui->actionEditarBoton->setVisible(false);
06161         this->ui->actionTerminarBoton->setVisible(false);
06162         this->ui->actionEditarTamBoton->setVisible(false);
06163         this->ui->toolBar->actions().at(16)->setVisible(false);
06164     }
06165     bool vigilante=false;
06166     for(int i=0; i <this->ui->toolBar->actions().size(); i++){
06167         if(this->ui->toolBar->actions().at(i)->isVisible()){
06168             vigilante=true;
06169         }
06170     }
06171     if(!vigilante){
06172         this->ui->toolBar->hide();
06173         this->ui->actionBarraHerramientas->setChecked(false);
06174          this->ui->actionArchivo->setDisabled(true);
06175         this->ui->actionEdicion->setDisabled(true);
06176         this->ui->actionEliminacion->setDisabled(true);
06177         this->ui->actionExportacion->setDisabled(true);
06178         this->ui->actionGuardado->setDisabled(true);
06179         this->ui->actionImagenes->setDisabled(true);
06180         this->ui->actionPaginas->setDisabled(true);
06181         this->ui->actionPropiedades->setDisabled(true);
06182     }
06183 }
06184     
06185 void FormPrincipal::MostrarBarraEliminacion(){
06186     if(this->ui->actionEliminacion->isChecked()){
06187         this->ui->toolBar->show();
06188         this->ui->actionBorrarBoton->setVisible(true);
06189         this->ui->toolBar->actions().at(12)->setVisible(true);
06190     }else{
06191         this->ui->actionBorrarBoton->setVisible(false);
06192         this->ui->toolBar->actions().at(12)->setVisible(false);
06193     }
06194     bool vigilante=false;
06195     for(int i=0; i <this->ui->toolBar->actions().size(); i++){
06196         if(this->ui->toolBar->actions().at(i)->isVisible()){
06197             vigilante=true;
06198         }
06199     }
06200     if(!vigilante){
06201         this->ui->toolBar->hide();
06202         this->ui->actionBarraHerramientas->setChecked(false);
06203          this->ui->actionArchivo->setDisabled(true);
06204         this->ui->actionEdicion->setDisabled(true);
06205         this->ui->actionEliminacion->setDisabled(true);
06206         this->ui->actionExportacion->setDisabled(true);
06207         this->ui->actionGuardado->setDisabled(true);
06208         this->ui->actionImagenes->setDisabled(true);
06209         this->ui->actionPaginas->setDisabled(true);
06210         this->ui->actionPropiedades->setDisabled(true);
06211     }
06212 }
06213     
06214 void FormPrincipal::MostrarBarraExportacion(){
06215     if(this->ui->actionExportacion->isChecked()){
06216         this->ui->toolBar->show();
06217         this->ui->actionExportarJPGBoton->setVisible(true);
06218         this->ui->actionExportarPDFBoton->setVisible(true);
06219         this->ui->actionImprimirBoton->setVisible(true);
06220         this->ui->toolBar->actions().at(10)->setVisible(true);
06221     }else{
06222         this->ui->actionExportarJPGBoton->setVisible(false);
06223         this->ui->actionExportarPDFBoton->setVisible(false);
06224         this->ui->actionImprimirBoton->setVisible(false);
06225         this->ui->toolBar->actions().at(10)->setVisible(false);
06226     }
06227     bool vigilante=false;
06228     for(int i=0; i <this->ui->toolBar->actions().size(); i++){
06229         if(this->ui->toolBar->actions().at(i)->isVisible()){
06230             vigilante=true;
06231         }
06232     }
06233     if(!vigilante){
06234         this->ui->toolBar->hide();
06235         this->ui->actionBarraHerramientas->setChecked(false);
06236          this->ui->actionArchivo->setDisabled(true);
06237         this->ui->actionEdicion->setDisabled(true);
06238         this->ui->actionEliminacion->setDisabled(true);
06239         this->ui->actionExportacion->setDisabled(true);
06240         this->ui->actionGuardado->setDisabled(true);
06241         this->ui->actionImagenes->setDisabled(true);
06242         this->ui->actionPaginas->setDisabled(true);
06243         this->ui->actionPropiedades->setDisabled(true);
06244     }
06245 }
06246     
06247 void FormPrincipal::MostrarBarraGuardado(){
06248     if(this->ui->actionGuardado->isChecked()){
06249         this->ui->toolBar->show();
06250         this->ui->actionGuardarBoton->setVisible(true);
06251         this->ui->actionGuardarComoBoton->setVisible(true);
06252         this->ui->toolBar->actions().at(6)->setVisible(true);
06253     }else{
06254         this->ui->actionGuardarBoton->setVisible(false);
06255         this->ui->actionGuardarComoBoton->setVisible(false);
06256         this->ui->toolBar->actions().at(6)->setVisible(false);
06257     }
06258     bool vigilante=false;
06259     for(int i=0; i <this->ui->toolBar->actions().size(); i++){
06260         if(this->ui->toolBar->actions().at(i)->isVisible()){
06261             vigilante=true;
06262         }
06263     }
06264     if(!vigilante){
06265         this->ui->toolBar->hide();
06266         this->ui->actionBarraHerramientas->setChecked(false);
06267          this->ui->actionArchivo->setDisabled(true);
06268         this->ui->actionEdicion->setDisabled(true);
06269         this->ui->actionEliminacion->setDisabled(true);
06270         this->ui->actionExportacion->setDisabled(true);
06271         this->ui->actionGuardado->setDisabled(true);
06272         this->ui->actionImagenes->setDisabled(true);
06273         this->ui->actionPaginas->setDisabled(true);
06274         this->ui->actionPropiedades->setDisabled(true);
06275     }
06276 }
06277     
06278 void FormPrincipal::MostrarBarraImagenes(){
06279     if(this->ui->actionImagenes->isChecked()){
06280         this->ui->toolBar->show();
06281         this->ui->actionAnnadirBoton->setVisible(true);
06282         this->ui->actionSeleccionarTodoBoton->setVisible(true);
06283         this->ui->actionDeseleccionarTodoBoton->setVisible(true);
06284         this->ui->actionEliminarFotosBoton->setVisible(true);
06285         this->ui->toolBar->actions().at(21)->setVisible(true);
06286     }else{
06287         this->ui->actionAnnadirBoton->setVisible(false);
06288         this->ui->actionSeleccionarTodoBoton->setVisible(false);
06289         this->ui->actionDeseleccionarTodoBoton->setVisible(false);
06290         this->ui->actionEliminarFotosBoton->setVisible(false);
06291         this->ui->toolBar->actions().at(21)->setVisible(false);
06292     }
06293     bool vigilante=false;
06294     for(int i=0; i <this->ui->toolBar->actions().size(); i++){
06295         if(this->ui->toolBar->actions().at(i)->isVisible()){
06296             vigilante=true;
06297         }
06298     }
06299     if(!vigilante){
06300         this->ui->toolBar->hide();
06301         this->ui->actionBarraHerramientas->setChecked(false);
06302          this->ui->actionArchivo->setDisabled(true);
06303         this->ui->actionEdicion->setDisabled(true);
06304         this->ui->actionEliminacion->setDisabled(true);
06305         this->ui->actionExportacion->setDisabled(true);
06306         this->ui->actionGuardado->setDisabled(true);
06307         this->ui->actionImagenes->setDisabled(true);
06308         this->ui->actionPaginas->setDisabled(true);
06309         this->ui->actionPropiedades->setDisabled(true);
06310     }
06311 }
06312     
06313 void FormPrincipal::MostrarBarraPaginas(){
06314      if(this->ui->actionPaginas->isChecked()){
06315         this->ui->toolBar->show();
06316         this->ui->actionAvanzarBoton->setVisible(true);
06317         this->ui->actionRetrocederBoton->setVisible(true);
06318         this->ui->toolBar->actions().at(26)->setVisible(true);
06319     }else{
06320         this->ui->actionAvanzarBoton->setVisible(false);
06321         this->ui->actionRetrocederBoton->setVisible(false);
06322         this->ui->toolBar->actions().at(26)->setVisible(false);
06323     }
06324      bool vigilante=false;
06325     for(int i=0; i <this->ui->toolBar->actions().size(); i++){
06326         if(this->ui->toolBar->actions().at(i)->isVisible()){
06327             vigilante=true;
06328         }
06329     }
06330     if(!vigilante){
06331         this->ui->toolBar->hide();
06332         this->ui->actionBarraHerramientas->setChecked(false);
06333          this->ui->actionArchivo->setDisabled(true);
06334         this->ui->actionEdicion->setDisabled(true);
06335         this->ui->actionEliminacion->setDisabled(true);
06336         this->ui->actionExportacion->setDisabled(true);
06337         this->ui->actionGuardado->setDisabled(true);
06338         this->ui->actionImagenes->setDisabled(true);
06339         this->ui->actionPaginas->setDisabled(true);
06340         this->ui->actionPropiedades->setDisabled(true);
06341     }
06342 }
06343     
06344 void FormPrincipal::MostrarBarraPropiedades(){
06345     if(this->ui->actionPropiedades->isChecked()){
06346         this->ui->toolBar->show();
06347         this->ui->actionPropiedadesBoton->setVisible(true);
06348         this->ui->toolBar->actions().at(23)->setVisible(true);
06349     }else{
06350         this->ui->actionPropiedadesBoton->setVisible(false);
06351         this->ui->toolBar->actions().at(23)->setVisible(false);
06352     }
06353     bool vigilante=false;
06354     for(int i=0; i <this->ui->toolBar->actions().size(); i++){
06355         if(this->ui->toolBar->actions().at(i)->isVisible()){
06356             vigilante=true;
06357         }
06358     }
06359     if(!vigilante){
06360         this->ui->toolBar->hide();
06361         this->ui->actionBarraHerramientas->setChecked(false);
06362          this->ui->actionArchivo->setDisabled(true);
06363         this->ui->actionEdicion->setDisabled(true);
06364         this->ui->actionEliminacion->setDisabled(true);
06365         this->ui->actionExportacion->setDisabled(true);
06366         this->ui->actionGuardado->setDisabled(true);
06367         this->ui->actionImagenes->setDisabled(true);
06368         this->ui->actionPaginas->setDisabled(true);
06369         this->ui->actionPropiedades->setDisabled(true);
06370     }
06371 }
06372 
06373 
06374 void FormPrincipal::MostrarPaginaAnterior(){
06375     IndicePaginas--;
06376 
06377     ui->pushPagSiguiente->setEnabled(true);
06378     ui->action_Avanzar_P_gina->setEnabled(true);
06379     ui->actionAvanzarBoton->setEnabled(true);
06380     if(IndicePaginas==0){
06381         this->mostrandosePaginaActualmente=false;
06382         ui->pushButtonEditarPagina->hide();
06383         ui->pushButtonTerminarPagina->hide();
06384         ui->pushButtonEditar->show();
06385         ui->pushButtonEditar->setEnabled(true);
06386         ui->pushButtonTerminar->show();
06387         ui->pushPagAnterior->setDisabled(true);
06388         ui->action_Retroceder_p_gina->setDisabled(true);
06389         ui->actionRetrocederBoton->setDisabled(true);
06390          Parser par(this->a->portada->RutaPlantilla().toStdString(), this);
06391         ticpp::Element* element=par.root();
06392         std::string resultado=par.get_attribute("editable", element);
06393         if(resultado=="No"){
06394             this->ui->pushButtonEditar->setDisabled(true);
06395             
06396         }
06397         //Cargar portada
06398         QGraphicsView *copia;
06399         try{
06400         copia=new QGraphicsView(a->portada->versionReducida);
06401         }catch(std::exception& e){
06402                         Error *err=new Error(2, e.what(), this);
06403                         err->LanzarDialogo();
06404                         delete err;
06405                         exit(1);
06406                     } 
06407         copia=a->portada->versionReducida;
06408         ui->visorAlbum->setScene(copia->scene());
06409     }else{
06410         IndicePaginas--;
06411        
06412         QGraphicsView *copia;
06413         try{
06414         copia=new QGraphicsView(a->GetPagina(IndicePaginas)->versionReducida);
06415         }catch(std::exception& e){
06416                         Error *err=new Error(2, e.what(), this);
06417                         err->LanzarDialogo();
06418                         delete err;
06419                         exit(1);
06420                     } 
06421         copia=a->GetPagina(IndicePaginas)->versionReducida;
06422         ui->visorAlbum->setScene(copia->scene());
06423         Parser par(this->a->paginas[IndicePaginas]->RutaPlantilla().toStdString(), this);
06424         ticpp::Element* element=par.root();
06425         std::string resultado=par.get_attribute("editable", element);
06426         if(resultado=="No"){
06427             ui->pushButtonEditarPagina->setDisabled(true);
06428         }else{
06429                 ui->pushButtonEditarPagina->setEnabled(true);
06430         }
06431         this->IndicePaginas++;
06432     }
06433 
06434 }
06435 
06436 void FormPrincipal::GenerarPaginasPersonalizadas(){
06437     try{
06438     for(unsigned indice=0; indice < a->paginas.size(); indice++){
06439         
06440         a->paginas[indice]->versionReducida->setFixedSize((this->controlador->getWVisorAlbum()), (this->controlador->getHVisorAlbum()));
06441         QGraphicsScene *escena = new QGraphicsScene(0, 0, (this->controlador->getWVisorAlbum()), (this->controlador->getHVisorAlbum()));
06442         a->paginas[indice]->versionReducida->setScene(escena);
06443 
06444         
06445         a->paginas[indice]->LoadDimensiones(this->dimensionHpagina, this->dimensionWpagina);
06446         
06447 
06448         if(a->GetPagina(indice)->ColordeFondo()){
06449             if(!this->a->GetPagina(indice)->activadaMascara()){
06450                 QBrush *wall= new QBrush(a->GetPagina(indice)->GetFondoColor());
06451                 a->paginas[indice]->versionReducida->scene()->setBackgroundBrush(*wall);
06452                 delete wall;
06453             }
06454         }else{
06455             if((!(a->GetPagina(indice)->ColordeFondo())) && (!this->a->GetPagina(indice)->activadaMascara())){
06456                 QPixmap *g;
06457                 g=new QPixmap(a->GetPagina(indice)->GetFondoImagen());
06458                 try{
06459                 if(g->isNull()){
06460                     throw std::ios_base::failure(tr("No se pudo abrir la imagen de fondo de una de las páginas.").toStdString());
06461                 }
06462                 }catch(std::exception& e){
06463                     Error *err=new Error(4, e.what(), this);
06464                         err->LanzarDialogo();
06465                         delete err;
06466                         exit(1);
06467                 }
06468                 QGraphicsPixmapItem *item=new QGraphicsPixmapItem(g->scaled((this->controlador->getWVisorAlbum())-2, (this->controlador->getHVisorAlbum())-2, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
06469                 item->setPos(0, 0);
06470                 item->setAcceptHoverEvents(false);
06471                 a->paginas[indice]->versionReducida->scene()->addItem(item);
06472                 a->paginas[indice]->versionReducida->setDragMode(QGraphicsView::RubberBandDrag);
06473                 delete g;
06474             }
06475              }
06476         
06477         
06478             
06479         //For para introducir las imágenes
06480         for(unsigned c=0; c< a->GetPagina(indice)->GetVectorImagenes().size(); c++){
06481             QPixmap *h;
06482             h=new QPixmap(a->GetPagina(indice)->GetVectorImagenes().at(c).ruta);
06483             try{
06484             if(h->isNull()){
06485                 throw std::ios::failure(tr("No se pudo abrir una imagen de una de las páginas.").toStdString());
06486             }
06487             }catch(std::exception& e){
06488                         Error *err=new Error(4, e.what(), this);
06489                         err->LanzarDialogo();
06490                         delete err;
06491                         exit(1);
06492                     }
06493             QGraphicsPixmapItem *item2;
06494             if(h->width() > h->height()){
06495                 if(this->a->GetPagina(indice)->getImagenPosVertical(c)){
06496                     item2=new QGraphicsPixmapItem(h->scaled(a->GetPagina(indice)->GetVectorImagenes().at(c).h, a->GetPagina(indice)->GetVectorImagenes().at(c).w, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
06497                     item2->setPos(a->GetPagina(indice)->GetVectorImagenes().at(c).pos_x + a->GetPagina(indice)->GetVectorImagenes().at(c).w, a->GetPagina(indice)->GetVectorImagenes().at(c).pos_y);
06498             
06499                     item2->setRotation(90);
06500                     item2->setAcceptTouchEvents(true);
06501                 }else{
06502                     item2=new QGraphicsPixmapItem(h->scaled(a->GetPagina(indice)->GetVectorImagenes().at(c).w, a->GetPagina(indice)->GetVectorImagenes().at(c).h, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
06503                     item2->setPos(a->GetPagina(indice)->GetVectorImagenes().at(c).pos_x, a->GetPagina(indice)->GetVectorImagenes().at(c).pos_y);
06504             
06505                 }
06506             }else{
06507                 if(!this->a->GetPagina(indice)->getImagenPosVertical(c)){
06508                     item2=new QGraphicsPixmapItem(h->scaled(a->GetPagina(indice)->GetVectorImagenes().at(c).h, a->GetPagina(indice)->GetVectorImagenes().at(c).w, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
06509                     item2->setPos(a->GetPagina(indice)->GetVectorImagenes().at(c).pos_x + a->GetPagina(indice)->GetVectorImagenes().at(c).w, a->GetPagina(indice)->GetVectorImagenes().at(c).pos_y);
06510             
06511                     item2->setRotation(90);
06512                     item2->setAcceptTouchEvents(true);
06513                 }else{
06514                     item2=new QGraphicsPixmapItem(h->scaled(a->GetPagina(indice)->GetVectorImagenes().at(c).w, a->GetPagina(indice)->GetVectorImagenes().at(c).h, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
06515                     item2->setPos(a->GetPagina(indice)->GetVectorImagenes().at(c).pos_x, a->GetPagina(indice)->GetVectorImagenes().at(c).pos_y);
06516             
06517                 }
06518             }
06519             if(!this->a->GetPagina(indice)->activadaMascara()){
06520             item2->setAcceptHoverEvents(true);
06521             }
06522             a->paginas[indice]->versionReducida->scene()->addItem(item2);
06523             delete h;
06524         }
06525         
06526         
06527         if(this->a->GetPagina(indice)->activadaMascara() && this->a->GetPagina(indice)->ColordeFondo()){
06528             
06529                
06530                 QString path= this->directoriodetrabajo.absolutePath() + "/templates/pages/" + a->GetPagina(indice)->getMascara(); 
06531                 QImage *img=new QImage(path);
06532                 QRgb color=this->a->GetPagina(indice)->GetFondoColor().rgb();
06533                 for(int z=0; z < img->width(); z++){
06534                     for(int b=0; b < img->height(); b++){
06535                         if(img->pixel(z,b)!=0){
06536                         img->setPixel(z,b,color);
06537                         }
06538                     }
06539                 }
06540                 QPixmap *g=new QPixmap();
06541                 g->convertFromImage(*img, Qt::AutoColor);
06542                
06543                 QGraphicsPixmapItem *item=new QGraphicsPixmapItem(g->scaled((this->controlador->getWVisorAlbum())-2, (this->controlador->getHVisorAlbum())-2, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
06544                 item->setPos(0, 0);
06545                 item->setAcceptHoverEvents(false);
06546                 a->paginas[indice]->versionReducida->scene()->addItem(item);
06547                 delete img;
06548                 delete g;
06549         }
06550         
06551         if(this->a->GetPagina(indice)->activadaMascara() && !this->a->GetPagina(indice)->ColordeFondo()){
06552             
06553                 QString path= this->directoriodetrabajo.absolutePath() + "/templates/pages/" + a->GetPagina(indice)->getMascara(); 
06554                 QImage *mascara=new QImage(path);
06555                 QImage *imgFondo=new QImage(this->a->GetPagina(indice)->GetFondoImagen());
06556                 QImage imgFinal=mascara->scaled(imgFondo->width(), imgFondo->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
06557                 
06558                 for(int z=0; z < imgFinal.width(); z++){
06559                     for(int b=0; b < imgFinal.height(); b++){
06560                         if(imgFinal.pixel(z,b)!=0){
06561                         imgFinal.setPixel(z,b,imgFondo->pixel(z,b));
06562                         }
06563                     }
06564                 }
06565                 QPixmap *g=new QPixmap();
06566                 
06567                 g->convertFromImage(imgFinal, Qt::AutoColor);
06568                 QGraphicsPixmapItem *item=new QGraphicsPixmapItem(g->scaled((this->controlador->getWVisorAlbum())-2, (this->controlador->getHVisorAlbum())-2, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
06569                 item->setPos(0, 0);
06570                 item->setAcceptHoverEvents(false);
06571                 a->paginas[indice]->versionReducida->scene()->addItem(item);
06572                 a->paginas[indice]->versionReducida->setDragMode(QGraphicsView::RubberBandDrag);
06573                 delete mascara;
06574                 delete imgFondo;
06575                 delete g;
06576         }
06577         
06578         //For para introducir los textos
06579 
06580         for(unsigned d=0; d<a->GetPagina(indice)->GetVectorTextos().size(); d++){
06581             if(a->GetPagina(indice)->GetNumTextos()!=0){
06582                 QGraphicsTextItem *TF=new QGraphicsTextItem(a->GetPagina(indice)->GetVectorTextos().at(d).texto);
06583                 QFont *fuenteF=new QFont(a->GetPagina(indice)->GetVectorTextos().at(d).fuente.family(), a->GetPagina(indice)->GetVectorTextos().at(d).puntos, 50, a->GetPagina(indice)->GetVectorTextos().at(d).cursiva);
06584 
06585                 if(a->GetPagina(indice)->GetVectorTextos().at(d).negrita){
06586                     fuenteF->setBold(true);
06587                 }
06588 
06589                 if(a->GetPagina(indice)->GetVectorTextos().at(d).subrayado){
06590                     fuenteF->setUnderline(true);
06591                 }
06592 
06593                 TF->setDefaultTextColor(a->GetPagina(indice)->GetVectorTextos().at(d).color);
06594                 TF->setFont(*fuenteF);
06595                 
06596                 TF->setTextWidth(a->GetPagina(indice)->GetVectorTextos().at(d).w);
06597 
06598                 if(a->GetPagina(indice)->GetVectorTextos().at(d).vertical){
06599                     TF->setRotation(90);
06600                 }
06601 
06602                 TF->setPos(a->GetPagina(indice)->GetVectorTextos().at(d).pos_x, a->GetPagina(indice)->GetVectorTextos().at(d).pos_y);
06603 
06604                 if(a->GetPagina(indice)->GetVectorTextos().at(d).centrado){
06605                     // Para centrar el texto
06606                     QTextCursor cursor = TF->textCursor();
06607                     QTextBlockFormat bfmt = cursor.blockFormat();
06608                     bfmt.setAlignment(Qt::AlignCenter);
06609                     cursor.setBlockFormat(bfmt);
06610                     TF->setTextCursor(cursor);
06611                 }
06612 
06613                 TF->setAcceptHoverEvents(true);
06614                 a->paginas[indice]->versionReducida->scene()->addItem(TF);
06615                 delete fuenteF;
06616             }
06617 
06618         }
06619         
06620         //Ahora introducimos los marcos, si es que los hay
06621         if(a->paginas[indice]->ContieneMarcos()){
06622             for(int contadorMarcos=0; contadorMarcos < a->paginas[indice]->getMarcos().size(); contadorMarcos++){
06623                 if(!a->paginas[indice]->getMarcos().at(contadorMarcos).nombre->isEmpty()){
06624                 QPixmap *h;
06625                 QString marcoName=this->directoriodetrabajo.absolutePath() + "/frames/";
06626                 marcoName.append(a->paginas[indice]->getMarcos().at(contadorMarcos).nombre);
06627                 h=new QPixmap(marcoName);
06628                
06629             try{
06630             if(h->isNull()){
06631                 throw std::ios::failure(tr("No se pudo abrir una imagen de una de las páginas.").toStdString());
06632             }
06633             }catch(std::exception& e){
06634                         Error *err=new Error(4, e.what(), this);
06635                         err->LanzarDialogo();
06636                         delete err;
06637                         exit(1);
06638                     }
06639             QGraphicsPixmapItem *item2;
06640             int numeroFoto=a->paginas[indice]->getMarcos().at(contadorMarcos).idFoto;
06641                    item2=new QGraphicsPixmapItem(h->scaled(a->GetPagina(indice)->GetVectorImagenes().at(numeroFoto-1).w, a->GetPagina(indice)->GetVectorImagenes().at(numeroFoto-1).h, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
06642                     item2->setPos(a->GetPagina(indice)->GetVectorImagenes().at(numeroFoto-1).pos_x, a->GetPagina(indice)->GetVectorImagenes().at(numeroFoto-1).pos_y);
06643                     
06644                     item2->setAcceptHoverEvents(true);
06645                     a->paginas[indice]->versionReducida->scene()->addItem(item2);
06646                  delete h;  
06647                 }
06648             }
06649         }
06650         a->paginas[indice]->setObjetosPagina(a->paginas[indice]->versionReducida->items());
06651         if(this->ui->actionLineaSeparacionPaginas->isChecked()){
06652                 a->paginas[indice]->versionReducida->scene()->addLine(231*(this->controlador->getWVisorAlbum())/462, 2, 231*(this->controlador->getWVisorAlbum())/462, 318*(this->controlador->getHVisorAlbum())/321)->setAcceptHoverEvents(false);
06653         }
06654 
06655         
06656     }
06657         }catch(std::exception& e){
06658                         Error *err=new Error(1, e.what(), this);
06659                         err->LanzarDialogo();
06660                         delete err;
06661                         exit(1);
06662                     } 
06663 
06664     // Aquí activamos la exportación
06665     
06666     ui->actionE_xportar->setEnabled(true);
06667     ui->actionExportarJPGBoton->setEnabled(true);
06668     ui->actionExportarPDFBoton->setEnabled(true);
06669     ui->actionI_mprimir->setEnabled(true);
06670     ui->actionImprimirBoton->setEnabled(true);
06671                 
06672 }
06673 
06674 
06675 void FormPrincipal::GenerarPaginasAleatorias(){
06676     //Mediante un For vamos generando cada una da las páginas
06677     try{
06678     for(unsigned indice=0; indice < a->paginas.size(); indice++){
06679         
06680         a->paginas[indice]->versionReducida->setFixedSize((this->controlador->getWVisorAlbum()), (this->controlador->getHVisorAlbum()));
06681         QGraphicsScene *escena;
06682         try{
06683         escena= new QGraphicsScene(0, 0, (this->controlador->getWVisorAlbum()), (this->controlador->getHVisorAlbum()));
06684         }catch(std::exception& e){
06685                         Error *err=new Error(2, e.what(), this);
06686                         err->LanzarDialogo();
06687                         delete err;
06688                         exit(1);
06689                     } 
06690         a->paginas[indice]->versionReducida->setScene(escena);
06691 
06692         
06693         a->paginas[indice]->LoadDimensiones(this->dimensionHpagina, this->dimensionWpagina);
06694         
06695 
06696         if(!a->GetPagina(indice)->activadaMascara()){
06697             QBrush *wall;
06698             try{
06699             wall= new QBrush(a->GetPagina(indice)->GetFondoColor());
06700             }catch(std::exception& e){
06701                         Error *err=new Error(2, e.what(), this);
06702                         err->LanzarDialogo();
06703                         delete err;
06704                         exit(1);
06705                     } 
06706             a->paginas[indice]->versionReducida->scene()->setBackgroundBrush(*wall);
06707             delete wall;
06708         }
06709         
06710 
06711         //For para introducir las imágenes
06712         for(unsigned c=0; c< a->GetPagina(indice)->GetVectorImagenes().size(); c++){
06713             QPixmap *h;
06714             h=new QPixmap(a->GetPagina(indice)->GetVectorImagenes().at(c).ruta);
06715             try{
06716             if(h->isNull()){
06717                 throw std::ios::failure(tr("No se pudo abrir una imagen de una de las páginas.").toStdString());
06718             }
06719             }catch(std::exception& e){
06720                         Error *err=new Error(4, e.what(), this);
06721                         err->LanzarDialogo();
06722                         delete err;
06723                         exit(1);
06724                     }
06725             QGraphicsPixmapItem *item2;
06726             if(h->width() > h->height()){
06727                 if(this->a->GetPagina(indice)->getImagenPosVertical(c)){
06728                     item2=new QGraphicsPixmapItem(h->scaled(a->GetPagina(indice)->GetVectorImagenes().at(c).h, a->GetPagina(indice)->GetVectorImagenes().at(c).w, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
06729                     item2->setPos(a->GetPagina(indice)->GetVectorImagenes().at(c).pos_x + a->GetPagina(indice)->GetVectorImagenes().at(c).w, a->GetPagina(indice)->GetVectorImagenes().at(c).pos_y);
06730             
06731                     item2->setRotation(90);
06732                     item2->setAcceptTouchEvents(true);
06733                 }else{
06734                     item2=new QGraphicsPixmapItem(h->scaled(a->GetPagina(indice)->GetVectorImagenes().at(c).w, a->GetPagina(indice)->GetVectorImagenes().at(c).h, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
06735                     item2->setPos(a->GetPagina(indice)->GetVectorImagenes().at(c).pos_x, a->GetPagina(indice)->GetVectorImagenes().at(c).pos_y);
06736             
06737                 }
06738             }else{
06739                 if(!this->a->GetPagina(indice)->getImagenPosVertical(c)){
06740                     item2=new QGraphicsPixmapItem(h->scaled(a->GetPagina(indice)->GetVectorImagenes().at(c).h, a->GetPagina(indice)->GetVectorImagenes().at(c).w, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
06741                     item2->setPos(a->GetPagina(indice)->GetVectorImagenes().at(c).pos_x + a->GetPagina(indice)->GetVectorImagenes().at(c).w, a->GetPagina(indice)->GetVectorImagenes().at(c).pos_y);
06742             
06743                     item2->setRotation(90);
06744                     item2->setAcceptTouchEvents(true);
06745                 }else{
06746                     item2=new QGraphicsPixmapItem(h->scaled(a->GetPagina(indice)->GetVectorImagenes().at(c).w, a->GetPagina(indice)->GetVectorImagenes().at(c).h, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
06747                     item2->setPos(a->GetPagina(indice)->GetVectorImagenes().at(c).pos_x, a->GetPagina(indice)->GetVectorImagenes().at(c).pos_y);
06748             
06749                 }
06750             }
06751             if(!this->a->GetPagina(indice)->activadaMascara()){
06752             item2->setAcceptHoverEvents(true);
06753             }
06754             a->paginas[indice]->versionReducida->scene()->addItem(item2);
06755             delete h;
06756         }
06757         
06758         
06759         if(this->a->GetPagina(indice)->activadaMascara() && this->a->GetPagina(indice)->ColordeFondo()){
06760                 QString path= this->directoriodetrabajo.absolutePath() + "/templates/pages/" + a->GetPagina(indice)->getMascara(); 
06761                 QImage *img=new QImage(path);
06762                 QRgb color=this->a->GetPagina(indice)->GetFondoColor().rgb();
06763                 for(int z=0; z < img->width(); z++){
06764                     for(int b=0; b < img->height(); b++){
06765                         if(img->pixel(z,b)!=0){
06766                         img->setPixel(z,b,color);
06767                         }
06768                     }
06769                 }
06770                 QPixmap *g=new QPixmap();
06771                 g->convertFromImage(*img, Qt::AutoColor);
06772                 
06773                 QGraphicsPixmapItem *item=new QGraphicsPixmapItem(g->scaled((this->controlador->getWVisorAlbum())-2, (this->controlador->getHVisorAlbum())-2, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
06774                 item->setPos(0, 0);
06775                 item->setAcceptHoverEvents(false);
06776                 a->paginas[indice]->versionReducida->scene()->addItem(item);
06777                 delete img;
06778                 delete g;
06779         }
06780         
06781          
06782         
06783         a->paginas[indice]->setObjetosPagina(a->paginas[indice]->versionReducida->items());
06784         if(this->ui->actionLineaSeparacionPaginas->isChecked()){
06785                 a->paginas[indice]->versionReducida->scene()->addLine(231*(this->controlador->getWVisorAlbum())/462, 2, 231*(this->controlador->getWVisorAlbum())/462, 318*(this->controlador->getHVisorAlbum())/321)->setAcceptHoverEvents(false);
06786         }
06787 
06788     }
06789         }catch(std::exception& e){
06790                         Error *err=new Error(1, e.what(), this);
06791                         err->LanzarDialogo();
06792                         delete err;
06793                         exit(1);
06794                     } 
06795     ui->actionE_xportar->setEnabled(true);
06796     ui->actionExportarJPGBoton->setEnabled(true);
06797     ui->actionExportarPDFBoton->setEnabled(true);
06798     ui->actionI_mprimir->setEnabled(true);
06799     ui->actionImprimirBoton->setEnabled(true);
06800 }
06801 
06802 void FormPrincipal::GenerarPaginasFijas(){
06803     try{
06804     //Mediante un For vamos generando cada una da las páginas
06805     for(unsigned indice=0; indice < a->paginas.size(); indice++){
06806         
06807         a->paginas[indice]->versionReducida->setFixedSize((this->controlador->getWVisorAlbum()), (this->controlador->getHVisorAlbum()));
06808         QGraphicsScene *escena;
06809         try{
06810         escena= new QGraphicsScene(0, 0, (this->controlador->getWVisorAlbum()), (this->controlador->getHVisorAlbum()));
06811         }catch(std::exception& e){
06812                         Error *err=new Error(2, e.what(), this);
06813                         err->LanzarDialogo();
06814                         delete err;
06815                         exit(1);
06816                     } 
06817         a->paginas[indice]->versionReducida->setScene(escena);
06818 
06819         
06820         a->paginas[indice]->LoadDimensiones(this->dimensionHpagina, this->dimensionWpagina);
06821        
06822         if(a->GetPagina(indice)->ColordeFondo() && !this->a->GetPagina(indice)->activadaMascara()){
06823             QBrush *wall;
06824             try{
06825             wall= new QBrush(a->GetPagina(indice)->GetFondoColor());
06826             }catch(std::exception& e){
06827                         Error *err=new Error(2, e.what(), this);
06828                         err->LanzarDialogo();
06829                         delete err;
06830                         exit(1);
06831                     } 
06832             a->paginas[indice]->versionReducida->scene()->setBackgroundBrush(*wall);
06833             delete wall;
06834         }else{
06835             if((!(a->GetPagina(indice)->ColordeFondo())) && (!this->a->GetPagina(indice)->activadaMascara())){
06836                  
06837                 QPixmap *g;
06838                 try{
06839                 g=new QPixmap(a->GetPagina(indice)->GetFondoImagen());
06840                 if(g->isNull()){
06841                     throw std::ios_base::failure(tr("No pudo abrirse la imagen de fondo de una de las páginas.").toStdString());
06842                 }
06843                 }catch(std::exception& e){
06844                         Error *err=new Error(4, e.what(), this);
06845                         err->LanzarDialogo();
06846                         delete err;
06847                         exit(1);
06848                     } 
06849                 QGraphicsPixmapItem *item;
06850                 try{
06851                 item=new QGraphicsPixmapItem(g->scaled((this->controlador->getWVisorAlbum())-2, (this->controlador->getHVisorAlbum())-2, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
06852                 }catch(std::exception& e){
06853                         Error *err=new Error(2, e.what(), this);
06854                         err->LanzarDialogo();
06855                         delete err;
06856                         exit(1);
06857                     } 
06858                 item->setPos(0, 0);
06859                 item->setAcceptHoverEvents(false);
06860                 a->paginas[indice]->versionReducida->scene()->addItem(item);
06861                 delete g;
06862             }
06863             a->paginas[indice]->versionReducida->setDragMode(QGraphicsView::RubberBandDrag);
06864         }
06865         
06866         
06867   //For para introducir las imágenes
06868         for(unsigned c=0; c< a->GetPagina(indice)->GetVectorImagenes().size(); c++){
06869             QPixmap *h;
06870             h=new QPixmap(a->GetPagina(indice)->GetVectorImagenes().at(c).ruta);
06871             try{
06872             if(h->isNull()){
06873                 throw std::ios::failure(tr("No se pudo abrir una imagen de una de las páginas.").toStdString());
06874             }
06875             }catch(std::exception& e){
06876                         Error *err=new Error(4, e.what(), this);
06877                         err->LanzarDialogo();
06878                         delete err;
06879                         exit(1);
06880                     }
06881             QGraphicsPixmapItem *item2;
06882             if(h->width() > h->height()){
06883                 if(this->a->GetPagina(indice)->getImagenPosVertical(c)){
06884                     item2=new QGraphicsPixmapItem(h->scaled(a->GetPagina(indice)->GetVectorImagenes().at(c).h, a->GetPagina(indice)->GetVectorImagenes().at(c).w, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
06885                     item2->setPos(a->GetPagina(indice)->GetVectorImagenes().at(c).pos_x + a->GetPagina(indice)->GetVectorImagenes().at(c).w, a->GetPagina(indice)->GetVectorImagenes().at(c).pos_y);
06886             
06887                     item2->setRotation(90);
06888                     item2->setAcceptTouchEvents(true);
06889                 }else{
06890                     item2=new QGraphicsPixmapItem(h->scaled(a->GetPagina(indice)->GetVectorImagenes().at(c).w, a->GetPagina(indice)->GetVectorImagenes().at(c).h, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
06891                     item2->setPos(a->GetPagina(indice)->GetVectorImagenes().at(c).pos_x, a->GetPagina(indice)->GetVectorImagenes().at(c).pos_y);
06892             
06893                 }
06894             }else{
06895                 if(!this->a->GetPagina(indice)->getImagenPosVertical(c)){
06896                     item2=new QGraphicsPixmapItem(h->scaled(a->GetPagina(indice)->GetVectorImagenes().at(c).h, a->GetPagina(indice)->GetVectorImagenes().at(c).w, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
06897                     item2->setPos(a->GetPagina(indice)->GetVectorImagenes().at(c).pos_x + a->GetPagina(indice)->GetVectorImagenes().at(c).w, a->GetPagina(indice)->GetVectorImagenes().at(c).pos_y);
06898             
06899                     item2->setRotation(90);
06900                     item2->setAcceptTouchEvents(true);
06901                 }else{
06902                     item2=new QGraphicsPixmapItem(h->scaled(a->GetPagina(indice)->GetVectorImagenes().at(c).w, a->GetPagina(indice)->GetVectorImagenes().at(c).h, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
06903                     item2->setPos(a->GetPagina(indice)->GetVectorImagenes().at(c).pos_x, a->GetPagina(indice)->GetVectorImagenes().at(c).pos_y);
06904             
06905                 }
06906             }
06907             if(!this->a->GetPagina(indice)->activadaMascara()){
06908             
06909             item2->setAcceptHoverEvents(true);
06910             }
06911             a->paginas[indice]->versionReducida->scene()->addItem(item2);
06912             delete h;
06913         }
06914         
06915         
06916         
06917         if(this->a->GetPagina(indice)->activadaMascara() && this->a->GetPagina(indice)->ColordeFondo()){
06918                 QString path= this->directoriodetrabajo.absolutePath() + "/templates/pages/" + a->GetPagina(indice)->getMascara(); 
06919                 QImage *img=new QImage(path);
06920                 QRgb color=this->a->GetPagina(indice)->GetFondoColor().rgb();
06921                 for(int z=0; z < img->width(); z++){
06922                     for(int b=0; b < img->height(); b++){
06923                         if(img->pixel(z,b)!=0){
06924                         img->setPixel(z,b,color);
06925                         }
06926                     }
06927                 }
06928                 QPixmap *g=new QPixmap();
06929                 g->convertFromImage(*img, Qt::AutoColor);
06930                
06931                 QGraphicsPixmapItem *item=new QGraphicsPixmapItem(g->scaled((this->controlador->getWVisorAlbum())-2, (this->controlador->getHVisorAlbum())-2, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
06932                 item->setPos(0, 0);
06933                 item->setAcceptHoverEvents(false);
06934                 a->paginas[indice]->versionReducida->scene()->addItem(item);
06935                 delete img;
06936                 delete g;
06937         }
06938         
06939         if(this->a->GetPagina(indice)->activadaMascara() && !this->a->GetPagina(indice)->ColordeFondo()){
06940             
06941                 QString path= this->directoriodetrabajo.absolutePath() + "/templates/pages/" + a->GetPagina(indice)->getMascara(); 
06942                 QImage *mascara=new QImage(path);
06943                 QImage *imgFondo=new QImage(this->a->GetPagina(indice)->GetFondoImagen());
06944                 QImage imgFinal=mascara->scaled(imgFondo->width(), imgFondo->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
06945                 
06946                 for(int z=0; z < imgFinal.width(); z++){
06947                     for(int b=0; b < imgFinal.height(); b++){
06948                         if(imgFinal.pixel(z,b)!=0){
06949                             
06950                         imgFinal.setPixel(z,b,imgFondo->pixel(z,b));
06951                         }
06952                     }
06953                 }
06954                 QPixmap *g=new QPixmap();
06955                 
06956                 g->convertFromImage(imgFinal, Qt::AutoColor);
06957                 QGraphicsPixmapItem *item=new QGraphicsPixmapItem(g->scaled((this->controlador->getWVisorAlbum())-2, (this->controlador->getHVisorAlbum())-2, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
06958                 item->setPos(0, 0);
06959                 item->setAcceptHoverEvents(false);
06960                 a->paginas[indice]->versionReducida->scene()->addItem(item);
06961                 delete mascara;
06962                 delete imgFondo;
06963                 delete g;    
06964          }
06965         
06966         
06967         //For para poner textos (si es que los hay)
06968         for(unsigned d=0; d<a->GetPagina(indice)->GetVectorTextos().size(); d++){
06969             if(a->GetPagina(indice)->GetNumTextos()!=0){
06970                 QGraphicsTextItem *TF=new QGraphicsTextItem(a->GetPagina(indice)->GetVectorTextos().at(d).texto);
06971                 QFont *fuenteF=new QFont(a->GetPagina(indice)->GetVectorTextos().at(d).fuente.family(), a->GetPagina(indice)->GetVectorTextos().at(d).puntos, 50, a->GetPagina(indice)->GetVectorTextos().at(d).cursiva);
06972 
06973                 if(a->GetPagina(indice)->GetVectorTextos().at(d).negrita){
06974                     fuenteF->setBold(true);
06975                 }
06976 
06977                 if(a->GetPagina(indice)->GetVectorTextos().at(d).subrayado){
06978                     fuenteF->setUnderline(true);
06979                 }
06980 
06981                 TF->setDefaultTextColor(a->GetPagina(indice)->GetVectorTextos().at(d).color);
06982                 TF->setFont(*fuenteF);
06983                 TF->setTextWidth(a->GetPagina(indice)->GetVectorTextos().at(d).w);
06984 
06985                 if(a->GetPagina(indice)->GetVectorTextos().at(d).vertical){
06986                     TF->setRotation(90);
06987                 }
06988 
06989                 TF->setPos(a->GetPagina(indice)->GetVectorTextos().at(d).pos_x, a->GetPagina(indice)->GetVectorTextos().at(d).pos_y);
06990 
06991                 if(a->GetPagina(indice)->GetVectorTextos().at(d).centrado){
06992                     // Para centrar el texto
06993                     QTextCursor cursor = TF->textCursor();
06994                     QTextBlockFormat bfmt = cursor.blockFormat();
06995                     bfmt.setAlignment(Qt::AlignCenter);
06996                     cursor.setBlockFormat(bfmt);
06997                     TF->setTextCursor(cursor);
06998                 }
06999 
07000                 TF->setAcceptHoverEvents(true);
07001                 a->paginas[indice]->versionReducida->scene()->addItem(TF);
07002                 delete fuenteF;
07003             }
07004             
07005         }
07006         
07007         
07008         a->paginas[indice]->setObjetosPagina(a->paginas[indice]->versionReducida->items());
07009         if(this->ui->actionLineaSeparacionPaginas->isChecked()){
07010                 a->paginas[indice]->versionReducida->scene()->addLine(231*(this->controlador->getWVisorAlbum())/462, 2, 231*(this->controlador->getWVisorAlbum())/462, 318*(this->controlador->getHVisorAlbum())/321)->setAcceptHoverEvents(false);
07011         } 
07012     }
07013         }catch(std::exception& e){
07014                         Error *err=new Error(1, e.what(), this);
07015                         err->LanzarDialogo();
07016                         delete err;
07017                         exit(1);
07018                     } 
07019     
07020     
07021     ui->actionE_xportar->setEnabled(true);
07022     ui->actionExportarJPGBoton->setEnabled(true);
07023     ui->actionExportarPDFBoton->setEnabled(true);
07024     ui->actionI_mprimir->setEnabled(true);
07025     ui->actionImprimirBoton->setEnabled(true);
07026 }
07027 
07028 void FormPrincipal::terminarEdicionGeneral(){
07029     if(this->mostrandosePaginaActualmente){
07030         this->DesactivarEdicionPagina();
07031     }else{
07032         this->DesactivarEdicion();
07033     }
07034 }
07035 
07036 void FormPrincipal::edicionGeneral(){
07037     if(this->mostrandosePaginaActualmente){
07038         this->ActivarEdicionPagina();
07039     }else{
07040         this->ActivarEdicion();
07041     }
07042 }
07043 
07044 void FormPrincipal::MostrarPagina(){
07045     ui->pushPagAnterior->setEnabled(true);
07046     ui->action_Retroceder_p_gina->setEnabled(true);
07047     ui->actionRetrocederBoton->setEnabled(true);
07048     ui->visorAlbum->resetCachedContent();
07049     this->mostrandosePaginaActualmente=true;
07050    QGraphicsView *copia;
07051    try{
07052    copia=new QGraphicsView(a->GetPagina(IndicePaginas)->versionReducida);
07053    }catch(std::exception& e){
07054                         Error *err=new Error(2, e.what(), this);
07055                         err->LanzarDialogo();
07056                         delete err;
07057                         exit(1);
07058                     } 
07059    copia=a->GetPagina(IndicePaginas)->versionReducida;
07060     ui->visorAlbum->setScene(copia->scene());
07061 
07062   IndicePaginas++;
07063     if(IndicePaginas==1){
07064         ui->pushButtonEditar->hide();
07065         ui->pushButtonEditar->setDisabled(true);
07066         ui->pushButtonEditarPagina->setEnabled(true);
07067         ui->pushButtonTerminar->hide();
07068         ui->pushButtonTerminar->setDisabled(true);
07069         ui->pushButtonEditarPagina->show();
07070         ui->actionEditar->setEnabled(true);
07071         ui->actionEditarBoton->setEnabled(true);
07072         ui->pushButtonTerminarPagina->show();
07073         ui->pushButtonTerminarPagina->setDisabled(true);
07074     }
07075     
07076     if(IndicePaginas==a->paginas.size()){
07077         ui->pushPagSiguiente->setDisabled(true);
07078         ui->action_Avanzar_P_gina->setDisabled(true);
07079         ui->actionAvanzarBoton->setDisabled(true);
07080     }
07081     Parser par(this->a->paginas[IndicePaginas-1]->RutaPlantilla().toStdString(), this);
07082     ticpp::Element* element=par.root();
07083     
07084         std::string resultado=par.get_attribute("editable", element);
07085         if(resultado=="No"){
07086             ui->pushButtonEditarPagina->setDisabled(true);
07087         }else{
07088             ui->pushButtonEditarPagina->setEnabled(true);
07089         }
07090 
07091 }
07092 int FormPrincipal::GetNumeroAleatorio(int Min, int Max)
07093 {
07094     if(!this->semillaInicializada){
07095         this->semillaInicializada=true;
07096         qsrand(QTime::currentTime().msec());
07097     }
07098     if (Min > Max){
07099         int Temp = Min;
07100         Min = Max;
07101         Max = Temp;
07102     }
07103     return ((qrand()%(Max-Min+1))+Min);
07104 }
07105 
07106 QString FormPrincipal::GetPlantillaAleatoria(int numFotos){
07107     
07108     QString path=this->directoriodetrabajo.absolutePath() + "/templates/pages";
07109     QDir *dir;
07110     QStringList *por;
07111     try{
07112     dir=new QDir(path);
07113     por=new QStringList("*.xml");
07114     }catch(std::exception& e){
07115                         Error *err=new Error(2, e.what(), this);
07116                         err->LanzarDialogo();
07117                         delete err;
07118                         exit(1);
07119     } 
07120     bool fin=false;
07121     QString nombre;
07122     while(!fin){
07123         QStringList fileNames = dir->entryList(*por);
07124         int numAleatorio= this->GetNumeroAleatorio(0, fileNames.count()-1);
07125         QFileInfo fi(fileNames.at(numAleatorio).toLocal8Bit());
07126         QString cadenaAux=this->directoriodetrabajo.absolutePath() + "/templates/pages/" + fi.fileName();
07127         Parser par(cadenaAux.toStdString(), this);
07128         ticpp::Element* element=par.root();
07129         int num;
07130         par.get_attribute("texto", element, &num);
07131         if(num==0 && numFotos==0){
07132                 fin=true;
07133                 nombre=fi.fileName();
07134         }else{
07135             if(num==0){
07136                 int numAuxFotos=0;
07137                 par.get_attribute("imagen", element, &numAuxFotos);
07138                 if(numAuxFotos==numFotos){
07139                     fin=true;
07140                     nombre=fi.fileName();
07141                 }
07142             }
07143         }
07144     
07145     }
07146     return this->directoriodetrabajo.absolutePath() + "/templates/pages/" + nombre;
07147     delete dir;
07148     delete por;
07149 }
07150 
07151 QColor FormPrincipal::GetColorAleatorio(){
07152     return QColor(this->GetNumeroAleatorio(0, 255), this->GetNumeroAleatorio(0, 255), this->GetNumeroAleatorio(0, 255));
07153 }
07154 
07155 void FormPrincipal::CrearPaginas(bool wizard){
07156     if(!wizard){
07157     eleccionOrden *dialogoOrden;
07158     try{
07159     dialogoOrden=new eleccionOrden(this, this->controlador, this->directoriodetrabajo);
07160     }catch(std::exception& e){
07161                         Error *err=new Error(2, e.what(), this);
07162                         err->LanzarDialogo();
07163                         delete err;
07164                         exit(1);
07165     } 
07166     dialogoOrden->exec();
07167     if(dialogoOrden->result()==1){
07168     
07169     ordenAlfabetico=dialogoOrden->GetOrdenAlfabetico();
07170     ordenFechaCreciente= dialogoOrden->GetOrdenFechasCreciente();
07171     ordenFechaDecreciente= dialogoOrden->GetOrdenFechasDecreciente();
07172     ordenPersonalizado= dialogoOrden->GetOrdenPersonalizado();
07173     
07174     //Insertamos las imágenes elegidas en un vector
07175     for (int i = ui->treeWidget->topLevelItemCount() - 1; i >= 0; i--){
07176             //Entran todas las imágenes de la lista, independientemente de si estan seleccionadas o no
07177         a->InsertarFoto(ui->treeWidget->topLevelItem(i)->text(1), QDateTime::fromString(ui->treeWidget->topLevelItem(i)->text(4), Qt::TextDate), ui->treeWidget->topLevelItem(i)->text(5));
07178     }
07179     DialogOrdenPersonalizado *dialogo;
07180     try{
07181     dialogo= new DialogOrdenPersonalizado(a->GetVectorImagenes(), this, this->controlador, this->directoriodetrabajo);
07182     }catch(std::exception& e){
07183                         Error *err=new Error(2, e.what(), this);
07184                         err->LanzarDialogo();
07185                         delete err;
07186                         exit(1);
07187     } 
07188     bool comprobarFinUtilidad;
07189     std::vector<ImagenInfo> vectorImagenes;
07190     bool canceladoFormOrdenPers=false;
07191     
07192     if(ordenPersonalizado){
07193         dialogo->exec();
07194         if(dialogo->result()==1){
07195         
07196         comprobarFinUtilidad= dialogo->ComprobarFinUtilidad();
07197         vectorImagenes=dialogo->GetVectorImagenes();
07198         }else{
07199             a->ResetImagenes();
07200             canceladoFormOrdenPers=true;
07201         }
07202     }
07203     DialogCreacionPaginas *dialogocreacion;
07204     try{
07205     dialogocreacion= new DialogCreacionPaginas(this, this->controlador, this->directoriodetrabajo);
07206     }catch(std::exception& e){
07207                         Error *err=new Error(2, e.what(), this);
07208                         err->LanzarDialogo();
07209                         delete err;
07210                         exit(1);
07211     } 
07212     if(!canceladoFormOrdenPers){
07213     dialogocreacion->setMiniaturasTexturas(this->miniaturasTexturas);
07214     dialogocreacion->exec();
07215     if(dialogocreacion->result()==1){
07216     this->paginasFijas= dialogocreacion->PaginasFijas();
07217     this->paginasAleatorias = dialogocreacion->PaginasAleatorias();
07218     this->paginasPersonalizadas = dialogocreacion->PaginasPersonalizadas();
07219     static bool colorFondo;
07220     QString *nombrePlantillaFija=new QString();
07221     QColor *qcolorFondo=new QColor();
07222     QString *imagenFondo=new QString();
07223     static bool escritooNo1, escritooNo2, escritooNo3, escritooNo4, coloreadooNo1, coloreadooNo2, coloreadooNo3, coloreadooNo4;
07224     static bool c1, c2, c3, c4, n1, n2, n3, n4, s1, s2, s3, s4;
07225     QString t1, t2, t3, t4;
07226     QFont fuente1, fuente2, fuente3, fuente4;
07227     QColor clr1, clr2, clr3, clr4;
07228     static int numTextos;
07229     if(paginasFijas){
07230         colorFondo = dialogocreacion->ColorFondo();
07231         *nombrePlantillaFija = dialogocreacion->NombrePlantillaFija();
07232         if(colorFondo){
07233         *qcolorFondo = dialogocreacion->GetColorFondo();
07234         }else{
07235           *imagenFondo = dialogocreacion->GetImagenFondo();  
07236         }
07237         
07238         
07239         numTextos= dialogocreacion->GetNumTextos();
07240        escritooNo1 = dialogocreacion->escritooNo1;
07241         escritooNo2 = dialogocreacion->escritooNo2;
07242         escritooNo3 = dialogocreacion->escritooNo3;
07243         escritooNo4 = dialogocreacion->escritooNo4;
07244         coloreadooNo1 = dialogocreacion->coloreadooNo1;
07245         coloreadooNo2 = dialogocreacion->coloreadooNo2;
07246         coloreadooNo3 = dialogocreacion->coloreadooNo3;
07247         coloreadooNo4 = dialogocreacion->coloreadooNo4;
07248     c1 = dialogocreacion->c1;
07249     c2 = dialogocreacion->c2;
07250     c3 = dialogocreacion->c3;
07251     c4 = dialogocreacion->c4;
07252      n1 = dialogocreacion->n1;
07253     n2 = dialogocreacion->n2;
07254     n3 = dialogocreacion->n3;
07255     n4 = dialogocreacion->n4;
07256     s1 = dialogocreacion->s1;
07257     s2 = dialogocreacion->s2;
07258     s3 = dialogocreacion->s3;
07259     s4 = dialogocreacion->s4;
07260      t1 = dialogocreacion->t1;
07261     t2 = dialogocreacion->t2;
07262     t3 = dialogocreacion->t3;
07263     t4 = dialogocreacion->t4;
07264     fuente1 = dialogocreacion->fuente1;
07265     fuente2 = dialogocreacion->fuente2;
07266     fuente3 = dialogocreacion->fuente3;
07267     fuente4 = dialogocreacion->fuente4;
07268     clr1 = dialogocreacion->clr1;
07269     clr2 = dialogocreacion->clr2;
07270     clr3 = dialogocreacion->clr3;
07271     clr4 = dialogocreacion->clr4;
07272     }
07273     
07274     
07275     
07276     if(ordenAlfabetico){
07277         a->OrdenarAlfabeticamente();
07278     }else{
07279         if(ordenFechaCreciente){
07280                 a->OrdenarFechasCreciente();
07281         }else{
07282                 if(ordenFechaDecreciente){
07283                         a->OrdenarFechasDecreciente();
07284                 }else{
07285                     if(ordenPersonalizado){
07286                         a->OrdenarPersonalizado(vectorImagenes);
07287                     }
07288                 }
07289         }  
07290     }
07291      QProgressDialog *barraAvanzada= new QProgressDialog(this);
07292     barraAvanzada->setWindowTitle(tr("Generando..."));
07293     barraAvanzada->setFixedSize(361, 90);
07294     barraAvanzada->setStyle(new QWindowsStyle);
07295     barraAvanzada->setCancelButton(0);
07296     barraAvanzada->setRange(0, 7);
07297      
07298     
07299     if(paginasPersonalizadas){
07300                     //Lo necesario para páginas personalizadas
07301                     
07302                     if(this->CreacionPaginasPersonalizadas()){
07303                     barraAvanzada->show();
07304                     barraAvanzada->setValue(1);
07305                     barraAvanzada->setValue(2);
07306                     barraAvanzada->setValue(3);
07307                     this->GenerarPaginasPersonalizadas();
07308                     barraAvanzada->setValue(4);
07309                     barraAvanzada->setValue(5);
07310                     barraAvanzada->setValue(6);
07311                     ui->treeWidget->setDisabled(true);
07312     ui->imagePreview->setDisabled(true);
07313     ui->pushCrearPaginas->setDisabled(true);
07314     ui->pushOpen->setDisabled(true);
07315     ui->actionAnnadirBoton->setDisabled(true);
07316     ui->actionA_adir_im_genes->setDisabled(true);
07317     ui->pushCheckAll->setDisabled(true);
07318     ui->actionSeleccionarTodoBoton->setDisabled(true);
07319     ui->actionSeleccionar_todo->setDisabled(true);
07320     ui->pushUncheckAll->setDisabled(true);
07321     
07322          ui->actionDeseleccionarTodoBoton->setDisabled(true);
07323     this->ui->actionDeseleccionar_todo->setDisabled(true);
07324     ui->pushRemoveSelect->setDisabled(true);
07325     this->ui->actionBorrar_selecci_n->setDisabled(true);
07326     this->ui->actionEliminarFotosBoton->setDisabled(true);
07327     ui->pushPagSiguiente->setEnabled(true);
07328     ui->action_Avanzar_P_gina->setEnabled(true);
07329     ui->actionAvanzarBoton->setEnabled(true);
07330                     }
07331                     
07332     }else{
07333        barraAvanzada->show();
07334         ui->treeWidget->setDisabled(true);
07335     ui->imagePreview->setDisabled(true);
07336     ui->pushCrearPaginas->setDisabled(true);
07337     ui->pushOpen->setDisabled(true);
07338     ui->actionAnnadirBoton->setDisabled(true);
07339     ui->actionA_adir_im_genes->setDisabled(true);
07340     ui->pushCheckAll->setDisabled(true);
07341     ui->actionSeleccionarTodoBoton->setDisabled(true);
07342     ui->actionSeleccionar_todo->setDisabled(true);
07343     ui->pushUncheckAll->setDisabled(true);
07344     
07345          ui->actionDeseleccionarTodoBoton->setDisabled(true);
07346     this->ui->actionDeseleccionar_todo->setDisabled(true);
07347     ui->pushRemoveSelect->setDisabled(true);
07348     this->ui->actionBorrar_selecci_n->setDisabled(true);
07349     this->ui->actionEliminarFotosBoton->setDisabled(true);
07350                     barraAvanzada->setValue(1);
07351                     barraAvanzada->setValue(2);
07352                     barraAvanzada->setValue(3);
07353     if(paginasFijas){
07354             //Lo necesario para páginas fijas
07355             if(colorFondo){
07356                 CreacionPaginasFijas(*nombrePlantillaFija, *qcolorFondo);
07357             }else{
07358                 CreacionPaginasFijas(*nombrePlantillaFija, *imagenFondo);
07359 
07360             }
07361             try{
07362             for(unsigned i=0; i<a->paginas.size(); i++){
07363                 a->paginas[i]->LoadNumTextos(numTextos);
07364                 if(escritooNo1){
07365                     if(coloreadooNo1)
07366                         a->paginas[i]->LoadTexto(c1, n1, s1, t1, fuente1, clr1);
07367                     else
07368 
07369                         a->paginas[i]->LoadTexto(c1, n1, s1, t1, fuente1);
07370 
07371                 }
07372 
07373                 if(escritooNo2){
07374                     if(coloreadooNo2)
07375                         a->paginas[i]->LoadTexto(c2, n2, s2, t2, fuente2, clr2);
07376                     else
07377                         a->paginas[i]->LoadTexto(c2, n2, s2, t2, fuente2);
07378                 }
07379 
07380                 if(escritooNo3){
07381                     if(coloreadooNo3)
07382                         a->paginas[i]->LoadTexto(c3, n3, s3, t3, fuente3, clr3);
07383                     else
07384                         a->paginas[i]->LoadTexto(c3, n3, s3, t3, fuente3);
07385                 }
07386 
07387                 if(escritooNo4){
07388                     if(coloreadooNo4)
07389                         a->paginas[i]->LoadTexto(c4, n4, s4, t4, fuente4, clr4);
07390                     else
07391                         a->paginas[i]->LoadTexto(c4, n4, s4, t4, fuente4);
07392                 }
07393 
07394 
07395 
07396             }
07397         }catch(std::exception& e){
07398                         Error *err=new Error(1, e.what(), this);
07399                         err->LanzarDialogo();
07400                         delete err;
07401                         exit(1);
07402         } 
07403             barraAvanzada->setValue(4);
07404             if(numTextos!=0){
07405                 Parser parser(nombrePlantillaFija->toStdString(), this);
07406 
07407                 std::vector<ticpp::Element*> areasT;
07408 
07409                 parser.find("area_texto", areasT, parser.find("areas_texto"));
07410 
07411                 unsigned contador=0;
07412                 for(std::vector<ticpp::Element*>::iterator it = areasT.begin(); it != areasT.end(); it++){
07413                         int areaw, areaptos, areaposx, areaposy;
07414                         std::string orientacion, centrado;
07415                         parser.get_attribute("w", *it, &areaw);
07416                         parser.get_attribute("pt", *it, &areaptos);
07417                         parser.get_attribute("pos_x", *it, &areaposx);
07418                         parser.get_attribute("pos_y", *it, &areaposy);
07419                         orientacion=parser.get_attribute("orientacion", *it);
07420                         centrado=parser.get_attribute("centrado", *it);
07421                         
07422                         try{
07423                             for(unsigned cnt=0; cnt < a->paginas.size(); cnt++){
07424                             switch (contador){
07425 
07426                                 case 0: if(escritooNo1){a->paginas[cnt]->LoadTextoResto(contador, areaw*(this->controlador->getWVisorAlbum())/462, areaptos*(this->controlador->getWVisorAlbum())/462, areaposx*(this->controlador->getWVisorAlbum())/462, areaposy*(this->controlador->getHVisorAlbum())/321, orientacion, centrado); }; break;
07427                                 case 1: if(escritooNo2){a->paginas[cnt]->LoadTextoResto(contador, areaw*(this->controlador->getWVisorAlbum())/462, areaptos*(this->controlador->getWVisorAlbum())/462, areaposx*(this->controlador->getWVisorAlbum())/462, areaposy*(this->controlador->getHVisorAlbum())/321, orientacion, centrado); }; break;
07428                                 case 2: if(escritooNo3){a->paginas[cnt]->LoadTextoResto(contador, areaw*(this->controlador->getWVisorAlbum())/462, areaptos*(this->controlador->getWVisorAlbum())/462, areaposx*(this->controlador->getWVisorAlbum())/462, areaposy*(this->controlador->getHVisorAlbum())/321, orientacion, centrado); }; break;
07429                                 case 3: if(escritooNo4){a->paginas[cnt]->LoadTextoResto(contador, areaw*(this->controlador->getWVisorAlbum())/462, areaptos*(this->controlador->getWVisorAlbum())/462, areaposx*(this->controlador->getWVisorAlbum())/462, areaposy*(this->controlador->getHVisorAlbum())/321, orientacion, centrado); };
07430                                 
07431 
07432                             };
07433 
07434                         }
07435                         }catch(std::exception& e){
07436                         Error *err=new Error(1, e.what(), this);
07437                         err->LanzarDialogo();
07438                         delete err;
07439                         exit(1);
07440                     } 
07441                         contador++;
07442                 }
07443 
07444             }
07445             barraAvanzada->setValue(5);
07446         
07447         this->GenerarPaginasFijas();
07448         barraAvanzada->setValue(6);
07449         ui->pushPagSiguiente->setEnabled(true);
07450         ui->action_Avanzar_P_gina->setEnabled(true);
07451         ui->actionAvanzarBoton->setEnabled(true);
07452         
07453         }else{
07454             if(paginasAleatorias){
07455                 //Lo necesario para páginas aleatorias
07456                 barraAvanzada->setValue(4);
07457                 CreacionPaginasAleatorias();
07458                 barraAvanzada->setValue(5);
07459                     this->GenerarPaginasAleatorias();
07460                    barraAvanzada->setValue(6);
07461                    ui->pushPagSiguiente->setEnabled(true);
07462                    ui->action_Avanzar_P_gina->setEnabled(true);
07463                    ui->actionAvanzarBoton->setEnabled(true);
07464             }
07465         }    
07466     }
07467     
07468   
07469     this->creadasPaginas=true;
07470     barraAvanzada->setValue(7);
07471     
07472     
07473     barraAvanzada->close();
07474     delete barraAvanzada;
07475     delete nombrePlantillaFija;
07476     delete imagenFondo;
07477         }else{
07478                 
07479                 a->ResetImagenes();
07480         }
07481     }
07482         delete dialogocreacion;
07483         delete dialogo;
07484     
07485     }
07486         delete dialogoOrden;  
07487     
07488     for(unsigned ultimo=0; ultimo < this->a->paginas.size(); ultimo++){
07489         tipoPosicionesItems aux;
07490         this->posicionesItemsPaginas.insert(ultimo, aux);
07491         this->paginasDesplazadas.insert(ultimo, "");
07492     }
07493     }else{
07494         
07495         
07496         
07497         eleccionOrden *dialogoOrden;
07498     try{
07499     dialogoOrden=new eleccionOrden(this, this->controlador, this->directoriodetrabajo);
07500     }catch(std::exception& e){
07501                         Error *err=new Error(2, e.what(), this);
07502                         err->LanzarDialogo();
07503                         delete err;
07504                         exit(1);
07505     } 
07506     dialogoOrden->exec();
07507     if(dialogoOrden->result()==1){
07508     bool ordenAlfabetico, ordenFechaCreciente, ordenFechaDecreciente, ordenPersonalizado;
07509     ordenAlfabetico=dialogoOrden->GetOrdenAlfabetico();
07510     ordenFechaCreciente= dialogoOrden->GetOrdenFechasCreciente();
07511     ordenFechaDecreciente= dialogoOrden->GetOrdenFechasDecreciente();
07512     ordenPersonalizado= dialogoOrden->GetOrdenPersonalizado();
07513     
07514     //Insertamos las imágenes elegidas en un vector
07515     for (int i = this->fotos->ui->treeWidget->topLevelItemCount() - 1; i >= 0; i--){
07516             //Entran todas las imágenes de la lista, independientemente de si estan seleccionadas o no
07517         a->InsertarFoto(this->fotos->ui->treeWidget->topLevelItem(i)->text(1), QDateTime::fromString(this->fotos->ui->treeWidget->topLevelItem(i)->text(4), Qt::TextDate), this->fotos->ui->treeWidget->topLevelItem(i)->text(5));
07518     }
07519     DialogOrdenPersonalizado *dialogo;
07520     try{
07521     dialogo= new DialogOrdenPersonalizado(a->GetVectorImagenes(), this, this->controlador, this->directoriodetrabajo);
07522     }catch(std::exception& e){
07523                         Error *err=new Error(2, e.what(), this);
07524                         err->LanzarDialogo();
07525                         delete err;
07526                         exit(1);
07527     } 
07528     bool comprobarFinUtilidad;
07529     std::vector<ImagenInfo> vectorImagenes;
07530     bool canceladoFormOrdenPers=false;
07531     
07532     if(ordenPersonalizado){
07533         dialogo->exec();
07534         if(dialogo->result()==1){
07535         
07536         comprobarFinUtilidad= dialogo->ComprobarFinUtilidad();
07537         vectorImagenes=dialogo->GetVectorImagenes();
07538         }else{
07539             a->ResetImagenes();
07540             canceladoFormOrdenPers=true;
07541         }
07542     }
07543     DialogCreacionPaginas *dialogocreacion;
07544     try{
07545     dialogocreacion= new DialogCreacionPaginas(this, this->controlador, this->directoriodetrabajo);
07546     }catch(std::exception& e){
07547                         Error *err=new Error(2, e.what(), this);
07548                         err->LanzarDialogo();
07549                         delete err;
07550                         exit(1);
07551     } 
07552     if(!canceladoFormOrdenPers){
07553     dialogocreacion->setMiniaturasTexturas(this->miniaturasTexturas);
07554     dialogocreacion->exec();
07555     if(dialogocreacion->result()==1){
07556     this->paginasFijas= dialogocreacion->PaginasFijas();
07557     this->paginasAleatorias = dialogocreacion->PaginasAleatorias();
07558     this->paginasPersonalizadas = dialogocreacion->PaginasPersonalizadas();
07559     static bool colorFondo;
07560     QString nombrePlantillaFija;
07561     QColor qcolorFondo;
07562     QString imagenFondo;
07563     static bool escritooNo1, escritooNo2, escritooNo3, escritooNo4, coloreadooNo1, coloreadooNo2, coloreadooNo3, coloreadooNo4;
07564     static bool c1, c2, c3, c4, n1, n2, n3, n4, s1, s2, s3, s4;
07565     QString t1, t2, t3, t4;
07566     QFont fuente1, fuente2, fuente3, fuente4;
07567     QColor clr1, clr2, clr3, clr4;
07568     static int numTextos;
07569     if(paginasFijas){
07570         colorFondo = dialogocreacion->ColorFondo();
07571         nombrePlantillaFija = dialogocreacion->NombrePlantillaFija();
07572         qcolorFondo = dialogocreacion->GetColorFondo();
07573         imagenFondo = dialogocreacion->GetImagenFondo();
07574         numTextos= dialogocreacion->GetNumTextos();
07575        escritooNo1 = dialogocreacion->escritooNo1;
07576         escritooNo2 = dialogocreacion->escritooNo2;
07577         escritooNo3 = dialogocreacion->escritooNo3;
07578         escritooNo4 = dialogocreacion->escritooNo4;
07579         coloreadooNo1 = dialogocreacion->coloreadooNo1;
07580         coloreadooNo2 = dialogocreacion->coloreadooNo2;
07581         coloreadooNo3 = dialogocreacion->coloreadooNo3;
07582         coloreadooNo4 = dialogocreacion->coloreadooNo4;
07583     c1 = dialogocreacion->c1;
07584     c2 = dialogocreacion->c2;
07585     c3 = dialogocreacion->c3;
07586     c4 = dialogocreacion->c4;
07587      n1 = dialogocreacion->n1;
07588     n2 = dialogocreacion->n2;
07589     n3 = dialogocreacion->n3;
07590     n4 = dialogocreacion->n4;
07591     s1 = dialogocreacion->s1;
07592     s2 = dialogocreacion->s2;
07593     s3 = dialogocreacion->s3;
07594     s4 = dialogocreacion->s4;
07595      t1 = dialogocreacion->t1;
07596     t2 = dialogocreacion->t2;
07597     t3 = dialogocreacion->t3;
07598     t4 = dialogocreacion->t4;
07599     fuente1 = dialogocreacion->fuente1;
07600     fuente2 = dialogocreacion->fuente2;
07601     fuente3 = dialogocreacion->fuente3;
07602     fuente4 = dialogocreacion->fuente4;
07603     clr1 = dialogocreacion->clr1;
07604     clr2 = dialogocreacion->clr2;
07605     clr3 = dialogocreacion->clr3;
07606     clr4 = dialogocreacion->clr4;
07607     }
07608     
07609     
07610     
07611     
07612     
07613    
07614     if(ordenAlfabetico){
07615         a->OrdenarAlfabeticamente();
07616     }else{
07617         if(ordenFechaCreciente){
07618                 a->OrdenarFechasCreciente();
07619         }else{
07620                 if(ordenFechaDecreciente){
07621                         a->OrdenarFechasDecreciente();
07622                 }else{
07623                     if(ordenPersonalizado){
07624                         a->OrdenarPersonalizado(vectorImagenes);
07625                     }
07626                 }
07627         }  
07628     }
07629      QProgressDialog *barraAvanzada= new QProgressDialog();
07630     barraAvanzada->setWindowTitle(tr("Generando..."));
07631     barraAvanzada->setFixedSize(361, 90);
07632     barraAvanzada->setStyle(new QWindowsStyle);
07633     barraAvanzada->setCancelButton(0);
07634     barraAvanzada->setRange(0, 7);
07635     
07636     if(paginasPersonalizadas){
07637                     //Lo necesario para páginas personalizadas
07638                     if(this->CreacionPaginasPersonalizadas()){
07639                     barraAvanzada->show(); 
07640                     barraAvanzada->setValue(1);
07641                     barraAvanzada->setValue(2);
07642                     barraAvanzada->setValue(3);
07643                     this->GenerarPaginasPersonalizadas();
07644                     barraAvanzada->setValue(4);
07645                     barraAvanzada->setValue(5);
07646                     barraAvanzada->setValue(6);
07647                     ui->treeWidget->setDisabled(true);
07648     ui->imagePreview->setDisabled(true);
07649     ui->pushCrearPaginas->setDisabled(true);
07650     ui->pushOpen->setDisabled(true);
07651     ui->actionAnnadirBoton->setDisabled(true);
07652     ui->actionA_adir_im_genes->setDisabled(true);
07653     ui->pushCheckAll->setDisabled(true);
07654     ui->actionSeleccionarTodoBoton->setDisabled(true);
07655     ui->actionSeleccionar_todo->setDisabled(true);
07656     ui->pushUncheckAll->setDisabled(true);
07657     
07658          ui->actionDeseleccionarTodoBoton->setDisabled(true);
07659     this->ui->actionDeseleccionar_todo->setDisabled(true);
07660     ui->pushRemoveSelect->setDisabled(true);
07661     this->ui->actionBorrar_selecci_n->setDisabled(true);
07662     this->ui->actionEliminarFotosBoton->setDisabled(true);
07663     ui->pushPagSiguiente->setEnabled(true);
07664     ui->action_Avanzar_P_gina->setEnabled(true);
07665     ui->actionAvanzarBoton->setEnabled(true);
07666                     }else{
07667                         this->fotos->setCancelar();
07668                     }
07669                     
07670     }else{
07671         barraAvanzada->show(); 
07672         ui->treeWidget->setDisabled(true);
07673     ui->imagePreview->setDisabled(true);
07674     ui->pushCrearPaginas->setDisabled(true);
07675     ui->pushOpen->setDisabled(true);
07676     
07677     ui->actionAnnadirBoton->setDisabled(true);
07678     ui->actionA_adir_im_genes->setDisabled(true);
07679     ui->pushCheckAll->setDisabled(true);
07680     ui->actionSeleccionarTodoBoton->setDisabled(true);
07681     ui->actionSeleccionar_todo->setDisabled(true);
07682     ui->pushUncheckAll->setDisabled(true);
07683     
07684          ui->actionDeseleccionarTodoBoton->setDisabled(true);
07685     this->ui->actionDeseleccionar_todo->setDisabled(true);
07686     ui->pushRemoveSelect->setDisabled(true);
07687     this->ui->actionBorrar_selecci_n->setDisabled(true);
07688     this->ui->actionEliminarFotosBoton->setDisabled(true);
07689                     barraAvanzada->setValue(1);
07690                     barraAvanzada->setValue(2);
07691                     barraAvanzada->setValue(3);
07692     if(paginasFijas){
07693             //Lo necesario para páginas fijas
07694             if(colorFondo){
07695                 CreacionPaginasFijas(nombrePlantillaFija, qcolorFondo);
07696             }else{
07697                 CreacionPaginasFijas(nombrePlantillaFija, imagenFondo);
07698 
07699             }
07700             try{
07701             for(unsigned i=0; i<a->paginas.size(); i++){
07702                 a->paginas[i]->LoadNumTextos(numTextos);
07703                 if(escritooNo1){
07704                     if(coloreadooNo1)
07705                         a->paginas[i]->LoadTexto(c1, n1, s1, t1, fuente1, clr1);
07706                     else
07707 
07708                         a->paginas[i]->LoadTexto(c1, n1, s1, t1, fuente1);
07709 
07710                 }
07711 
07712                 if(escritooNo2){
07713                     if(coloreadooNo2)
07714                         a->paginas[i]->LoadTexto(c2, n2, s2, t2, fuente2, clr2);
07715                     else
07716                         a->paginas[i]->LoadTexto(c2, n2, s2, t2, fuente2);
07717                 }
07718 
07719                 if(escritooNo3){
07720                     if(coloreadooNo3)
07721                         a->paginas[i]->LoadTexto(c3, n3, s3, t3, fuente3, clr3);
07722                     else
07723                         a->paginas[i]->LoadTexto(c3, n3, s3, t3, fuente3);
07724                 }
07725 
07726                 if(escritooNo4){
07727                     if(coloreadooNo4)
07728                         a->paginas[i]->LoadTexto(c4, n4, s4, t4, fuente4, clr4);
07729                     else
07730                         a->paginas[i]->LoadTexto(c4, n4, s4, t4, fuente4);
07731                 }
07732 
07733 
07734 
07735             }
07736         }catch(std::exception& e){
07737                         Error *err=new Error(1, e.what(), this);
07738                         err->LanzarDialogo();
07739                         delete err;
07740                         exit(1);
07741         } 
07742             barraAvanzada->setValue(4);
07743             if(numTextos!=0){
07744                 Parser parser(nombrePlantillaFija.toStdString(), this);
07745 
07746                 std::vector<ticpp::Element*> areasT;
07747 
07748                 parser.find("area_texto", areasT, parser.find("areas_texto"));
07749 
07750                 unsigned contador=0;
07751                 for(std::vector<ticpp::Element*>::iterator it = areasT.begin(); it != areasT.end(); it++){
07752                         int areaw, areaptos, areaposx, areaposy;
07753                         std::string orientacion, centrado;
07754                         parser.get_attribute("w", *it, &areaw);
07755                         parser.get_attribute("pt", *it, &areaptos);
07756                         parser.get_attribute("pos_x", *it, &areaposx);
07757                         parser.get_attribute("pos_y", *it, &areaposy);
07758                         orientacion=parser.get_attribute("orientacion", *it);
07759                         centrado=parser.get_attribute("centrado", *it);
07760                         try{
07761                             for(unsigned cnt=0; cnt < a->paginas.size(); cnt++){
07762                             switch (contador){
07763 
07764                                 case 0: if(escritooNo1){a->paginas[cnt]->LoadTextoResto(contador, areaw*(this->controlador->getWVisorAlbum())/462, areaptos*(this->controlador->getWVisorAlbum())/462, areaposx*(this->controlador->getWVisorAlbum())/462, areaposy*(this->controlador->getHVisorAlbum())/321, orientacion, centrado); }; break;
07765                                 case 1: if(escritooNo2){a->paginas[cnt]->LoadTextoResto(contador, areaw*(this->controlador->getWVisorAlbum())/462, areaptos*(this->controlador->getWVisorAlbum())/462, areaposx*(this->controlador->getWVisorAlbum())/462, areaposy*(this->controlador->getHVisorAlbum())/321, orientacion, centrado); }; break;
07766                                 case 2: if(escritooNo3){a->paginas[cnt]->LoadTextoResto(contador, areaw*(this->controlador->getWVisorAlbum())/462, areaptos*(this->controlador->getWVisorAlbum())/462, areaposx*(this->controlador->getWVisorAlbum())/462, areaposy*(this->controlador->getHVisorAlbum())/321, orientacion, centrado); }; break;
07767                                 case 3: if(escritooNo4){a->paginas[cnt]->LoadTextoResto(contador, areaw*(this->controlador->getWVisorAlbum())/462, areaptos*(this->controlador->getWVisorAlbum())/462, areaposx*(this->controlador->getWVisorAlbum())/462, areaposy*(this->controlador->getHVisorAlbum())/321, orientacion, centrado); };
07768                                 
07769 
07770                             };
07771 
07772                         }
07773                         }catch(std::exception& e){
07774                         Error *err=new Error(1, e.what(), this);
07775                         err->LanzarDialogo();
07776                         delete err;
07777                         exit(1);
07778                     } 
07779                         contador++;
07780                 }
07781 
07782             }
07783             barraAvanzada->setValue(5);
07784         
07785         this->GenerarPaginasFijas();
07786         barraAvanzada->setValue(6);
07787         ui->pushPagSiguiente->setEnabled(true);
07788         ui->action_Avanzar_P_gina->setEnabled(true);
07789         ui->actionAvanzarBoton->setEnabled(true);
07790         
07791         }else{
07792             if(paginasAleatorias){
07793                 //Lo necesario para páginas aleatorias
07794                 barraAvanzada->setValue(4);
07795                 CreacionPaginasAleatorias();
07796                 barraAvanzada->setValue(5);
07797                     this->GenerarPaginasAleatorias();
07798                    barraAvanzada->setValue(6);
07799                    ui->pushPagSiguiente->setEnabled(true);
07800                    ui->action_Avanzar_P_gina->setEnabled(true);
07801                    ui->actionAvanzarBoton->setEnabled(true);
07802             }
07803         }    
07804     }
07805     
07806   
07807     this->creadasPaginas=true;
07808     barraAvanzada->setValue(7);
07809     
07810     
07811     barraAvanzada->close();
07812     delete barraAvanzada;
07813     
07814         }else{
07815                 this->fotos->setCancelar();
07816                 
07817                 a->ResetImagenes();
07818         }
07819     
07820     }else{
07821         this->fotos->setCancelar();
07822         
07823         
07824     }
07825     delete dialogocreacion;
07826     delete dialogo;
07827     
07828     }else{
07829         this->fotos->setCancelar();
07830         
07831     }
07832     delete dialogoOrden;
07833     for(unsigned ultimo=0; ultimo < this->a->paginas.size(); ultimo++){
07834         tipoPosicionesItems aux;
07835         this->posicionesItemsPaginas.insert(ultimo, aux);
07836         this->paginasDesplazadas.insert(ultimo, "");
07837     }
07838         
07839         
07840         
07841         
07842         
07843     }
07844     
07845 }
07846 
07847 QDir FormPrincipal::GetDirectorioDeTrabajo(){
07848     return this->directoriodetrabajo;
07849 }
07850 
07851 void FormPrincipal::LanzarSelectorFondoPortada(QWidget *parent){
07852     FondoDialog *dialog;
07853     this->ui->selectorPlantilla->setDisabled(true);
07854     try{
07855     dialog=new FondoDialog(parent, this->a->portada->RutaPlantilla(), false, this->controlador, this->directoriodetrabajo);
07856     }catch(std::exception& e){
07857                         Error *err=new Error(2, e.what(), this);
07858                         err->LanzarDialogo();
07859                         delete err;
07860                         exit(1);
07861                     } 
07862     dialog->setMiniaturasTexturas(this->miniaturasTexturas);
07863     dialog->exec();
07864     a->portada->DesactivarColordefondo();
07865     
07866     if(dialog->ColordeFondo()){
07867         
07868         a->portada->LoadFondo(dialog->ColorFondo());
07869         a->portada->ActivarColordefondo();
07870         this->elegidoFondoPortada=true;
07871         this->seleccionadaTextura=false;
07872     }else{
07873         if(dialog->TexturadeFondo()){
07874             this->seleccionadaTextura=true;
07875         }
07876         a->portada->LoadFondo(dialog->ImagenFondo());
07877         this->elegidoFondoPortada=true;
07878     }
07879     if(dialog->result()==QDialog::Accepted){
07880         
07881         if(this->a->portada->FondoClr().isValid() || !this->a->portada->FondoImg().isEmpty()){
07882                 this->ui->selectorPlantilla->setDisabled(true);
07883                 this->ui->action_Nuevo->setEnabled(true);
07884                 this->ui->actionNuevoBoton->setEnabled(true);
07885         }
07886     }
07887     delete dialog;
07888     if(this->elegidaFrontalPortada && this->a->portada->hayImagenTrasera()){
07889         if(this->elegidaTraseraPortada){
07890             if(this->elegidoFondoPortada && this->a->portada->ContieneTexto()){
07891                 if(this->elegidoTexto){
07892                     this->ui->botonPrueba->setEnabled(true);
07893                     
07894                 }else{
07895                     this->ui->botonPrueba->setDisabled(true);
07896                 }
07897                 
07898             }else{
07899                 if(this->elegidoFondoPortada){
07900                     this->ui->botonPrueba->setEnabled(true);
07901                 }else{
07902                     this->ui->botonPrueba->setDisabled(true);
07903                 }
07904             }
07905         }else{
07906             this->ui->botonPrueba->setDisabled(true);
07907         }
07908     }else{
07909         if(this->elegidaFrontalPortada){
07910             if(!this->a->portada->hayImagenTrasera()){
07911                 if(this->elegidoFondoPortada){
07912                     if(this->a->portada->ContieneTexto()){
07913                         if(this->elegidoTexto){
07914                             this->ui->botonPrueba->setEnabled(true);
07915                         }else{
07916                             this->ui->botonPrueba->setDisabled(true);
07917                         }
07918                         
07919                     }else{
07920                         this->ui->botonPrueba->setEnabled(true);
07921                     }
07922                 }else{
07923                     this->ui->botonPrueba->setDisabled(true);
07924                 }
07925             }else{
07926                 this->ui->botonPrueba->setDisabled(true);
07927             }
07928         }else{
07929             this->ui->botonPrueba->setDisabled(true);
07930         }
07931     }
07932     if(this->elegidoFondoPortada && this->a->portada->ContieneTexto() && !this->a->portada->hayImagenFrontal() && !this->a->portada->hayImagenTrasera()){
07933         this->ui->botonPrueba->setEnabled(true);
07934     }
07935 }
07936 
07937 
07938 void FormPrincipal::LanzarFormTexto(QWidget *parent){
07939 
07940     int maxFron, maxTras, maxLat;
07941     
07942     QString filename;
07943     filename=a->portada->RutaPlantilla();
07944 
07945     Parser parser(filename.toStdString(), this);
07946     ticpp::Element* elementTF =parser.find("area_texto_fro");
07947     ticpp::Element* elementTL =parser.find("area_texto_lat");
07948     ticpp::Element* elementTT =parser.find("area_texto_tra");
07949     parser.get_attribute("limite", elementTF, &maxFron);
07950     parser.get_attribute("limite", elementTL, &maxLat);
07951     parser.get_attribute("limite", elementTT, &maxTras);
07952     try{
07953     this->formTexto= new formTextoClass(parent, this->a->portada->RutaPlantilla(), this->controlador, this->directoriodetrabajo);
07954     }catch(std::exception& e){
07955                         Error *err=new Error(2, e.what(), this);
07956                         err->LanzarDialogo();
07957                         delete err;
07958                         exit(1);
07959                     } 
07960     formTexto->ui->lineEditFrontal->setMaxLength(maxFron);
07961     formTexto->ui->lineEditTrasero->setMaxLength(maxTras);
07962     formTexto->ui->lineEditLateral->setMaxLength(maxLat);
07963     formTexto->exec();
07964     if(formTexto->formularioAceptado()){
07965         this->ui->selectorPlantilla->setDisabled(true);
07966         this->ui->action_Nuevo->setEnabled(true);
07967         this->ui->actionNuevoBoton->setEnabled(true);
07968         a->portada->LoadTextoFrontal(formTexto->curfront, formTexto->negfront, formTexto->subfront, formTexto->textfront, formTexto->ffront);
07969         a->portada->LoadTextoTrasero(formTexto->curtras, formTexto->negtras, formTexto->subtras, formTexto->texttras, formTexto->ftras);
07970         a->portada->LoadTextoLateral(formTexto->curlat, formTexto->neglat, formTexto->sublat, formTexto->textlat, formTexto->flat);
07971         if(formTexto->coloreadotextofron){
07972             a->portada->LoadColorTextoFrontal(formTexto->colortextofron);
07973         }
07974 
07975         if(formTexto->coloreadotextolat){
07976             a->portada->LoadColorTextoLateral(formTexto->colortextolat);
07977         }
07978 
07979         if(formTexto->coloreadotextotras){
07980             a->portada->LoadColorTextoTrasera(formTexto->colortextotras);
07981         }
07982 
07983         
07984     this->portada->setEnabledTieneTexto(true);
07985     this->elegidoTexto=true;
07986     }else{
07987         this->elegidoTexto=false;
07988         this->portada->setEnabledTieneTexto(false);
07989         
07990     }
07991     delete formTexto;
07992     if(this->elegidaFrontalPortada && this->a->portada->hayImagenTrasera()){
07993         if(this->elegidaTraseraPortada){
07994             if(this->elegidoFondoPortada && this->a->portada->ContieneTexto()){
07995                 if(this->elegidoTexto){
07996                     this->ui->botonPrueba->setEnabled(true);
07997                     
07998                 }else{
07999                     this->ui->botonPrueba->setDisabled(true);
08000                 }
08001                 
08002             }else{
08003                 if(this->elegidoFondoPortada){
08004                     this->ui->botonPrueba->setEnabled(true);
08005                 }else{
08006                     this->ui->botonPrueba->setDisabled(true);
08007                 }
08008             }
08009         }else{
08010             this->ui->botonPrueba->setDisabled(true);
08011         }
08012     }else{
08013         if(this->elegidaFrontalPortada){
08014             if(!this->a->portada->hayImagenTrasera()){
08015                 if(this->elegidoFondoPortada){
08016                     if(this->a->portada->ContieneTexto()){
08017                         if(this->elegidoTexto){
08018                             this->ui->botonPrueba->setEnabled(true);
08019                         }else{
08020                             this->ui->botonPrueba->setDisabled(true);
08021                         }
08022                         
08023                     }else{
08024                         this->ui->botonPrueba->setEnabled(true);
08025                     }
08026                 }else{
08027                     this->ui->botonPrueba->setDisabled(true);
08028                 }
08029             }else{
08030                 this->ui->botonPrueba->setDisabled(true);
08031             }
08032         }else{
08033             this->ui->botonPrueba->setDisabled(true);
08034         }
08035     }
08036     if(this->a->portada->ContieneTexto() && !this->a->portada->hayImagenFrontal() && !this->a->portada->hayImagenTrasera()){
08037         if(this->elegidoFondoPortada){
08038                 this->ui->botonPrueba->setEnabled(true);
08039         }
08040     }
08041 }
08042 
08043 void FormPrincipal::LanzarTamanno(){
08044     DialogTamanno *formTamanno;
08045     try{
08046     formTamanno=new DialogTamanno(this, this->controlador, this->directoriodetrabajo);
08047     }catch(std::exception& e){
08048                         Error *err=new Error(2, e.what(), this);
08049                         err->LanzarDialogo();
08050                         delete err;
08051                         exit(1);
08052                     } 
08053     formTamanno->exec();
08054     if(formTamanno->SeguirOno()){
08055         this->cargarDimensiones(formTamanno->WAlbum(), formTamanno->HAlbum());
08056         
08057         CargarPreview();
08058         
08059         
08060     }
08061 
08062     delete formTamanno;
08063 }
08064 
08065 void FormPrincipal::cargarDimensiones(int w_, int h_){
08066     a->portada->LoadDimensiones(h_, w_);
08067     this->dimensionWpagina=w_;
08068     this->dimensionHpagina=h_;
08069 }
08070 
08071 void FormPrincipal::EditarTamannoAlbum(){
08072     DialogTamanno *formTamanno;
08073     try{
08074     formTamanno=new DialogTamanno(this, this->controlador, this->directoriodetrabajo);
08075     }catch(std::exception& e){
08076                         Error *err=new Error(2, e.what(), this);
08077                         err->LanzarDialogo();
08078                         delete err;
08079                         exit(1);
08080                     } 
08081     formTamanno->exec();
08082     if(formTamanno->SeguirOno()){
08083         a->portada->LoadDimensiones(formTamanno->HAlbum(), formTamanno->WAlbum());
08084         this->dimensionWpagina=formTamanno->WAlbum();
08085         this->dimensionHpagina=formTamanno->HAlbum();
08086         if(this->creadasPaginas){
08087             try{
08088             for(unsigned i=0; i < this->a->paginas.size(); i++){
08089                 this->a->paginas[i]->LoadDimensiones(this->dimensionHpagina, this->dimensionWpagina);
08090             }
08091             }catch(std::exception& e){
08092                         Error *err=new Error(1, e.what(), this);
08093                         err->LanzarDialogo();
08094                         delete err;
08095                         exit(1);
08096                     } 
08097         }
08098     }
08099     delete formTamanno;
08100 }
08101 
08102 bool FormPrincipal::getPaginasAleatorias(){
08103     return this->paginasAleatorias;
08104 }
08105 
08106 bool FormPrincipal::getPaginasFijas(){
08107     return this->paginasFijas;
08108 }
08109 
08110 bool FormPrincipal::getPaginasPersonalizadas(){
08111     return this->paginasPersonalizadas;
08112 }
08113 
08114 void FormPrincipal::CargarPreview(){
08115     static QProgressDialog *barra;
08116     if(!this->activadaCarga){
08117         
08118         barra= new QProgressDialog();
08119         barra->setCancelButton(0);
08120         barra->setFixedSize(361, 90);
08121         barra->setWindowTitle(tr("Generando la portada..."));
08122         barra->setStyle(new QWindowsStyle);
08123         barra->setRange(0, 17);
08124         
08125     }
08126     this->ui->treeWidget->clear();
08127     //Eliminamos las miniaturas de las imágenes frontal y trasera
08128     for(unsigned i=0; i<this->miniaturas.size(); i++){
08129         delete this->miniaturas.at(i);
08130     }
08131     this->miniaturas.clear();
08132     QString filename;
08133     
08134     filename=a->portada->RutaPlantilla();
08135     Parser parser(filename.toStdString(), this);
08136     int w_imgfron, w_imgtras, h_imgfron, h_imgtras, posx_imgtras, posx_imgfron, posy_imgfron, posy_imgtras;
08137     int pt_textofron, pt_textolat, pt_textotras, w_textofron, w_textolat, w_textotras, x_textofron, x_textotras, x_textolat,
08138     y_textofron,y_textotras, y_textolat;
08139     std::string orientaciontras, orientacionfron, orientacionlat, centradotras, centradofron, centradolat;
08140     ticpp::Element* element=parser.root();
08141     static ticpp::Element* elementIF;
08142     static ticpp::Element* elementIT;
08143     static ticpp::Element* elementTF;
08144     static ticpp::Element* elementTL;
08145     static ticpp::Element* elementTT;
08146     if(this->a->portada->hayImagenFrontal()){
08147     elementIF =parser.find("area_imagen_fro");
08148     }
08149     if(this->a->portada->hayImagenTrasera()){
08150     elementIT =parser.find("area_imagen_tra");
08151     }
08152     if(this->a->portada->hayTextoFrontal()){
08153     elementTF =parser.find("area_texto_fro");
08154     }
08155     if(this->a->portada->hayTextoLateral()){
08156     elementTL =parser.find("area_texto_lat");
08157     }
08158     if(this->a->portada->hayTextoTrasero()){
08159     elementTT =parser.find("area_texto_tra");
08160     }
08161     std::string mascara=parser.get_attribute("mascara", element);
08162     if(mascara!="no"){
08163         a->portada->activarMascara(QString::fromStdString(mascara));
08164     }
08165     if(this->a->portada->hayTextoFrontal()){
08166     // Parseamos del xml de la plantilla los parámetros que nos faltan para crear la portada
08167     parser.get_attribute("w", elementTF, &w_textofron);
08168     parser.get_attribute("pt", elementTF, &pt_textofron);
08169     parser.get_attribute("pos_x", elementTF, &x_textofron);
08170     parser.get_attribute("pos_y", elementTF, &y_textofron);
08171     orientacionfron=parser.get_attribute("orientacion", elementTF);
08172     centradofron=parser.get_attribute("centrado", elementTF);
08173 
08174     // Una vez parseado, lo introducimos en la portada
08175     a->portada->LoadTextoFrontalResto((w_textofron*(this->controlador->getWVisorAlbum()))/462, (pt_textofron*(this->controlador->getWVisorAlbum()))/462, x_textofron*(this->controlador->getWVisorAlbum())/462, y_textofron*(this->controlador->getHVisorAlbum())/321, orientacionfron, centradofron);
08176     }
08177     if(this->a->portada->hayTextoTrasero()){
08178     parser.get_attribute("w", elementTT, &w_textotras);
08179     parser.get_attribute("pt", elementTT, &pt_textotras);
08180     parser.get_attribute("pos_x", elementTT, &x_textotras);
08181     parser.get_attribute("pos_y", elementTT, &y_textotras);
08182     orientaciontras=parser.get_attribute("orientacion", elementTT);
08183     centradotras=parser.get_attribute("centrado", elementTT);
08184     a->portada->LoadTextoTraseroResto(w_textotras*(this->controlador->getWVisorAlbum())/462, pt_textotras*(this->controlador->getWVisorAlbum())/462, x_textotras*(this->controlador->getWVisorAlbum())/462, y_textotras*(this->controlador->getHVisorAlbum())/321, orientaciontras, centradotras);
08185     }
08186     if(this->a->portada->hayTextoLateral()){
08187     parser.get_attribute("w", elementTL, &w_textolat);
08188     parser.get_attribute("pt", elementTL, &pt_textolat);
08189     parser.get_attribute("pos_x", elementTL, &x_textolat);
08190     parser.get_attribute("pos_y", elementTL, &y_textolat);
08191     orientacionlat=parser.get_attribute("orientacion", elementTL);
08192     centradolat=parser.get_attribute("centrado", elementTL);
08193     a->portada->LoadTextoLateralResto(w_textolat*(this->controlador->getWVisorAlbum())/462, pt_textolat*(this->controlador->getWVisorAlbum())/462, x_textolat*(this->controlador->getWVisorAlbum())/462, y_textolat*(this->controlador->getHVisorAlbum())/321, orientacionlat, centradolat);
08194     }
08195     std::string pos;
08196     if(this->a->portada->hayImagenFrontal()){
08197     parser.get_attribute("w", elementIF, &w_imgfron);
08198     parser.get_attribute("h", elementIF, &h_imgfron);
08199     parser.get_attribute("pos_x", elementIF, &posx_imgfron);
08200     parser.get_attribute("pos_y", elementIF, &posy_imgfron);
08201     pos=parser.get_attribute("pos", elementIF);
08202     a->portada->LoadFotoFrontalResto(w_imgfron*(this->controlador->getWVisorAlbum())/462, h_imgfron*(this->controlador->getHVisorAlbum())/321, posx_imgfron*(this->controlador->getWVisorAlbum())/462, posy_imgfron*(this->controlador->getHVisorAlbum())/321, pos);
08203     }
08204     
08205     std::string posTra;
08206     if(this->a->portada->hayImagenTrasera()){
08207     parser.get_attribute("w", elementIT, &w_imgtras);
08208     parser.get_attribute("h", elementIT, &h_imgtras);
08209     parser.get_attribute("pos_x", elementIT, &posx_imgtras);
08210     parser.get_attribute("pos_y", elementIT, &posy_imgtras);
08211     posTra=parser.get_attribute("pos", elementIT);
08212     a->portada->LoadFotoTraseraResto(w_imgtras*(this->controlador->getWVisorAlbum())/462, h_imgtras*(this->controlador->getHVisorAlbum())/321, posx_imgtras*(this->controlador->getWVisorAlbum())/462, posy_imgtras*(this->controlador->getHVisorAlbum())/321, posTra);
08213     }
08214     
08215     // El tamaño que se establece para la portada en esta sección es solo el tamaño de la previsualización
08216     
08217      if(!this->activadaCarga){
08218        barra->setValue(1);   
08219     }
08220     QGraphicsScene *escenaAlmacenable;
08221     try{
08222     escenaAlmacenable= new QGraphicsScene(0, 0, (this->controlador->getWVisorAlbum()), (this->controlador->getHVisorAlbum()));
08223     }catch(std::exception& e){
08224                         Error *err=new Error(2, e.what(), this);
08225                         err->LanzarDialogo();
08226                         delete err;
08227                         exit(1);
08228                     } 
08229     a->portada->versionReducida->setScene(escenaAlmacenable);
08230     
08231     if(a->portada->ColordeFondo() && !a->portada->activadaMascara()){
08232         //Establecemos de fondo un color.
08233         QBrush *wall;
08234         try{
08235         wall= new QBrush(a->portada->FondoClr());
08236         }catch(std::exception& e){
08237                         Error *err=new Error(2, e.what(), this);
08238                         err->LanzarDialogo();
08239                         delete err;
08240                         exit(1);
08241                     } 
08242         a->portada->versionReducida->scene()->setBackgroundBrush(*wall);
08243         delete wall;
08244     }else{
08245         
08246         if(!a->portada->activadaMascara()){
08247         QPixmap *g;
08248         try{
08249         g=new QPixmap(a->portada->FondoImg());
08250         if(g->isNull()){
08251             throw std::ios_base::failure(tr("No pudo abrirse la imagen de fondo de la portada.").toStdString());
08252         }
08253         }catch(std::exception& e){
08254                         Error *err=new Error(4, e.what(), this);
08255                         err->LanzarDialogo();
08256                         delete err;
08257                         exit(1);
08258                     } 
08259         QGraphicsPixmapItem *item=new QGraphicsPixmapItem(g->scaled((this->controlador->getWVisorAlbum())-2, (this->controlador->getHVisorAlbum())-2, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
08260         item->setPos(0, 0);
08261         item->setAcceptHoverEvents(false);
08262         a->portada->versionReducida->scene()->addItem(item);
08263         a->portada->versionReducida->setDragMode(QGraphicsView::RubberBandDrag);
08264         delete g;
08265         }
08266         
08267     }
08268 
08269     if(!this->activadaCarga){
08270     barra->setValue(2);
08271     }
08272     if(this->a->portada->hayImagenTrasera()){
08273     // Imagen Trasera
08274     QPixmap *h;
08275     try{
08276     h=new QPixmap(a->portada->RutaFotoTrasera().toStdString().c_str());
08277     if(h->isNull()){
08278         throw std::ios_base::failure(tr("No pudo abrirse la imagen trasera de la portada.").toStdString());
08279     }
08280     }catch(std::exception& e){
08281                         Error *err=new Error(4, e.what(), this);
08282                         err->LanzarDialogo();
08283                         delete err;
08284                         exit(1);
08285                     } 
08286     QGraphicsPixmapItem *item2;
08287     if(h->width() > h->height()){
08288         if(a->portada->getImagenPosVertical("trasera")){
08289             item2=new QGraphicsPixmapItem(h->scaled(a->portada->DimensionHImagenTrasera(), a->portada->DimensionWImagenTrasera(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
08290             item2->setPos(a->portada->PosicionXImagenTrasera() + a->portada->DimensionWImagenTrasera(), a->portada->PosicionYImagenTrasera());
08291             item2->setRotation(90);
08292             item2->setAcceptTouchEvents(true);    
08293         }else{
08294             item2=new QGraphicsPixmapItem(h->scaled(a->portada->DimensionWImagenTrasera(), a->portada->DimensionHImagenTrasera(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
08295             item2->setPos(a->portada->PosicionXImagenTrasera(), a->portada->PosicionYImagenTrasera());
08296    
08297         }
08298     }else{
08299         if(!a->portada->getImagenPosVertical("trasera")){
08300             item2=new QGraphicsPixmapItem(h->scaled(a->portada->DimensionHImagenTrasera(), a->portada->DimensionWImagenTrasera(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
08301             item2->setPos(a->portada->PosicionXImagenTrasera() + a->portada->DimensionWImagenTrasera(), a->portada->PosicionYImagenTrasera());
08302              item2->setRotation(90);
08303               item2->setAcceptTouchEvents(true);
08304         }else{
08305             item2=new QGraphicsPixmapItem(h->scaled(a->portada->DimensionWImagenTrasera(), a->portada->DimensionHImagenTrasera(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
08306             item2->setPos(a->portada->PosicionXImagenTrasera(), a->portada->PosicionYImagenTrasera());
08307    
08308         }
08309         
08310     }
08311     
08312     if(!this->a->portada->activadaMascara()){
08313             
08314    item2->setAcceptHoverEvents(true);
08315     } 
08316    a->portada->versionReducida->scene()->addItem(item2);
08317    delete h;
08318    
08319     }
08320     if(!this->activadaCarga){
08321     barra->setValue(3);
08322     }
08323     
08324     if(this->a->portada->hayImagenFrontal()){
08325     // Imagen Frontal
08326     QPixmap *i;
08327     try{
08328     i=new QPixmap(a->portada->RutaFotoFrontal().toStdString().c_str());
08329     if(i->isNull()){
08330         throw std::ios_base::failure(tr("No pudo abrirse la imagen frontal de la portada.").toStdString());
08331     }
08332     }catch(std::exception& e){
08333                         Error *err=new Error(4, e.what(), this);
08334                         err->LanzarDialogo();
08335                         delete err;
08336                         exit(1);
08337                     } 
08338     
08339     
08340     QGraphicsPixmapItem *item3;
08341     if(i->width() > i->height()){
08342         if(a->portada->getImagenPosVertical("frontal")){
08343             item3=new QGraphicsPixmapItem(i->scaled(a->portada->DimensionHImagenFrontal(), a->portada->DimensionWImagenFrontal(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
08344             item3->setPos(a->portada->PosicionXImagenFrontal() + a->portada->DimensionWImagenFrontal(), a->portada->PosicionYImagenFrontal());
08345             item3->setRotation(90);
08346             item3->setAcceptTouchEvents(true);    
08347         }else{
08348             item3=new QGraphicsPixmapItem(i->scaled(a->portada->DimensionWImagenFrontal(), a->portada->DimensionHImagenFrontal(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
08349             item3->setPos(a->portada->PosicionXImagenFrontal(), a->portada->PosicionYImagenFrontal());
08350    
08351         }
08352     }else{
08353         if(!a->portada->getImagenPosVertical("frontal")){
08354             item3=new QGraphicsPixmapItem(i->scaled(a->portada->DimensionHImagenFrontal(), a->portada->DimensionWImagenFrontal(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
08355             item3->setPos(a->portada->PosicionXImagenFrontal() + a->portada->DimensionWImagenFrontal(), a->portada->PosicionYImagenFrontal());
08356              item3->setRotation(90);
08357               item3->setAcceptTouchEvents(true);
08358         }else{
08359             item3=new QGraphicsPixmapItem(i->scaled(a->portada->DimensionWImagenFrontal(), a->portada->DimensionHImagenFrontal(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
08360             item3->setPos(a->portada->PosicionXImagenFrontal(), a->portada->PosicionYImagenFrontal());
08361    
08362         }
08363         
08364     }
08365     if(!this->a->portada->activadaMascara()){
08366             
08367     item3->setAcceptHoverEvents(true);
08368     }
08369     //Indicamos que el visualizador se encuentra activo
08370     this->activadoVisualizadorPrincipal=true;
08371     a->portada->versionReducida->scene()->addItem(item3);
08372     delete i;
08373     }
08374     if(!this->activadaCarga){
08375     barra->setValue(4);
08376     }
08377     
08378     
08379     if(this->a->portada->activadaMascara() && this->a->portada->ColordeFondo()){
08380             
08381                
08382                 QString path= this->directoriodetrabajo.absolutePath() + "/templates/" + this->a->portada->getMascara(); 
08383                 QImage *img=new QImage(path);
08384                 QRgb color=this->a->portada->FondoClr().rgb();
08385                 for(int a=0; a < img->width(); a++){
08386                     for(int b=0; b < img->height(); b++){
08387                         if(img->pixel(a,b)!=0){
08388                         img->setPixel(a,b,color);
08389                         }
08390                     }
08391                 }
08392                 QPixmap *g=new QPixmap();
08393                 g->convertFromImage(*img, Qt::AutoColor);
08394                 
08395                 QGraphicsPixmapItem *item=new QGraphicsPixmapItem(g->scaled((this->controlador->getWVisorAlbum())-2, (this->controlador->getHVisorAlbum())-2, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
08396                 item->setPos(0, 0);
08397                 item->setAcceptHoverEvents(false);
08398                 
08399                 this->a->portada->versionReducida->scene()->addItem(item);
08400                 delete img;
08401                 delete g;
08402         }
08403         
08404                 
08405         if(this->a->portada->activadaMascara() && !this->a->portada->ColordeFondo()){
08406             
08407                 QString path= this->directoriodetrabajo.absolutePath() + "/templates/" + this->a->portada->getMascara(); 
08408                 QImage *img=new QImage(path);
08409                 QImage *img2=new QImage(this->a->portada->FondoImg());
08410                 QImage img22=img2->scaled(img->width(), img->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
08411                 for(int a=0; a < img->width(); a++){
08412                     for(int b=0; b < img->height(); b++){
08413                         if(img->pixel(a,b)!=0){
08414                         img->setPixel(a,b,img22.pixel(a,b));
08415                         }
08416                     }
08417                 }
08418                 QPixmap *g=new QPixmap();
08419                 
08420                 g->convertFromImage(*img, Qt::AutoColor);
08421                 QGraphicsPixmapItem *item=new QGraphicsPixmapItem(g->scaled((this->controlador->getWVisorAlbum())-2, (this->controlador->getHVisorAlbum())-2, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
08422                 item->setPos(0, 0);
08423                 item->setAcceptHoverEvents(false);
08424                 this->a->portada->versionReducida->scene()->addItem(item);
08425                 this->a->portada->versionReducida->setDragMode(QGraphicsView::RubberBandDrag);
08426                 delete img;
08427                 delete img2;
08428                 delete g;
08429             
08430         }
08431     
08432     
08433     if(this->a->portada->hayTextoFrontal()){            
08434     // Texto Frontal
08435     QGraphicsTextItem *TF=new QGraphicsTextItem(a->portada->TextoFrontal());
08436     QFont *fuenteF=new QFont(a->portada->FuenteTextoFrontal().family(),a->portada->TamTextoFrontal(), 50, a->portada->CursivaTextoFrontal());
08437     if(a->portada->NegritaTextoFrontal()){
08438         fuenteF->setBold(true);
08439     }
08440     if(a->portada->SubrayadoTextoFrontal()){
08441         fuenteF->setUnderline(true);
08442     }
08443     if(!this->activadaCarga){
08444     barra->setValue(5);
08445     }
08446     TF->setDefaultTextColor(a->portada->ColorTextoFrontal());
08447     TF->setFont(*fuenteF);
08448     TF->setTextWidth(a->portada->WTextoFrontal());
08449     if(a->portada->VerticalTextoFrontal()){
08450         TF->setRotation(90);
08451     }
08452     TF->setPos(a->portada->PosXTextoFrontal(), a->portada->PosYTextoFrontal());
08453     if(a->portada->CentradoTextoFrontal()){
08454         // Para centrar el texto
08455         QTextCursor cursor = TF->textCursor();
08456         QTextBlockFormat bfmt = cursor.blockFormat();
08457         bfmt.setAlignment(Qt::AlignCenter);
08458         cursor.setBlockFormat(bfmt);
08459         TF->setTextCursor(cursor);
08460     }
08461     TF->setAcceptHoverEvents(true);
08462     a->portada->versionReducida->scene()->addItem(TF);
08463     delete fuenteF;
08464     }
08465     if(!this->activadaCarga){
08466     barra->setValue(6);
08467     }
08468     
08469     if(this->a->portada->hayTextoTrasero()){
08470     // Texto Trasero
08471     QGraphicsTextItem *TT=new QGraphicsTextItem(a->portada->TextoTrasera());
08472     QFont *fuenteT=new QFont(a->portada->FuenteTextoTrasera().family(),a->portada->TamTextoTrasera(), 50, a->portada->CursivaTextoTrasera());
08473     if(a->portada->NegritaTextoTrasera()){
08474         fuenteT->setBold(true);
08475     }
08476     if(!this->activadaCarga){
08477     barra->setValue(7);
08478     }
08479     if(a->portada->SubrayadoTextoTrasera()){
08480         fuenteT->setUnderline(true);
08481     }
08482     TT->setFont(*fuenteT);
08483     TT->setTextWidth(a->portada->WTextoTrasera());
08484     if(a->portada->VerticalTextoTrasera()){
08485         TT->setRotation(90);
08486     }
08487     TT->setPos(a->portada->PosXTextoTrasera(), a->portada->PosYTextoTrasera());
08488     TT->setDefaultTextColor(a->portada->ColorTextoTrasera());
08489     if(a->portada->CentradoTextoTrasera()){
08490         // Para centrar el texto
08491         QTextCursor cursorT = TT->textCursor();
08492         QTextBlockFormat bfmtT = cursorT.blockFormat();
08493         bfmtT.setAlignment(Qt::AlignCenter);
08494         cursorT.setBlockFormat(bfmtT);
08495         TT->setTextCursor(cursorT);
08496     }
08497     if(!this->activadaCarga){
08498     barra->setValue(8);
08499     }
08500     TT->setAcceptHoverEvents(true);
08501     a->portada->versionReducida->scene()->addItem(TT);
08502     delete fuenteT;
08503     }
08504     if(this->ui->actionLineaSeparacionPortada->isChecked()){
08505     a->portada->versionReducida->scene()->addLine(213*(this->controlador->getWVisorAlbum())/462, 2, 213*(this->controlador->getWVisorAlbum())/462, 318*(this->controlador->getHVisorAlbum())/321)->setAcceptHoverEvents(false);
08506     a->portada->versionReducida->scene()->addLine(245*(this->controlador->getWVisorAlbum())/462, 2, 245*(this->controlador->getWVisorAlbum())/462, 318*(this->controlador->getHVisorAlbum())/321)->setAcceptHoverEvents(false);
08507     }
08508     
08509     if(this->a->portada->hayTextoLateral()){
08510     // Texto Lateral
08511     QGraphicsTextItem *TL=new QGraphicsTextItem(a->portada->TextoLateral());
08512     QFont *fuenteL=new QFont(a->portada->FuenteTextoLateral().family(),a->portada->TamTextoLateral(), 50, a->portada->CursivaTextoLateral());
08513     if(a->portada->NegritaTextoLateral()){
08514         fuenteL->setBold(true);
08515     }
08516     if(!this->activadaCarga){
08517     barra->setValue(9);
08518     }
08519     if(a->portada->SubrayadoTextoLateral()){
08520         fuenteL->setUnderline(true);
08521     }
08522     TL->setFont(*fuenteL);
08523     if(a->portada->VerticalTextoLateral()){
08524         TL->setRotation(90);
08525     }
08526     TL->setPos(a->portada->PosXTextoLateral(), a->portada->PosYTextoLateral());
08527     TL->setDefaultTextColor(a->portada->ColorTextoLateral());
08528     if(a->portada->CentradoTextoLateral()){
08529         // Para centrar el texto
08530         QTextCursor cursorL = TL->textCursor();
08531         QTextBlockFormat bfmtL = cursorL.blockFormat();
08532         bfmtL.setAlignment(Qt::AlignCenter);
08533         cursorL.setBlockFormat(bfmtL);
08534         TL->setTextCursor(cursorL);
08535     }
08536 
08537     TL->setAcceptHoverEvents(true);
08538     a->portada->versionReducida->scene()->addItem(TL);
08539     delete fuenteL;
08540     }
08541     a->portada->setObjetosPortada(a->portada->versionReducida->items());
08542     if(!this->activadaCarga){
08543     barra->setValue(10);
08544     }
08545     ui->pushButtonEditar->show();
08546     ui->actionEditar->setEnabled(true);
08547     ui->actionEditarBoton->setEnabled(true);
08548     ui->pushButtonEditarPagina->hide();
08549     ui->pushButtonTerminar->setEnabled(false);
08550     ui->actionTerminar_edici_n->setDisabled(true);
08551     ui->actionTerminarBoton->setDisabled(true);
08552     ui->pushButtonTerminar->show();
08553     ui->pushButtonTerminarPagina->hide();
08554     QGraphicsView *copia;
08555     try{
08556     copia=new QGraphicsView(a->portada->versionReducida);
08557     }catch(std::exception& e){
08558                         Error *err=new Error(2, e.what(), this);
08559                         err->LanzarDialogo();
08560                         delete err;
08561                         exit(1);
08562                     } 
08563     copia=a->portada->versionReducida;
08564     ui->visorAlbum->setScene(copia->scene());
08565     
08566     
08567     
08568     if(!this->activadaCarga){
08569     barra->setValue(11);
08570     }
08571     
08572     if(!this->activadaCarga){
08573     barra->setValue(12);
08574     }
08575     
08576     if(!this->activadaCarga){
08577     barra->setValue(13);
08578     }
08579     
08580     if(!this->activadaCarga){
08581     barra->setValue(14);
08582     }
08583     
08584     if(!this->activadaCarga){
08585     barra->setValue(15);
08586     }
08587     
08588     if(!this->activadaCarga){
08589     barra->setValue(16);
08590     }
08591     if(!this->creadasPaginas){
08592     ui->pushOpen->setEnabled(true);
08593     ui->actionAnnadirBoton->setEnabled(true);
08594     ui->actionA_adir_im_genes->setEnabled(true);
08595     }
08596     
08597                 
08598     ui->actionTama_o->setEnabled(true);
08599     ui->actionEditarTamBoton->setEnabled(true);
08600     ui->action_Nuevo->setEnabled(true);
08601     ui->actionNuevoBoton->setEnabled(true);
08602     ui->action_Guardar->setEnabled(true);
08603     ui->actionGuardarBoton->setEnabled(true);
08604     ui->actionG_uardar_como->setEnabled(true);
08605     ui->actionGuardarComoBoton->setEnabled(true);
08606     this->creadaPortada=true;
08607     ui->actionE_xportar->setEnabled(true);
08608     ui->actionExportarJPGBoton->setEnabled(true);
08609     ui->actionExportarPDFBoton->setEnabled(true);
08610     ui->actionI_mprimir->setEnabled(true);
08611     ui->actionImprimirBoton->setEnabled(true);
08612     if(!this->activadaCarga){
08613     barra->setValue(17);
08614     delete barra;
08615     }
08616     this->ui->selectFoto1->setDisabled(true);
08617     this->ui->selectFoto2->setDisabled(true);
08618     this->ui->botonPrueba->setDisabled(true);
08619     this->ui->pushButtonFondoPortada->setDisabled(true);
08620     this->ui->botonTexto->setDisabled(true);
08621     this->ui->selectorPlantilla->setDisabled(true);
08622     this->ui->plantillaPreview->setDisabled(true);
08623     this->ui->action_Lanzar_asistente->setDisabled(true);
08624     this->ui->actionWizardBoton->setDisabled(true);
08625     this->mostrandosePaginaActualmente=false;
08626     QDate fechaSys;
08627     QTime horaSys;
08628     this->fechaCreacion=fechaSys.currentDate().toString(Qt::ISODate);
08629     this->fechaCreacion.append(" ");
08630     this->fechaCreacion.append(horaSys.currentTime().toString(Qt::ISODate));
08631     this->ui->action_Propiedades->setEnabled(true);
08632     this->ui->actionPropiedadesBoton->setEnabled(true);
08633     
08634     
08635     QGraphicsScene *escenaPrev;
08636     QImage *imgPrev;
08637     
08638         try{
08639         escenaPrev = new QGraphicsScene();
08640         this->ui->imagePreview->setScene(escenaPrev);
08641         imgPrev = new QImage();
08642         }catch(std::exception& e){
08643                         Error *err=new Error(2, e.what(), this);
08644                         err->LanzarDialogo();
08645                         delete err;
08646                         exit(1);
08647         }
08648         try{
08649         imgPrev->load(this->directoriodetrabajo.absolutePath() + "/data/imagePrevCol.png");
08650         if(imgPrev->isNull()){
08651             throw std::ios_base::failure(tr("No pudo previsualizarse la imagen.").toStdString());
08652         }
08653         }catch(std::exception& e){
08654                         Error *err=new Error(4, e.what(), this);
08655                         err->LanzarDialogo();
08656                         delete err;
08657                         exit(1);
08658         }
08659             
08660         QPixmap imagePrev=QPixmap::fromImage(*imgPrev);
08661         
08662         this->ui->imagePreview->scene()->addPixmap(imagePrev.scaled(this->controlador->getWvisorImagenes(), this->controlador->getHvisorImagenes(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
08663         this->ui->imagePreview->setStyleSheet("background: transparent; border: none");
08664         delete imgPrev;
08665         
08666         
08667         Parser par(this->a->portada->RutaPlantilla().toStdString(), this);
08668         ticpp::Element* elementAux=par.root();
08669         std::string resultado=par.get_attribute("editable", elementAux);
08670         if(resultado=="no"){
08671             this->ui->pushButtonEditar->setDisabled(true);
08672             
08673         }
08674         this->nadacreado=false;
08675 }
08676 
08677 void FormPrincipal::DesactivarEdicionPagina(){
08678     this->IndicePaginas--;
08679     
08680     if(IndicePaginas < a->paginas.size()-1){
08681         ui->pushPagSiguiente->setEnabled(true);
08682         ui->action_Avanzar_P_gina->setEnabled(true);
08683         ui->actionAvanzarBoton->setEnabled(true);
08684     }
08685     if(IndicePaginas > 0 || IndicePaginas == 0){
08686         ui->pushPagAnterior->setEnabled(true);
08687         ui->action_Retroceder_p_gina->setEnabled(true);
08688         ui->actionRetrocederBoton->setEnabled(true);
08689     }
08690     ui->pushButtonTerminarPagina->setEnabled(false);
08691     ui->pushButtonEditarPagina->setEnabled(true);
08692     ui->actionEditar->setEnabled(true);
08693     ui->actionEditarBoton->setEnabled(true);
08694     ui->actionTerminar_edici_n->setDisabled(true);
08695     ui->actionTerminarBoton->setDisabled(true);
08696     
08697     
08698     ui->action_Nuevo->setEnabled(true);
08699     ui->actionNuevoBoton->setEnabled(true);
08700     ui->actionCar_gar->setEnabled(true);
08701     ui->actionAbrirBoton->setEnabled(true);
08702     ui->actionGuardarBoton->setEnabled(true);
08703     ui->actionGuardarComoBoton->setEnabled(true);
08704     ui->action_Guardar->setEnabled(true);
08705     ui->actionG_uardar_como->setEnabled(true);
08706     ui->actionE_xportar->setEnabled(true);
08707     ui->actionExportacion->setEnabled(true);
08708     ui->actionExportarJPGBoton->setEnabled(true);
08709     ui->actionExportarPDFBoton->setEnabled(true);
08710     ui->actionI_mprimir->setEnabled(true);
08711     ui->actionImprimirBoton->setEnabled(true);
08712     ui->menu_Archivo->setEnabled(true);
08713     if(this->ui->actionLineaSeparacionPaginas->isChecked()){
08714            
08715                         a->paginas[IndicePaginas]->versionReducida->scene()->removeItem(a->paginas[IndicePaginas]->versionReducida->scene()->itemAt(231*(this->controlador->getWVisorAlbum())/462, 2));
08716         
08717     }
08718     QList<QGraphicsItem*> lista = ui->visorAlbum->items();
08719     
08720    
08721     bool avisoActivado=false;
08722     tipoLista listaX, listaY;
08723     tipoPosicionesItems auxiliarItems;
08724     
08725     for(int i=0; i<lista.size(); i++)
08726     {
08727         try{
08728         if(lista.at(i)->acceptHoverEvents()){
08729             if(!lista.at(i)->acceptTouchEvents()){
08730                 
08731             float posx=lista.at(i)->x();
08732             float posy=lista.at(i)->y();
08733             tipoCoordenadas auxiliar;
08734             if(lista.at(i)->type()==7){
08735                 
08736                 float wItem=lista.at(i)->boundingRect().width();
08737                 float hItem=lista.at(i)->boundingRect().height();
08738                 float coef, posxNueva1, posxNueva2, posyNueva1, posyNueva2;
08739                 
08740                 posxNueva1=posx;
08741                 posxNueva2=posx;
08742                 posyNueva1=posy;
08743                 posyNueva2=posy;
08744                 if((wItem+posxNueva1)>463*(this->controlador->getWVisorAlbum())/462){
08745                     avisoActivado=true;
08746                         coef=(wItem+posxNueva1)-463*(this->controlador->getWVisorAlbum())/462;
08747                         posx=posxNueva1-coef;
08748                         ui->visorAlbum->items().at(i)->setPos(posx, posy);
08749                 }
08750                 if((hItem+posyNueva1)>322*(this->controlador->getHVisorAlbum())/321){
08751                     avisoActivado=true;
08752                         coef=(hItem+posyNueva1)-322*(this->controlador->getHVisorAlbum())/321;
08753                         posy=posyNueva1-coef;
08754                         ui->visorAlbum->items().at(i)->setPos(posx, posy);
08755                 }
08756                 if(posxNueva2 < 0){
08757                     avisoActivado=true;
08758                     coef= 0-posxNueva2;
08759                     posx= posxNueva2 + coef;
08760                     ui->visorAlbum->items().at(i)->setPos(posx, posy);
08761                
08762                 }
08763                 if(posyNueva2 < 0){
08764                     avisoActivado=true;
08765                     coef= 0-posyNueva2;
08766                     posy= posyNueva2 + coef;
08767                     ui->visorAlbum->items().at(i)->setPos(posx, posy);
08768                
08769                 }
08770                 
08771                 
08772                 auxiliar.tipo=7;
08773                 auxiliar.x=posx;
08774                 auxiliar.y=posy;
08775                 auxiliarItems.insert(i, auxiliar);
08776             }
08777             if(lista.at(i)->type()==8){
08778                 float wItem=lista.at(i)->boundingRect().width();
08779                 float hItem=lista.at(i)->boundingRect().height();
08780                 float coef, posxNueva1, posxNueva2, posyNueva1, posyNueva2;
08781                 
08782                 posxNueva1=posx;
08783                 posxNueva2=posx;
08784                 posyNueva1=posy;
08785                 posyNueva2=posy;
08786                 if((wItem+posxNueva1)>463*(this->controlador->getWVisorAlbum())/462){
08787                     avisoActivado=true;
08788                         coef=(wItem+posxNueva1)-463*(this->controlador->getWVisorAlbum())/462;
08789                         posx=posxNueva1-coef;
08790                         ui->visorAlbum->items().at(i)->setPos(posx, posy);
08791                 }
08792                 if((hItem+posyNueva1)>322*(this->controlador->getHVisorAlbum())/321){
08793                     avisoActivado=true;
08794                         coef=(hItem+posyNueva1)-322*(this->controlador->getHVisorAlbum())/321;
08795                         posy=posyNueva1-coef;
08796                         ui->visorAlbum->items().at(i)->setPos(posx, posy);
08797                 }
08798                 if(posxNueva2 < 0){
08799                     avisoActivado=true;
08800                     coef= 0-posxNueva2;
08801                     posx= posxNueva2 + coef;
08802                     ui->visorAlbum->items().at(i)->setPos(posx, posy);
08803                
08804                 }
08805                 if(posyNueva2 < 0){
08806                     avisoActivado=true;
08807                     coef= 0-posyNueva2;
08808                     posy= posyNueva2 + coef;
08809                     ui->visorAlbum->items().at(i)->setPos(posx, posy);
08810                
08811                 }
08812                 
08813                 
08814                 auxiliar.tipo=8;
08815                 auxiliar.x=posx;
08816                 auxiliar.y=posy;
08817                 auxiliarItems.insert(i, auxiliar);
08818             }
08819             
08820             
08821             
08822             a->paginas[IndicePaginas]->versionReducida->items().at(i)->setPos(posx, posy);
08823             lista.at(i)->setFlag(QGraphicsItem::ItemIsMovable, false);
08824             lista.at(i)->setFlag(QGraphicsItem::ItemIsSelectable, false);
08825         }else{
08826             float posx=lista.at(i)->x();
08827             float posy=lista.at(i)->y();
08828             tipoCoordenadas auxiliar;
08829             if(lista.at(i)->type()==7){
08830                 
08831                 float hItem=lista.at(i)->boundingRect().width();
08832                 float wItem=lista.at(i)->boundingRect().height();
08833                 float coef, posxNueva1, posxNueva2, posyNueva1, posyNueva2;
08834                 
08835                 posxNueva1=posx;
08836                 posxNueva2=posx;
08837                 posyNueva1=posy;
08838                 posyNueva2=posy;
08839                 if(posxNueva1>463*(this->controlador->getWVisorAlbum())/462){
08840                     avisoActivado=true;
08841                         coef=(posxNueva1)-463*(this->controlador->getWVisorAlbum())/462;
08842                         posx=posxNueva1-coef;
08843                         ui->visorAlbum->items().at(i)->setPos(posx, posy);
08844                 }
08845                 if((hItem+posyNueva1)>322*(this->controlador->getHVisorAlbum())/321){
08846                     avisoActivado=true;
08847                         coef=(hItem+posyNueva1)-322*(this->controlador->getHVisorAlbum())/321;
08848                         posy=posyNueva1-coef;
08849                         ui->visorAlbum->items().at(i)->setPos(posx, posy);
08850                 }
08851                 if((posxNueva2 - wItem)< 0){
08852                     avisoActivado=true;
08853                     coef= 0-(posxNueva2 - wItem);
08854                     posx= posxNueva2 + coef;
08855                     ui->visorAlbum->items().at(i)->setPos(posx, posy);
08856                
08857                 }
08858                 if(posyNueva2 < 0){
08859                     avisoActivado=true;
08860                     coef= 0-posyNueva2;
08861                     posy= posyNueva2 + coef;
08862                     ui->visorAlbum->items().at(i)->setPos(posx, posy);
08863                
08864                 }
08865                 
08866                 
08867                 auxiliar.tipo=7;
08868                 auxiliar.x=posx;
08869                 auxiliar.y=posy;
08870                 auxiliarItems.insert(i, auxiliar);
08871             }
08872             if(lista.at(i)->type()==8){
08873                 float wItem=lista.at(i)->boundingRect().width();
08874                 float hItem=lista.at(i)->boundingRect().height();
08875                 float coef, posxNueva1, posxNueva2, posyNueva1, posyNueva2;
08876                 
08877                 posxNueva1=posx;
08878                 posxNueva2=posx;
08879                 posyNueva1=posy;
08880                 posyNueva2=posy;
08881                  if(posxNueva1>463*(this->controlador->getWVisorAlbum())/462){
08882                     avisoActivado=true;
08883                         coef=(posxNueva1)-463*(this->controlador->getWVisorAlbum())/462;
08884                         posx=posxNueva1-coef;
08885                         ui->visorAlbum->items().at(i)->setPos(posx, posy);
08886                 }
08887                 if((hItem+posyNueva1)>322*(this->controlador->getHVisorAlbum())/321){
08888                     avisoActivado=true;
08889                         coef=(hItem+posyNueva1)-322*(this->controlador->getHVisorAlbum())/321;
08890                         posy=posyNueva1-coef;
08891                         ui->visorAlbum->items().at(i)->setPos(posx, posy);
08892                 }
08893                 if((posxNueva2 - wItem)< 0){
08894                     avisoActivado=true;
08895                     coef= 0-(posxNueva2 - wItem);
08896                     posx= posxNueva2 + coef;
08897                     ui->visorAlbum->items().at(i)->setPos(posx, posy);
08898                
08899                 }
08900                 if(posyNueva2 < 0){
08901                     avisoActivado=true;
08902                     coef= 0-posyNueva2;
08903                     posy= posyNueva2 + coef;
08904                     ui->visorAlbum->items().at(i)->setPos(posx, posy);
08905                
08906                 }
08907                 
08908                 
08909                 auxiliar.tipo=8;
08910                 auxiliar.x=posx;
08911                 auxiliar.y=posy;
08912                 auxiliarItems.insert(i, auxiliar);
08913             }
08914             
08915             
08916             
08917             a->paginas[IndicePaginas]->versionReducida->items().at(i)->setPos(posx, posy);
08918             lista.at(i)->setFlag(QGraphicsItem::ItemIsMovable, false);
08919             lista.at(i)->setFlag(QGraphicsItem::ItemIsSelectable, false);    
08920         }
08921         }
08922         }catch(std::exception& e){
08923                         Error *err=new Error(1, e.what(), this);
08924                         err->LanzarDialogo();
08925                         delete err;
08926                         exit(1);
08927                     } 
08928     
08929        
08930     }
08931    this->posicionesItemsPaginas.replace(IndicePaginas, auxiliarItems);
08932     
08933     
08934     if(avisoActivado){
08935         
08936         QMessageBox::question(this, tr("Advertencia"), tr("Ha colocado uno o varios elementos fuera de la región de edición de la página. El sistema los recolocará automaticamente dentro de la página."), QMessageBox::Ok);
08937     
08938     }
08939     try{
08940     a->paginas[IndicePaginas]->SetPaginaEditada();
08941     QString texto9;
08942     this->paginasDesplazadas.insert(IndicePaginas, texto9);
08943     if(this->a->GetPagina(IndicePaginas)->GetPaginaEditada()){
08944         this->hayDesplazamientoPagina=true;
08945         texto9="          <Desplazamientos pagina=\"" + QString::number(IndicePaginas) + "\">\n";
08946         for(int h=0; h <auxiliarItems.size(); h++){
08947             texto9= texto9 + "               <Desplazamiento posx=\"" + QString::number(auxiliarItems.at(h).x) + "\" posy=\"" + QString::number(auxiliarItems.at(h).y) + "\"/>\n";
08948         }
08949         texto9= texto9 + "          </Desplazamientos>\n";
08950         
08951      }
08952      
08953      this->paginasDesplazadas.replace(IndicePaginas, texto9);
08954      
08955     a->paginas[IndicePaginas]->setObjetosPagina(ui->visorAlbum->items());
08956     if(this->ui->actionLineaSeparacionPaginas->isChecked()){
08957            a->paginas[IndicePaginas]->versionReducida->scene()->addLine(231*(this->controlador->getWVisorAlbum())/462, 2, 231*(this->controlador->getWVisorAlbum())/462, 318*(this->controlador->getHVisorAlbum())/321)->setAcceptHoverEvents(false);
08958                     
08959     }
08960     }catch(std::exception& e){
08961                         Error *err=new Error(1, e.what(), this);
08962                         err->LanzarDialogo();
08963                         delete err;
08964                         exit(1);
08965                     }
08966     
08967     this->IndicePaginas++;
08968    
08969 }
08970 
08971 void FormPrincipal::DesactivarEdicion(){
08972     ui->pushButtonTerminar->setEnabled(false);
08973     ui->pushButtonEditar->setEnabled(true);
08974     
08975     ui->actionEditar->setEnabled(true);
08976     ui->actionEditarBoton->setEnabled(true);
08977     ui->actionTerminar_edici_n->setDisabled(true);
08978     ui->actionTerminarBoton->setDisabled(true);
08979     
08980     ui->action_Nuevo->setEnabled(true);
08981     ui->actionNuevoBoton->setEnabled(true);
08982     ui->actionCar_gar->setEnabled(true);
08983     ui->actionAbrirBoton->setEnabled(true);
08984     ui->actionGuardarBoton->setEnabled(true);
08985     ui->actionGuardarComoBoton->setEnabled(true);
08986     ui->action_Guardar->setEnabled(true);
08987     ui->actionG_uardar_como->setEnabled(true);
08988     ui->actionE_xportar->setEnabled(true);
08989     ui->actionExportacion->setEnabled(true);
08990     ui->actionExportarJPGBoton->setEnabled(true);
08991     ui->actionExportarPDFBoton->setEnabled(true);
08992     ui->actionI_mprimir->setEnabled(true);
08993     ui->actionImprimirBoton->setEnabled(true);
08994     ui->menu_Archivo->setEnabled(true);
08995     if(this->creadasPaginas){
08996     ui->pushPagSiguiente->setEnabled(true);
08997     ui->action_Avanzar_P_gina->setEnabled(true);
08998     ui->actionAvanzarBoton->setEnabled(true);
08999     }
09000     QList<QGraphicsItem*> lista = ui->visorAlbum->items();
09001    
09002     if(this->DesactivarParteEdicionPortada){
09003         
09004         this->portadaDesplazada.clear();
09005     }
09006     bool avisoActivado=false;
09007     for(int i=0; i<lista.size(); i++)
09008     {
09009         try{
09010         if(lista.at(i)->acceptHoverEvents()){
09011             if(!lista.at(i)->acceptTouchEvents()){
09012             float posx=lista.at(i)->x();
09013             float posy=lista.at(i)->y();
09014             
09015             
09016                 
09017             if(lista.at(i)->type()==7){
09018                 
09019                 
09020                 float wItem=lista.at(i)->boundingRect().width();
09021                 float hItem=lista.at(i)->boundingRect().height();
09022                 float coef, posxNueva1, posxNueva2, posyNueva1, posyNueva2;
09023                 
09024                 posxNueva1=posx;
09025                 posxNueva2=posx;
09026                 posyNueva1=posy;
09027                 posyNueva2=posy;
09028                 
09029                 if((wItem+posxNueva1)>463*(this->controlador->getWVisorAlbum())/462){
09030                     avisoActivado=true;
09031                         coef=(wItem+posxNueva1)-463*(this->controlador->getWVisorAlbum())/462;
09032                         posx=posxNueva1-coef;
09033                         ui->visorAlbum->items().at(i)->setPos(posx, posy);
09034                 }
09035                 if((hItem+posyNueva1)>322*(this->controlador->getHVisorAlbum())/321){
09036                     avisoActivado=true;
09037                         coef=(hItem+posyNueva1)-322*(this->controlador->getHVisorAlbum())/321;
09038                         posy=posyNueva1-coef;
09039                         ui->visorAlbum->items().at(i)->setPos(posx, posy);
09040                 }
09041                 if(posxNueva2 < 0){
09042                     avisoActivado=true;
09043                     coef= 0-posxNueva2;
09044                     posx= posxNueva2 + coef;
09045                     ui->visorAlbum->items().at(i)->setPos(posx, posy);
09046                
09047                 }
09048                 if(posyNueva2 < 0){
09049                     avisoActivado=true;
09050                     coef= 0-posyNueva2;
09051                     posy= posyNueva2 + coef;
09052                     ui->visorAlbum->items().at(i)->setPos(posx, posy);
09053                
09054                 }
09055                 
09056                 this->hayDesplazamientoPortadaFotos=true;
09057                 tipoCoordenadas auxiliar;
09058                 auxiliar.x=posx;
09059                 auxiliar.tipo=7; 
09060                 auxiliar.y=posy;
09061                 this->posicionesItemsPortada.insert(i, auxiliar);
09062                 this->posXFotoDesplazadaPortada.insert(i,posx);
09063                 this->posYFotoDesplazadaPortada.insert(i, posy);
09064             }
09065             if(lista.at(i)->type()==8){
09066                 
09067                 float wItem, hItem;
09068                 if(i==0){
09069                     //Esto lo hacemos porque el texto lateral está en vertical
09070                  hItem=lista.at(i)->boundingRect().width();
09071                  wItem=lista.at(i)->boundingRect().height();   
09072                 }else{
09073                 wItem=lista.at(i)->boundingRect().width();
09074                 hItem=lista.at(i)->boundingRect().height();
09075                 }
09076                 float coef, posxNueva1, posxNueva2, posyNueva1, posyNueva2;
09077                 
09078                 posxNueva1=posx;
09079                 posxNueva2=posx;
09080                 posyNueva1=posy;
09081                 posyNueva2=posy;
09082                 if(i==0){
09083                     
09084                    if(posxNueva1>463*(this->controlador->getWVisorAlbum())/462){
09085                     
09086                     avisoActivado=true;
09087                         coef=(posxNueva1)-463*(this->controlador->getWVisorAlbum())/462;
09088                         posx=posxNueva1-coef;
09089                         ui->visorAlbum->items().at(i)->setPos(posx, posy);
09090                 }
09091                 if((hItem+posyNueva1)>322*(this->controlador->getHVisorAlbum())/321){
09092                     avisoActivado=true;
09093                         coef=(hItem+posyNueva1)-322*(this->controlador->getHVisorAlbum())/321;
09094                         posy=posyNueva1-coef;
09095                         ui->visorAlbum->items().at(i)->setPos(posx, posy);
09096                 }
09097                 if((posxNueva2-wItem) < 0){
09098                     avisoActivado=true;
09099                     coef= 0-(posxNueva2-wItem);
09100                     posx= posxNueva2 + coef;
09101                     ui->visorAlbum->items().at(i)->setPos(posx, posy);
09102                
09103                 }
09104                 if(posyNueva2 < 0){
09105                     avisoActivado=true;
09106                     coef= 0-posyNueva2;
09107                     posy= posyNueva2 + coef;
09108                     ui->visorAlbum->items().at(i)->setPos(posx, posy);
09109                
09110                 } 
09111                     
09112                     
09113                     
09114                 }else{
09115                     
09116                 
09117                 if((wItem+posxNueva1)>463*(this->controlador->getWVisorAlbum())/462){
09118                     
09119                     avisoActivado=true;
09120                         coef=(wItem+posxNueva1)-463*(this->controlador->getWVisorAlbum())/462;
09121                         posx=posxNueva1-coef;
09122                         ui->visorAlbum->items().at(i)->setPos(posx, posy);
09123                 }
09124                 if((hItem+posyNueva1)>322*(this->controlador->getHVisorAlbum())/321){
09125                     avisoActivado=true;
09126                         coef=(hItem+posyNueva1)-322*(this->controlador->getHVisorAlbum())/321;
09127                         posy=posyNueva1-coef;
09128                         ui->visorAlbum->items().at(i)->setPos(posx, posy);
09129                 }
09130                 if(posxNueva2 < 0){
09131                     avisoActivado=true;
09132                     coef= 0-posxNueva2;
09133                     posx= posxNueva2 + coef;
09134                     ui->visorAlbum->items().at(i)->setPos(posx, posy);
09135                
09136                 }
09137                 if(posyNueva2 < 0){
09138                     avisoActivado=true;
09139                     coef= 0-posyNueva2;
09140                     posy= posyNueva2 + coef;
09141                     ui->visorAlbum->items().at(i)->setPos(posx, posy);
09142                
09143                 }
09144                 }
09145                 this->hayDesplazamientoPortadaTextos=true;
09146                 tipoCoordenadas auxiliar;
09147                 auxiliar.x=posx;
09148                 auxiliar.tipo=8; 
09149                 auxiliar.y=posy;
09150                 this->posicionesItemsPortada.insert(i, auxiliar);
09151                 this->posXTextoDesplazadoPortada.insert(i, posx);
09152                 this->posYTextoDesplazadoPortada.insert(i, posy);
09153             }
09154             lista.at(i)->setFlag(QGraphicsItem::ItemIsMovable, false);
09155             lista.at(i)->setFlag(QGraphicsItem::ItemIsSelectable, false);
09156             
09157         }else{
09158             float posx=lista.at(i)->x();
09159             float posy=lista.at(i)->y();
09160             tipoCoordenadas auxiliar;
09161             if(lista.at(i)->type()==7){
09162                 
09163                 float hItem=lista.at(i)->boundingRect().width();
09164                 float wItem=lista.at(i)->boundingRect().height();
09165                 float coef, posxNueva1, posxNueva2, posyNueva1, posyNueva2;
09166                 
09167                 posxNueva1=posx;
09168                 posxNueva2=posx;
09169                 posyNueva1=posy;
09170                 posyNueva2=posy;
09171                 if(posxNueva1>463*(this->controlador->getWVisorAlbum())/462){
09172                     avisoActivado=true;
09173                         coef=(posxNueva1)-463*(this->controlador->getWVisorAlbum())/462;
09174                         posx=posxNueva1-coef;
09175                         ui->visorAlbum->items().at(i)->setPos(posx, posy);
09176                 }
09177                 if((hItem+posyNueva1)>322*(this->controlador->getHVisorAlbum())/321){
09178                     avisoActivado=true;
09179                         coef=(hItem+posyNueva1)-322*(this->controlador->getHVisorAlbum())/321;
09180                         posy=posyNueva1-coef;
09181                         ui->visorAlbum->items().at(i)->setPos(posx, posy);
09182                 }
09183                 if((posxNueva2 - wItem)< 0){
09184                     avisoActivado=true;
09185                     coef= 0-(posxNueva2 - wItem);
09186                     posx= posxNueva2 + coef;
09187                     ui->visorAlbum->items().at(i)->setPos(posx, posy);
09188                
09189                 }
09190                 if(posyNueva2 < 0){
09191                     avisoActivado=true;
09192                     coef= 0-posyNueva2;
09193                     posy= posyNueva2 + coef;
09194                     ui->visorAlbum->items().at(i)->setPos(posx, posy);
09195                
09196                 }
09197                 
09198                 
09199                 auxiliar.tipo=7;
09200                 auxiliar.x=posx;
09201                 auxiliar.y=posy;
09202                 
09203                 this->posicionesItemsPortada.insert(i, auxiliar);
09204                 this->posXFotoDesplazadaPortada.insert(i,posx);
09205                 this->posYFotoDesplazadaPortada.insert(i, posy);
09206             }
09207             
09208             lista.at(i)->setFlag(QGraphicsItem::ItemIsMovable, false);
09209             lista.at(i)->setFlag(QGraphicsItem::ItemIsSelectable, false);    
09210         }
09211         
09212     }
09213     }catch(std::exception& e){
09214                         Error *err=new Error(1, e.what(), this);
09215                         err->LanzarDialogo();
09216                         delete err;
09217                         exit(1);
09218                     }
09219     }
09220     if(avisoActivado){
09221         
09222         QMessageBox::question(this, tr("Advertencia"), tr("Ha colocado uno o varios elementos fuera de la región de edición de la portada. El sistema los recolocará automaticamente dentro de la portada."), QMessageBox::Ok);
09223     
09224     }
09225         
09226     QString texto9;
09227     texto9="";
09228     
09229     try{
09230     for(int h=0; h <this->posicionesItemsPortada.size() ; h++){
09231         texto9= texto9 + "               <DesplazamientoPortada posx=\"" + QString::number(this->posicionesItemsPortada[h].x) + "\" posy=\"" + QString::number(this->posicionesItemsPortada[h].y) + "\"/>\n";
09232     }
09233     }catch(std::exception& e){
09234                         Error *err=new Error(1, e.what(), this);
09235                         err->LanzarDialogo();
09236                         delete err;
09237                         exit(1);
09238                     }
09239     
09240     this->portadaDesplazada= texto9;
09241     a->portada->setObjetosPortada(ui->visorAlbum->items());
09242 }
09243 
09244 
09245 void FormPrincipal::ActivarEdicionPagina(){
09246     try{
09247     ui->pushPagSiguiente->setDisabled(true);
09248     ui->action_Avanzar_P_gina->setDisabled(true);
09249     ui->actionAvanzarBoton->setDisabled(true);
09250     ui->pushPagAnterior->setDisabled(true);
09251     ui->action_Retroceder_p_gina->setDisabled(true);
09252     ui->actionRetrocederBoton->setDisabled(true);
09253     ui->action_Nuevo->setDisabled(true);
09254     ui->actionNuevoBoton->setDisabled(true);
09255     ui->actionCar_gar->setDisabled(true);
09256     ui->actionAbrirBoton->setDisabled(true);
09257     ui->actionGuardarBoton->setDisabled(true);
09258     ui->actionGuardarComoBoton->setDisabled(true);
09259     ui->action_Guardar->setDisabled(true);
09260     ui->actionG_uardar_como->setDisabled(true);
09261     ui->actionE_xportar->setDisabled(true);
09262     ui->actionExportacion->setDisabled(true);
09263     ui->actionExportarJPGBoton->setDisabled(true);
09264     ui->actionExportarPDFBoton->setDisabled(true);
09265     ui->actionI_mprimir->setDisabled(true);
09266     ui->actionImprimirBoton->setDisabled(true);
09267     ui->menu_Archivo->setDisabled(true);
09268     
09269    
09270     if(!this->posicionesItemsPaginas.isEmpty()){
09271         if(this->a->paginas[IndicePaginas-1]->GetPaginaEditada()){
09272              this->paginasDesplazadas[IndicePaginas-1].clear();
09273             this->posicionesItemsPaginas[IndicePaginas-1].clear();
09274         }
09275     }
09276     ui->pushButtonEditarPagina->setEnabled(false);
09277     ui->actionEditar->setDisabled(true);
09278     ui->actionEditarBoton->setDisabled(true);
09279     ui->pushButtonTerminarPagina->setEnabled(true);
09280     ui->actionTerminar_edici_n->setEnabled(true);
09281     ui->actionTerminarBoton->setEnabled(true);
09282     QList<QGraphicsItem*> lista = ui->visorAlbum->items();
09283     for(int i=0; i<lista.size(); i++)
09284     {
09285         if(lista.at(i)->acceptHoverEvents()){
09286             lista.at(i)->setFlag(QGraphicsItem::ItemIsMovable, true);
09287             lista.at(i)->setFlag(QGraphicsItem::ItemSendsScenePositionChanges, true);
09288             lista.at(i)->setFlag(QGraphicsItem::ItemIsSelectable, true);
09289         }
09290     }
09291     }catch(std::exception& e){
09292                         Error *err=new Error(1, e.what(), this);
09293                         err->LanzarDialogo();
09294                         delete err;
09295                         exit(1);
09296                     }
09297 
09298 }
09299 
09300 QVariant QGraphicsItem::itemChange(GraphicsItemChange change, const QVariant &value)
09301  {
09302      if (change == ItemPositionChange && scene()) {
09303          // value es la nueva posición
09304          QPointF newPos = value.toPointF();
09305          QRectF rect = scene()->sceneRect();
09306              
09307          if (!rect.contains(newPos)) {
09308              
09309              newPos.setX(qMin(rect.right(), qMax(newPos.x(), rect.left())));
09310              newPos.setY(qMin(rect.bottom(), qMax(newPos.y(), rect.top())));
09311              return newPos;
09312          }
09313      }
09314      return QGraphicsItem::itemChange(change, value);
09315  }
09316 
09317 
09318 void FormPrincipal::ActivarEdicion(){
09319     
09320     ui->pushButtonEditar->setEnabled(false);
09321     ui->actionEditar->setDisabled(true);
09322     ui->actionEditarBoton->setDisabled(true);
09323     ui->actionTerminar_edici_n->setEnabled(true);
09324     ui->actionTerminarBoton->setEnabled(true);
09325     ui->pushButtonTerminar->setEnabled(true);
09326     ui->pushPagSiguiente->setDisabled(true);
09327     ui->action_Avanzar_P_gina->setDisabled(true);
09328     ui->actionAvanzarBoton->setDisabled(true);
09329     ui->action_Nuevo->setDisabled(true);
09330     ui->actionNuevoBoton->setDisabled(true);
09331     ui->actionCar_gar->setDisabled(true);
09332     ui->actionAbrirBoton->setDisabled(true);
09333     ui->actionGuardarBoton->setDisabled(true);
09334     ui->actionGuardarComoBoton->setDisabled(true);
09335     ui->action_Guardar->setDisabled(true);
09336     ui->actionG_uardar_como->setDisabled(true);
09337     ui->actionE_xportar->setDisabled(true);
09338     ui->actionExportacion->setDisabled(true);
09339     ui->actionExportarJPGBoton->setDisabled(true);
09340     ui->actionExportarPDFBoton->setDisabled(true);
09341     ui->actionI_mprimir->setDisabled(true);
09342     ui->actionImprimirBoton->setDisabled(true);
09343     ui->menu_Archivo->setDisabled(true);
09344     this->edicionPortadaFinalX.clear();
09345     this->edicionPortadaFinalY.clear();
09346     this->posicionesItemsPortada.clear();
09347     this->portadaDesplazada="";
09348     QList<QGraphicsItem*> lista = ui->visorAlbum->items();
09349     this->a->portada->ActivarEdicion();
09350     try{
09351     for(int i=0; i<lista.size(); i++)
09352     {
09353         if(lista.at(i)->acceptHoverEvents()){
09354             lista.at(i)->setFlag(QGraphicsItem::ItemIsMovable, true);
09355             lista.at(i)->setFlag(QGraphicsItem::ItemIsSelectable, true);
09356             lista.at(i)->setFlag(QGraphicsItem::ItemSendsScenePositionChanges, true);
09357             lista.at(i)->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
09358         }
09359     }
09360     }catch(std::exception& e){
09361                         Error *err=new Error(1, e.what(), this);
09362                         err->LanzarDialogo();
09363                         delete err;
09364                         exit(1);
09365     }
09366 }
09367 
09368 void FormPrincipal::openFiles(bool wizard)
09369 {
09370     if(!wizard){
09371         iAList.clear();
09372         addFiles();
09373         ui->pushCheckAll->setEnabled(true);
09374         ui->actionSeleccionarTodoBoton->setEnabled(true);
09375         ui->actionSeleccionar_todo->setEnabled(true);
09376         ui->pushRemoveSelect->setEnabled(true);
09377         this->ui->actionBorrar_selecci_n->setEnabled(true);
09378         this->ui->actionEliminarFotosBoton->setEnabled(true);
09379         ui->pushUncheckAll->setEnabled(true);
09380         ui->actionDeseleccionarTodoBoton->setEnabled(true);
09381         this->ui->actionDeseleccionar_todo->setEnabled(true);
09382         ui->pushCrearPaginas->setEnabled(true);
09383     }else{
09384         iAList.clear();
09385         addFiles(true);
09386         this->fotos->ui->pushCheckAll->setEnabled(true);
09387         ui->actionSeleccionarTodoBoton->setEnabled(true);
09388         ui->actionSeleccionar_todo->setEnabled(true);
09389         this->fotos->ui->pushRemoveSelect->setEnabled(true);
09390         this->ui->actionBorrar_selecci_n->setEnabled(true);
09391         this->ui->actionEliminarFotosBoton->setEnabled(true);
09392         this->fotos->ui->pushUncheckAll->setEnabled(true);
09393         ui->actionDeseleccionarTodoBoton->setEnabled(true);
09394         this->ui->actionDeseleccionar_todo->setEnabled(true);
09395         this->fotos->ui->pushIntroImagenes->setEnabled(true); 
09396     }
09397 }
09398 
09399 void FormPrincipal::visualizarPlantilla(bool wizard){
09400     if(!wizard){
09401         this->preguntaSeguridad=true;
09402         QGraphicsScene *scene;
09403         try{
09404                 scene= new QGraphicsScene();
09405         }catch(std::exception& e){
09406                 Error *err=new Error(2, e.what(), this);
09407                 err->LanzarDialogo();
09408                 delete err;
09409                 exit(1);
09410         }
09411         ui->plantillaPreview->setScene(scene);
09412     
09413         for (int i = ui->selectorPlantilla->topLevelItemCount() - 1; i >= 0; i--){
09414         
09415                 if((ui->selectorPlantilla->topLevelItem(i))->isSelected()){
09416                         ui->pushButtonFondoPortada->setEnabled(true);
09417                         QString filename=this->directoriodetrabajo.absolutePath() + "/templates/" + (ui->selectorPlantilla->topLevelItem(i))->text(0) + ".xml";
09418                         
09419                         a->portada->LoadRutaPlantilla(filename);
09420                         this->elegidaPlantilla=true;
09421                         Parser parser(filename.toStdString(), this);
09422                         ticpp::Element* element = parser.root();
09423                         std::string filenameprev = parser.get_attribute("preview", element);
09424                         std::string sionotrasera = parser.get_attribute("img_tras", element);
09425                         std::string sionofrontal = parser.get_attribute("img_fron", element);
09426                         std::string sionoTlateral = parser.get_attribute("texto_lat", element);
09427                         std::string sionoTfrontal = parser.get_attribute("texto_fron", element);
09428                         std::string sionoTtrasero = parser.get_attribute("texto_tras", element);
09429                         std::string texto= parser.get_attribute("texto", element);
09430                         QString *aux=new QString(filenameprev.c_str());
09431                         this->ui->selectFoto1->setEnabled(true);
09432                         if(sionotrasera=="no"){
09433                                 this->ui->selectFoto2->setDisabled(true);
09434                                 this->a->portada->DesactivarImagenTrasera();
09435                         }else{
09436                                 this->a->portada->ActivarImagenTrasera();
09437                                 this->ui->selectFoto2->setEnabled(true);
09438                         }
09439                         if(sionofrontal=="no"){
09440                                 this->ui->selectFoto1->setDisabled(true);
09441                                 this->a->portada->DesactivarImagenFrontal();
09442                         }else{
09443                                 this->ui->selectFoto1->setEnabled(true);
09444                                 this->a->portada->ActivarImagenFrontal();
09445                         }
09446             
09447                         if(texto=="si"){
09448                                 this->a->portada->ActivarTexto();
09449                                 ui->botonTexto->setEnabled(true);
09450                         }else{
09451                                 this->a->portada->DesactivarTexto();
09452                                 ui->botonTexto->setDisabled(true);
09453                         }
09454                         if(sionoTfrontal=="no"){
09455                                 
09456                                 this->a->portada->DesactivarTextoFrontal();
09457                         }else{
09458                                 this->a->portada->ActivarTextoFrontal();
09459                         }
09460                         if(sionoTtrasero=="no"){
09461                                 
09462                                 this->a->portada->DesactivarTextoTrasero();
09463                         }else{
09464                                 this->a->portada->ActivarTextoTrasero();
09465                         }
09466                         if(sionoTlateral=="no"){
09467                                 
09468                                 this->a->portada->DesactivarTextoLateral();
09469                         }else{
09470                                 this->a->portada->ActivarTextoLateral();
09471                         }
09472                         QString filenameprev2=this->directoriodetrabajo.absolutePath() + "/templates/";
09473                         QImage *img = new QImage();
09474                         try{
09475                                 img->load(filenameprev2 + *aux);
09476                                 if(img->isNull()){
09477                                         throw std::ios_base::failure(tr("No pudo previsualizarse la plantilla.").toStdString());
09478                                 }
09479                         }catch(std::exception& e){
09480                                 Error *err=new Error(4, e.what(), this);
09481                                 err->LanzarDialogo();
09482                                 delete err;
09483                                 exit(1);
09484                         }
09485                         QPixmap image=QPixmap::fromImage(*img);
09486                         ui->plantillaPreview->scene()->addPixmap(image.scaled(this->controlador->getWvisorPlantilla(), this->controlador->getHvisorPlantilla(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
09487                         delete aux;
09488                         delete img;
09489                 }
09490 
09491         }
09492     }else{
09493         QGraphicsScene *scene, *scene2;
09494         try{
09495                 scene= new QGraphicsScene();
09496                 scene2= new QGraphicsScene();
09497         }catch(std::exception& e){
09498                         Error *err=new Error(2, e.what(), this);
09499                         err->LanzarDialogo();
09500                         delete err;
09501                         exit(1);
09502         }
09503         this->portada->ui->visorPlantillas->setScene(scene);
09504         this->ui->plantillaPreview->setScene(scene2);
09505         for (int i = this->portada->ui->selectorPlantillas->topLevelItemCount() - 1; i >= 0; i--){
09506                 if((this->portada->ui->selectorPlantillas->topLevelItem(i))->isSelected()){
09507                         ui->pushButtonFondoPortada->setEnabled(true);
09508                         QString filename=this->directoriodetrabajo.absolutePath() + "/templates/" + (this->portada->ui->selectorPlantillas->topLevelItem(i))->text(0) + ".xml";
09509                         this->a->portada->LoadRutaPlantilla(filename);
09510                         this->elegidaPlantilla=true;
09511                         Parser parser(filename.toStdString(), this);
09512                         ticpp::Element* element = parser.root();
09513                         std::string filenameprev = parser.get_attribute("preview", element);
09514                         std::string sionotrasera = parser.get_attribute("img_tras", element);
09515                         std::string sionofrontal = parser.get_attribute("img_fron", element);
09516                         std::string sionoTlateral = parser.get_attribute("texto_lat", element);
09517                         std::string sionoTfrontal = parser.get_attribute("texto_fron", element);
09518                         std::string sionoTtrasero = parser.get_attribute("texto_tras", element);
09519                         std::string texto= parser.get_attribute("texto", element);
09520                         this->ui->selectFoto1->setEnabled(true);
09521                         if(sionotrasera=="no"){
09522                                 this->fondoPortada->ui->pushTrasera->setDisabled(true);
09523                                 this->a->portada->DesactivarImagenTrasera();
09524                         }else{
09525                                 this->a->portada->ActivarImagenTrasera();
09526                         }
09527                         if(sionofrontal=="no"){
09528                                 this->fondoPortada->ui->pushFrontal->setDisabled(true);
09529                                 this->a->portada->DesactivarImagenFrontal();
09530                         }else{
09531                                 this->a->portada->ActivarImagenFrontal();
09532                         }
09533                         if(texto=="si"){
09534                                 this->a->portada->ActivarTexto();
09535                                 this->portada->ui->pushTexto->setEnabled(true);
09536                                 this->portada->ui->groupBox_2->setEnabled(true);
09537                                 this->portada->ui->label->setEnabled(true);
09538                                 this->ui->botonTexto->setEnabled(true);
09539                                 this->portada->setEnabledNecesitaTexto(true);
09540                         }else{
09541                                 this->portada->ui->pushTexto->setDisabled(true);
09542                                 this->portada->ui->groupBox_2->setDisabled(true);
09543                                 this->portada->ui->label->setDisabled(true);
09544                                 this->ui->botonTexto->setDisabled(true);
09545                                 this->portada->setEnabledNecesitaTexto(false);
09546                         }
09547                         if(sionoTfrontal=="no"){
09548                                 
09549                                 this->a->portada->DesactivarTextoFrontal();
09550                         }else{
09551                                 this->a->portada->ActivarTextoFrontal();
09552                         }
09553                         if(sionoTtrasero=="no"){
09554                                 this->a->portada->DesactivarTextoTrasero();
09555                         }else{
09556                                 this->a->portada->ActivarTextoTrasero();
09557                         }
09558                         if(sionoTlateral=="no"){
09559                                 this->a->portada->DesactivarTextoLateral();
09560                         }else{
09561                                 this->a->portada->ActivarTextoLateral();
09562                         }
09563                         QString *aux=new QString(filenameprev.c_str());
09564                         QString filenameprev2=this->directoriodetrabajo.absolutePath() + "/templates/";
09565                         QImage *img = new QImage();
09566                         try{
09567                                 img->load(filenameprev2 + *aux);
09568                                 if(img->isNull()){
09569                                         throw std::ios_base::failure(tr("No pudo previsualizarse la plantilla.").toStdString());
09570                                 }
09571                         }catch(std::exception& e){
09572                                 Error *err=new Error(4, e.what(), this);
09573                                 err->LanzarDialogo();
09574                                 delete err;
09575                                 exit(1);
09576                         }
09577                         QPixmap image=QPixmap::fromImage(*img);
09578                         QPixmap image2=QPixmap::fromImage(*img);
09579                         this->portada->ui->visorPlantillas->scene()->addPixmap(image.scaled(127, 104, Qt::KeepAspectRatio, Qt::SmoothTransformation));
09580                         this->ui->plantillaPreview->scene()->addPixmap(image2.scaled(this->controlador->getWvisorPlantilla(), this->controlador->getHvisorPlantilla(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
09581                         delete aux;
09582                         delete img;
09583                 }
09584         }
09585     }
09586 }
09587 
09588 void FormPrincipal::ActivarSeleccionPlantilla(bool wizard){
09589     
09590     if(!wizard){
09591     ui->activatedPlantilla->setDisabled(true);
09592     ui->selectorPlantilla->setEnabled(true);
09593     QString path= this->directoriodetrabajo.absolutePath() + "/templates";
09594     QDir *dir;
09595     QStringList *por;
09596     try{
09597     dir=new QDir(path);
09598     por=new QStringList("*.xml");
09599     }catch(std::exception& e){
09600                         Error *err=new Error(2, e.what(), this);
09601                         err->LanzarDialogo();
09602                         delete err;
09603                         exit(1);
09604     }
09605     
09606     try{
09607     QStringList fileNames = dir->entryList(*por);
09608     for (int i = 0; i < fileNames.count(); i++) {
09609         QFileInfo fi(fileNames.at(i).toLocal8Bit());
09610         QTreeWidgetItem *item = new QTreeWidgetItem(ui->selectorPlantilla);
09611         QString recorte=fi.fileName();
09612         item->setText(0, recorte.remove(".xml"));
09613         QFont copiaFuente=item->font(0);
09614         copiaFuente.setPointSize(this->controlador->getPuntosTexto());
09615         item->setFont(0,copiaFuente);
09616         item->setFont(1,copiaFuente);
09617         
09618         QString aux=this->directoriodetrabajo.absolutePath() + "/templates/" + fi.fileName();
09619         Parser par(aux.toStdString(), this);
09620         ticpp::Element* element=par.root();
09621         std::string resultado=par.get_attribute("editable", element);
09622         if(resultado=="todo"){
09623             item->setText(1, "Si");
09624         }else{
09625             if(resultado=="solotexto"){
09626                 item->setText(1, "Solo texto");
09627             }else{
09628                 item->setText(1, "No");
09629             }
09630         }
09631     }
09632     ui->selectorPlantilla->topLevelItem(0)->setSelected(true);
09633     }catch(std::exception& e){
09634                         Error *err=new Error(1, e.what(), this);
09635                         err->LanzarDialogo();
09636                         delete err;
09637                         exit(1);
09638     }
09639     delete dir;
09640     delete por;
09641     }else{
09642         ui->selectorPlantilla->setDisabled(true);
09643         
09644     QString path= this->directoriodetrabajo.absolutePath() + "/templates";
09645     QDir *dir;
09646     QStringList *por;
09647     try{
09648     dir=new QDir(path);
09649     por=new QStringList("*.xml");
09650     }catch(std::exception& e){
09651                         Error *err=new Error(2, e.what(), this);
09652                         err->LanzarDialogo();
09653                         delete err;
09654                         exit(1);
09655     }
09656     
09657     try{
09658     QStringList fileNames = dir->entryList(*por);
09659     for (int i = 0; i < fileNames.count(); i++) {
09660         QFileInfo fi(fileNames.at(i).toLocal8Bit());
09661         QTreeWidgetItem *item = new QTreeWidgetItem(this->portada->ui->selectorPlantillas);
09662         QString recorte=fi.fileName();
09663         item->setText(0, recorte.remove(".xml"));
09664         QString aux=this->directoriodetrabajo.absolutePath() + "/templates/" + fi.fileName();
09665         Parser par(aux.toStdString(), this);
09666         ticpp::Element* element=par.root();
09667         std::string resultado=par.get_attribute("editable", element);
09668         if(resultado=="todo"){
09669             item->setText(1, "Si");
09670         }else{
09671             if(resultado=="solotexto"){
09672                 item->setText(1, "Solo texto");
09673             }else{
09674                 item->setText(1, "No");
09675             }
09676         }
09677     }
09678     this->portada->ui->selectorPlantillas->topLevelItem(0)->setSelected(true);
09679     
09680     }catch(std::exception& e){
09681                         Error *err=new Error(1, e.what(), this);
09682                         err->LanzarDialogo();
09683                         delete err;
09684                         exit(1);
09685     }
09686     delete dir;
09687     delete por;
09688     }
09689 }
09690 
09691 void FormPrincipal::SeleccionarFotoFrontal(){
09692 
09693     QString path = QDir::homePath();
09694     a->portada->LoadFotoFrontalRuta(QFileDialog::getOpenFileName(this, tr("Abrir Imagen"), path, tr("Todas las imágenes (*.png *.bmp *.jpg *.jpeg *.jpe *.tiff *.tif);; Imágenes: JPEG (*.jpg *.jpeg *.jpe);; Imágenes: BMP (*.bmp);; Imágenes: PNG (*.png);; Imágenes: TIFF (*.tiff *.tif) ")));
09695     if(!a->portada->RutaFotoFrontal().isEmpty()){
09696         this->ui->selectorPlantilla->setDisabled(true);
09697         this->ui->action_Nuevo->setEnabled(true);
09698         this->ui->actionNuevoBoton->setEnabled(true);
09699     }
09700     this->elegidaFrontalPortada=true;
09701     if(this->elegidaFrontalPortada && this->a->portada->hayImagenTrasera()){
09702         if(this->elegidaTraseraPortada){
09703             if(this->elegidoFondoPortada && this->a->portada->ContieneTexto()){
09704                 if(this->elegidoTexto){
09705                     this->ui->botonPrueba->setEnabled(true);
09706                     
09707                 }else{
09708                     this->ui->botonPrueba->setDisabled(true);
09709                 }
09710                 
09711             }else{
09712                 if(this->elegidoFondoPortada){
09713                     this->ui->botonPrueba->setEnabled(true);
09714                 }else{
09715                     this->ui->botonPrueba->setDisabled(true);
09716                 }
09717             }
09718         }else{
09719             this->ui->botonPrueba->setDisabled(true);
09720         }
09721     }else{
09722         if(this->elegidaFrontalPortada){
09723             if(!this->a->portada->hayImagenTrasera()){
09724                 if(this->elegidoFondoPortada){
09725                     if(this->a->portada->ContieneTexto()){
09726                         if(this->elegidoTexto){
09727                             this->ui->botonPrueba->setEnabled(true);
09728                         }else{
09729                             this->ui->botonPrueba->setDisabled(true);
09730                         }
09731                         
09732                     }else{
09733                         this->ui->botonPrueba->setEnabled(true);
09734                     }
09735                 }else{
09736                     this->ui->botonPrueba->setDisabled(true);
09737                 }
09738             }else{
09739                 this->ui->botonPrueba->setDisabled(true);
09740             }
09741         }else{
09742             this->ui->botonPrueba->setDisabled(true);
09743         }
09744     }
09745 
09746     //Ahora la añadimos al selector
09747     QString tamanno;
09748     QFileInfo fi(a->portada->RutaFotoFrontal().toAscii());
09749     QTreeWidgetItem *item = new QTreeWidgetItem(ui->treeWidget);
09750     
09751     item->setText(0, "Imagen portada    ");
09752     ui->treeWidget->resizeColumnToContents(0);
09753     item->setText(1, fi.fileName());
09754     item->setText(2, fi.suffix());
09755     QDateTime *fecha= new QDateTime(fi.created());
09756 
09757     if(fi.size()>1048575){
09758         tamanno=QString::number(fi.size()/1048576)+ " MiB";
09759     }else{
09760             if(fi.size()>1024){
09761 
09762                 tamanno=QString::number(fi.size()/1024)+" KiB";
09763             }else{
09764                 tamanno=QString::number(fi.size())+ " Bytes";
09765             }
09766     }
09767     item->setText(3, tamanno);
09768     item->setText(5, a->portada->RutaFotoFrontal());
09769     item->setText(4, fecha->toString(Qt::TextDate));
09770     QFont copiaFuente=this->ui->botonTexto->font();
09771     copiaFuente.setPointSize(this->controlador->getPuntosTexto());
09772     item->setFont(0, copiaFuente);
09773     item->setFont(1, copiaFuente);
09774     item->setFont(2, copiaFuente);
09775     item->setFont(3, copiaFuente);
09776     item->setFont(4, copiaFuente); 
09777     item->setFont(5, copiaFuente);
09778     delete fecha;
09779     //Ahora creamos las miniaturas
09780     QGraphicsView *previa;
09781     QGraphicsScene *escena;
09782     QImage *img;
09783     try{
09784         previa= new QGraphicsView();
09785         previa->setFixedSize(this->controlador->getWvisorImagenes(), this->controlador->getHvisorImagenes());
09786         escena = new QGraphicsScene();
09787         previa->setScene(escena);
09788         img = new QImage();
09789     }catch(std::exception& e){
09790                         Error *err=new Error(2, e.what(), this);
09791                         err->LanzarDialogo();
09792                         delete err;
09793                         exit(1);
09794     }
09795     try{
09796         img->load(a->portada->RutaFotoFrontal());
09797         if(img->isNull()){
09798             throw std::ios_base::failure(tr("No pudo previsualizarse la imagen.").toStdString());
09799         }
09800     }catch(std::exception& e){
09801                         Error *err=new Error(4, e.what(), this);
09802                         err->LanzarDialogo();
09803                         delete err;
09804                         exit(1);
09805     }
09806             
09807     QPixmap image=QPixmap::fromImage(*img);
09808     if(image.width()>=image.height()){
09809         previa->scene()->addPixmap(image.scaled(this->controlador->getWvisorImagenes(), this->controlador->getHvisorImagenes(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
09810     }else{
09811         previa->scene()->addPixmap(image.scaled(this->controlador->getWvisorImagenes(), this->controlador->getHvisorImagenes(), Qt::KeepAspectRatio, Qt::SmoothTransformation));
09812         
09813     }
09814     this->miniaturas.push_back(previa);
09815     ui->treeWidget->topLevelItem(0)->setSelected(true);
09816     ui->imagePreview->setStyleSheet("");
09817     delete img;
09818 }
09819 
09820 void FormPrincipal::SeleccionarFotoTrasera(){
09821 
09822     QString path = QDir::homePath();
09823     a->portada->LoadFotoTraseraRuta(QFileDialog::getOpenFileName(this, tr("Abrir Imagen"), path, tr("Todas las imágenes (*.png *.bmp *.jpg *.jpeg *.jpe *.tiff *.tif);; Imágenes: JPEG (*.jpg *.jpeg *.jpe);; Imágenes: BMP (*.bmp);; Imágenes: PNG (*.png);; Imágenes: TIFF (*.tiff *.tif)")));
09824     if(!a->portada->RutaFotoTrasera().isEmpty()){
09825         this->ui->selectorPlantilla->setDisabled(true);
09826         this->ui->action_Nuevo->setEnabled(true);
09827         this->ui->actionNuevoBoton->setEnabled(true);
09828     }
09829     this->elegidaTraseraPortada=true;
09830     if(this->elegidaFrontalPortada && this->a->portada->hayImagenTrasera()){
09831         if(this->elegidaTraseraPortada){
09832             if(this->elegidoFondoPortada && this->a->portada->ContieneTexto()){
09833                 if(this->elegidoTexto){
09834                     this->ui->botonPrueba->setEnabled(true);
09835                     
09836                 }else{
09837                     this->ui->botonPrueba->setDisabled(true);
09838                 }
09839                 
09840             }else{
09841                 if(this->elegidoFondoPortada){
09842                     this->ui->botonPrueba->setEnabled(true);
09843                 }else{
09844                     this->ui->botonPrueba->setDisabled(true);
09845                 }
09846             }
09847         }else{
09848             this->ui->botonPrueba->setDisabled(true);
09849         }
09850     }else{
09851         if(this->elegidaFrontalPortada){
09852             if(!this->a->portada->hayImagenTrasera()){
09853                 if(this->elegidoFondoPortada){
09854                     if(this->a->portada->ContieneTexto()){
09855                         if(this->elegidoTexto){
09856                             this->ui->botonPrueba->setEnabled(true);
09857                         }else{
09858                             this->ui->botonPrueba->setDisabled(true);
09859                         }
09860                         
09861                     }else{
09862                         this->ui->botonPrueba->setEnabled(true);
09863                     }
09864                 }else{
09865                     this->ui->botonPrueba->setDisabled(true);
09866                 }
09867             }else{
09868                 this->ui->botonPrueba->setDisabled(true);
09869             }
09870         }else{
09871             if(!this->a->portada->hayImagenFrontal()){
09872                 this->elegidaFrontalPortada=true;
09873                 if(this->elegidaFrontalPortada && this->elegidaTraseraPortada && this->elegidoFondoPortada && this->elegidoTexto && this->elegidaPlantilla){
09874                     this->ui->botonPrueba->setEnabled(true);
09875                 }
09876             }else{
09877                 this->ui->botonPrueba->setDisabled(true);
09878             }
09879         }
09880     }
09881      //Ahora la añadimos al selector
09882     QString tamanno;
09883     QFileInfo fi(a->portada->RutaFotoTrasera().toAscii());
09884     QTreeWidgetItem *item = new QTreeWidgetItem(ui->treeWidget);
09885    
09886     item->setText(1, fi.fileName());
09887     item->setText(2, fi.suffix());
09888     QDateTime *fecha= new QDateTime(fi.created());
09889 
09890     if(fi.size()>1048575){
09891         tamanno=QString::number(fi.size()/1048576)+ " MiB";
09892     }else{
09893             if(fi.size()>1024){
09894 
09895                 tamanno=QString::number(fi.size()/1024)+" KiB";
09896             }else{
09897                 tamanno=QString::number(fi.size())+ " Bytes";
09898             }
09899     }
09900     item->setText(3, tamanno);
09901     item->setText(5, a->portada->RutaFotoTrasera());
09902     item->setText(4, fecha->toString(Qt::TextDate));
09903     QFont copiaFuente=this->ui->botonTexto->font();
09904     copiaFuente.setPointSize(this->controlador->getPuntosTexto());
09905     item->setFont(0, copiaFuente);
09906     item->setFont(1, copiaFuente);
09907     item->setFont(2, copiaFuente);
09908     item->setFont(3, copiaFuente);
09909     item->setFont(4, copiaFuente); 
09910     item->setFont(5, copiaFuente);
09911     item->setText(0, "Imagen contraportada    ");
09912     delete fecha;
09913     //Ahora creamos las miniaturas
09914     QGraphicsView *previa;
09915     QGraphicsScene *escena;
09916     QImage *img;
09917     try{
09918         previa= new QGraphicsView();
09919         previa->setFixedSize(this->controlador->getWvisorImagenes(), this->controlador->getHvisorImagenes());
09920         escena = new QGraphicsScene();
09921         previa->setScene(escena);
09922         img = new QImage();
09923     }catch(std::exception& e){
09924                         Error *err=new Error(2, e.what(), this);
09925                         err->LanzarDialogo();
09926                         delete err;
09927                         exit(1);
09928     }
09929     try{
09930         img->load(a->portada->RutaFotoTrasera());
09931         if(img->isNull()){
09932             throw std::ios_base::failure(tr("No pudo previsualizarse la imagen.").toStdString());
09933         }
09934     }catch(std::exception& e){
09935                         Error *err=new Error(4, e.what(), this);
09936                         err->LanzarDialogo();
09937                         delete err;
09938                         exit(1);
09939     }
09940             
09941     QPixmap image=QPixmap::fromImage(*img);
09942     if(image.width()>=image.height()){
09943         previa->scene()->addPixmap(image.scaled(this->controlador->getWvisorImagenes(), this->controlador->getHvisorImagenes(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
09944     }else{
09945         previa->scene()->addPixmap(image.scaled(this->controlador->getWvisorImagenes(), this->controlador->getHvisorImagenes(), Qt::KeepAspectRatio, Qt::SmoothTransformation));
09946         
09947     }
09948     this->miniaturas.push_back(previa);
09949     ui->treeWidget->topLevelItem(0)->setSelected(true);
09950     ui->imagePreview->setStyleSheet("");
09951     delete img;
09952 }
09953 
09954 bool FormPrincipal::getCreadasPaginas(){
09955     return this->creadasPaginas;
09956 }
09957 
09958 void FormPrincipal::LanzarDialogPropiedades(){
09959     dialogPropiedades *dialog=new dialogPropiedades(this, this, this->controlador);
09960     dialog->exec();
09961     delete dialog;
09962     
09963 }
09964 
09965 void FormPrincipal::addFiles(bool wizard)
09966 {
09967     if(!wizard){
09968     QProgressBar *barra= new QProgressBar(this);
09969     int wAux=this->ui->statusBar->width();
09970     barra->setFixedWidth((294*this->controlador->getWPrincipal())/1014);
09971     barra->setFixedHeight((23*this->controlador->getHPrincipal())/705);
09972     this->ui->statusBar->setMaximumWidth(((986-270)*this->controlador->getWPrincipal())/1014);
09973       
09974     barra->move((this->controlador->getWPrincipal()*720)/1014, (this->controlador->getHPrincipal()*683)/705);
09975     
09976 
09977     QString path = QDir::homePath();
09978     
09979     
09980     QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Abrir Imágenes"), path, tr("Todas las imágenes (*.png *.bmp *.jpg *.jpeg *.jpe *.tiff *.tif);; Imágenes: JPEG (*.jpg *.jpeg *.jpe);; Imágenes: BMP (*.bmp);; Imágenes: PNG (*.png);; Imágenes: TIFF (*.tiff *.tif)"));
09981     this->ui->statusBar->setMaximumWidth(986-270);
09982     if(!fileNames.isEmpty()){
09983     barra->setRange(0, fileNames.count()+1);
09984     barra->setValue(0);
09985 
09986     for (int i = 0; i < fileNames.count(); i++) {
09987         barra->setValue(i+1);
09988         QString tamanno;
09989         QFileInfo fi(fileNames.at(i).toAscii());
09990         QTreeWidgetItem *item = new QTreeWidgetItem(ui->treeWidget);
09991         item->setCheckState(0, Qt::Unchecked);
09992         item->setText(1, fi.fileName());
09993         item->setText(2, fi.suffix());
09994         
09995         QDateTime *fecha= new QDateTime(fi.created());
09996 
09997         if(fi.size()>1048575){
09998             tamanno=QString::number(fi.size()/1048576)+ " MiB";
09999         }else{
10000             if(fi.size()>1024){
10001 
10002                 tamanno=QString::number(fi.size()/1024)+" KiB";
10003             }else{
10004                 tamanno=QString::number(fi.size())+ " Bytes";
10005             }
10006         }
10007         item->setText(3, tamanno);
10008         item->setText(5, fileNames.at(i));
10009         item->setText(4, fecha->toString(Qt::TextDate));
10010         QFont copiaFuente=this->ui->botonTexto->font();
10011         copiaFuente.setPointSize(this->controlador->getPuntosTexto());
10012         item->setFont(0, copiaFuente);
10013         item->setFont(1, copiaFuente);
10014         item->setFont(2, copiaFuente);
10015         item->setFont(3, copiaFuente);
10016         item->setFont(4, copiaFuente); 
10017         item->setFont(5, copiaFuente);
10018         delete fecha;
10019         //Ahora creamos las miniaturas
10020         QGraphicsView *previa;
10021         QGraphicsScene *escena;
10022         QImage *img;
10023         try{
10024         previa= new QGraphicsView();
10025         previa->setFixedSize(this->controlador->getWvisorImagenes(), this->controlador->getHvisorImagenes());
10026         escena = new QGraphicsScene();
10027         previa->setScene(escena);
10028         img = new QImage();
10029         }catch(std::exception& e){
10030                         Error *err=new Error(2, e.what(), this);
10031                         err->LanzarDialogo();
10032                         delete err;
10033                         exit(1);
10034         }
10035         try{
10036         img->load(fileNames.at(i));
10037         if(img->isNull()){
10038             throw std::ios_base::failure(tr("No pudo previsualizarse la imagen.").toStdString());
10039         }
10040         }catch(std::exception& e){
10041                         Error *err=new Error(4, e.what(), this);
10042                         err->LanzarDialogo();
10043                         delete err;
10044                         exit(1);
10045         }
10046             
10047         QPixmap image=QPixmap::fromImage(*img);
10048         if(image.width()>=image.height()){
10049         previa->scene()->addPixmap(image.scaled(this->controlador->getWvisorImagenes(), this->controlador->getHvisorImagenes(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
10050         }else{
10051             previa->scene()->addPixmap(image.scaled(this->controlador->getWvisorImagenes(), this->controlador->getHvisorImagenes(), Qt::KeepAspectRatio, Qt::SmoothTransformation));
10052         
10053         }
10054             this->miniaturas.push_back(previa);
10055             delete img;
10056     }  
10057     ui->treeWidget->setHeaderLabel("  ");
10058     ui->treeWidget->topLevelItem(0)->setSelected(true);
10059     ui->treeWidget->resizeColumnToContents(0);    
10060     barra->setValue(fileNames.count()+1);
10061     barra->close();
10062     }
10063     this->ui->statusBar->setMaximumWidth(wAux);
10064     delete barra;
10065     }else{ 
10066         
10067     QProgressBar *barra= new QProgressBar(this);
10068     int wAux=this->ui->statusBar->width();
10069     barra->setFixedWidth((294*this->controlador->getWPrincipal())/1014);
10070     barra->setFixedHeight((23*this->controlador->getHPrincipal())/705);
10071     this->ui->statusBar->setMaximumWidth(((986-270)*this->controlador->getWPrincipal())/1014);
10072       
10073     barra->move((this->controlador->getWPrincipal()*720)/1014, (this->controlador->getHPrincipal()*683)/705);
10074     
10075     
10076         
10077     QString path = QDir::homePath();
10078     
10079     
10080     QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Abrir Imágenes"), path, tr("Todas las imágenes (*.png *.bmp *.jpg *.jpeg *.jpe *.tiff *.tif);; Imágenes: JPEG (*.jpg *.jpeg *.jpe);; Imágenes: BMP (*.bmp);; Imágenes: PNG (*.png);; Imágenes: TIFF (*.tiff *.tif)"));
10081     this->ui->statusBar->setMaximumWidth(986-270);
10082     if(!fileNames.isEmpty()){
10083     barra->setRange(0, fileNames.count()+1);
10084     barra->setValue(0);
10085 
10086     for (int i = 0; i < fileNames.count(); i++) {
10087         barra->setValue(i+1);
10088         QString tamanno;
10089         QFileInfo fi(fileNames.at(i).toAscii());
10090         QTreeWidgetItem *item = new QTreeWidgetItem(this->fotos->ui->treeWidget);
10091         QTreeWidgetItem *item2 = new QTreeWidgetItem(this->ui->treeWidget);
10092         
10093         item->setCheckState(0, Qt::Unchecked);
10094         item->setText(1, fi.fileName());
10095         item->setText(2, fi.suffix());
10096         item2->setCheckState(0, Qt::Unchecked);
10097         item2->setText(1, fi.fileName());
10098         item2->setText(2, fi.suffix());
10099         QDateTime *fecha= new QDateTime(fi.created());
10100 
10101         if(fi.size()>1048575){
10102             tamanno=QString::number(fi.size()/1048576)+ " MiB";
10103         }else{
10104             if(fi.size()>1024){
10105 
10106                 tamanno=QString::number(fi.size()/1024)+" KiB";
10107             }else{
10108                 tamanno=QString::number(fi.size())+ " Bytes";
10109             }
10110         }
10111         item->setText(3, tamanno);
10112         item->setText(5, fileNames.at(i));
10113         item->setText(4, fecha->toString(Qt::TextDate));
10114         item2->setText(3, tamanno);
10115         item2->setText(5, fileNames.at(i));
10116         item2->setText(4, fecha->toString(Qt::TextDate));
10117         QFont copiaFuente=this->ui->botonTexto->font();
10118         copiaFuente.setPointSize(this->controlador->getPuntosTexto());
10119         item->setFont(0, copiaFuente);
10120         item->setFont(1, copiaFuente);
10121         item->setFont(2, copiaFuente);
10122         item->setFont(3, copiaFuente);
10123         item->setFont(4, copiaFuente); 
10124         item->setFont(5, copiaFuente);
10125         delete fecha;
10126         //Ahora creamos las miniaturas
10127         QGraphicsView *previa;
10128         QGraphicsScene *escena;
10129         QImage *img;
10130         try{
10131         previa= new QGraphicsView();
10132         previa->setFixedSize(this->controlador->getWvisorImagenes(), this->controlador->getHvisorImagenes());
10133         escena = new QGraphicsScene();
10134         previa->setScene(escena);
10135         img = new QImage();
10136         }catch(std::exception& e){
10137                         Error *err=new Error(2, e.what(), this);
10138                         err->LanzarDialogo();
10139                         delete err;
10140                         exit(1);
10141         }
10142         try{
10143         img->load(fileNames.at(i));
10144         if(img->isNull()){
10145             throw std::ios_base::failure(tr("No pudo previsualizarse la imagen.").toStdString());
10146         }
10147         }catch(std::exception& e){
10148                         Error *err=new Error(4, e.what(), this);
10149                         err->LanzarDialogo();
10150                         delete err;
10151                         exit(1);
10152         }
10153             
10154         QPixmap image=QPixmap::fromImage(*img);
10155         if(image.width()>= image.height()){
10156         previa->scene()->addPixmap(image.scaled(this->controlador->getWvisorImagenes(), this->controlador->getHvisorImagenes(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
10157         }else{
10158             previa->scene()->addPixmap(image.scaled(this->controlador->getWvisorImagenes(), this->controlador->getHvisorImagenes(), Qt::KeepAspectRatio, Qt::SmoothTransformation));
10159         
10160         }
10161             this->miniaturas.push_back(previa);
10162             delete img;
10163     }
10164        
10165     this->fotos->ui->treeWidget->topLevelItem(0)->setSelected(true);
10166      this->ui->treeWidget->topLevelItem(0)->setSelected(true);
10167         
10168     barra->setValue(fileNames.count()+1);
10169     barra->close();
10170     }
10171     this->ui->statusBar->setMaximumWidth(wAux);
10172     
10173     this->fotos->ui->imagePreview->setStyle(new QWindowsStyle);
10174     this->fotos->ui->imagePreview->setStyleSheet("");
10175     delete barra;
10176     } 
10177     this->ui->imagePreview->setStyleSheet("");
10178 }
10179 
10180 
10181 void FormPrincipal::checkAllItems(bool wizard)
10182 {
10183     if(!wizard){
10184     QTreeWidgetItemIterator it(ui->treeWidget);
10185     while (*it) {
10186         (*it)->setCheckState (0, Qt::Checked);
10187         ++it;
10188     }
10189     this->ui->pushUncheckAll->show();
10190     }else{
10191        QTreeWidgetItemIterator it(this->fotos->ui->treeWidget);
10192     while (*it) {
10193         (*it)->setCheckState (0, Qt::Checked);
10194         ++it;
10195     } 
10196     }
10197 }
10198 
10199 
10200 
10201 void FormPrincipal::uncheckItems(bool wizard)
10202 {
10203     if(!wizard){
10204     QTreeWidgetItemIterator it(ui->treeWidget);
10205     while(*it){
10206         (*it)->setCheckState (0, Qt::Unchecked);
10207         ++it;
10208     }
10209     this->ui->pushUncheckAll->hide();
10210     }else{
10211      QTreeWidgetItemIterator it(this->fotos->ui->treeWidget);
10212     while(*it){
10213         (*it)->setCheckState (0, Qt::Unchecked);
10214         ++it;
10215     }   
10216     }
10217 }
10218 
10219 
10220 void FormPrincipal::removeItems(bool wizard)
10221 {
10222     if(!wizard){
10223     static unsigned a;
10224     for (int i = ui->treeWidget->topLevelItemCount() - 1; i >= 0; i--){
10225         if((ui->treeWidget->topLevelItem(i))->checkState(0)==Qt::Checked){
10226             a=i;
10227             iAList.removeAt(i);
10228             std::vector<QGraphicsView*> aux;
10229             for(unsigned j=0; j<this->miniaturas.size(); j++){
10230                 int jj=j;
10231                 if(jj!=i){
10232                         aux.push_back(this->miniaturas.at(j));
10233                 }
10234             }
10235             while(!this->miniaturas.empty()){
10236                 this->miniaturas.pop_back();
10237             }
10238             for(unsigned y=0; y<aux.size(); y++){
10239                 this->miniaturas.push_back(aux.at(y));
10240             }
10241             ui->treeWidget->takeTopLevelItem(i);
10242         }
10243 
10244     }
10245     if(this->miniaturas.size()!=0){
10246     if(a==this->miniaturas.size()){
10247        QGraphicsView *copia;
10248        try{
10249        copia=new QGraphicsView(this->miniaturas[a-1]);
10250        copia=this->miniaturas[a-1];
10251        }catch(std::exception& e){
10252                         Error *err=new Error(1, e.what(), this);
10253                         err->LanzarDialogo();
10254                         delete err;
10255                         exit(1);
10256     }
10257             ui->imagePreview->setScene(copia->scene()); 
10258     }else{
10259     QGraphicsView *copia;
10260     try{
10261     copia=new QGraphicsView(this->miniaturas[a]);
10262     copia=this->miniaturas[a];
10263     }catch(std::exception& e){
10264                         Error *err=new Error(1, e.what(), this);
10265                         err->LanzarDialogo();
10266                         delete err;
10267                         exit(1);
10268     }
10269     ui->imagePreview->setScene(copia->scene());
10270     }
10271     }else{
10272         ui->imagePreview->scene()->clear();
10273         
10274     }
10275     this->ui->pushUncheckAll->hide();
10276     }else{
10277         static unsigned a;
10278     for (int i = this->fotos->ui->treeWidget->topLevelItemCount() - 1; i >= 0; i--){
10279         if((this->fotos->ui->treeWidget->topLevelItem(i))->checkState(0)==Qt::Checked){
10280             a=i;
10281             iAList.removeAt(i);
10282             std::vector<QGraphicsView*> aux;
10283             for(unsigned j=0; j<this->miniaturas.size(); j++){
10284                 int jj=j;
10285                 if(jj!=i){
10286                         aux.push_back(this->miniaturas.at(j));
10287                 }
10288             }
10289             while(!this->miniaturas.empty()){
10290                 this->miniaturas.pop_back();
10291             }
10292             for(unsigned y=0; y<aux.size(); y++){
10293                 this->miniaturas.push_back(aux.at(y));
10294             }
10295             this->fotos->ui->treeWidget->takeTopLevelItem(i);
10296         }
10297 
10298     }
10299     if(this->miniaturas.size()!=0){
10300     if(a==this->miniaturas.size()){
10301        QGraphicsView *copia;
10302        try{
10303        copia=new QGraphicsView(this->miniaturas[a-1]);
10304        copia=this->miniaturas[a-1];
10305        }catch(std::exception& e){
10306                         Error *err=new Error(1, e.what(), this);
10307                         err->LanzarDialogo();
10308                         delete err;
10309                         exit(1);
10310     }
10311             this->fotos->ui->imagePreview->setScene(copia->scene()); 
10312     }else{
10313     QGraphicsView *copia;
10314     try{
10315     copia=new QGraphicsView(this->miniaturas[a]);
10316     copia=this->miniaturas[a];
10317     }catch(std::exception& e){
10318                         Error *err=new Error(1, e.what(), this);
10319                         err->LanzarDialogo();
10320                         delete err;
10321                         exit(1);
10322     }
10323     this->fotos->ui->imagePreview->setScene(copia->scene());
10324     }
10325     }else{
10326         this->fotos->ui->imagePreview->scene()->clear();
10327         
10328     }
10329     }
10330 }
10331 
10332 
10333 void FormPrincipal::loadImagePreview(bool wizard)
10334 {
10335     if(!wizard){
10336         
10337     for (int i = ui->treeWidget->topLevelItemCount() - 1; i >= 0; i--){
10338         if((ui->treeWidget->topLevelItem(i))->isSelected()){
10339             QGraphicsView *copia;
10340             try{
10341             copia=new QGraphicsView(this->miniaturas[i]);
10342             copia=this->miniaturas[i];
10343             }catch(std::exception& e){
10344                         Error *err=new Error(1, e.what(), this);
10345                         err->LanzarDialogo();
10346                         delete err;
10347                         exit(1);
10348             }
10349             ui->imagePreview->setScene(copia->scene());
10350 
10351         }
10352     }
10353     this->ActivadoVisorImagenes=true;
10354     }else{
10355         for (int i = this->fotos->ui->treeWidget->topLevelItemCount() - 1; i >= 0; i--){
10356         if((this->fotos->ui->treeWidget->topLevelItem(i))->isSelected()){
10357             QGraphicsView *copia, *copia2;
10358             try{
10359             copia=new QGraphicsView(this->miniaturas[i]);
10360             copia=this->miniaturas[i];
10361             copia2=new QGraphicsView(this->miniaturas[i]);
10362             copia2=this->miniaturas[i];
10363             }catch(std::exception& e){
10364                         Error *err=new Error(1, e.what(), this);
10365                         err->LanzarDialogo();
10366                         delete err;
10367                         exit(1);
10368             }
10369             this->fotos->ui->imagePreview->setScene(copia->scene());
10370             this->ui->imagePreview->setScene(copia2->scene());
10371 
10372         }
10373     }
10374     this->ActivadoVisorImagenes=true;
10375     }
10376 }
10377 
10378 
10379 void FormPrincipal::CloseApp()
10380 {
10381     close();
10382 }
10383 
10384 
 Todo Clases Archivos Funciones Variables