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 <qtextbrowser.h>
00016 #include <qlineedit.h>
00017 #include <qlistbox.h>
00018 #include <qframe.h>
00019 #include <qstringlist.h>
00020 #include <qdir.h>
00021 #include <qpushbutton.h>
00022 #include <qfiledialog.h>
00023 #include <qtooltip.h>
00024
00025
00026 #include "saveDialog.h"
00027 #include "../clickableLabel.h"
00028 #include "../../config.h"
00029
00030
00031 SaveDialog::SaveDialog( QString actionMessage,
00032 QString defaultPath,
00033 QString defaultTheme,
00034 QWidget* parent,
00035 const char* name ) :
00036 QDialog(parent,name)
00037 {
00038
00039 setCaption( actionMessage );
00040
00041
00042
00043
00044
00045
00046 locationFrame = new QFrame( this );
00047 locationLabel = new QLabel( tr("Save to:"), locationFrame );
00048
00049 QFont boldFont = locationLabel->font();
00050 boldFont.setWeight(QFont::Bold);
00051
00052 locationLabel->setFont( boldFont );
00053 locationVal = new QLineEdit( locationFrame );
00054 locationVal->setText( defaultPath );
00055 locationVal->setFont( boldFont );
00056
00057 browseButton = new ClickableLabel( locationFrame );
00058 browseButton->setPixmap( QPixmap(QString(IMAGE_PATH)+"buttonIcons/browse.png") );
00059 QToolTip::add( browseButton, tr("Browse to save destination") );
00060 connect( browseButton, SIGNAL(clicked()), SLOT(browse()) );
00061 locationGrid = new QGridLayout( locationFrame, 1, 3, 0 );
00062 locationGrid->addWidget( locationLabel, 0, 0 );
00063 locationGrid->addWidget( locationVal, 0, 1 );
00064 locationGrid->addWidget( browseButton, 0, 2);
00065 locationGrid->setColStretch( 1, 1 );
00066 locationGrid->setSpacing(WIDGET_SPACING);
00067
00068
00069 themeSelectionFrame = new QFrame( this );
00070 themesLabel = new QLabel( tr("Themes:"), themeSelectionFrame );
00071 themesLabel->setFont( boldFont );
00072 themesList = new QListBox( themeSelectionFrame );
00073 QToolTip::add( themesList, tr("Select theme for saving album") );
00074 QDir localDir( THEMES_PATH );
00075 QStringList list = localDir.entryList( QDir::Dirs );
00076 bool itemsAdded = false;
00077 QStringList::Iterator file;
00078 for ( file = list.begin(); file != list.end(); ++file )
00079 {
00080 if(localDir.exists( QString(*file) + "/theme.xsl" ))
00081 {
00082 themesList->insertItem( *file );
00083 itemsAdded = true;
00084 }
00085 }
00086
00087
00088 bool themeFound = false;
00089 uint i=0;
00090 for(i=0; i<themesList->count(); i++)
00091 {
00092 if(themesList->text(i) == defaultTheme )
00093 {
00094 themeFound = true;
00095 themesList->setCurrentItem( i );
00096 break;
00097 }
00098 }
00099 if(!themeFound && itemsAdded )
00100 {
00101 themesList->setCurrentItem( 0 );
00102 }
00103
00104 connect( themesList, SIGNAL( highlighted(int) ), this, SLOT( updatePreview() ) );
00105
00106 themeSelectionGrid = new QGridLayout( themeSelectionFrame, 2, 1, 0 );
00107 themeSelectionGrid->addWidget( themesLabel, 0, 0 );
00108 themeSelectionGrid->addWidget( themesList, 1, 0 );
00109
00110
00111 themePreviewFrame = new QFrame( this );
00112 themePreviewLabel = new QLabel( tr("Theme Preview:"), themePreviewFrame );
00113 themePreviewLabel->setFont( boldFont );
00114 themeScreenShot = new QLabel( themePreviewFrame );
00115 screenShotLabel = new QLabel( themePreviewFrame );
00116 screenShotLabel->setFont( boldFont );
00117
00118 themeScreenPrev = new ClickableLabel( themePreviewFrame );
00119 themeScreenPrev->setPixmap( QPixmap(QString(IMAGE_PATH)+"buttonIcons/previous.png") );
00120 QToolTip::add( themeScreenPrev, tr("View previous theme screenshot") );
00121 connect( themeScreenPrev, SIGNAL(clicked()), SLOT(prevScreenShot()) );
00122
00123 themeScreenNext = new ClickableLabel( themePreviewFrame );
00124 themeScreenNext->setPixmap( QPixmap(QString(IMAGE_PATH)+"buttonIcons/next.png") );
00125 QToolTip::add( themeScreenNext, tr("View next theme screenshot") );
00126 connect( themeScreenNext, SIGNAL(clicked()), SLOT(nextScreenShot()) );
00127
00128 themeFeatures = new QTextBrowser( themePreviewFrame );
00129 themeFeatures->setFrameStyle( QFrame::Panel | QFrame::Sunken );
00130 themeFeatures->mimeSourceFactory()->setFilePath( QStringList(THEMES_PATH) );
00131 updatePreview();
00132
00133 themePreviewGrid = new QGridLayout( themePreviewFrame, 5, 5, 0);
00134 themePreviewGrid->addMultiCellWidget( themePreviewLabel, 0,0, 0,4 );
00135
00136 themePreviewGrid->addWidget( themeScreenPrev, 1, 0, Qt::AlignVCenter );
00137 themePreviewGrid->addColSpacing( 1, 10 );
00138 themePreviewGrid->setColStretch( 1, 1 );
00139 themePreviewGrid->addWidget( themeScreenShot, 1, 2 );
00140 themePreviewGrid->addColSpacing( 3, 10 );
00141 themePreviewGrid->setColStretch( 3, 1 );
00142 themePreviewGrid->addWidget( themeScreenNext, 1, 4, Qt::AlignVCenter );
00143 themePreviewGrid->addMultiCellWidget( screenShotLabel, 2, 2, 0, 4, Qt::AlignCenter );
00144 themePreviewGrid->addMultiCellWidget( themeFeatures, 4, 4, 0, 4 );
00145
00146
00147 buttonsFrame = new QFrame( this );
00148 saveButton = new QPushButton(
00149
00150 #ifndef Q_OS_MACX
00151 QPixmap(QString(IMAGE_PATH)+"buttonIcons/save.png"),
00152 #endif
00153 tr("Save"), buttonsFrame );
00154 saveButton->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );
00155 saveButton->setDefault(true);
00156 connect( saveButton, SIGNAL(clicked()), SLOT(save()) );
00157 cancelButton = new QPushButton(
00158
00159 #ifndef Q_OS_MACX
00160 QPixmap(QString(IMAGE_PATH)+"buttonIcons/button_cancel.png"),
00161 #endif
00162 tr("Cancel"), buttonsFrame
00163 );
00164 cancelButton->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );
00165 connect( cancelButton, SIGNAL(clicked()), SLOT(cancel()) );
00166 buttonsGrid = new QGridLayout( buttonsFrame, 1, 5, 0 );
00167 buttonsGrid->setColStretch( 0, 1 );
00168 buttonsGrid->addWidget( saveButton, 0, 1 );
00169 buttonsGrid->addColSpacing( 2, 10 );
00170 buttonsGrid->addWidget( cancelButton, 0, 3 );
00171 buttonsGrid->setColStretch( 4, 1 );
00172
00173
00174 mainGrid = new QGridLayout( this, 3, 2, 0);
00175 mainGrid->addWidget( themeSelectionFrame, 0, 0 );
00176 mainGrid->addWidget( themePreviewFrame, 0, 1 );
00177 mainGrid->addMultiCellWidget( locationFrame, 1, 1, 0, 1 );
00178 mainGrid->addMultiCellWidget( buttonsFrame, 2, 2, 0, 1 );
00179
00180
00181 mainGrid->setColStretch( 1, 1 );
00182 mainGrid->setRowStretch( 1, 1 );
00183 mainGrid->setMargin(WIDGET_SPACING);
00184 mainGrid->setSpacing(WIDGET_SPACING);
00185
00186
00187 this->show();
00188 setFixedSize(size());
00189 }
00190
00191 void SaveDialog::updatePreview()
00192 {
00193 previewNum = 1;
00194 int i=1;
00195 QDir localDir( THEMES_PATH );
00196 while( localDir.exists( QString( themesList->currentText() + "/preview%1.png").arg(i) ) ) { i++; }
00197 numPreviews = i-1;
00198
00199
00200 if(localDir.exists( themesList->currentText() + "/description.html" ))
00201 {
00202 themeFeatures->setSource( themesList->currentText() + "/description.html" );
00203 }
00204
00205
00206 if(localDir.exists( themesList->currentText() + "/preview1.png") )
00207 {
00208 screenShotLabel->setText( QString( tr("Screenshot") ) + QString( " %1/%2").arg(previewNum).arg(numPreviews) );
00209 themeScreenShot->setPixmap( QPixmap(THEMES_PATH + themesList->currentText() + "/preview1.png") );
00210 themeScreenPrev->setInvisible( true );
00211 themeScreenNext->setInvisible( previewNum == numPreviews );
00212 }
00213 else
00214 {
00215 screenShotLabel->setText( "" );
00216 themeScreenShot->setPixmap( QPixmap(QString(IMAGE_PATH)+"miscImages/themePreview.png") );
00217 themeScreenPrev->setInvisible( true );
00218 themeScreenNext->setInvisible( true );
00219 }
00220
00221 }
00222
00223 void SaveDialog::save()
00224 {
00225 accept();
00226 }
00227
00228 void SaveDialog::cancel()
00229 {
00230 reject();
00231 }
00232
00233 void SaveDialog::prevScreenShot()
00234 {
00235 previewNum--;
00236 themeScreenNext->setInvisible(false);
00237 themeScreenPrev->setInvisible(previewNum == 1);
00238
00239 screenShotLabel->setText( QString( tr("Screenshot") ) + QString( " %1/%2").arg(previewNum).arg(numPreviews) );
00240 themeScreenShot->setPixmap( QPixmap( QString(THEMES_PATH + themesList->currentText() + "/preview%1.png").arg(previewNum) ) );
00241 }
00242
00243 void SaveDialog::nextScreenShot()
00244 {
00245 previewNum++;
00246 themeScreenPrev->setInvisible(false);
00247 themeScreenNext->setInvisible(previewNum == numPreviews);
00248
00249 screenShotLabel->setText( QString( tr("Screenshot") ) + QString( " %1/%2").arg(previewNum).arg(numPreviews) );
00250 themeScreenShot->setPixmap( QPixmap( QString(THEMES_PATH + themesList->currentText() + "/preview%1.png").arg(previewNum) ) );
00251 }
00252
00253 void SaveDialog::browse()
00254 {
00255
00256 QString dirName = QFileDialog::getSaveFileName( locationVal->text(),
00257 NULL, this, NULL, QString(tr("Save as")) );
00258
00259 if(!dirName.isNull())
00260 locationVal->setText( dirName );
00261 }
00262
00263 QString SaveDialog::getTheme()
00264 {
00265 return themesList->currentText();
00266 }
00267
00268 QString SaveDialog::getPath()
00269 {
00270 return locationVal->text();
00271 }
00272
00273 bool SaveDialog::selectThemeAndPath( QString titleMessage,
00274 QString defaultPath,
00275 QString &theme,
00276 QString &path )
00277 {
00278 SaveDialog* dlg = new SaveDialog( titleMessage, defaultPath, theme );
00279 if( dlg->exec() == QDialog::Accepted )
00280 {
00281 theme = dlg->getTheme();
00282 path = dlg->getPath();
00283 delete dlg;
00284 return true;
00285 }
00286 else
00287 {
00288 delete dlg;
00289 return false;
00290 }
00291 }
00292
00293 bool SaveDialog::themeAvailable(QString theme)
00294 {
00295
00296
00297
00298 QDir localDir( THEMES_PATH );
00299 QStringList list = localDir.entryList( QDir::Dirs );
00300 QStringList::Iterator file;
00301 for ( file = list.begin(); file != list.end(); ++file )
00302 {
00303 if(localDir.exists( QString(*file) + "/theme.xsl") &&
00304 QString(*file) == theme)
00305 return true;
00306 }
00307
00308 return false;
00309 }
00310