About Class Reference

#include <about.h>

Inheritance diagram for About:

Inheritance graph
[legend]
Collaboration diagram for About:

Collaboration graph
[legend]

List of all members.


Detailed Description

About window widget.

Definition at line 33 of file about.h.


Signals

void closed ()

Public Member Functions

 About (int mode, QWidget *parent=0, const char *name=0)
 ~About ()

Private Slots

void fileFetched (bool error)
void reject ()

Private Member Functions

void closeEvent (QCloseEvent *e)

Private Attributes

QGridLayout * grid
QMovie * albumShaperAgingImage
QLabelalbumShaperLogo
QLabelprogDesc
QLabelprogURL
QTabWidget * tabWidget
QTextBrowsercredits
QTextBrowserhistory
QTextBrowsernewImprovements
QTextBrowserupcomingFeatures
QPushButton * closeButton
 Close button.
QStringList * releases
QHttp http
int getMode
int displayMode

Constructor & Destructor Documentation

About::About ( int  mode,
QWidget parent = 0,
const char *  name = 0 
)

Definition at line 46 of file about.cpp.

References ALBUMSHAPER_VERSION, albumShaperLogo, closeButton, credits, DEFAULT_HEIGHT, DEFAULT_WIDTH, displayMode, fileFetched(), GET_RELEASES, getMode, grid, history, http, IMAGE_PATH, progDesc, progURL, releases, tabWidget, TEXT_PATH, UNSET, and WIDGET_SPACING.

