1
/** ===========================================================
4
* This file is a part of digiKam project
5
* <a href="http://www.digikam.org">http://www.digikam.org</a>
8
* @brief Settings Widget
10
* @author Copyright (C) 2012 by A Janardhan Reddy <annapareddyjanardhanreddy at gmail dot com>
12
* This program is free software; you can redistribute it
13
* and/or modify it under the terms of the GNU General
14
* Public License as published by the Free Software Foundation;
15
* either version 2, or (at your option)
18
* This program is distributed in the hope that it will be useful,
19
* but WITHOUT ANY WARRANTY; without even the implied warranty of
20
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
* GNU General Public License for more details.
23
* ============================================================ */
25
#include "slideshowsettingswidget.moc"
29
#include <sys/socket.h>
33
#include <QGridLayout>
38
#include <QSpacerItem>
44
#include <kpushbutton.h>
45
#include <klocalizeddate.h>
46
#include <kfiledialog.h>
48
#include <kseparator.h>
49
#include <klocalizedstring.h>
50
#include <kmessagebox.h>
52
using namespace KIPIPlugins;
54
namespace KIPIVideoSlideShowPlugin
57
class SlideShowSettingsWidget::Private
63
PPMSettingsWidget = 0;
64
VideoSettingsWidget = 0;
80
QWidget* PPMSettingsWidget;
81
QWidget* VideoSettingsWidget;
83
KPushButton* selectBtn;
84
KPushButton* audioBtn;
95
QLabel* saveFileLabel;
98
QComboBox* transitions;
99
QComboBox* transitionSpeed;
100
QComboBox* asptRatioCorrct;
101
QComboBox* aspectRatio;
102
QComboBox* videoType;
103
QComboBox* videoFormat;
104
QSpinBox* frameWidth;
105
QSpinBox* frameHeight;
109
SlideShowSettingsWidget::SlideShowSettingsWidget(QWidget* const parent, Qt::WFlags flags)
110
: KTabWidget(parent, flags), d(new Private)
112
d->PPMSettingsWidget = new QWidget();
113
d->VideoSettingsWidget = new QWidget();
114
addTab(d->PPMSettingsWidget, QString("SlideShow Settings"));
115
addTab(d->VideoSettingsWidget, QString("Video Settings"));
117
setCloseButtonEnabled(false);
118
setHoverCloseButton(false);
121
setUpVideoSettings();
123
connect(d->timeVal, SIGNAL(valueChanged(int)),
124
this, SLOT(timeValueChanged(int)));
126
connect(d->effects, SIGNAL(currentIndexChanged(int)),
127
this, SLOT(effectIndexChanged(int)));
129
connect(d->transitions, SIGNAL(currentIndexChanged(int)),
130
this, SLOT(transIndexChanged(int)));
132
connect(d->transitionSpeed, SIGNAL(currentIndexChanged(int)),
133
this, SLOT(transSpeedIndexChanged(int)));
135
connect(d->videoType, SIGNAL(currentIndexChanged(int)),
136
this, SLOT(videoTypeChanged(int)));
138
connect(d->videoFormat, SIGNAL(currentIndexChanged(int)),
139
this, SLOT(videoFormatChanged(int)));
142
SlideShowSettingsWidget::~SlideShowSettingsWidget()
147
void SlideShowSettingsWidget::effectIndexChanged(int index)
149
Q_EMIT effectDataChanged(d->effects->itemText(index), (EFFECT)d->effects->itemData(index).toInt());
152
void SlideShowSettingsWidget::transIndexChanged(int index)
154
Q_EMIT transDataChanged(d->transitions->itemText(index), (TRANSITION_TYPE)d->transitions->itemData(index).toInt());
157
void SlideShowSettingsWidget::transSpeedIndexChanged(int index)
159
Q_EMIT transSpeedDataChanged(d->transitionSpeed->itemText(index), (TRANSITION_SPEED)d->transitionSpeed->itemData(index).toInt());
162
void SlideShowSettingsWidget::timeValueChanged(int time)
164
Q_EMIT timeDataChanged(time);
167
void SlideShowSettingsWidget::videoTypeChanged(int index)
169
VIDEO_TYPE type = (VIDEO_TYPE)d->videoType->itemData(index).toInt();
170
VIDEO_FORMAT format = (VIDEO_FORMAT)d->videoFormat->itemData(d->videoFormat->currentIndex()).toInt();
172
// set frame width and frame height for dvd, vcd,etc to standard tv size
176
if(format == VIDEO_FORMAT_NTSC)
178
d->frameWidth->setValue(352);
179
d->frameHeight->setValue(240);
183
d->frameWidth->setValue(352);
184
d->frameHeight->setValue(288);
190
if(format == VIDEO_FORMAT_NTSC)
192
d->frameWidth->setValue(720);
193
d->frameHeight->setValue(480);
197
d->frameWidth->setValue(720);
198
d->frameHeight->setValue(576);
203
if(format == VIDEO_FORMAT_NTSC)
205
d->frameWidth->setValue(480);
206
d->frameHeight->setValue(480);
210
d->frameWidth->setValue(576);
211
d->frameHeight->setValue(480);
220
void SlideShowSettingsWidget::videoFormatChanged(int index)
222
VIDEO_TYPE type = (VIDEO_TYPE)d->videoType->itemData(d->videoType->currentIndex()).toInt();
223
VIDEO_FORMAT format = (VIDEO_FORMAT)d->videoFormat->itemData(index).toInt();
224
// set frame width and frame height for dvd, vcd,etc to standard tv size
225
if(format == VIDEO_FORMAT_NTSC)
232
d->frameWidth->setValue(720);
233
d->frameHeight->setValue(480);
239
d->frameWidth->setValue(480);
240
d->frameHeight->setValue(480);
246
d->frameWidth->setValue(352);
247
d->frameHeight->setValue(240);
262
d->frameWidth->setValue(720);
263
d->frameHeight->setValue(576);
269
d->frameWidth->setValue(576);
270
d->frameHeight->setValue(480);
276
d->frameWidth->setValue(352);
277
d->frameHeight->setValue(288);
287
void SlideShowSettingsWidget::setUpPPMSettings()
289
QGridLayout* mainLayout = new QGridLayout(d->PPMSettingsWidget);
290
QLabel* timeLabel = new QLabel("Image Display Time");
291
QLabel* effectLabel = new QLabel("Special Effect");
292
QLabel* transitionLabel = new QLabel("Transition");
293
QLabel* transSpeedLabel = new QLabel("Transition Speed");
295
d->timeVal = new QSpinBox();
296
d->timeVal->setRange(1,60);
298
d->effects = new QComboBox();
299
d->effects->setEditable(false);
300
d->effects->addItem(i18n("None"), (int)EFFECT_NONE);
301
d->effects->addItem(i18n("Ken-Burn Effect"), (int)EFFECT_KENBURN);
303
d->transitions = new QComboBox();
304
d->transitions->setEditable(false);
305
d->transitions->addItem(i18n("None"), (int)TRANSITION_TYPE_NONE);
306
d->transitions->addItem(i18n("Random"), (int)TRANSITION_TYPE_RANDOM);
307
d->transitions->addItem(i18n("Fade"), (int)TRANSITION_TYPE_FADE);
308
d->transitions->addItem(i18n("Slide Left to Right"), (int)TRANSITION_TYPE_SLIDE_L2R);
309
d->transitions->addItem(i18n("Slide Right to Left"), (int)TRANSITION_TYPE_SLIDE_R2L);
310
d->transitions->addItem(i18n("Slide Top to Bottom"), (int)TRANSITION_TYPE_SLIDE_T2B);
311
d->transitions->addItem(i18n("Slide Bottom to Top"), (int)TRANSITION_TYPE_SLIDE_B2T);
312
d->transitions->addItem(i18n("Push Left to Right"), (int)TRANSITION_TYPE_PUSH_L2R);
313
d->transitions->addItem(i18n("Push Right to Left"), (int)TRANSITION_TYPE_PUSH_R2L);
314
d->transitions->addItem(i18n("Push Top to Bottom"), (int)TRANSITION_TYPE_PUSH_T2B);
315
d->transitions->addItem(i18n("Push Bottom to Top"), (int)TRANSITION_TYPE_PUSH_B2T);
316
d->transitions->addItem(i18n("Swap Left to Right"), (int)TRANSITION_TYPE_SWAP_L2R);
317
d->transitions->addItem(i18n("Swap Right to Left"), (int)TRANSITION_TYPE_SWAP_R2L);
318
d->transitions->addItem(i18n("Swap Top to Bottom"), (int)TRANSITION_TYPE_SWAP_T2B);
319
d->transitions->addItem(i18n("Swap Bottom to Top"), (int)TRANSITION_TYPE_SWAP_B2T);
320
d->transitions->addItem(i18n("Roll Left to Right"), (int)TRANSITION_TYPE_ROLL_L2R);
321
d->transitions->addItem(i18n("Roll Right to Left"), (int)TRANSITION_TYPE_ROLL_R2L);
322
d->transitions->addItem(i18n("Roll Top to Bottom"), (int)TRANSITION_TYPE_ROLL_T2B);
323
d->transitions->addItem(i18n("Roll Bottom to Top"), (int)TRANSITION_TYPE_ROLL_B2T);
325
d->transitionSpeed = new QComboBox();
326
d->transitionSpeed->setEditable(false);
327
d->transitionSpeed->addItem(i18n("Slow"), (int)TRANSITION_SLOW);
328
d->transitionSpeed->addItem(i18n("Medium"), (int)TRANSITION_MEDIUM);
329
d->transitionSpeed->addItem(i18n("Fast"), (int)TRANSITION_FAST);
331
mainLayout->addWidget(timeLabel, 0, 0, 1, 1);
332
mainLayout->addWidget(d->timeVal, 0, 1, 1, 1);
333
mainLayout->addWidget(effectLabel, 1, 0, 1, 1);
334
mainLayout->addWidget(d->effects, 1, 1, 1, 1);
335
mainLayout->addWidget(transitionLabel, 2, 0, 1, 1);
336
mainLayout->addWidget(d->transitions, 2, 1, 1, 1);
337
mainLayout->addWidget(transSpeedLabel, 3, 0, 1, 1);
338
mainLayout->addWidget(d->transitionSpeed, 3, 1, 1, 1);
340
mainLayout->addWidget(new KSeparator(Qt::Horizontal), 4, 0, 1, 2);
342
d->tempDirLabel = new QLabel(i18n("Temporary Directory"));
343
QLabel* asptRatioCorLabel = new QLabel("Aspect Ratio Correction");
344
QLabel* heightLabel = new QLabel("Frame Height");
345
QLabel* widthLabel = new QLabel("Frame Width");
346
QLabel* aspectLabel = new QLabel("Aspect Ratio");
347
d->selectBtn = new KPushButton("Browse");
349
connect(d->selectBtn, SIGNAL(clicked(bool)),
350
this, SLOT(slotSelectTempDirectory()));
352
d->asptRatioCorrct = new QComboBox();
353
d->asptRatioCorrct->setEditable(false);
354
d->asptRatioCorrct->addItem(i18n("Auto"), (int)ASPECTCORRECTION_TYPE_AUTO);
355
d->asptRatioCorrct->addItem(i18n("None"), (int)ASPECTCORRECTION_TYPE_NONE);
356
d->asptRatioCorrct->addItem(i18n("Fill In"), (int)ASPECTCORRECTION_TYPE_FITIN);
357
d->asptRatioCorrct->addItem(i18n("Fit In"), (int)ASPECTCORRECTION_TYPE_FILLIN);
359
d->aspectRatio = new QComboBox();
360
d->aspectRatio->addItem(i18n("default"), (int)ASPECT_RATIO_DEFAULT);
361
d->aspectRatio->addItem(i18n("4:3"), (int)ASPECT_RATIO_4_3);
362
d->aspectRatio->addItem(i18n("16:9"), (int)ASPECT_RATIO_16_9);
364
d->frameHeight = new QSpinBox();
365
d->frameHeight->setRange(100, 1000);
366
d->frameWidth = new QSpinBox();
367
d->frameWidth->setRange(100, 1000);
369
mainLayout->addWidget(d->tempDirLabel, 5, 0, 1, 2);
370
mainLayout->addWidget(d->selectBtn, 6, 1, 1, 1);
371
mainLayout->addWidget(asptRatioCorLabel, 7, 0, 1, 1);
372
mainLayout->addWidget(d->asptRatioCorrct, 7, 1, 1, 1);
373
mainLayout->addWidget(heightLabel, 8, 0, 1, 1);
374
mainLayout->addWidget(d->frameHeight, 8, 1, 1, 1);
375
mainLayout->addWidget(widthLabel, 9, 0, 1, 1);
376
mainLayout->addWidget(d->frameWidth, 9, 1, 1, 1);
377
mainLayout->addWidget(aspectLabel, 10, 0, 1, 1);
378
mainLayout->addWidget(d->aspectRatio, 10, 1, 1, 1);
379
mainLayout->addItem(new QSpacerItem(1,1), 11, 0, 1, 2);
380
mainLayout->setRowStretch(11, 10);
383
void SlideShowSettingsWidget::resetToDefault()
385
d->timeVal->setValue(25);
386
d->effects->setCurrentIndex(d->effects->findData((int)EFFECT_NONE));
387
d->transitions->setCurrentIndex(d->transitions->findData((int)TRANSITION_TYPE_RANDOM));
388
d->transitionSpeed->setCurrentIndex(d->transitionSpeed->findData((int)TRANSITION_MEDIUM));
389
d->asptRatioCorrct->setCurrentIndex(d->asptRatioCorrct->findData((int)ASPECTCORRECTION_TYPE_NONE));
390
d->frameWidth->setValue(500);
391
d->frameHeight->setValue(500);
392
d->videoType->setCurrentIndex(d->videoType->findData((int)VIDEO_SVCD));
393
d->videoFormat->setCurrentIndex(d->videoFormat->findData((int)VIDEO_FORMAT_PAL));
396
void SlideShowSettingsWidget::setUpVideoSettings()
398
QGridLayout* mainLayout = new QGridLayout(d->VideoSettingsWidget);
399
QLabel* typeLabel = new QLabel("VideoType");
400
QLabel* formatLabel = new QLabel("Video Format");
402
d->videoType = new QComboBox();
403
d->videoType->setEditable(false);
404
d->videoType->addItem(i18n("AVI"), (int)VIDEO_AVI);
405
d->videoType->addItem(i18n("VCD"), (int)VIDEO_VCD);
406
d->videoType->addItem(i18n("SVCD"), (int)VIDEO_SVCD);
407
d->videoType->addItem(i18n("XVCD"), (int)VIDEO_XVCD);
408
d->videoType->addItem(i18n("DVD"), (int)VIDEO_DVD);
409
d->videoType->addItem(i18n("OGG"), (int)VIDEO_OGG);
411
d->videoFormat = new QComboBox();
412
d->videoFormat->setEditable(false);
413
d->videoFormat->addItem(i18n("PAL"), (int)VIDEO_FORMAT_PAL);
414
d->videoFormat->addItem(i18n("NTSC"), (int)VIDEO_FORMAT_NTSC);
415
d->videoFormat->addItem(i18n("SECAM"), (int)VIDEO_FORMAT_SECAM);
417
mainLayout->addWidget(typeLabel, 0, 0, 1, 1);
418
mainLayout->addWidget(d->videoType, 0, 1, 1, 1);
419
mainLayout->addWidget(formatLabel, 1, 0, 1, 1);
420
mainLayout->addWidget(d->videoFormat, 1, 1, 1, 1);
421
mainLayout->addWidget(new KSeparator(Qt::Horizontal), 2, 0, 1, 2);
423
d->audioFile = new QLabel(i18n("Audio Disabled"));
424
d->audioBtn = new KPushButton("Browse");
425
d->checkbox = new QCheckBox("Add Audio");
426
d->audioBtn->setEnabled(false);
428
d->saveFileLabel = new QLabel(i18n("Save video"));
429
d->saveBtn = new KPushButton("Browse");
431
connect(d->saveBtn, SIGNAL(clicked(bool)),
432
this, SLOT(slotSelectSaveFileName()));
434
connect(d->audioBtn, SIGNAL(clicked(bool)),
435
this, SLOT(slotSelectAudio()));
437
connect(d->checkbox, SIGNAL(stateChanged(int)),
438
this, SLOT(slotAudioChecked()));
440
mainLayout->addWidget(d->audioFile, 3, 0, 1, 2);
441
mainLayout->addWidget(d->audioBtn, 4, 1, 1, 1);
442
mainLayout->addWidget(d->checkbox, 5, 0, 1, 2);
443
mainLayout->addWidget(d->saveFileLabel, 6, 0, 1, 2);
444
mainLayout->addWidget(d->saveBtn, 7, 1, 1, 1);
446
mainLayout->addItem(new QSpacerItem(1,1), 10, 0, 1, 2);
447
mainLayout->setRowStretch(10, 10);
450
void SlideShowSettingsWidget::slotSelectTempDirectory()
452
QString path = KFileDialog::getExistingDirectory(KUrl(), this,
453
i18n("Select temporary directory"));
457
setTempDirPath(path);
458
d->tempDirLabel->setText(path);
462
void SlideShowSettingsWidget::slotSelectAudio()
464
QString path = KFileDialog::getOpenUrl().path();
466
d->audioFile->setText(path);
469
void SlideShowSettingsWidget::slotAudioChecked()
471
if(!d->checkbox->isChecked())
474
d->audioFile->setText("audio Disabled");
475
d->audioBtn->setEnabled(false);
479
d->audioFile->setText("select Audio");
480
d->audioBtn->setEnabled(true);
484
void SlideShowSettingsWidget::slotSelectSaveFileName()
486
QString path = KFileDialog::getSaveFileName();
487
d->saveFileLabel->setText(path);
492
QString SlideShowSettingsWidget::getTempDirPath() const
497
void SlideShowSettingsWidget::setTempDirPath(const QString& path)
499
if(KUrl(path).isValid())
502
d->path = QDir::tempPath();
505
void SlideShowSettingsWidget::updateData(int time, TRANSITION_TYPE transition, TRANSITION_SPEED transSpeed, EFFECT effect)
507
d->timeVal->setValue(time);
508
d->effects->setCurrentIndex(d->effects->findData((int)effect));
509
d->transitions->setCurrentIndex(d->transitions->findData((int)transition));
510
d->transitionSpeed->setCurrentIndex(d->transitionSpeed->findData((int)transSpeed));
513
ASPECTCORRECTION_TYPE SlideShowSettingsWidget::getAspectCorrection() const
515
return (ASPECTCORRECTION_TYPE)d->asptRatioCorrct->itemData(d->asptRatioCorrct->currentIndex()).toInt();
518
ASPECT_RATIO SlideShowSettingsWidget::getAspectRatio() const
520
return (ASPECT_RATIO)d->aspectRatio->itemData(d->aspectRatio->currentIndex()).toInt();
523
int SlideShowSettingsWidget::getFrameHeight() const
525
return d->frameHeight->value();
528
int SlideShowSettingsWidget::getFrameWidth() const
530
return d->frameWidth->value();
533
QString SlideShowSettingsWidget::getAudioFile() const
538
VIDEO_FORMAT SlideShowSettingsWidget::getVideoFormat() const
540
return (VIDEO_FORMAT)d->videoFormat->itemData(d->videoFormat->currentIndex()).toInt();
543
VIDEO_TYPE SlideShowSettingsWidget::getVideoType() const
545
return (VIDEO_TYPE)d->videoType->itemData(d->videoType->currentIndex()).toInt();
548
QString SlideShowSettingsWidget::getSaveFile() const
553
} // namespace KIPIVideoSlideShowPlugin