Main Page   Compound List   File List   Compound Members   File Members  

Album Class Reference

#include <album.h>

List of all members.


Detailed Description

An album contains Subalbums.

Specific contents:

Definition at line 50 of file album.h.

Public Member Functions

 Album ()
 Sets default information.

 ~Album ()
 Frees Subalbums.

void setName (QString val)
 Sets the album name.

QString getName ()
 Gets the album name.

void setDescription (QString val)
 Sets the album description.

QString getDescription ()
 Gets the album description.

void setAuthor (QString val)
 Sets the album author.

QString getAuthor ()
 Gets the album author.

void setRepresentativeImages (QImage *val)
 Sets the representative image.

QPixmap * getRepresentativeImage (int size)
 Returns the representative image.

Subalbum * getFirstSubalbum ()
 Returns a pointer to the first Subalbum.

Subalbum * getLastSubalbum ()
 Returns a pointer to the last Subalbum.

void appendSubalbum (Subalbum *val)
 Appends subalbum to end of linked list.

void removeSubalbum (Subalbum *val)
 Removes a subalbum.

int getModificationYear ()
 Returns the last modified year.

int getModificationMonth ()
 Returns the last modified month.

int getModificationDay ()
 Returns the last modified day.

void updateModificationDate ()
 Updates the modification date to today's date.

void importFromDisk (LoadDialog *dialog, QString fileName)
 Imports album from XML format.

void exportToDisk (SaveDialog *dialog, QString dirName)
 Exports album in XML and HTML format, along with resized images.

void exportToDisk (SaveDialog *dialog, bool forceSave=false)
 Exports album in XML and HTML format, along with resized images, saves all files to the last saved directory, if none set returns.

bool prevSave ()
 Returns true if album previously saved to disk.

void syncSubalbumList (SubalbumPreviewWidget *item)
 Syncs subalbum ordering with front end gui ordering.

QString getSaveLocation ()
 Returns the current save location of all images.

int getNumSubalbums ()
 Returns number of subalbums.


Private Member Functions

void exportToXML (SaveDialog *dialog)
 Exports album to XML.

void exportToHTML (SaveDialog *dialog)
 Exports album to HTML.

void exportSublabumsToHTML (SaveDialog *dialog)
 Exports subalbums to HTML.

void exportTopLevelImages ()
 Exports top level images.

void exportSubalbumImages (SaveDialog *dialog, bool forceSave)
 Exports subalbum images.

void reorderSubalbumImages (SaveDialog *dialog)
 Checks if images need to be moved and does so if necessary.

void removeStagnantImages (SaveDialog *dialog)
 Removes old stagnant images caused when photos are removed from album or moved from one subalbum to another.


Private Attributes

QString name
 Short name for album.

QString description
 Longer description of album.

QString author
 Album Creator.

QPixmap * smallRepresentativeImage
 Representative images.

QPixmap * largeRepresentativeImage
Subalbum * firstSubalbum
 Pointer to first Subalbum.

Subalbum * lastSubalbum
 Pointer to last Subalbum.

int modificationYear
 Last modification year.

int modificationMonth
 Last modification month.

int modificationDay
 Last modification day.

int numSubalbums
 Number of subalbums.

int numLoadedSubalbums
 Number of loaded subalbums.

bool savedToDisk
 Set if album was loaded/has been saved to disk.

QString saveLocation
 Directory album saved to.


Constructor & Destructor Documentation

Album::Album  ) 
 

Sets default information.

Definition at line 43 of file album.cpp.

References author, description, firstSubalbum, IMAGE_PATH, largeRepresentativeImage, lastSubalbum, name, numLoadedSubalbums, numSubalbums, savedToDisk, saveLocation, smallRepresentativeImage, and updateModificationDate().

00044 {
00045   //set strings to default values
00046   name = "";
00047   description ="";
00048   author = "";
00049 
00050   //by default no representative image
00051   smallRepresentativeImage = new QPixmap( QString(IMAGE_PATH)+"notSpecified.png" );
00052   largeRepresentativeImage = NULL;
00053   
00054   //no Subalbums by default
00055   firstSubalbum = NULL;
00056   lastSubalbum = NULL;
00057 
00058   //set last modification date to today
00059   updateModificationDate();
00060   
00061   //no subalbums
00062   numSubalbums = 0;
00063   numLoadedSubalbums = 0;
00064   
00065   //not previously saved by default
00066   savedToDisk = false;
00067   
00068   //construct temp directory to save images to
00069   QDir rootDir( QDir::homeDirPath() );
00070   if(!rootDir.exists( ".albumShaper" ))
00071   {
00072     rootDir.mkdir( ".albumShaper" );
00073   }
00074   rootDir.cd( ".albumShaper" );
00075   if(!rootDir.exists( "tmp" ))
00076   {
00077     rootDir.mkdir( "tmp" );
00078   }
00079   saveLocation = QDir::homeDirPath() + "/.albumShaper/tmp";  
00080 }

Album::~Album  ) 
 

Frees Subalbums.

Definition at line 83 of file album.cpp.

References firstSubalbum, Subalbum::getNext(), largeRepresentativeImage, and smallRepresentativeImage.

00084 {
00085   //delete representative image
00086   delete smallRepresentativeImage;
00087   delete largeRepresentativeImage;
00088   
00089   //delete subalbums  
00090   Subalbum* current = firstSubalbum;
00091   Subalbum* temp;
00092   while(current != NULL)
00093   {
00094     temp = current->getNext();
00095     delete current;
00096     current = temp;
00097   }
00098 } 


Member Function Documentation

void Album::appendSubalbum Subalbum *  val  ) 
 

Appends subalbum to end of linked list.

Definition at line 194 of file album.cpp.

References firstSubalbum, lastSubalbum, numSubalbums, and Subalbum::setNext().

Referenced by SubalbumsWidget::createAction(), and importFromDisk().

00195 {
00196   numSubalbums++;
00197   
00198   //first subalbum
00199   if(firstSubalbum == NULL)
00200   {
00201     firstSubalbum = val;
00202     lastSubalbum = val;
00203   }
00204   //append to end of list
00205   else
00206   {
00207     lastSubalbum->setNext( val );
00208     lastSubalbum = val;
00209   }
00210 }

void Album::exportSubalbumImages SaveDialog *  dialog,
bool  forceSave
[private]
 

Exports subalbum images.

Definition at line 759 of file album.cpp.

References copyFile(), firstSubalbum, Subalbum::getFirst(), Photo::getImage(), Photo::getImageFilename(), Photo::getInitialPhotoNumber(), Photo::getInitialSubalbumNumber(), getMD5(), Photo::getNeedsSavingVal(), Subalbum::getNext(), Photo::getNext(), Photo::getSlideshowFilename(), SaveDialog::printMessage(), SaveDialog::printSubalbumPhoto(), saveLocation, Photo::setImageChecksum(), Photo::setImageFilename(), Photo::setNeedsSavingVal(), Photo::setSlideshowChecksum(), Photo::setSlideshowFilename(), Photo::setThumbnailChecksum(), and THUMBNAIL.

