![]() |
OpenAlbum 1.0.b
|
00001 #include <string> 00002 #include "parser.h" 00003 #include <QString> 00004 #include <QGraphicsView> 00005 #include "Portada.h" 00006 #include "Pagina.h" 00007 #include "album.h" 00008 #include "error.h" 00009 #include <QDateTime> 00010 #include <algorithm> 00011 #include <QWidget> 00012 00013 Album::Album(QWidget* parent_): parent(parent_){ 00014 this->portada=new Portada(0, 0, this->parent); 00015 } 00016 00017 Album::~Album(){ 00018 for(unsigned i=0; i < this->paginas.size(); i++){ 00019 delete this->paginas[i]; 00020 } 00021 this->paginas.clear(); 00022 delete this->portada; 00023 } 00024 00025 void Album::OrdenarPersonalizado(std::vector<ImagenInfo> images){ 00026 ResetImagenes(); 00027 try{ 00028 for(unsigned contad=0; contad<images.size(); contad++){ 00029 imagenes.push_back(images[contad]); 00030 00031 } 00032 }catch(std::exception& e){ 00033 Error *err=new Error(1, e.what(), this->parent); 00034 err->LanzarDialogo(); 00035 delete err; 00036 exit(1); 00037 } 00038 00039 } 00040 00041 void Album::OrdenarAlfabeticamente(){ 00042 try{ 00043 //Creamos un vector auxiliar para almacenar solo los nombres y ordenarlos 00044 std::vector<std::string> auxiliar; 00045 //Creamos un segundo vector auxiliar para mantener una copia del vector de imágenes una vez lo borremos del álbum 00046 std::vector<ImagenInfo> auxiliar2; 00047 for (unsigned ittres = 0; ittres < this->GetVectorImagenes().size(); ittres++) { 00048 //Llenamos el vector auxiliar, solo con cadenas 00049 auxiliar.push_back(this->GetVectorImagenes()[ittres].nombre.toStdString()); 00050 //Llenamos el segundo vector auxiliar con una copia del vector de imágenes 00051 auxiliar2.push_back(this->GetVectorImagenes()[ittres]); 00052 } 00053 00054 //Ordenamos alfabeticamente el vector auxiliar que contiene solo los nombres 00055 sort(auxiliar.begin(), auxiliar.end()); 00056 //Limpiamos el vector de imágenes, para poder restaurarlo ordenado 00057 this->ResetImagenes(); 00058 00059 //Recorremos el vector auxiliar de nombres ya ordenado y vamos insertando las imágenes cuyo nombre coincida 00060 for (unsigned ittres = 0; ittres < auxiliar.size(); ittres++) { 00061 for (unsigned itcuat=0; itcuat < auxiliar.size(); itcuat++){ 00062 if(auxiliar[ittres]==auxiliar2[itcuat].nombre.toStdString()){ 00063 this->InsertarFoto(auxiliar2[itcuat].nombre, auxiliar2[itcuat].fecha, auxiliar2[itcuat].ruta); 00064 } 00065 } 00066 00067 } 00068 00069 //Eliminamos espacio ocupado por los vectores auxiliares 00070 auxiliar.clear(); 00071 auxiliar2.clear(); 00072 }catch(std::exception& e){ 00073 Error *err=new Error(1, e.what(), this->parent); 00074 err->LanzarDialogo(); 00075 delete err; 00076 exit(1); 00077 } 00078 00079 } 00080 00081 void Album::OrdenarFechasCreciente(){ 00082 try{ 00083 // Algoritmo de ordenación de fechas creciente 00084 for(unsigned i=0;i<imagenes.size()-1;i++) // Hacer N-1 pasadas. 00085 { 00086 for(unsigned j=0;j<imagenes.size()-i-1;j++) // Mirar los N-i-1 pares. 00087 { 00088 if(imagenes[j+1].fecha < imagenes[j].fecha) // Si el elemento j+1 es menor que el elemento j: 00089 { 00090 ImagenInfo aux=imagenes[j+1]; // Se intercambian los elementos 00091 imagenes[j+1]=imagenes[j]; // de las posiciones j y j+1 00092 imagenes[j]=aux; // usando una variable auxiliar. 00093 } 00094 } 00095 } 00096 00097 }catch(std::exception& e){ 00098 Error *err=new Error(1, e.what(), this->parent); 00099 err->LanzarDialogo(); 00100 delete err; 00101 exit(1); 00102 } 00103 } 00104 00105 void Album::OrdenarFechasDecreciente(){ 00106 try{ 00107 // Algoritmo de ordenación de fechas creciente 00108 for(unsigned i=0;i<imagenes.size()-1;i++) // Hacer N-1 pasadas. 00109 { 00110 for(unsigned j=0;j<imagenes.size()-i-1;j++) // Mirar los N-i-1 pares. 00111 { 00112 if(imagenes[j+1].fecha > imagenes[j].fecha) // Si el elemento j+1 es menor que el elemento j: 00113 { 00114 ImagenInfo aux=imagenes[j+1]; // Se intercambian los elementos 00115 imagenes[j+1]=imagenes[j]; // de las posiciones j y j+1 00116 imagenes[j]=aux; // usando una variable auxiliar. 00117 } 00118 } 00119 } 00120 00121 }catch(std::exception& e){ 00122 Error *err=new Error(1, e.what(), this->parent); 00123 err->LanzarDialogo(); 00124 delete err; 00125 exit(1); 00126 } 00127 } 00128 00129 void Album::InsertarFoto(QString nom, QDateTime fech, QString rut){ 00130 ImagenInfo im; 00131 im.fecha=fech; 00132 im.nombre=nom; 00133 im.ruta=rut; 00134 imagenes.push_back(im); 00135 } 00136 00137 std::vector<ImagenInfo> Album::GetVectorImagenes(){ 00138 return imagenes; 00139 } 00140 00141 ImagenInfo Album::GetImagen(int i){ 00142 try{ 00143 return imagenes.at(i); 00144 }catch(std::exception& e){ 00145 Error *err=new Error(1, e.what(), this->parent); 00146 err->LanzarDialogo(); 00147 delete err; 00148 exit(1); 00149 } 00150 } 00151 00152 void Album::ResetImagenes(){ 00153 imagenes.erase(imagenes.begin(), imagenes.end()); 00154 } 00155 00156 Pagina* Album::GetPagina(unsigned i){ 00157 try{ 00158 return paginas.at(i); 00159 }catch(std::exception& e){ 00160 Error *err=new Error(1, e.what(), this->parent); 00161 err->LanzarDialogo(); 00162 delete err; 00163 exit(1); 00164 } 00165 } 00166