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