Referenced by exportToDisk().

00760 {  
00761   dialog->printMessage("Saving images");
00762 
00763   //iterate over all subalbums
00764   int subalbumNumber=0;
00765   Subalbum* currentSubalbum = firstSubalbum;
00766   while(currentSubalbum != NULL)
00767   {
00768     subalbumNumber++;    
00769     
00770     //iterate over all photos in this subalbum
00771     int photoNumber=0;    
00772     Photo* currentPhoto = currentSubalbum->getFirst();
00773     while(currentPhoto != NULL)
00774     {
00775       photoNumber++;
00776       dialog->printSubalbumPhoto( subalbumNumber, photoNumber );
00777       //---------------------------------------
00778       //if the current photo does not need to be saved then move on
00779       if( !forceSave && !currentPhoto->getNeedsSavingVal() )
00780       {
00781         currentPhoto = currentPhoto->getNext();
00782         continue;
00783       }
00784       //---------------------------------------
00785       //construct a QDir object for the tmp folder
00786       QDir rootDir;
00787       //---------------------------------------
00788       //get initial photo # and subalbum #, used for saving      
00789       int initPhotoNumber = currentPhoto->getInitialPhotoNumber();
00790       int initSubalbumNumber = currentPhoto->getInitialSubalbumNumber();
00791       //---------------------------------------
00792       //export thumbnail image
00793       QString fileName = QString(saveLocation + "/img/%1/%2_thumb.jpg" ).arg(initSubalbumNumber).arg(initPhotoNumber);
00794       currentPhoto->getImage(THUMBNAIL)->save(fileName, "JPEG", 100);
00795 
00796       //compute and store md5 for thumbnail     
00797       ifstream thumbnailFile(fileName.ascii());
00798       if(thumbnailFile.is_open())
00799       {
00800         currentPhoto->setThumbnailChecksum( getMD5(thumbnailFile) ); 
00801         thumbnailFile.close();
00802       }
00803       //---------------------------------------
00804       //export slideshow image
00805       QString oldName = currentPhoto->getSlideshowFilename();
00806       QString newName = QString(saveLocation + "/img/%1/%2_slideshow.jpg" ).arg(initSubalbumNumber).arg(initPhotoNumber);
00807 
00808       //if file has been modified move from current location to final location
00809       if( currentPhoto->getNeedsSavingVal() )
00810       {
00811         //attempt to rename file, if fails do explicit copy, then delete prev file
00812          if(!rootDir.rename( oldName, newName))
00813          {
00814            copyFile(oldName, newName);
00815            rootDir.remove(oldName);
00816          }
00817       }
00818       //If file has not been modified we must be doing a save-as and saving has been forced. In this case
00819       //COPY file from current location to final location, DON'T delete previous copy!!!
00820        else
00821        {
00822          copyFile(oldName, newName);
00823        }
00824              
00825       //compute and store md5 for slideshow image
00826       ifstream file(newName.ascii());
00827       if(file.is_open())
00828       {
00829         currentPhoto->setSlideshowChecksum( getMD5(file) ); 
00830         file.close();
00831       }
00832       //---------------------------------------
00833       //export full size image
00834       oldName = currentPhoto->getImageFilename();   
00835       newName = QString(saveLocation + "/img/%1/%2.jpg" ).arg(initSubalbumNumber).arg(initPhotoNumber);
00836       
00837       //if file has been modified move from current location to final location
00838       if( currentPhoto->getNeedsSavingVal() )
00839       {
00840         //attempt to rename file, if fails do explicit copy, then delete prev file
00841          if(!rootDir.rename( oldName, newName))
00842          {
00843            copyFile(oldName, newName);
00844            rootDir.remove(oldName);
00845          }
00846       }
00847       //If file has not been modified we must be doing a save-as and saving has been forced. In this case
00848       //COPY file from current location to final location, DON'T delete previous copy!!!
00849        else
00850        {
00851          copyFile(oldName, newName);
00852        }
00853             
00854       //compute and store md5 for image
00855       ifstream imageFile(newName.ascii());
00856       if(imageFile.is_open())
00857       {
00858         currentPhoto->setImageChecksum( getMD5(imageFile) ); 
00859         imageFile.close();
00860       }
00861       //---------------------------------------
00862       //set new storage locations of files
00863       currentPhoto->setImageFilename( QString(saveLocation + "/img/%1/%2.jpg").arg(initSubalbumNumber).arg(initPhotoNumber) );
00864       currentPhoto->setSlideshowFilename( QString(saveLocation + "/img/%1/%2_slideshow.jpg").arg(initSubalbumNumber).arg(initPhotoNumber) );
00865       //---------------------------------------
00866       //set image as not needing saving
00867       currentPhoto->setNeedsSavingVal(false);
00868       //---------------------------------------
00869       //move on to next photo in subalbum
00870       currentPhoto = currentPhoto->getNext();
00871       //---------------------------------------
00872     }
00873     //---------------------------------------
00874     //move on to next subalbum
00875     currentSubalbum = currentSubalbum->getNext();  
00876   }
00877 }

void Album::exportSublabumsToHTML SaveDialog *  dialog  )  [private]
 

Exports subalbums to HTML.

Definition at line 687 of file album.cpp.

References Subalbum::exportSlideshowHTML(), Subalbum::exportThumbnailHTML(), firstSubalbum, Subalbum::getNext(), SaveDialog::printSubalbumHTML(), and saveLocation.

Referenced by exportToDisk().

00688 {
00689   int n=0;
00690   Subalbum* current = firstSubalbum;
00691   while(current != NULL)
00692   {
00693     n++;    
00694     
00695     //print dialog message
00696     dialog->printSubalbumHTML( n );
00697     
00698     //export thumbnail album
00699     QString fileName = QString(saveLocation + "/subalbum_%1_thumbs.html") .arg(n);
00700     QFile* thumbHTML = new QFile(fileName);
00701     if(thumbHTML->open(IO_WriteOnly))
00702     {
00703       QTextStream stream( thumbHTML );
00704       current->exportThumbnailHTML( stream, n );
00705       thumbHTML->close(); 
00706     }
00707     
00708     //export slideshow
00709     fileName = QString(saveLocation + "/subalbum_%1_slideshow.html") .arg(n);
00710     QFile* slideshowHTML = new QFile(fileName);
00711     if(slideshowHTML->open(IO_WriteOnly))
00712     {
00713       QTextStream stream( slideshowHTML );
00714       current->exportSlideshowHTML( stream, n );
00715       slideshowHTML->close(); 
00716     }
00717     
00718     //move on to next subalbum
00719     current = current->getNext();  
00720   }  
00721 }