00046                                                            :  QDialog(parent,name)
00047 {
00048   displayMode = mode;
00049   //--------------------------------------------------------------
00050   QColor white(255, 255, 255);
00051   QColor darkBlue(35, 75, 139);
00052   QColor black(0, 0, 0);
00053   //--------------------------------------------------------------
00054   //by default not getting anything
00055   getMode = UNSET;
00056   //--
00057   //set window title
00058   setCaption( tr("About Album Shaper"));
00059   //--
00060   //application logo
00061   QFrame* logoFrame = new QFrame( this );
00062   logoFrame->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Fixed );
00063   albumShaperLogo = new QLabel( logoFrame );
00064   albumShaperLogo->setPixmap( QPixmap( QString(IMAGE_PATH)+"miscImages/albumShaper.png" ) );
00065   //--
00066   //if user chooses to get product updates information
00067   releases = NULL;
00068   if(((Window*)(qApp->mainWidget()))->getConfig()->getBool( "alerts", "showSoftwareUpdateAlerts"))
00069   {
00070     //set http host
00071     http.setHost( "albumshaper.sourceforge.net" );
00072     connect( &http, SIGNAL(done(bool)), this, SLOT(fileFetched(bool)) );
00073     //--
00074     //attempt to get releases list from website. this lets us find out if this
00075     //copy of Album Shaper is outdated, and also allows us to know what
00076     //changelogs to get.
00077     getMode = GET_RELEASES;
00078     http.get( "/webService/releases.xml");
00079   }
00080   //--
00081   //text labels
00082   QDate currentDate = QDate::currentDate();
00083   int copyYearFirst = QMIN( currentDate.year(), 2003 );
00084   int copyYearLast = QMAX( currentDate.year(), 2004 );
00085    
00086 
00087   progDesc = new QLabel( QString("Album Shaper " + 
00088                                  QString(ALBUMSHAPER_VERSION) + 
00089                                  ", © %1-%2 Will Stokes").arg(copyYearFirst).arg(copyYearLast), 
00090                          logoFrame );
00091 
00092   progURL = new QLabel( "http://albumshaper.sourceforge.net", logoFrame );
00093 
00094   
00095   QFont textFont = progDesc->font();
00096   textFont.setWeight(QFont::Bold);
00097   progDesc->setFont( textFont );
00098   progURL->setFont( textFont );
00099   //--
00100   //tab widget which contains credits, changelog, etc
00101   tabWidget = new QTabWidget( this );
00102   //--
00103   //create credits tab
00104   credits = new QTextBrowser( this );
00105   credits->setFrameStyle( QFrame::Panel | QFrame::Sunken );
00106   credits->mimeSourceFactory()->setFilePath( QStringList(TEXT_PATH) );
00107   credits->setSource( "about.html");
00108   tabWidget->addTab(credits, 
00109                     QIconSet( QPixmap(QString(IMAGE_PATH)+"tabIcons/credits.png") ), 
00110                     tr("Credits") );
00111    //--
00112   //create history tab
00113   history = new QTextBrowser(this);
00114   history->setFrameStyle( QFrame::Panel | QFrame::Sunken );
00115   history->mimeSourceFactory()->setFilePath( QStringList(TEXT_PATH) );
00116   history->setSource( "history.html");
00117   tabWidget->addTab(history, 
00118                     QIconSet( QPixmap(QString(IMAGE_PATH)+"tabIcons/history.png") ), 
00119                     tr("History") );
00120   //--
00121   //create close button
00122   closeButton = new QPushButton(
00123   //PLATFORM_SPECIFIC_CODE
00124   #ifndef Q_OS_MACX
00125   QPixmap(QString(IMAGE_PATH)+"buttonIcons/button_ok.png"),
00126   #endif
00127                               tr("Close"),
00128                               this );
00129   closeButton->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );
00130   closeButton->setDefault(true);
00131   connect( closeButton, SIGNAL(clicked()), SLOT(close()) );
00132   //--
00133   logoFrame->setPaletteBackgroundColor( darkBlue );
00134   progDesc->setPaletteForegroundColor( white );
00135   progDesc->setPaletteBackgroundColor( darkBlue );
00136   progURL->setPaletteForegroundColor( white );
00137   progURL->setPaletteBackgroundColor( darkBlue );
00138   tabWidget->setPaletteForegroundColor( black );
00139   //--
00140   QGridLayout* logoGrid = new QGridLayout( logoFrame, 4, 3, 0);
00141   logoGrid->setSpacing(WIDGET_SPACING);
00142   logoGrid->addWidget( albumShaperLogo,  0, 1, Qt::AlignCenter );
00143   logoGrid->addWidget( progDesc,  2, 1, Qt::AlignCenter );
00144   logoGrid->addWidget( progURL,  3, 1, Qt::AlignCenter );
00145 
00146   grid = new QGridLayout( this, 3, 1, 0);
00147   grid->setSpacing(WIDGET_SPACING);
00148   grid->addWidget( logoFrame,  0, 0 );
00149   grid->addWidget( tabWidget, 1, 0 );
00150   grid->addWidget( closeButton, 2, 0, Qt::AlignCenter );
00151   resize( DEFAULT_WIDTH, DEFAULT_HEIGHT );
00152   //--
00153   //show secret images around Album Shaper's birthday (first release date - 4/3/2003)
00154   if( currentDate.year() > 2003 && currentDate.month() == 4 && currentDate.day() <= 3)
00155   {
00156     QLabel* cakeLogo = new QLabel(logoFrame);
00157     cakeLogo->setPixmap( QPixmap( QString(IMAGE_PATH)+"miscImages/birthdayL.png" ) );
00158     QLabel* cakeLogo2 = new QLabel(logoFrame);
00159     cakeLogo2->setPixmap( QPixmap( QString(IMAGE_PATH)+"miscImages/birthdayR.png" ) );
00160     QLabel* cakeMessage = new QLabel( QString( tr("Happy Birthday Album Shaper!") +
00161                                                QString(" %1 ").arg(currentDate.year() - 2003) +
00162                                                ( currentDate.year()-2003 == 1 ? tr("Year Old!") : tr("Years Old!")) ), logoFrame );
00163     cakeMessage->setFont(textFont);
00164     cakeMessage->setPaletteForegroundColor( white );
00165     //--
00166     logoGrid->addWidget( cakeLogo, 0, 0, Qt::AlignCenter );
00167     logoGrid->addWidget( cakeLogo2, 0, 2, Qt::AlignCenter );
00168     logoGrid->addMultiCellWidget( cakeMessage, 1, 1, 0, 2, Qt::AlignCenter );
00169   }
00170   //-------------------------------
00171   //set window to not be resizeable
00172   this->show();
00173   setFixedSize(size());
00174   //-------------------------------
00175 }

