00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include <qlayout.h>
00013 #include <qlabel.h>
00014 #include <qfont.h>
00015 #include <qframe.h>
00016 #include <qprogressbar.h>
00017 #include <qfile.h>
00018 #include <qdom.h>
00019 #include <qstringlist.h>
00020 #include <qtooltip.h>
00021 #include <qpixmap.h>
00022 #include <qdir.h>
00023 #include <qmovie.h>
00024 #include <qtimer.h>
00025 #include <qsizegrip.h>
00026
00027
00028 #include "clickableLabel.h"
00029 #include "statusWidget.h"
00030 #include "titleWidget.h"
00031 #include "window.h"
00032 #include "../config.h"
00033 #include "../configuration/configuration.h"
00034
00035
00036 StatusWidget::StatusWidget(QWidget *parent,
00037 const char* name ) : QWidget(parent,name)
00038 {
00039
00040 message = new QLabel( this );
00041 message->setText( "" );
00042 message->setFont( QFont( "Times", 12, QFont::Bold ) );
00043
00044
00045 timer = new QTimer();
00046 connect(timer, SIGNAL(timeout()), this, SLOT(removeStatus()) );
00047
00048
00049 progressBar = new QProgressBar( this );
00050 progressBar->setCenterIndicator(true);
00051 progressBar->hide();
00052 curStep = 0;
00053
00054
00055
00056 updateAvailable = NULL;
00057 http.setHost( "albumshaper.sourceforge.net" );
00058 connect( &http, SIGNAL(done(bool)), this, SLOT(fileFetched(bool)) );
00059 if(((Window*)parentWidget())->getConfig()->getBool( "alerts", "showSoftwareUpdateAlerts"))
00060 {
00061 checkForUpdates();
00062 }
00063
00064
00065 grid = new QGridLayout( this, 1, 6, 0 );
00066 grid->setSpacing(WIDGET_SPACING);
00067 grid->setColSpacing( 0, WIDGET_SPACING );
00068 grid->addWidget( message, 0, 1, Qt::AlignVCenter );
00069 grid->addWidget( progressBar, 0, 2, Qt::AlignVCenter );
00070 grid->setColStretch( 3, 1 );
00071
00072
00073
00074
00075
00076
00077 #if defined(Q_OS_MACX) || defined(Q_OS_WIN)
00078 QSizeGrip* sizeGrip = new QSizeGrip( this );
00079 grid->addWidget( sizeGrip, 0, 5, Qt::AlignBottom );
00080 #endif
00081
00082 }
00083
00084 StatusWidget::~StatusWidget()
00085 {
00086 delete timer;
00087 timer = NULL;
00088 }
00089
00090 void StatusWidget::showProgressBar(QString message, int numSteps)
00091 {
00092
00093
00094 timer->stop();
00095
00096
00097 this->message->setText( message );
00098 progressBar->setProgress( 0, numSteps );
00099 progressBar->show();
00100 curStep = 0;
00101 }
00102
00103 void StatusWidget::updateProgress(int progress, QString newMessage)
00104 {
00105 curStep = progress;
00106 progressBar->setProgress( progress );
00107
00108
00109 if(newMessage != QString::null)
00110 {
00111 this->message->setText( newMessage );
00112 }
00113 }
00114
00115 int StatusWidget::currentProgress()
00116 {
00117 return curStep;
00118 }
00119
00120 void StatusWidget::incrementProgress()
00121 {
00122 curStep++;
00123 progressBar->setProgress( curStep );
00124 }
00125
00126 void StatusWidget::setStatus( QString message )
00127 {
00128 timer->stop();
00129
00130
00131 progressBar->hide();
00132
00133
00134 this->message->setText( message );
00135
00136 timer->start( 2000, TRUE );
00137 }
00138
00139 void StatusWidget::removeStatus()
00140 {
00141
00142 message->setText( "" );
00143 }
00144
00145 void StatusWidget::fileFetched(bool error)
00146 {
00147
00148
00149 if(error)
00150 {
00151 return;
00152 }
00153
00154
00155 QFile fetchedDoc( TEMP_DIR + QString("/releases.xml") );
00156 if(fetchedDoc.open(IO_WriteOnly))
00157 {
00158
00159
00160 QTextStream stream( &fetchedDoc );
00161 stream.setEncoding( QTextStream::UnicodeUTF8 );
00162 stream << QString( http.readAll() );
00163 fetchedDoc.close();
00164
00165
00166
00167 if( !fetchedDoc.open( IO_ReadOnly ) )
00168 {
00169 return;
00170 }
00171
00172
00173 QDomDocument xmlDom;
00174 if( !xmlDom.setContent( &fetchedDoc ) )
00175 {
00176 fetchedDoc.close();
00177 return;
00178 }
00179
00180
00181 fetchedDoc.close();
00182
00183
00184
00185
00186
00187 QStringList releases;
00188 QDomElement root = xmlDom.documentElement();
00189 QDomNode node = root.firstChild();
00190 QDomText val;
00191 bool thisVersionFound = false;
00192 while( !node.isNull() )
00193 {
00194 if( node.isElement() && node.nodeName() == "release" )
00195 {
00196 val = node.firstChild().toText();
00197 if(!val.isNull())
00198 {
00199
00200 releases.append( QString(val.nodeValue()) );
00201
00202
00203 if( QString(val.nodeValue()).compare( QString(ALBUMSHAPER_VERSION) ) == 0 )
00204 thisVersionFound = true;
00205 }
00206 }
00207 node = node.nextSibling();
00208 }
00209
00210
00211
00212 if(thisVersionFound && releases.first().compare( QString(ALBUMSHAPER_VERSION) ) != 0)
00213 {
00214 ClickableLabel* uA = new ClickableLabel( this );
00215 uA->setMovie( QMovie( QString(IMAGE_PATH)+"miscImages/updateAvailable.mng") );
00216 QToolTip::add( uA, tr("Your copy of Album Shaper is not up to date! Click here for details") );
00217 grid->addWidget( uA, 0, 4, Qt::AlignVCenter );
00218 connect( uA, SIGNAL(clicked()),
00219 ((Window*)parentWidget())->getTitle(), SLOT(aboutProgram()) );
00220 uA->show();\
00221 updateAvailable = uA;
00222 }
00223 }
00224
00225 }
00226
00227 void StatusWidget::checkForUpdates()
00228 {
00229 if(updateAvailable != NULL)
00230 return;
00231
00232
00233
00234 http.get( "/webService/releases.xml");
00235 }
00236
00237 void StatusWidget::removeUpdatesIcon()
00238 {
00239 delete updateAvailable;
00240 updateAvailable = NULL;
00241 }
00242
00243 void StatusWidget::grabInput()
00244 {
00245 grabKeyboard();
00246 grabMouse();
00247 }
00248
00249 void StatusWidget::releaseInput()
00250 {
00251 releaseKeyboard();
00252 releaseMouse();
00253 }
00254