void Album::exportToDisk SaveDialog *  dialog,
bool  forceSave = false
 

Exports album in XML and HTML format, along with resized images, saves all files to the last saved directory, if none set returns.

Definition at line 443 of file album.cpp.

References exportSubalbumImages(), exportSublabumsToHTML(), exportToHTML(), exportTopLevelImages(), exportToXML(), numSubalbums, SaveDialog::printMessage(), removeStagnantImages(), reorderSubalbumImages(), savedToDisk, and saveLocation.

00444 {
00445   //------------------------------------------
00446   //create subdirs
00447   QDir localDir(saveLocation);
00448   //img dirs
00449   localDir.mkdir("img");
00450   //subalbum dirs
00451   localDir.setPath(saveLocation + "/img");
00452   int i;
00453   for(i=1; i <= numSubalbums; i++)
00454   {
00455     QString dirName = QString("%1") .arg(i);
00456     localDir.mkdir(dirName);
00457   }
00458   //------------------------------------------    
00459   //checks worked, go ahead with export
00460   exportSublabumsToHTML(dialog);
00461   exportTopLevelImages();
00462   exportSubalbumImages(dialog, forceSave);
00463   reorderSubalbumImages(dialog);
00464   removeStagnantImages(dialog);
00465   exportToXML(dialog);
00466   exportToHTML(dialog);
00467   //------------------------------------------
00468   //remove files from temp folder
00469   QDir tmpDir(QDir::homeDirPath() + "/.albumShaper/tmp" );
00470   QStringList strLst = tmpDir.entryList();
00471   QStringList::iterator it;
00472   for(it = strLst.begin(); it != strLst.end(); it++)
00473   {
00474       tmpDir.remove(*it);
00475   }
00476   //------------------------------------------
00477   //print done message
00478   savedToDisk = true;
00479   dialog->printMessage("Done!");
00480   //------------------------------------------
00481 }

void Album::exportToDisk SaveDialog *  dialog,
QString  dirName
 

Exports album in XML and HTML format, along with resized images.

Definition at line 437 of file album.cpp.

References saveLocation.

Referenced by TitleWidget::saveAlbum(), and TitleWidget::saveAsAlbum().

00438 {
00439   saveLocation = dirName;
00440   exportToDisk(dialog, true);
00441 }

void Album::exportToHTML SaveDialog *  dialog  )  [private]
 

Exports album to HTML.

Definition at line 524 of file album.cpp.

References author, description, firstSubalbum, Subalbum::getName(), Subalbum::getNext(), Subalbum::getRepresentativeImage(), getRepresentativeImage(), LARGE, largeRepresentativeImage, modificationDay, modificationMonth, modificationYear, name, SaveDialog::printMessage(), saveLocation, THUMBNAIL_WIDTH, and updateModificationDate().

Referenced by exportToDisk().

00525 {
00526   //print dialog message
00527   dialog->printMessage("Album HTML");
00528   
00529   //update modification date
00530   updateModificationDate();
00531   
00532   //create/open html file
00533   QFile* html = new QFile(saveLocation + "/Album.html");
00534   if(html->open(IO_WriteOnly))
00535   {
00536     QTextStream stream( html );
00537     stream << "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";    
00538     stream << "<html>\n";
00539     stream << "  <head>\n";
00540     stream << "    <style type=\"text/html\">\n";
00541     stream << "      <!--\n";
00542     stream << "      A{text-decoration:none}\n";
00543     stream << "      -->\n";
00544     stream << "    </style>\n";
00545     stream << "    <style type=\"text/css\">\n";
00546     stream << "     <!--\n";
00547     stream << "     h3 {font-size: 12pt; font-weight: bold; text-align: center}\n";
00548     stream << "     h4 {font-size: 10pt; font-weight: normal; text-align: center}\n";
00549     stream << "     h4.ital {font-size: 10pt; font-weight: normal; text-align: center}\n";
00550     stream << "      -->\n";
00551     stream << "    </style>\n";    
00552     stream << "    <title>" << name << "</title>\n";
00553     stream << "    <meta name=\"generator\" content=\"Album Shaper (c.) Will Stokes\">\n";
00554     stream << "  </head>\n";
00555     stream << "  <body>\n";
00556     
00557     if(getRepresentativeImage(LARGE) != NULL)
00558     {
00559       stream << "    <center>\n";
00560       stream << "      <img src=\"img/album.jpg\" alt=\"Representative Album Image\">\n";
00561       stream << "    </center>\n";
00562     }
00563     stream << "    <center>\n";
00564     stream << "      <table>\n";
00565     stream << "        <tr>\n";
00566     if(largeRepresentativeImage != NULL)
00567     {
00568       stream << "          <td width=\"" << largeRepresentativeImage->width() << "\">\n";
00569     }
00570     else    
00571     {
00572       stream << "          <td width=\"450\">\n";
00573     }
00574     stream << "            <h3>\n";
00575     stream << "              " << name << "\n";
00576     stream << "            </h3>\n";
00577     stream << "            <h4>\n";
00578     stream << "              " << description << "\n";
00579     stream << "            </h4>\n";
00580     stream << "          </td>\n";
00581     stream << "        </tr>\n";
00582     stream << "      </table>\n";
00583     stream << "    </center>\n";
00584     
00585     int subalbumNumber = 0;
00586     
00587     //write subalbum thumbnails
00588     Subalbum* current = firstSubalbum;
00589     if(current != NULL)
00590     {
00591       stream << "    <center>\n";
00592       stream << "      <table border=\"0\">\n";
00593       while(current != NULL)
00594       {
00595         Subalbum* backupCurrent = current;
00596         int backupNumber = subalbumNumber;
00597         
00598         //---------------------------------------
00599         //Print row of images
00600         //---------------------------------------
00601         int n = 3;
00602         stream << "        <tr>\n";
00603         while(current != NULL && n > 0)
00604         {
00605           n--;
00606           subalbumNumber++;          
00607           stream << "          <td valign=\"bottom\" width=\"" << THUMBNAIL_WIDTH << "\">\n";
00608           if(current->getRepresentativeImage(LARGE) != NULL )
00609           {
00610             stream << "            <center>\n";
00611             stream << "              <script type=\"text/javascript\" language=\"JavaScript\">\n";
00612             stream << "              <!-- HIDE FROM OLD BROWSERS\n";
00613             stream << "              document.write(\"<a href=\\\"subalbum_" << subalbumNumber << "_slideshow.html\\\">\")\n";
00614             stream << "              document.write(\"  <img alt=\\\"Subalbum " << subalbumNumber << "\\\" src=\\\"img/" << subalbumNumber << "_thumb.jpg\\\">\")\n";
00615             stream << "              document.write(\"</a>\")\n";
00616             stream << "              -->\n";
00617             stream << "              </script>\n";
00618             stream << "              <noscript>\n";
00619             stream << "                <a href=\"subalbum_" << subalbumNumber << "_thumbs.html\">\n";
00620             stream << "                  <img alt=\"Subalbum " << subalbumNumber << "\" src=\"img/" << subalbumNumber << "_thumb.jpg\">\n";
00621             stream << "                </a>\n";
00622             stream << "              </noscript>\n";
00623             stream << "            </center>\n";
00624           }
00625           stream << "          </td>\n";
00626           current = current->getNext();
00627         }
00628         while(n != 0 && subalbumNumber > 2)
00629         {
00630           stream << "          <td width=\"" << THUMBNAIL_WIDTH << "\"></td>\n";
00631           n--;
00632         }
00633         //---------------------------------------
00634         //Print row of image descriptions
00635         //---------------------------------------
00636         current = backupCurrent;
00637         subalbumNumber = backupNumber;
00638         n = 3;
00639         stream << "        <tr>\n";
00640         while(current != NULL && n > 0)
00641         {          
00642           subalbumNumber++;
00643           stream << "          <td valign=\"top\" width=\"" << THUMBNAIL_WIDTH << "\">\n";
00644           stream << "            <center>\n";
00645           stream << "              <script type=\"text/javascript\" language=\"JavaScript\">\n";
00646           stream << "              <!-- HIDE FROM OLD BROWSERS\n";
00647           stream << "              document.write(\"<a href=\\\"subalbum_" << subalbumNumber << "_slideshow.html\\\">\")\n";
00648           stream << "              document.write(\"  " << current->getName() << "\")\n";
00649           stream << "              document.write(\"</a>\")\n";
00650           stream << "              -->\n";
00651           stream << "              </script>\n";
00652           stream << "              <noscript>\n";
00653           stream << "                <a href=\"subalbum_" << subalbumNumber << "_thumbs.html\">\n";
00654           stream << "                  " << current->getName() << "\n";
00655           stream << "                </a>\n";
00656           stream << "              </noscript>\n";
00657           stream << "            </center>\n";
00658           stream << "          </td>\n";
00659           n--;
00660           current = current->getNext();
00661         }
00662         
00663         while(n != 0 && subalbumNumber > 2)
00664         {
00665           stream << "          <td></td>\n";
00666           n--;
00667         }
00668       }
00669       
00670       stream << "      </table>\n";
00671       stream << "    </center>\n";
00672     } //end if
00673   
00674     stream << "    <h4 class=\"ital\">\n";
00675     stream << "      (Generated for " << author << " on " << modificationMonth << "/" << modificationDay;
00676     stream << "/" << modificationYear << " by <a href=\"http://albumshaper.sourceforge.net\">Album Shaper</a>)\n";
00677     stream << "    </h4>\n";
00678     stream << "  </body>\n";
00679     stream << "</html>\n";
00680       
00681     html->close(); 
00682   }
00683   else
00684     cout << "error opening file!\n";
00685 }

