contents.cpp

Go to the documentation of this file.
00001 //==============================================
00002 //  copyright            : (C) 2003-2005 by Will Stokes
00003 //==============================================
00004 //  This program is free software; you can redistribute it
00005 //  and/or modify it under the terms of the GNU General
00006 //  Public License as published by the Free Software
00007 //  Foundation; either version 2 of the License, or
00008 //  (at your option) any later version.
00009 //==============================================
00010 
00011 //Systemwide includes
00012 #include <qfile.h>
00013 #include <qstringlist.h>
00014 
00015 //Projectwide includes
00016 #include "contents.h"
00017 #include "../../config.h"
00018 
00019 #define LINK_COLOR "#0a92dd"
00020 #define CURR_COLOR "#0e3980"
00021 
00022 //==============================================
00023 Contents::Contents( QTextStream::Encoding type, 
00024                     QString saveCharSet, QMimeSourceFactory* loadingMimeSource,
00025                     QWidget* parent, const char* name ) : QTextBrowser(parent,name)
00026 {
00027   this->type = type;
00028   this->saveCharSet = saveCharSet;
00029   this->setMimeSourceFactory( loadingMimeSource );
00030   
00031   //generate HTML
00032   currentPage = BILLBOARD;
00033   generateHTML(type, saveCharSet);
00034   //--
00035   //set browser and load contents
00036   setHScrollBarMode( QScrollView::AlwaysOff );
00037   setVScrollBarMode( QScrollView::AlwaysOff );
00038   setFrameStyle( QFrame::NoFrame );
00039   setSource( filename() );
00040   
00041   //------
00042   //determine optimal size
00043   int minH = heightForWidth( 1000 );
00044   int w;
00045   for(w=1; w<1000; w++)
00046   {
00047     if(heightForWidth(w) == minH ) break;
00048   }
00049   
00050   optimalSize = QSize( w, heightForWidth(w) ); 
00051   //------
00052   //handle anchor clicks
00053   connect( this, SIGNAL(anchorClicked(const QString&, const QString&)),
00054            this, SLOT(handleAnchorClick(const QString&, const QString&)) );
00055   //------
00056 }
00057 //==============================================
00058 QSize Contents::minimumSizeHint() const
00059 {
00060   return optimalSize;
00061 }
00062 //==============================================                              
00063 void Contents::handleAnchorClick(const QString &name, const QString&)
00064 {
00065   HELP_PAGE nextPage = INVALID;  
00066 
00067   //only handle clicking on anchors with actual names
00068   if( name.isNull() ) return;
00069   else if(name.compare("WHATS_NEW") == 0) 
00070     nextPage = WHATS_NEW;
00071   else if(name.compare("IMPORTING_AND_ORGANIZING") == 0) 
00072     nextPage = IMPORTING_AND_ORGANIZING;
00073   else if(name.compare("ANNOTATING_ALBUMS") == 0) 
00074     nextPage = ANNOTATING_ALBUMS;
00075   else if(name.compare("FRAMING") == 0) 
00076     nextPage = FRAMING;
00077   else if(name.compare("ENHANCING") == 0) 
00078     nextPage = ENHANCING;
00079   else if(name.compare("PRO_TOOLS") == 0) 
00080     nextPage = PRO_TOOLS;
00081   else if(name.compare("MANIPULATING") == 0) 
00082     nextPage = MANIPULATING;
00083   else if(name.compare("SAVING_AND_LOADING") == 0) 
00084     nextPage = SAVING_AND_LOADING;
00085   else if(name.compare("KEYBOARD_SHORTCUTS") == 0) 
00086     nextPage = KEYBOARD_SHORTCUTS;
00087 
00088   if(nextPage != INVALID)
00089   {
00090     currentPage = nextPage;
00091     generateHTML(type, saveCharSet);
00092     reload();
00093     emit setPage( currentPage );
00094   }
00095 }
00096 //==============================================
00097 QString Contents::filename()
00098 {
00099   return QString("%1/helpContents.html").arg(TEMP_DIR);
00100 }
00101 //==============================================                              
00102 void Contents::generateHTML(QTextStream::Encoding type, QString charSet)
00103 {
00104   //create/open html file
00105   QFile file( filename() );
00106   if(file.open(IO_WriteOnly))
00107   {
00108     //-----
00109     QTextStream stream;
00110     stream.setEncoding( type );
00111     stream.setDevice( &file );
00112     //-----
00113     stream << "<html><head>\n";
00114     stream << "<meta http-equiv='Content-Type' content='text/html; charset=" << charSet << "'>\n";
00115     stream << "</head><body>\n";
00116     stream << "<center><table><tr><td>\n";
00117     stream << "<font face='Arial, sans-serif' size='+1'><b>\n";
00118     //-----    
00119     printLink( stream, QString(tr("What's New")), WHATS_NEW, "WHATS_NEW" );
00120     //-----    
00121     stream << "<p>" << tr("Tutorials:") << "\n";
00122     //------    
00123     stream << "<font size='+0'><ul>\n";
00124 
00125     stream << "<li>\n";
00126     printLink( stream, QString(tr("Import & Organize")), 
00127                IMPORTING_AND_ORGANIZING, "IMPORTING_AND_ORGANIZING" );
00128     //------    
00129     stream << "<li>\n";
00130     printLink( stream, QString(tr("Annotating Albums")), 
00131                ANNOTATING_ALBUMS, "ANNOTATING_ALBUMS" );
00132     //------    
00133     stream << "<li>" << tr("Editing Photos:") << "\n";
00134 
00135     stream << "<ol>\n";
00136     stream << "<li>\n";
00137     printLink( stream, QString(tr("Framing")), 
00138                FRAMING, "FRAMING" );
00139     
00140     stream << "<li>\n";
00141     printLink( stream, QString(tr("Fix it Fast")), 
00142                ENHANCING, "ENHANCING" );
00143     
00144     stream << "<li>\n";
00145     printLink( stream, QString(tr("Pro Tools")), 
00146                PRO_TOOLS, "PRO_TOOLS" );
00147 
00148     stream << "<li>\n";
00149     printLink( stream, QString(tr("Manipulations")), 
00150                MANIPULATING, "MANIPULATING" );
00151     stream << "</ol>\n";
00152     //------    
00153     stream << "<li>\n";
00154     printLink( stream, QString(tr("Saving & Loading")), 
00155                SAVING_AND_LOADING, "SAVING_AND_LOADING" );
00156     //------    
00157     stream << "</ul></font>\n";
00158     //------    
00159     printLink( stream, QString(tr("Keyboard Shortcuts")), KEYBOARD_SHORTCUTS, "KEYBOARD_SHORTCUTS" );
00160     //------    
00161     stream << "</b></font>\n";
00162     stream << "</td></tr></table></center>\n";
00163     stream << "</body></html>\n";
00164     file.close();
00165   }
00166 }
00167 //==============================================
00168 void Contents::printLink( QTextStream& stream, QString text, HELP_PAGE anchor, QString anchorString )
00169 {
00170   if( currentPage != anchor ) 
00171   {
00172     stream << "<font color='" << LINK_COLOR << "'>";
00173     stream << "<a name='" << anchorString << "'>";
00174   }
00175   else
00176   {
00177     stream << "<font color='" << CURR_COLOR << "'>";
00178   }
00179 
00180   stream << text << "\n";
00181   
00182   if( currentPage != anchor ) 
00183   {
00184     stream << "</a>";
00185   }
00186   stream << "</font>\n";
00187 }
00188 //==============================================                              

Generated on Wed Nov 8 16:37:13 2006 for AlbumShaper by  doxygen 1.4.7