You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
786 lines
26 KiB
786 lines
26 KiB
/* ============================================================
|
|
*
|
|
* This file is a part of kipi-plugins project
|
|
* http://www.kipi-plugins.org
|
|
*
|
|
* Date : 2003-02-17
|
|
* Description : a kipi plugin to slide images.
|
|
*
|
|
* Copyright (C) 2006-2007 by Valerio Fuoglio <valerio dot fuoglio at gmail dot com>
|
|
* Copyright (C) 2003-2005 by Renchi Raju <renchi@pooh.tam.uiuc.edu>
|
|
*
|
|
* This program is free software; you can redistribute it
|
|
* and/or modify it under the terms of the GNU General
|
|
* Public License as published by the Free Software Foundation;
|
|
* either version 2, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* ============================================================ */
|
|
|
|
// TQt includes.
|
|
|
|
#include <tqbuttongroup.h>
|
|
#include <tqcheckbox.h>
|
|
#include <tqcombobox.h>
|
|
#include <tqlabel.h>
|
|
#include <tqradiobutton.h>
|
|
#include <tqspinbox.h>
|
|
#include <tqlayout.h>
|
|
#include <tqmap.h>
|
|
#include <tqframe.h>
|
|
#include <tqpushbutton.h>
|
|
#include <tqtabwidget.h>
|
|
#include <tqcolor.h>
|
|
#include <tqnamespace.h>
|
|
#include <tqlistbox.h>
|
|
#include <tqfileinfo.h>
|
|
|
|
// Kde includes.
|
|
|
|
#include <tdelocale.h>
|
|
#include <tdeconfig.h>
|
|
#include <tdemessagebox.h>
|
|
#include <tdeapplication.h>
|
|
#include <tdeaboutdata.h>
|
|
#include <khelpmenu.h>
|
|
#include <kiconloader.h>
|
|
#include <tdepopupmenu.h>
|
|
#include <kstandarddirs.h>
|
|
#include <tdefontdialog.h>
|
|
#include <kcolorbutton.h>
|
|
#include <tdeio/previewjob.h>
|
|
#include <kurl.h>
|
|
|
|
// libkipi includes
|
|
|
|
#include <libkipi/interface.h>
|
|
#include <libkipi/imagedialog.h>
|
|
|
|
// Local includes.
|
|
|
|
#include "kpaboutdata.h"
|
|
#include "pluginsversion.h"
|
|
#include "listimageitems.h"
|
|
#include "slideshow.h"
|
|
#include "slideshowgl.h"
|
|
#include "slideshowkb.h"
|
|
#include "slideshowconfig.h"
|
|
#include "slideshowconfig.moc"
|
|
|
|
namespace KIPISlideShowPlugin
|
|
{
|
|
|
|
SlideShowConfig::SlideShowConfig(bool allowSelectedOnly, KIPI::Interface * interface,
|
|
TQWidget *parent, const char* name, bool ImagesHasComments,
|
|
KURL::List *urlList)
|
|
: SlideShowConfigBase(parent, name)
|
|
{
|
|
// About data and help button.
|
|
|
|
KIPIPlugins::KPAboutData * about = new KIPIPlugins::KPAboutData(I18N_NOOP("Slide Show"),
|
|
0,
|
|
TDEAboutData::License_GPL,
|
|
I18N_NOOP("A Kipi plugin for image slideshow"),
|
|
"(c) 2003-2004, Renchi Raju\n(c) 2007, Valerio Fuoglio");
|
|
|
|
about->addAuthor("Renchi Raju", I18N_NOOP("Author"),
|
|
"renchi@pooh.tam.uiuc.edu");
|
|
about->addAuthor("Valerio Fuoglio", I18N_NOOP("Author and maintainer"),
|
|
"valerio.fuoglio@gmail.com");
|
|
|
|
KHelpMenu* helpMenu = new KHelpMenu(this, about, false);
|
|
helpMenu->menu()->removeItemAt(0);
|
|
helpMenu->menu()->insertItem(i18n("Plugin Handbook"), this, TQT_SLOT(slotHelp()), 0, -1, 0);
|
|
m_helpButton->setPopup( helpMenu->menu() );
|
|
|
|
// Switch to selected files only (it depends on allowSelectedOnly)
|
|
|
|
m_selectedFilesButton->setEnabled( allowSelectedOnly );
|
|
|
|
m_delayMsMaxValue = 100000;
|
|
m_delayMsMinValue = 100;
|
|
m_delayMsLineStep = 10;
|
|
|
|
m_delaySpinBox->setMinValue(m_delayMsMinValue);
|
|
m_delaySpinBox->setMaxValue(m_delayMsMaxValue);
|
|
m_delaySpinBox->setLineStep(m_delayMsLineStep);
|
|
|
|
m_interface = interface;
|
|
|
|
// Signal to Slot connections
|
|
|
|
connect(m_openglCheckBox, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotOpenGLToggled()));
|
|
connect(m_buttonStart, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotStartClicked()));
|
|
connect(m_printCommentsCheckBox, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotPrintCommentsToggled()));
|
|
connect(m_commentsFontColor, TQT_SIGNAL(changed(const TQColor &)), this, TQT_SLOT(slotCommentsFontColorChanged()));
|
|
connect(m_commentsBgColor, TQT_SIGNAL(changed(const TQColor &)), this, TQT_SLOT(slotCommentsBgColorChanged()));
|
|
connect(m_useMillisecondsCheckBox, TQT_SIGNAL(toggled(bool)), TQT_SLOT(slotUseMillisecondsToggled()));
|
|
connect(m_delaySpinBox, TQT_SIGNAL(valueChanged(int)), this, TQT_SLOT(slotDelayChanged()));
|
|
connect(m_effectsComboBox, TQT_SIGNAL(activated(int)), this, TQT_SLOT(slotEffectChanged()));
|
|
|
|
connect(m_fileSrcButtonGroup, TQT_SIGNAL(clicked(int)), this, TQT_SLOT(slotSelection()));
|
|
|
|
connect( m_ImagesFilesListBox, TQT_SIGNAL( currentChanged( TQListBoxItem * ) ),
|
|
this, TQT_SLOT( slotImagesFilesSelected(TQListBoxItem *) ) );
|
|
connect(m_ImagesFilesListBox, TQT_SIGNAL( addedDropItems(KURL::List) ),
|
|
this, TQT_SLOT( slotAddDropItems(KURL::List)));
|
|
connect( m_ImagesFilesButtonAdd, TQT_SIGNAL( clicked() ),
|
|
this, TQT_SLOT( slotImagesFilesButtonAdd() ) );
|
|
connect( m_ImagesFilesButtonDelete, TQT_SIGNAL( clicked() ),
|
|
this, TQT_SLOT( slotImagesFilesButtonDelete() ) );
|
|
connect( m_ImagesFilesButtonUp, TQT_SIGNAL( clicked() ),
|
|
this, TQT_SLOT( slotImagesFilesButtonUp() ) );
|
|
connect( m_ImagesFilesButtonDown, TQT_SIGNAL( clicked() ),
|
|
this, TQT_SLOT( slotImagesFilesButtonDown() ) );
|
|
|
|
connect(m_cacheCheckBox, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotCacheToggled()));
|
|
|
|
m_thumbJob = 0L;
|
|
|
|
// Configuration file management
|
|
|
|
m_config = new TDEConfig("kipirc");
|
|
m_config->setGroup("SlideShow Settings");
|
|
|
|
readSettings();
|
|
|
|
slotUseMillisecondsToggled();
|
|
|
|
// Comments tab management
|
|
|
|
m_commentsFontChooser->setSampleText(
|
|
i18n("Slideshow is part of KIPI-Plugins (http://www.kipi-plugins.org)"));
|
|
|
|
// Host application images has comments
|
|
if ( ! ImagesHasComments ) {
|
|
m_printCommentsCheckBox->setEnabled(FALSE);
|
|
m_tabWidget->setTabEnabled(commentsTab, FALSE);
|
|
}
|
|
|
|
m_urlList = urlList;
|
|
|
|
slotSelection();
|
|
slotEffectChanged();
|
|
}
|
|
|
|
SlideShowConfig::~SlideShowConfig()
|
|
{
|
|
if ( m_thumbJob ) delete m_thumbJob;
|
|
if ( m_config ) delete m_config;
|
|
}
|
|
|
|
void SlideShowConfig::loadEffectNames()
|
|
{
|
|
m_effectsComboBox->clear();
|
|
|
|
TQMap<TQString,TQString> effectNames = SlideShow::effectNamesI18N();
|
|
TQStringList effects;
|
|
|
|
TQMap<TQString,TQString>::Iterator it;
|
|
for (it = effectNames.begin(); it != effectNames.end(); ++it)
|
|
effects.append(it.data());
|
|
|
|
m_effectsComboBox->insertStringList(effects);
|
|
|
|
for (int i=0; i<m_effectsComboBox->count(); i++) {
|
|
if (effectNames[m_effectName] == m_effectsComboBox->text(i)) {
|
|
m_effectsComboBox->setCurrentItem(i);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void SlideShowConfig::loadEffectNamesGL()
|
|
{
|
|
m_effectsComboBox->clear();
|
|
|
|
TQStringList effects;
|
|
TQMap<TQString,TQString> effectNames;
|
|
TQMap<TQString,TQString>::Iterator it;
|
|
|
|
// Load slideshowgl effects
|
|
effectNames = SlideShowGL::effectNamesI18N();
|
|
|
|
for (it = effectNames.begin(); it != effectNames.end(); ++it)
|
|
effects.append(it.data());
|
|
|
|
// Load Ken Burns effect
|
|
effectNames = SlideShowKB::effectNamesI18N();
|
|
for (it = effectNames.begin(); it != effectNames.end(); ++it)
|
|
effects.append(it.data());
|
|
|
|
// Update GUI
|
|
|
|
effects.sort();
|
|
m_effectsComboBox->insertStringList(effects);
|
|
|
|
for (int i=0; i<m_effectsComboBox->count(); i++) {
|
|
if (effectNames[m_effectNameGL] == m_effectsComboBox->text(i)) {
|
|
m_effectsComboBox->setCurrentItem(i);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void SlideShowConfig::readSettings()
|
|
{
|
|
bool opengl;
|
|
int delay;
|
|
bool printFileName;
|
|
bool printProgress;
|
|
bool printFileComments;
|
|
bool loop;
|
|
bool shuffle;
|
|
bool showSelectedFilesOnly;
|
|
bool useMilliseconds;
|
|
bool enableMouseWheel;
|
|
|
|
opengl = m_config->readBoolEntry("OpenGL", false);
|
|
delay = m_config->readNumEntry("Delay", 1500);
|
|
printFileName = m_config->readBoolEntry("Print Filename", true);
|
|
printProgress = m_config->readBoolEntry("Print Progress Inticator", true);
|
|
printFileComments = m_config->readBoolEntry("Print Comments", false);
|
|
loop = m_config->readBoolEntry("Loop", false);
|
|
shuffle = m_config->readBoolEntry("Shuffle", false);
|
|
showSelectedFilesOnly = m_config->readBoolEntry("Show Selected Files Only", false);
|
|
m_effectName = m_config->readEntry("Effect Name", "Random");
|
|
m_effectNameGL = m_config->readEntry("Effect Name (OpenGL)", "Random");
|
|
|
|
useMilliseconds = m_config->readBoolEntry("Use Milliseconds", false);
|
|
enableMouseWheel = m_config->readNumEntry("Enable Mouse Wheel", true);
|
|
|
|
|
|
// Comments tab settings
|
|
uint commentsFontColor;
|
|
uint commentsBgColor;
|
|
int commentsLinesLength;
|
|
|
|
TQFont *savedFont = new TQFont();
|
|
savedFont->setFamily(m_config->readEntry("Comments Font Family"));
|
|
savedFont->setPointSize(m_config->readNumEntry("Comments Font Size", 10 ));
|
|
savedFont->setBold(m_config->readBoolEntry("Comments Font Bold", false));
|
|
savedFont->setItalic(m_config->readBoolEntry("Comments Font Italic", false));
|
|
savedFont->setUnderline(m_config->readBoolEntry("Comments Font Underline", false));
|
|
savedFont->setOverline(m_config->readBoolEntry("Comments Font Overline", false));
|
|
savedFont->setStrikeOut(m_config->readBoolEntry("Comments Font StrikeOut", false));
|
|
savedFont->setFixedPitch(m_config->readBoolEntry("Comments Font FixedPitch", false));
|
|
|
|
commentsFontColor = m_config->readUnsignedNumEntry("Comments Font Color", 0xffffff);
|
|
commentsBgColor = m_config->readUnsignedNumEntry("Comments Bg Color", 0x000000);
|
|
|
|
commentsLinesLength = m_config->readNumEntry("Comments Lines Length", 72);
|
|
|
|
// Advanced tab
|
|
bool enableCache, kbDisableFadeInOut, kbDisableCrossFade;
|
|
|
|
kbDisableFadeInOut = m_config->readBoolEntry("KB Disable FadeInOut", false);
|
|
kbDisableCrossFade = m_config->readBoolEntry("KB Disable Crossfade", false);
|
|
|
|
enableCache = m_config->readBoolEntry("Enable Cache", false);
|
|
m_cacheSize = m_config->readNumEntry("Cache Size", 5);
|
|
|
|
|
|
// -- Apply Settings to widgets ------------------------------
|
|
|
|
m_openglCheckBox->setChecked(opengl);
|
|
|
|
m_delaySpinBox->setValue(delay);
|
|
|
|
m_printNameCheckBox->setChecked(printFileName);
|
|
|
|
m_printProgressCheckBox->setChecked(printProgress);
|
|
|
|
m_printCommentsCheckBox->setChecked(printFileComments);
|
|
|
|
m_loopCheckBox->setChecked(loop);
|
|
|
|
m_shuffleCheckBox->setChecked(shuffle);
|
|
|
|
m_enableMouseWheelCheckBox->setChecked(enableMouseWheel);
|
|
m_useMillisecondsCheckBox->setChecked(useMilliseconds);
|
|
|
|
if (showSelectedFilesOnly && m_selectedFilesButton->isEnabled() )
|
|
m_selectedFilesButton->setChecked(true);
|
|
else
|
|
m_allFilesButton->setChecked(true);
|
|
|
|
m_commentsLinesLengthSpinBox->setValue(commentsLinesLength);
|
|
m_commentsFontColor->setColor(TQColor(commentsFontColor));
|
|
m_commentsBgColor->setColor(TQColor(commentsBgColor));
|
|
m_commentsFontChooser->setFont(*savedFont);
|
|
delete savedFont;
|
|
|
|
m_kbDisableFadeCheckBox->setChecked(kbDisableFadeInOut);
|
|
m_kbDisableCrossfadeCheckBox->setChecked(kbDisableCrossFade);
|
|
|
|
m_cacheCheckBox->setChecked(enableCache);
|
|
|
|
slotOpenGLToggled();
|
|
slotCacheToggled();
|
|
}
|
|
|
|
void SlideShowConfig::saveSettings()
|
|
{
|
|
if (!m_config) return;
|
|
|
|
m_config->writeEntry("OpenGL", m_openglCheckBox->isChecked());
|
|
|
|
// Delay will be always saved as millisecond value, to keep compatibility
|
|
if ( m_useMillisecondsCheckBox->isChecked() )
|
|
m_config->writeEntry("Delay", m_delaySpinBox->value());
|
|
else
|
|
m_config->writeEntry("Delay", m_delaySpinBox->value()*1000);
|
|
|
|
m_config->writeEntry("Print Filename", m_printNameCheckBox->isChecked());
|
|
m_config->writeEntry("Print Progress Indicator", m_printProgressCheckBox->isChecked());
|
|
m_config->writeEntry("Print Comments", m_printCommentsCheckBox->isChecked());
|
|
m_config->writeEntry("Loop", m_loopCheckBox->isChecked());
|
|
m_config->writeEntry("Shuffle", m_shuffleCheckBox->isChecked());
|
|
m_config->writeEntry("Show Selected Files Only", m_selectedFilesButton->isChecked());
|
|
|
|
m_config->writeEntry("Use Milliseconds", m_useMillisecondsCheckBox->isChecked());
|
|
m_config->writeEntry("Enable Mouse Wheel", m_enableMouseWheelCheckBox->isChecked());
|
|
|
|
// Comments tab settings
|
|
TQFont* commentsFont = new TQFont(m_commentsFontChooser->font());
|
|
m_config->writeEntry("Comments Font Family", commentsFont->family());
|
|
m_config->writeEntry("Comments Font Size", commentsFont->pointSize());
|
|
m_config->writeEntry("Comments Font Bold", commentsFont->bold());
|
|
m_config->writeEntry("Comments Font Italic", commentsFont->italic());
|
|
m_config->writeEntry("Comments Font Underline", commentsFont->underline());
|
|
m_config->writeEntry("Comments Font Overline", commentsFont->overline());
|
|
m_config->writeEntry("Comments Font StrikeOut", commentsFont->strikeOut());
|
|
m_config->writeEntry("Comments Font FixedPitch", commentsFont->fixedPitch());
|
|
delete commentsFont;
|
|
|
|
TQColor* fontColor = new TQColor(m_commentsFontColor->color());
|
|
uint commentsFontColorRGB = fontColor->rgb();
|
|
delete fontColor;
|
|
m_config->writeEntry("Comments Font Color", commentsFontColorRGB);
|
|
|
|
TQColor* bgColor = new TQColor(m_commentsBgColor->color());
|
|
uint commentsBgColorRGB = bgColor->rgb();
|
|
delete bgColor;
|
|
m_config->writeEntry("Comments Bg Color", commentsBgColorRGB);
|
|
|
|
m_config->writeEntry("Comments Lines Length", m_commentsLinesLengthSpinBox->value());
|
|
|
|
if (!m_openglCheckBox->isChecked()) {
|
|
|
|
TQString effect;
|
|
TQMap<TQString,TQString> effectNames = SlideShow::effectNamesI18N();
|
|
TQMap<TQString,TQString>::Iterator it;
|
|
|
|
for (it = effectNames.begin(); it != effectNames.end(); ++it) {
|
|
if (it.data() == m_effectsComboBox->currentText()) {
|
|
effect = it.key();
|
|
break;
|
|
}
|
|
}
|
|
|
|
m_config->writeEntry("Effect Name", effect);
|
|
|
|
}
|
|
else
|
|
{
|
|
TQMap<TQString,TQString> effects;
|
|
TQMap<TQString,TQString> effectNames;
|
|
TQMap<TQString,TQString>::Iterator it;
|
|
|
|
// Load slideshowgl effects
|
|
effectNames = SlideShowGL::effectNamesI18N();
|
|
|
|
for (it = effectNames.begin(); it != effectNames.end(); ++it)
|
|
effects.insert(it.key(),it.data());
|
|
|
|
// Load Ken Burns effect
|
|
effectNames = SlideShowKB::effectNamesI18N();
|
|
for (it = effectNames.begin(); it != effectNames.end(); ++it)
|
|
effects.insert(it.key(),it.data());
|
|
|
|
TQString effect;
|
|
|
|
for (it = effects.begin(); it != effects.end(); ++it) {
|
|
if ( it.data() == m_effectsComboBox->currentText()) {
|
|
effect = it.key();
|
|
break;
|
|
}
|
|
}
|
|
|
|
m_config->writeEntry("Effect Name (OpenGL)", effect);
|
|
}
|
|
|
|
// Advanced settings
|
|
m_config->writeEntry("KB Disable FadeInOut", m_kbDisableFadeCheckBox->isChecked());
|
|
m_config->writeEntry("KB Disable Crossfade", m_kbDisableCrossfadeCheckBox->isChecked());
|
|
|
|
m_config->writeEntry("Enable Cache", m_cacheCheckBox->isChecked());
|
|
m_config->writeEntry("Cache Size", m_cacheSizeSpinBox->value());
|
|
|
|
m_config->sync();
|
|
}
|
|
|
|
void SlideShowConfig::addItems(const KURL::List& fileList)
|
|
{
|
|
if (fileList.isEmpty()) return;
|
|
KURL::List Files = fileList;
|
|
|
|
for ( KURL::List::Iterator it = Files.begin() ; it != Files.end() ; ++it )
|
|
{
|
|
KURL currentFile = *it;
|
|
|
|
TQFileInfo fi(currentFile.path());
|
|
TQString Temp = fi.dirPath();
|
|
TQString albumName = Temp.section('/', -1);
|
|
|
|
KIPI::ImageInfo info = m_interface->info(currentFile);
|
|
TQString comments = info.description();
|
|
|
|
ImageItem *item = new ImageItem( m_ImagesFilesListBox,
|
|
currentFile.path().section('/', -1 ), // File name with extension.
|
|
comments, // Image comments.
|
|
currentFile.path().section('/', 0, -1), // Complete path with file name.
|
|
albumName // Album name.
|
|
);
|
|
|
|
item->setName( currentFile.path().section('/', -1) );
|
|
}
|
|
|
|
ShowNumberImages( m_ImagesFilesListBox->count() );
|
|
m_ImagesFilesListBox->setCurrentItem( m_ImagesFilesListBox->count()-1) ;
|
|
slotImagesFilesSelected(m_ImagesFilesListBox->item(m_ImagesFilesListBox->currentItem()));
|
|
m_ImagesFilesListBox->centerCurrentItem();
|
|
}
|
|
|
|
void SlideShowConfig::slotCommentsBgColorChanged()
|
|
{
|
|
m_commentsFontChooser->setBackgroundColor(m_commentsBgColor->color());
|
|
}
|
|
|
|
void SlideShowConfig::slotCommentsFontColorChanged()
|
|
{
|
|
m_commentsFontChooser->setColor(m_commentsFontColor->color());
|
|
}
|
|
|
|
void SlideShowConfig::slotPrintCommentsToggled()
|
|
{
|
|
m_tabWidget->setTabEnabled(commentsTab, m_printCommentsCheckBox->isChecked());
|
|
}
|
|
|
|
void SlideShowConfig::slotUseMillisecondsToggled()
|
|
{
|
|
|
|
int delayValue = m_delaySpinBox->value();
|
|
|
|
m_delaySpinBox->setValue(0);
|
|
|
|
if ( m_useMillisecondsCheckBox -> isChecked() ) {
|
|
m_delayLabel->setText(TQString("Delay between images (ms):"));
|
|
|
|
m_delaySpinBox->setMinValue(m_delayMsMinValue);
|
|
m_delaySpinBox->setMaxValue(m_delayMsMaxValue);
|
|
m_delaySpinBox->setLineStep(m_delayMsLineStep);
|
|
|
|
m_delaySpinBox->setValue(delayValue*1000);
|
|
}
|
|
else {
|
|
m_delayLabel->setText(TQString("Delay between images (s):"));
|
|
|
|
m_delaySpinBox->setMinValue(m_delayMsMinValue/1000);
|
|
m_delaySpinBox->setMaxValue(m_delayMsMaxValue/100);
|
|
m_delaySpinBox->setLineStep(m_delayMsLineStep/10);
|
|
|
|
m_delaySpinBox->setValue(delayValue/1000);
|
|
}
|
|
}
|
|
|
|
void SlideShowConfig::slotEffectChanged()
|
|
{
|
|
bool isKB = m_effectsComboBox->currentText() == i18n("Ken Burns");
|
|
|
|
m_printNameCheckBox->setEnabled(!isKB);
|
|
m_printProgressCheckBox->setEnabled(!isKB);
|
|
m_printCommentsCheckBox->setEnabled(!isKB);
|
|
|
|
m_cacheButtonGroup->setEnabled(!isKB);
|
|
}
|
|
|
|
void SlideShowConfig::slotCacheToggled()
|
|
{
|
|
bool isEnabled = m_cacheCheckBox->isChecked();
|
|
|
|
m_cacheSizeLabel1->setEnabled(isEnabled);
|
|
m_cacheSizeLabel2->setEnabled(isEnabled);
|
|
m_cacheSizeSpinBox->setEnabled(isEnabled);
|
|
}
|
|
|
|
void SlideShowConfig::slotOpenGLToggled()
|
|
{
|
|
if (m_openglCheckBox->isChecked()) {
|
|
loadEffectNamesGL();
|
|
}
|
|
else {
|
|
loadEffectNames();
|
|
}
|
|
|
|
ShowNumberImages( m_ImagesFilesListBox->count() );
|
|
|
|
// slotEffectChanged();
|
|
}
|
|
|
|
void SlideShowConfig::slotDelayChanged()
|
|
{
|
|
ShowNumberImages( m_ImagesFilesListBox->count() );
|
|
}
|
|
|
|
void SlideShowConfig::slotSelection()
|
|
{
|
|
KURL::List urlList;
|
|
if (m_selectedFilesButton->isChecked())
|
|
{
|
|
urlList = m_interface->currentSelection().images();
|
|
|
|
m_ImagesFilesButtonAdd->setEnabled(FALSE);
|
|
m_ImagesFilesButtonDelete->setEnabled(FALSE);
|
|
m_ImagesFilesButtonUp->setEnabled(FALSE);
|
|
m_ImagesFilesButtonDown->setEnabled(FALSE);
|
|
}
|
|
else
|
|
if (m_allFilesButton->isChecked())
|
|
{
|
|
KURL currentPath = m_interface->currentAlbum().path();
|
|
TQValueList<KIPI::ImageCollection> albumList;
|
|
albumList = m_interface->allAlbums();
|
|
TQValueList<KIPI::ImageCollection>::iterator it;
|
|
|
|
urlList = m_interface->currentAlbum().images();
|
|
for ( it = albumList.begin(); it != albumList.end(); ++it )
|
|
if (currentPath.isParentOf((*it).path()) && !((*it).path() == currentPath))
|
|
urlList += (*it).images();
|
|
|
|
m_ImagesFilesButtonAdd->setEnabled(FALSE);
|
|
m_ImagesFilesButtonDelete->setEnabled(FALSE);
|
|
m_ImagesFilesButtonUp->setEnabled(FALSE);
|
|
m_ImagesFilesButtonDown->setEnabled(FALSE);
|
|
}
|
|
|
|
if ( m_customButton->isChecked() ) // Custom selected
|
|
{
|
|
m_ImagesFilesButtonAdd->setEnabled(TRUE);
|
|
m_ImagesFilesButtonDelete->setEnabled(TRUE);
|
|
m_ImagesFilesButtonUp->setEnabled(TRUE);
|
|
m_ImagesFilesButtonDown->setEnabled(TRUE);
|
|
}
|
|
else
|
|
{
|
|
if (!urlList.isEmpty())
|
|
{
|
|
m_ImagesFilesListBox->clear();
|
|
addItems(urlList);
|
|
}
|
|
}
|
|
}
|
|
|
|
void SlideShowConfig::slotImagesFilesSelected( TQListBoxItem *item )
|
|
{
|
|
|
|
if ( !item || m_ImagesFilesListBox->count() == 0 )
|
|
{
|
|
m_label7->setText("");
|
|
m_ImageLabel->clear();
|
|
return;
|
|
}
|
|
|
|
ImageItem *pitem = static_cast<ImageItem*>( item );
|
|
|
|
if ( !pitem ) return;
|
|
|
|
KURL url;
|
|
url.setPath(pitem->path());
|
|
|
|
m_ImageLabel->clear();
|
|
|
|
if ( m_thumbJob ) delete m_thumbJob;
|
|
|
|
m_thumbJob = TDEIO::filePreview( url, m_ImageLabel->width() );
|
|
|
|
connect(m_thumbJob, TQT_SIGNAL(gotPreview(const KFileItem*, const TQPixmap&)),
|
|
TQT_SLOT(slotGotPreview(const KFileItem*, const TQPixmap&)));
|
|
connect(m_thumbJob, TQT_SIGNAL(failed(const KFileItem*)),
|
|
TQT_SLOT(slotFailedPreview(const KFileItem*)));
|
|
|
|
int index = m_ImagesFilesListBox->index ( item );
|
|
m_label7->setText(i18n("Image no. %1").arg(index + 1));
|
|
}
|
|
|
|
void SlideShowConfig::slotAddDropItems(KURL::List filesUrl)
|
|
{
|
|
addItems(filesUrl);
|
|
}
|
|
|
|
void SlideShowConfig::slotImagesFilesButtonAdd( void )
|
|
{
|
|
KURL::List ImageFilesList =
|
|
KIPI::ImageDialog::getImageURLs( this, m_interface );
|
|
if ( !ImageFilesList.isEmpty() )
|
|
addItems( ImageFilesList );
|
|
}
|
|
|
|
void SlideShowConfig::slotImagesFilesButtonDelete( void )
|
|
{
|
|
for (uint i = 0 ; i < m_ImagesFilesListBox->count() ; ++i)
|
|
{
|
|
if (m_ImagesFilesListBox->isSelected(i))
|
|
{
|
|
m_ImagesFilesListBox->removeItem(i);
|
|
m_ImagesFilesListBox->setCurrentItem(i);
|
|
--i;
|
|
}
|
|
}
|
|
|
|
m_ImagesFilesListBox->setSelected(m_ImagesFilesListBox->item(m_ImagesFilesListBox->currentItem()), true);
|
|
slotImagesFilesSelected(m_ImagesFilesListBox->item(m_ImagesFilesListBox->currentItem()));
|
|
ShowNumberImages( m_ImagesFilesListBox->count() );
|
|
}
|
|
|
|
void SlideShowConfig::slotImagesFilesButtonUp( void )
|
|
{
|
|
int Cpt = 0;
|
|
|
|
for (uint i = 0 ; i < m_ImagesFilesListBox->count() ; ++i)
|
|
if (m_ImagesFilesListBox->isSelected(i))
|
|
++Cpt;
|
|
|
|
if (Cpt == 0)
|
|
return;
|
|
|
|
if (Cpt > 1)
|
|
{
|
|
KMessageBox::error(this, i18n("You can only move up one image file at once."));
|
|
return;
|
|
}
|
|
|
|
unsigned int Index = m_ImagesFilesListBox->currentItem();
|
|
|
|
if (Index == 0)
|
|
return;
|
|
|
|
ImageItem *pitem = static_cast<ImageItem*>( m_ImagesFilesListBox->item(Index) );
|
|
TQString path(pitem->path());
|
|
TQString comment(pitem->comments());
|
|
TQString name(pitem->name());
|
|
TQString album(pitem->album());
|
|
m_ImagesFilesListBox->removeItem(Index);
|
|
ImageItem *item = new ImageItem( 0, name, comment, path, album );
|
|
item->setName( name );
|
|
m_ImagesFilesListBox->insertItem(item, Index-1);
|
|
m_ImagesFilesListBox->setSelected(Index-1, true);
|
|
m_ImagesFilesListBox->setCurrentItem(Index-1);
|
|
}
|
|
|
|
void SlideShowConfig::slotImagesFilesButtonDown( void )
|
|
{
|
|
int Cpt = 0;
|
|
|
|
for (uint i = 0 ; i < m_ImagesFilesListBox->count() ; ++i)
|
|
if (m_ImagesFilesListBox->isSelected(i))
|
|
++Cpt;
|
|
|
|
if (Cpt == 0)
|
|
return;
|
|
|
|
if (Cpt > 1)
|
|
{
|
|
KMessageBox::error(this, i18n("You can only move down one image file at once."));
|
|
return;
|
|
}
|
|
|
|
unsigned int Index = m_ImagesFilesListBox->currentItem();
|
|
|
|
if (Index == m_ImagesFilesListBox->count())
|
|
return;
|
|
|
|
ImageItem *pitem = static_cast<ImageItem*>( m_ImagesFilesListBox->item(Index) );
|
|
TQString path(pitem->path());
|
|
TQString comment(pitem->comments());
|
|
TQString name(pitem->name());
|
|
TQString album(pitem->name());
|
|
m_ImagesFilesListBox->removeItem(Index);
|
|
ImageItem *item = new ImageItem( 0, name, comment, path, album );
|
|
item->setName( name );
|
|
m_ImagesFilesListBox->insertItem(item, Index+1);
|
|
m_ImagesFilesListBox->setSelected(Index+1, true);
|
|
m_ImagesFilesListBox->setCurrentItem(Index+1);
|
|
}
|
|
|
|
void SlideShowConfig::ShowNumberImages( int Number )
|
|
{
|
|
TQTime TotalDuration (0, 0, 0);
|
|
|
|
int TransitionDuration = 2000;
|
|
|
|
if ( m_openglCheckBox->isChecked() )
|
|
TransitionDuration += 500;
|
|
|
|
if ( m_useMillisecondsCheckBox->isChecked() )
|
|
TotalDuration = TotalDuration.addMSecs(Number * m_delaySpinBox->text().toInt());
|
|
else
|
|
TotalDuration = TotalDuration.addSecs(Number * m_delaySpinBox->text().toInt());
|
|
|
|
TotalDuration = TotalDuration.addMSecs((Number-1)*TransitionDuration);
|
|
|
|
if ( Number < 2)
|
|
m_label6->setText(i18n("%1 image [%2]").arg(Number).arg(TotalDuration.toString()));
|
|
else
|
|
m_label6->setText(i18n("%1 images [%2]").arg(Number).arg(TotalDuration.toString()));
|
|
}
|
|
|
|
void SlideShowConfig::slotGotPreview(const KFileItem*, const TQPixmap &pixmap)
|
|
{
|
|
m_ImageLabel->setPixmap(pixmap);
|
|
m_thumbJob = 0L;
|
|
}
|
|
|
|
void SlideShowConfig::slotFailedPreview(const KFileItem*)
|
|
{
|
|
m_thumbJob = 0L;
|
|
}
|
|
|
|
void SlideShowConfig::SlotPortfolioDurationChanged ( int )
|
|
{
|
|
ShowNumberImages( m_ImagesFilesListBox->count() );
|
|
}
|
|
|
|
void SlideShowConfig::slotStartClicked()
|
|
{
|
|
saveSettings();
|
|
|
|
for (uint i=0 ; i < m_ImagesFilesListBox->count() ; ++i)
|
|
{
|
|
ImageItem *pitem = static_cast<ImageItem*>( m_ImagesFilesListBox->item(i) );
|
|
if (!TQFile::exists(pitem->path()))
|
|
{
|
|
KMessageBox::error(this,
|
|
i18n("Cannot access to file %1, please check the path is right.").arg(pitem->path()));
|
|
return;
|
|
}
|
|
m_urlList->append(pitem->path()); // Input images files.
|
|
}
|
|
|
|
emit buttonStartClicked();
|
|
}
|
|
|
|
|
|
void SlideShowConfig::slotHelp()
|
|
{
|
|
TDEApplication::kApplication()->invokeHelp("slideshow",
|
|
"kipi-plugins");
|
|
}
|
|
|
|
} // NameSpace KIPISlideShowPlugin
|