void Album::exportTopLevelImages  )  [private]
 

Exports top level images.

Definition at line 723 of file album.cpp.

References firstSubalbum, Subalbum::getNext(), Subalbum::getRepresentativeImage(), getRepresentativeImage(), LARGE, and saveLocation.

Referenced by exportToDisk().

00724 {
00725   //if image set export it
00726   if(getRepresentativeImage(LARGE) != NULL)
00727   {
00728     getRepresentativeImage(LARGE)->save(saveLocation + "/img/album.jpg", "JPEG", 100);
00729   }
00730   //else make sure any previously set images are removed
00731   else
00732   {
00733     QDir rootDir(saveLocation + "/img/");
00734     rootDir.remove("album.jpg");
00735   }
00736   
00737   //export subalbum thumbs
00738   int n=0;
00739   Subalbum* current = firstSubalbum;
00740   while(current != NULL)
00741   {
00742     n++;
00743     //if subalbum has representative image export it
00744     if(current->getRepresentativeImage(LARGE) != NULL )
00745     {
00746       QString fileName = QString(saveLocation + "/img/%1_thumb.jpg" ).arg(n);
00747       current->getRepresentativeImage(LARGE)->save(fileName, "JPEG", 100);
00748     }
00749     //otherwise make sure anyprevious set images are removed
00750     else
00751     {
00752       QDir rootDir(saveLocation + "/img/");
00753       rootDir.remove( QString("%1_thumb.jpg").arg(n) );
00754     }
00755     current = current->getNext();
00756   }  
00757 }

void Album::exportToXML SaveDialog *  dialog  )  [private]
 

Exports album to XML.

Definition at line 483 of file album.cpp.

References author, description, Subalbum::exportToXML(), firstSubalbum, fixXMLString(), Subalbum::getNext(), modificationDay, modificationMonth, modificationYear, name, SaveDialog::printMessage(), saveLocation, and updateModificationDate().

Referenced by exportToDisk().

00484 {
00485   //print dialog message
00486   dialog->printMessage("XML Layout");
00487   
00488   //update modification date
00489   updateModificationDate();
00490   
00491   //create/open xml file
00492   QFile* xml = new QFile(saveLocation + "/Album.xml");
00493   if(xml->open(IO_WriteOnly))
00494   {
00495     QTextStream stream( xml );
00496    
00497     //write album information
00498     stream << "<album>\n";
00499     stream << "  <name>" << fixXMLString(name) << "</name>\n";
00500     stream << "  <description>" << fixXMLString(description) << "</description>\n";
00501     stream << "  <author>" << fixXMLString(author) << "</author>\n";  
00502     stream << "  <modified>\n";
00503     stream << "    <year>" << modificationYear << "</year>\n";
00504     stream << "    <month>" << modificationMonth << "</month>\n";
00505     stream << "    <day>" << modificationDay << "</day>\n";
00506     stream << "  </modified>\n";
00507    
00508     //write subalbums
00509     Subalbum* current = firstSubalbum;
00510     while(current != NULL)
00511     {
00512       current->exportToXML(stream);
00513       current = current->getNext();
00514     }
00515   
00516     //end album
00517     stream << "</album>\n";    
00518     xml->close(); 
00519   }
00520   else
00521     cout << "error opening file!\n";
00522 }

QString Album::getAuthor  ) 
 

Gets the album author.

Definition at line 131 of file album.cpp.

References author.

Referenced by TitleWidget::refresh().

00132 {
00133   return QString(author);
00134 }

QString Album::getDescription  ) 
 

Gets the album description.

Definition at line 119 of file album.cpp.

References description.

Referenced by TitleWidget::refresh().

00120 {
00121   return QString(description);
00122 }

Subalbum * Album::getFirstSubalbum  ) 
 

Returns a pointer to the first Subalbum.

Definition at line 183 of file album.cpp.

References firstSubalbum.

Referenced by SubalbumsWidget::refresh().

00184 {
00185   return firstSubalbum;
00186 }

