OpenAlbum 1.0.b

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

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 
 Todo Clases Archivos Funciones Variables