About::~About (  ) 

Definition at line 177 of file about.cpp.

References releases.

00178 {
00179   delete releases;
00180   releases = NULL;
00181 }


Member Function Documentation

void About::closed (  )  [signal]

Referenced by closeEvent(), and reject().

void About::fileFetched ( bool  error  )  [private, slot]

Definition at line 183 of file about.cpp.

References ALBUMSHAPER_VERSION, displayMode, GET_NEW_IMPROVEMENTS, GET_RELEASES, GET_UPCOMING_FEATURES, getMode, http, IMAGE_PATH, newImprovements, releases, tabWidget, TEMP_DIR, TEXT_PATH, UNSET, UPCOMING, upcomingFeatures, and UPDATES.

Referenced by About().

00184 {
00185   //------------------------------------------------------------
00186   //if unable to get file bail
00187   if(error)
00188   {
00189     getMode = UNSET;
00190     return;
00191   }
00192   //------------------------------------------------------------
00193   //getting releases?
00194   if(getMode == GET_RELEASES)
00195   {
00196     //write releases to temp file
00197     QFile fetchedDoc( TEMP_DIR + QString("/releases.xml") );
00198     if(fetchedDoc.open(IO_WriteOnly))
00199     {
00200       //----------------------------
00201       //write to file
00202       QTextStream stream( &fetchedDoc );
00203       stream.setEncoding( QTextStream::UnicodeUTF8 );
00204       stream << QString( http.readAll() );
00205       fetchedDoc.close();
00206       //----------------------------
00207       //parse xml file, construct string list of releases
00208       //open file, bail if unable to
00209       if( !fetchedDoc.open( IO_ReadOnly ) )
00210       {
00211         getMode = UNSET;
00212         return;
00213       }
00214 
00215       //parse dom
00216       QDomDocument xmlDom;
00217       if( !xmlDom.setContent( &fetchedDoc ) )
00218       {
00219         fetchedDoc.close();
00220         getMode = UNSET;
00221         return;
00222       }
00223 
00224       //close file
00225       fetchedDoc.close();
00226 
00227       //construct stringlist of releases
00228       releases = new QStringList();
00229       QDomElement root = xmlDom.documentElement();
00230       QDomNode node = root.firstChild();
00231       QDomText val;
00232       bool thisVersionFound = false;
00233       while( !node.isNull() )
00234       {
00235         if( node.isElement() && node.nodeName() == "release" )
00236         {
00237           val = node.firstChild().toText();
00238           if(!val.isNull())
00239           {
00240             //append release #
00241             releases->append( QString(val.nodeValue()) );
00242 
00243             //is release this version?
00244             if( QString(val.nodeValue()).compare( QString(ALBUMSHAPER_VERSION) ) == 0 )
00245               thisVersionFound = true;
00246 
00247           }
00248         }
00249         node = node.nextSibling();
00250       }
00251 
00252       //else if this version is not first on list but it was found in list then newer releases exist
00253       if(thisVersionFound && releases->first().compare( QString(ALBUMSHAPER_VERSION) ) != 0 )
00254       {
00255         //create new improvements file with beginning html and body tags
00256         QFile fetchedDoc( TEMP_DIR  + QString("/newImprovements.html") );
00257         if(fetchedDoc.open(IO_WriteOnly))
00258         {
00259           QTextStream stream( &fetchedDoc );          stream.setEncoding( QTextStream::UnicodeUTF8 );
00260           stream << "<html><body bgcolor=\"white\" text=\"black\">\n";
00261           stream << "<b><font size=\"+1\">" << tr("New improvements to Album Shaper are available in a new release!") << "<br><hr></font></b>";
00262           fetchedDoc.close();
00263         }
00264 
00265         getMode = GET_NEW_IMPROVEMENTS;
00266         http.get( "/webService/" + releases->first() + "_changelog.html");
00267       }
00268       //else we're up to date! move on to checking for new features in cvs!
00269       else
00270       {
00271         newImprovements = new QTextBrowser( this );
00272         newImprovements->setFrameStyle( QFrame::Panel | QFrame::Sunken );
00273         newImprovements->mimeSourceFactory()->setFilePath( QStringList(TEXT_PATH) );
00274 
00275         //bleeding edge message
00276         if(!thisVersionFound)
00277         {
00278           newImprovements->setSource( "bleedingEdge.html");
00279         }
00280         else
00281         {
00282           newImprovements->setSource( "noUpdates.html");
00283         }
00284 
00285         tabWidget->addTab(newImprovements, 
00286                           QIconSet( QPixmap(QString(IMAGE_PATH)+"tabIcons/newImprovements.png") ),
00287                           tr("Software Updates") );
00288 
00289         if(displayMode == UPDATES)
00290           tabWidget->setCurrentPage( tabWidget->indexOf( newImprovements ) );
00291 
00292         getMode = GET_UPCOMING_FEATURES;
00293         http.get( "/webService/upcomingFeatures.html");
00294       }
00295       //----------------------------
00296       //delete file
00297       QDir rootDir( TEMP_DIR );
00298       rootDir.remove("releases.xml");
00299       //----------------------------
00300     }
00301     else
00302     {
00303       getMode = UNSET;
00304     }
00305   }
00306   //------------------------------------------------------------
00307   else if(getMode == GET_NEW_IMPROVEMENTS)
00308   {
00309     //write additional changelog information to disk
00310     QFile fetchedDoc( TEMP_DIR + QString("/newImprovements.html") );
00311     if(fetchedDoc.open(IO_WriteOnly | IO_Append))
00312     {
00313       //write to file
00314       QTextStream stream( &fetchedDoc );
00315       stream.setEncoding( QTextStream::UnicodeUTF8 );
00316       stream << QString( http.readAll() );
00317       fetchedDoc.close();
00318 
00319       //pop of release from stack
00320       releases->pop_front();
00321 
00322       //if stack empty then or we've goten up to this version add new tab with changes
00323       if(releases->isEmpty() ||
00324          releases->first().compare( QString(ALBUMSHAPER_VERSION) ) == 0 )
00325       {
00326         //tack on the end body and html tags
00327         if(fetchedDoc.open(IO_WriteOnly | IO_Append))
00328         {
00329           //write to file
00330           QTextStream stream( &fetchedDoc );
00331           stream.setEncoding( QTextStream::UnicodeUTF8 );
00332           stream << "</body></html>";
00333           fetchedDoc.close();
00334         
00335           newImprovements = new QTextBrowser(this);
00336           newImprovements->setFrameStyle( QFrame::Panel | QFrame::Sunken );
00337           newImprovements->mimeSourceFactory()->setFilePath( TEMP_DIR );
00338           newImprovements->setSource( "newImprovements.html" );
00339           tabWidget->addTab(newImprovements, 
00340                             QIconSet( QPixmap(QString(IMAGE_PATH)+"tabIcons/newImprovements.png") ),
00341                             tr("Software Updates") );
00342           tabWidget->setCurrentPage( tabWidget->indexOf( newImprovements ) );;
00343 
00344           //move on to checking for upcoming features
00345           getMode = GET_UPCOMING_FEATURES;
00346           http.get( "/webService/upcomingFeatures.html");
00347         }
00348         else
00349         {
00350           getMode = UNSET;
00351         }
00352       }
00353       //if not empty then get even more new features!
00354       else
00355       {
00356         http.get( "/webService/" + releases->first() + "_changelog.html");
00357       }
00358     }
00359     else
00360     {
00361       getMode = UNSET;
00362     }
00363   }
00364   //------------------------------------------------------------
00365   //getting upcoming features?
00366   else if(getMode == GET_UPCOMING_FEATURES)
00367   {
00368     //write upcoming features to temp file
00369     QFile fetchedDoc( TEMP_DIR + QString("/upcomingFeatures.html") );
00370     if(fetchedDoc.open(IO_WriteOnly))
00371     {
00372       //write to file
00373       QTextStream stream( &fetchedDoc );
00374       stream.setEncoding( QTextStream::UnicodeUTF8 );
00375       stream << QString( http.readAll() );
00376       fetchedDoc.close();
00377 
00378       //add tab
00379       upcomingFeatures = new QTextBrowser(this);
00380       upcomingFeatures->setFrameStyle( QFrame::Panel | QFrame::Sunken );
00381       upcomingFeatures->mimeSourceFactory()->setFilePath( TEMP_DIR );
00382       upcomingFeatures->setSource( "upcomingFeatures.html" );
00383       tabWidget->addTab(upcomingFeatures, 
00384                         QIconSet( QPixmap(QString(IMAGE_PATH)+"tabIcons/upcomingFeatures.png") ),
00385                         tr("Upcoming Features") );
00386 
00387       if(displayMode == UPCOMING)
00388         tabWidget->setCurrentPage( tabWidget->indexOf( upcomingFeatures ) );
00389 
00390       //delete file
00391       QDir rootDir( TEMP_DIR );
00392       rootDir.remove("upcomingFeatures.html");
00393     }
00394 
00395     getMode = UNSET;
00396   }
00397   //------------------------------------------------------------
00398 }