Subalbum * Album::getLastSubalbum  ) 
 

Returns a pointer to the last Subalbum.

Definition at line 189 of file album.cpp.

References lastSubalbum.

00190 {
00191   return lastSubalbum;
00192 }

int Album::getModificationDay  ) 
 

Returns the last modified day.

Definition at line 260 of file album.cpp.

References modificationDay.

00261 {
00262   return modificationDay;
00263 }

int Album::getModificationMonth  ) 
 

Returns the last modified month.

Definition at line 254 of file album.cpp.

References modificationMonth.

00255 {
00256   return modificationMonth;
00257 }

int Album::getModificationYear  ) 
 

Returns the last modified year.

Definition at line 248 of file album.cpp.

References modificationYear.

00249 {
00250   return modificationYear;
00251 }

QString Album::getName  ) 
 

Gets the album name.

Definition at line 107 of file album.cpp.

References name.

Referenced by TitleWidget::refresh(), and TitleWidget::saveAsAlbum().

00108 {
00109   return QString(name);
00110 }

int Album::getNumSubalbums  ) 
 

Returns number of subalbums.

Definition at line 1123 of file album.cpp.

References numSubalbums.

Referenced by SubalbumsWidget::createAction().

01124 {
01125   return numSubalbums;
01126 }

QPixmap * Album::getRepresentativeImage int  size  ) 
 

Returns the representative image.

Definition at line 172 of file album.cpp.

References LARGE, largeRepresentativeImage, SMALL, and smallRepresentativeImage.

Referenced by exportToHTML(), exportTopLevelImages(), TitleWidget::refresh(), TitleWidget::setImageAction(), and TitleWidget::TitleWidget().

00173 {
00174   if(size == SMALL)
00175     return smallRepresentativeImage;
00176   else if(size == LARGE)
00177     return largeRepresentativeImage;
00178   else
00179     return NULL;
00180 }

QString Album::getSaveLocation  ) 
 

Returns the current save location of all images.

Definition at line 1118 of file album.cpp.

References saveLocation.

01119 {
01120   return saveLocation;
01121 }

void Album::importFromDisk LoadDialog *  dialog,
QString  fileName
 

Imports album from XML format.

Definition at line 284 of file album.cpp.

References appendSubalbum(), author, description, Subalbum::importFromDisk(), modificationDay, modificationMonth, modificationYear, name, numLoadedSubalbums, numSubalbums, LoadDialog::printMessage(), savedToDisk, saveLocation, and setRepresentativeImages().

Referenced by TitleWidget::loadAlbum().

00285 {
00286   dialog->printMessage("Parsing XML");
00287   
00288   //open file
00289   QFile albumFile( fileName );
00290   if( !albumFile.open( IO_ReadOnly ) )
00291   {
00292     cout << "Error! Unable to open file!\n";
00293     return;
00294   }
00295   
00296   //parse dom
00297   QDomDocument albumDom;
00298   if( !albumDom.setContent( &albumFile ) )
00299   {
00300     cout << "Error! Unable to construct DOM!\n";
00301     return;  
00302   }
00303 
00304   //close file
00305   albumFile.close();
00306 
00307   //get main directory all other files and subdirectories are in  
00308   QString rootDir = QFileInfo(albumFile).dirPath(TRUE);
00309   saveLocation = rootDir + "/img";
00310   
00311   
00312   //if representative image exists load
00313   QImage repImage(rootDir + "/img/album.jpg");
00314   if(!repImage.isNull())
00315   {
00316     setRepresentativeImages(&repImage);  
00317   }  
00318 
00319   int subalbumNum = 0;
00320   
00321   //get root node and start parsing DOM
00322   QDomElement root = albumDom.documentElement();
00323   QDomNode node = root.firstChild();
00324   QDomText val;  
00325   while( !node.isNull() )
00326   {
00327     //------------------------------------------------------------
00328     //album name
00329     if( node.isElement() && node.nodeName() == "name" )
00330     { 
00331       val = node.firstChild().toText();
00332       if(!val.isNull())
00333         name = val.nodeValue();
00334     }
00335     //------------------------------------------------------------
00336     //album description
00337     else if( node.isElement() && node.nodeName() == "description" )
00338     { 
00339       val = node.firstChild().toText();
00340       if(!val.isNull())
00341         description = val.nodeValue();
00342     }
00343     //------------------------------------------------------------
00344     //album author
00345     else if( node.isElement() && node.nodeName() == "author" )
00346     { 
00347       val = node.firstChild().toText();
00348       if(!val.isNull())
00349         author = val.nodeValue();
00350     }
00351     //------------------------------------------------------------
00352     //album modification date
00353     else if( node.isElement() && node.nodeName() == "modified" )
00354     {     
00355       QDomNode childNode = node.firstChild();
00356       bool ok;
00357       int intVal;
00358       while( !childNode.isNull() )
00359       {
00360         //------------------------------------------------------------
00361         if( childNode.isElement() && childNode.nodeName() == "year" )
00362         {
00363           val = childNode.firstChild().toText();
00364           if(!val.isNull())
00365           {  
00366             intVal = val.nodeValue().toInt( &ok );
00367             if(ok)
00368               modificationYear = intVal;
00369             else
00370               cout << "Error parsing modification year!\n";
00371           }
00372         }        
00373         //------------------------------------------------------------
00374         else if( childNode.isElement() && childNode.nodeName() == "month" )
00375         {
00376           val = childNode.firstChild().toText();
00377           if(!val.isNull())
00378           {
00379             intVal = val.nodeValue().toInt( &ok );
00380             if(ok)
00381               modificationMonth = intVal;
00382             else
00383               cout << "Error parsing modification month!\n";
00384           }
00385         }        
00386         //------------------------------------------------------------
00387         else if( childNode.isElement() && childNode.nodeName() == "day" )
00388         {
00389           val = childNode.firstChild().toText();
00390           if(!val.isNull())
00391           {
00392             intVal = val.nodeValue().toInt( &ok );
00393             if(ok)
00394               modificationDay = intVal;
00395             else
00396               cout << "Error parsing modification day!\n";
00397           }
00398         }        
00399         //------------------------------------------------------------
00400         //advance to next node   
00401         childNode = childNode.nextSibling();
00402         //------------------------------------------------------------
00403       }
00404     }
00405     //------------------------------------------------------------
00406     //subalbum
00407     else if( node.isElement() && node.nodeName() == "subalbum" )
00408     {
00409       //increase counter    
00410       subalbumNum++;
00411 
00412       //create new subalbum
00413       Subalbum* salbum = new Subalbum(this, numSubalbums+1);
00414       
00415       //populate it
00416       salbum->importFromDisk( &node, subalbumNum, dialog, (rootDir + "/") );
00417       
00418       //append it to list of subalbums
00419       appendSubalbum(salbum);
00420     }
00421     //------------------------------------------------------------
00422     //advance to next node   
00423     node = node.nextSibling();
00424     //------------------------------------------------------------
00425   }
00426 
00427   //reset number of loaded subalbums  
00428   numLoadedSubalbums = numSubalbums;
00429 
00430   dialog->printMessage("Done!");
00431    
00432   //save load directory name and loaded/saved bit
00433   saveLocation = rootDir;
00434   savedToDisk = true;
00435 }

bool Album::prevSave  ) 
 

Returns true if album previously saved to disk.

Definition at line 1088 of file album.cpp.

References savedToDisk.

Referenced by TitleWidget::saveAlbum().

01089 {
01090   return savedToDisk;
01091 }

void Album::removeStagnantImages SaveDialog *  dialog  )  [private]
 

Removes old stagnant images caused when photos are removed from album or moved from one subalbum to another.

Definition at line 1026 of file album.cpp.

References firstSubalbum, Subalbum::getNext(), Subalbum::getNumLoadedPhotos(), Subalbum::getNumPhotos(), numLoadedSubalbums, numSubalbums, SaveDialog::printMessage(), Subalbum::resetNumLoadedPhotos(), and saveLocation.

Referenced by exportToDisk().

01027 {
01028   dialog->printMessage("Removing stagnant images");
01029   QDir rootDir(saveLocation + "/img/");
01030   //---------------------------------
01031   //remove stagnant photos in existing subalbums
01032   int subalbumNumber=0;
01033   Subalbum* currentSubalbum = firstSubalbum;
01034   while(currentSubalbum != NULL)
01035   {
01036     subalbumNumber++;    
01037 
01038     int i;
01039     for(i=currentSubalbum->getNumPhotos() + 1;
01040         i <= currentSubalbum->getNumLoadedPhotos();
01041         i++)
01042     {
01043       QString thumbString = QString(saveLocation + "/img/%1/%2_thumb.jpg" ).arg(subalbumNumber).arg(i);
01044       QString slideshowString = QString(saveLocation + "/img/%1/%2_slideshow.jpg" ).arg(subalbumNumber).arg(i);
01045       QString imageString = QString(saveLocation + "/img/%1/%2.jpg" ).arg(subalbumNumber).arg(i);
01046       rootDir.remove(thumbString);
01047       rootDir.remove(slideshowString);
01048       rootDir.remove(imageString);
01049     }
01050     
01051     //reset number of loaded photos since old photos removed now
01052     currentSubalbum->resetNumLoadedPhotos();
01053     
01054     //move on to next subalbum
01055     currentSubalbum = currentSubalbum->getNext();  
01056   }
01057   //---------------------------------
01058   //remove stagnant subalbums and all their contents
01059   int i;
01060   for(i=numSubalbums+1; i<=numLoadedSubalbums; i++)
01061   {
01062     //get filelist for directory
01063     QDir imageDir(  QString(saveLocation + "/img/%1/").arg(i) );
01064     QStringList list = imageDir.entryList( QDir::Files );
01065     
01066     //remove each file in directory
01067     for ( QStringList::Iterator file = list.begin(); file != list.end(); ++file ) 
01068     {
01069       rootDir.remove( QString(saveLocation + "/img/%1/" + *file).arg(i) );
01070     }
01071     
01072     //remove directory
01073     rootDir.rmdir( QString("%1").arg(i) );
01074     
01075     //remove thumbnail image
01076     rootDir.remove( QString(saveLocation + "/img/%1_thumb.jpg").arg(i) );
01077     
01078     //remove slideshow and thumbnail html pages
01079     rootDir.remove( QString(saveLocation + "/subalbum_%1_thumbs.html").arg(i) );    
01080     rootDir.remove( QString(saveLocation + "/subalbum_%1_slideshow.html").arg(i) );        
01081   }
01082   
01083   //reset number of loaded subalbums since stagnant directories removed now
01084   numLoadedSubalbums = numSubalbums;
01085   //---------------------------------
01086 }  

void Album::removeSubalbum Subalbum *  val  ) 
 

Removes a subalbum.

Definition at line 212 of file album.cpp.

References firstSubalbum, Subalbum::getNext(), lastSubalbum, numSubalbums, and Subalbum::setNext().

Referenced by SubalbumsWidget::deleteAction().

00213 {
00214   //search through linked list and remove item
00215   Subalbum* prev = NULL;
00216   Subalbum* current = firstSubalbum;
00217   while(current != NULL)
00218   {
00219     //found it! remove it
00220     if(current == val)
00221     { 
00222       //update first pointer
00223       if(firstSubalbum == val)
00224         firstSubalbum = val->getNext();
00225       
00226       //update last pointer
00227       if(lastSubalbum == val) 
00228         lastSubalbum = prev;
00229 
00230       //update next pointer
00231       if(prev != NULL)
00232         prev->setNext( current->getNext() );
00233             
00234       //delete object
00235       delete val;
00236       val = NULL;
00237       numSubalbums--;
00238       return;
00239     }
00240     
00241     prev = current;
00242     current = current->getNext();
00243   }
00244 
00245 }

void Album::reorderSubalbumImages SaveDialog *  dialog  )  [private]
 

Checks if images need to be moved and does so if necessary.

Definition at line 879 of file album.cpp.

References firstSubalbum, Subalbum::getFirst(), Photo::getInitialPhotoNumber(), Photo::getInitialSubalbumNumber(), Subalbum::getNext(), Photo::getNext(), SaveDialog::printMessage(), SaveDialog::printSubalbumPhoto(), saveLocation, Photo::setInitialPhotoNumber(), and Photo::setInitialSubalbumNumber().

Referenced by exportToDisk().