void About::reject (  )  [private, slot]

Definition at line 406 of file about.cpp.

References closed().

00407 {
00408   QDialog::reject();
00409   emit closed();
00410 }

void About::closeEvent ( QCloseEvent *  e  )  [private]

Definition at line 400 of file about.cpp.

References closed().

00401 {
00402   QWidget::closeEvent( e );
00403   emit closed();
00404 }


Member Data Documentation

QGridLayout* About::grid [private]

Definition at line 51 of file about.h.

Referenced by About().

QMovie* About::albumShaperAgingImage [private]

Definition at line 53 of file about.h.

Definition at line 54 of file about.h.

Referenced by About().

QLabel* About::progDesc [private]

Definition at line 56 of file about.h.

Referenced by About().

QLabel* About::progURL [private]

Definition at line 57 of file about.h.

Referenced by About().

QTabWidget* About::tabWidget [private]

Definition at line 59 of file about.h.

Referenced by About(), and fileFetched().

Definition at line 61 of file about.h.

Referenced by About().

Definition at line 62 of file about.h.

Referenced by About().

Definition at line 63 of file about.h.

Referenced by fileFetched().

Definition at line 64 of file about.h.

Referenced by fileFetched().

QPushButton* About::closeButton [private]

Close button.

Definition at line 67 of file about.h.

Referenced by About().

QStringList* About::releases [private]

Definition at line 69 of file about.h.

Referenced by About(), fileFetched(), and ~About().

QHttp About::http [private]

Definition at line 72 of file about.h.

Referenced by About(), and fileFetched().

int About::getMode [private]

Definition at line 75 of file about.h.

Referenced by About(), and fileFetched().

int About::displayMode [private]

Definition at line 78 of file about.h.

Referenced by About(), and fileFetched().


The documentation for this class was generated from the following files:

Generated on Thu Jun 19 15:08:43 2008 for AlbumShaper by  doxygen 1.5.6