00880 {
00881   //--------------------------------------------------------
00882   //--------------------------------------------------------
00883   //first pass over all photos, those whose initial and current numbers don't match up
00884   //rename slightly so we don't overwrte them the second time around
00885   //--------------------------------------------------------
00886   //--------------------------------------------------------
00887   dialog->printMessage("Reordering images (pass 1)");
00888   
00889   //iterate over all subalbums
00890   int subalbumNumber=0;
00891   Subalbum* currentSubalbum = firstSubalbum;
00892   while(currentSubalbum != NULL)
00893   {
00894     subalbumNumber++;    
00895     
00896     //iterate over all photos in this subalbum
00897     int photoNumber=0;    
00898     Photo* currentPhoto = currentSubalbum->getFirst();
00899     while(currentPhoto != NULL)
00900     {
00901       photoNumber++;
00902       dialog->printSubalbumPhoto( subalbumNumber, photoNumber );
00903       //---------------------------------------
00904       //get initial photo # and subalbum #, used for checks and moving
00905       int initPhotoNumber = currentPhoto->getInitialPhotoNumber();
00906       int initSubalbumNumber = currentPhoto->getInitialSubalbumNumber();
00907       //---------------------------------------
00908       //if the current photo has not moved then move on
00909       if( initPhotoNumber == photoNumber &&
00910           initSubalbumNumber == subalbumNumber)
00911       {
00912         currentPhoto = currentPhoto->getNext();
00913         continue;
00914       }
00915       //---------------------------------------
00916       //rename full image, slideshow image, and thumbnail image     
00917       QDir rootDir;
00918       QString oldName = QString(saveLocation + "/img/%1/%2.jpg" ).arg(initSubalbumNumber).arg(initPhotoNumber);
00919       QString newName = QString(saveLocation + "/img/%1/%2_moved.jpg" ).arg(initSubalbumNumber).arg(initPhotoNumber);     
00920       if(!rootDir.rename( oldName, newName))
00921       {
00922         QImage(oldName).save(newName, "JPEG", 100);
00923         rootDir.remove( oldName );
00924       }
00925       //-----
00926       oldName = QString(saveLocation + "/img/%1/%2_slideshow.jpg" ).arg(initSubalbumNumber).arg(initPhotoNumber);
00927       newName = QString(saveLocation + "/img/%1/%2_slideshow_moved.jpg" ).arg(initSubalbumNumber).arg(initPhotoNumber);      
00928       if(!rootDir.rename( oldName, newName))
00929       {
00930         QImage(oldName).save(newName, "JPEG", 100);
00931         rootDir.remove( oldName );
00932       }
00933       //-----
00934       oldName = QString(saveLocation + "/img/%1/%2_thumb.jpg" ).arg(initSubalbumNumber).arg(initPhotoNumber);
00935       newName = QString(saveLocation + "/img/%1/%2_thumb_moved.jpg" ).arg(initSubalbumNumber).arg(initPhotoNumber);      
00936       if(!rootDir.rename( oldName, newName))
00937       {
00938         QImage(oldName).save(newName, "JPEG", 100);
00939         rootDir.remove( oldName );
00940       }
00941       //---------------------------------------
00942       //move on to next photo in subalbum
00943       currentPhoto = currentPhoto->getNext();
00944       //---------------------------------------
00945     }
00946     //---------------------------------------
00947     //move on to next subalbum
00948     currentSubalbum = currentSubalbum->getNext();  
00949   }
00950 
00951   //--------------------------------------------------------
00952   //--------------------------------------------------------
00953   //second pass over all photos, those whose initial and current numbers don't match up
00954   //rename to their final names and reset initial photo and subalbum numbers
00955   //--------------------------------------------------------
00956   //--------------------------------------------------------
00957   dialog->printMessage("Reordering images (pass 2)");
00958   
00959   //iterate over all subalbums
00960   subalbumNumber=0;
00961   currentSubalbum = firstSubalbum;
00962   while(currentSubalbum != NULL)
00963   {
00964     subalbumNumber++;    
00965     
00966     //iterate over all photos in this subalbum
00967     int photoNumber=0;    
00968     Photo* currentPhoto = currentSubalbum->getFirst();
00969     while(currentPhoto != NULL)
00970     {
00971       photoNumber++;
00972       dialog->printSubalbumPhoto( subalbumNumber, photoNumber );
00973       //---------------------------------------
00974       //get initial photo # and subalbum #, used for checks and moving
00975       int initPhotoNumber = currentPhoto->getInitialPhotoNumber();
00976       int initSubalbumNumber = currentPhoto->getInitialSubalbumNumber();
00977       //---------------------------------------
00978       //if the current photo has not moved then move on
00979       if( initPhotoNumber == photoNumber &&
00980           initSubalbumNumber == subalbumNumber)
00981       {
00982         currentPhoto = currentPhoto->getNext();
00983         continue;
00984       }
00985       //---------------------------------------
00986       //rename full image, slideshow image, and thumbnail image to their final names
00987       QDir rootDir;
00988       QString oldName = QString(saveLocation + "/img/%1/%2_moved.jpg" ).arg(initSubalbumNumber).arg(initPhotoNumber);
00989       QString newName = QString(saveLocation + "/img/%1/%2.jpg" ).arg(subalbumNumber).arg(photoNumber);     
00990       if(!rootDir.rename( oldName, newName))
00991       {
00992         QImage(oldName).save(newName, "JPEG", 100);
00993         rootDir.remove( oldName );
00994       }
00995       //-----
00996       oldName = QString(saveLocation + "/img/%1/%2_slideshow_moved.jpg" ).arg(initSubalbumNumber).arg(initPhotoNumber);
00997       newName = QString(saveLocation + "/img/%1/%2_slideshow.jpg" ).arg(subalbumNumber).arg(photoNumber);      
00998       if(!rootDir.rename( oldName, newName))
00999       {
01000         QImage(oldName).save(newName, "JPEG", 100);
01001         rootDir.remove( oldName );
01002       }
01003       //-----
01004       oldName = QString(saveLocation + "/img/%1/%2_thumb_moved.jpg" ).arg(initSubalbumNumber).arg(initPhotoNumber);
01005       newName = QString(saveLocation + "/img/%1/%2_thumb.jpg" ).arg(subalbumNumber).arg(photoNumber);      
01006       if(!rootDir.rename( oldName, newName))
01007       {
01008         QImage(oldName).save(newName, "JPEG", 100);
01009         rootDir.remove( oldName );
01010       }
01011       //---------------------------------------
01012       //reset initial photo and subalbum numbers
01013       currentPhoto->setInitialPhotoNumber(photoNumber);
01014       currentPhoto->setInitialSubalbumNumber(subalbumNumber);
01015       //---------------------------------------
01016       //move on to next photo in subalbum
01017       currentPhoto = currentPhoto->getNext();
01018       //---------------------------------------
01019     }
01020     //---------------------------------------
01021     //move on to next subalbum
01022     currentSubalbum = currentSubalbum->getNext();  
01023   }
01024 }

void Album::setAuthor QString  val  ) 
 

Sets the album author.

Definition at line 125 of file album.cpp.

References author.

Referenced by TitleWidget::updateAuthor().

00126 {
00127   author = val;
00128 }

void Album::setDescription QString  val  ) 
 

Sets the album description.

Definition at line 113 of file album.cpp.

References description.

Referenced by TitleWidget::updateDescription().

00114 {
00115   description = val;
00116 }

void Album::setName QString  val  ) 
 

Sets the album name.

Definition at line 101 of file album.cpp.

References name.

Referenced by TitleWidget::updateName().

00102 {
00103   name = val;
00104 }

void Album::setRepresentativeImages QImage *  val  ) 
 

Sets the representative image.

Definition at line 137 of file album.cpp.

References largeRepresentativeImage, resizeImage(), and smallRepresentativeImage.

Referenced by importFromDisk(), and TitleWidget::setImageAction().

00138 {
00139   //---------------------------------------------------------    
00140   //delete representative images
00141   delete smallRepresentativeImage;
00142   delete largeRepresentativeImage;
00143   //---------------------------------------------------------    
00144   //compute representative image sizes
00145   int smallRepWidth = 0;
00146   int smallRepHeight = 0;
00147   int largeRepWidth = 0;
00148   int largeRepHeight = 0;
00149   resizeImage( rawImage->width(), rawImage->height(),
00150                107, 80,
00151                smallRepWidth, smallRepHeight);
00152   resizeImage( rawImage->width(), rawImage->height(),
00153                500, 320,
00154                largeRepWidth, largeRepHeight);
00155   //---------------------------------------------------------    
00156   //create various representative images
00157   //---------------------------------------------------------    
00158   //copy and scale small version
00159   QImage thumbnailSmall = rawImage->smoothScale( smallRepWidth, smallRepHeight );
00160   thumbnailSmall.setAlphaBuffer(true);
00161   smallRepresentativeImage = new QPixmap( smallRepWidth, smallRepHeight );
00162   smallRepresentativeImage->convertFromImage( thumbnailSmall );  
00163 
00164   //copy and scale large version
00165   QImage thumbnailLarge = rawImage->smoothScale( largeRepWidth, largeRepHeight );
00166   thumbnailLarge.setAlphaBuffer(true);
00167   largeRepresentativeImage = new QPixmap( largeRepWidth, largeRepHeight );
00168   largeRepresentativeImage->convertFromImage( thumbnailLarge );  
00169 }

void Album::syncSubalbumList SubalbumPreviewWidget *  item  ) 
 

Syncs subalbum ordering with front end gui ordering.

Definition at line 1093 of file album.cpp.

References firstSubalbum, SubalbumPreviewWidget::getSubalbum(), lastSubalbum, and Subalbum::setNext().

Referenced by SubalbumsWidget::reorder().

01094 {
01095   //base case, no items
01096   if(item == NULL)
01097   {
01098     firstSubalbum = NULL;
01099     lastSubalbum = NULL;
01100     return;
01101   }
01102   
01103   //set first and last pointers
01104   firstSubalbum = item->getSubalbum();
01105   firstSubalbum->setNext(NULL);
01106   lastSubalbum = firstSubalbum;
01107     
01108   //set all next pointers
01109   while(item->nextItem() != NULL)
01110   {
01111     item->getSubalbum()->setNext( ((SubalbumPreviewWidget*)item->nextItem())->getSubalbum() );
01112     item = (SubalbumPreviewWidget*)item->nextItem();
01113     lastSubalbum = item->getSubalbum();
01114     lastSubalbum->setNext(NULL);
01115   }
01116 }

void Album::updateModificationDate  ) 
 

Updates the modification date to today's date.

Definition at line 266 of file album.cpp.

References modificationDay, modificationMonth, and modificationYear.

Referenced by Album(), exportToHTML(), and exportToXML().

00267 {
00268   //set last modification date to today
00269   struct tm *newtime;
00270   time_t aclock;
00271 
00272   //get time in seconds
00273   time( &aclock ); 
00274 
00275   //convert to tm form
00276   newtime = localtime( &aclock );
00277 
00278   //set year, month, and day
00279   modificationYear = newtime->tm_year + 1900;
00280   modificationMonth = newtime->tm_mon + 1;
00281   modificationDay = newtime->tm_mday;
00282 }


Member Data Documentation

QString Album::author [private]
 

Album Creator.

Definition at line 162 of file album.h.

Referenced by Album(), exportToHTML(), exportToXML(), getAuthor(), importFromDisk(), and setAuthor().

QString Album::description [private]
 

Longer description of album.

Definition at line 159 of file album.h.

Referenced by Album(), exportToHTML(), exportToXML(), getDescription(), importFromDisk(), and setDescription().

Subalbum* Album::firstSubalbum [private]
 

Pointer to first Subalbum.

Definition at line 169 of file album.h.

Referenced by Album(), appendSubalbum(), exportSubalbumImages(), exportSublabumsToHTML(), exportToHTML(), exportTopLevelImages(), exportToXML(), getFirstSubalbum(), removeStagnantImages(), removeSubalbum(), reorderSubalbumImages(), syncSubalbumList(), and ~Album().

QPixmap* Album::largeRepresentativeImage [private]
 

Definition at line 166 of file album.h.

Referenced by Album(), exportToHTML(), getRepresentativeImage(), setRepresentativeImages(), and ~Album().

Subalbum* Album::lastSubalbum [private]
 

Pointer to last Subalbum.

Definition at line 172 of file album.h.

Referenced by Album(), appendSubalbum(), getLastSubalbum(), removeSubalbum(), and syncSubalbumList().

int Album::modificationDay [private]
 

Last modification day.

Definition at line 181 of file album.h.

Referenced by exportToHTML(), exportToXML(), getModificationDay(), importFromDisk(), and updateModificationDate().

int Album::modificationMonth [private]
 

Last modification month.

Definition at line 178 of file album.h.

Referenced by exportToHTML(), exportToXML(), getModificationMonth(), importFromDisk(), and updateModificationDate().

int Album::modificationYear [private]
 

Last modification year.

Definition at line 175 of file album.h.

Referenced by exportToHTML(), exportToXML(), getModificationYear(), importFromDisk(), and updateModificationDate().

QString Album::name [private]
 

Short name for album.

Definition at line 156 of file album.h.

Referenced by Album(), exportToHTML(), exportToXML(), getName(), importFromDisk(), and setName().

int Album::numLoadedSubalbums [private]
 

Number of loaded subalbums.

Definition at line 187 of file album.h.

Referenced by Album(), importFromDisk(), and removeStagnantImages().

int Album::numSubalbums [private]
 

Number of subalbums.

Definition at line 184 of file album.h.

Referenced by Album(), appendSubalbum(), exportToDisk(), getNumSubalbums(), importFromDisk(), removeStagnantImages(), and removeSubalbum().

bool Album::savedToDisk [private]
 

Set if album was loaded/has been saved to disk.

Definition at line 190 of file album.h.

Referenced by Album(), exportToDisk(), importFromDisk(), and prevSave().

QString Album::saveLocation [private]
 

Directory album saved to.

Definition at line 193 of file album.h.

Referenced by Album(), exportSubalbumImages(), exportSublabumsToHTML(), exportToDisk(), exportToHTML(), exportTopLevelImages(), exportToXML(), getSaveLocation(), importFromDisk(), removeStagnantImages(), and reorderSubalbumImages().

QPixmap* Album::smallRepresentativeImage [private]
 

Representative images.

Definition at line 165 of file album.h.

Referenced by Album(), getRepresentativeImage(), setRepresentativeImages(), and ~Album().


The documentation for this class was generated from the following files:
Generated on Tue Jun 10 23:41:22 2003 for AlbumShaper by doxygen 1.3.1