|
|
|
/* vi: ts=8 sts=4 sw=4
|
|
|
|
|
|
|
|
This file is part of the KDE project, module kcmbackground.
|
|
|
|
|
|
|
|
Copyright (C) 1999 Geert Jansen <g.t.jansen@stud.tue.nl>
|
|
|
|
Copyright (C) 2003 Waldo Bastian <bastian@kde.org>
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of the GNU General Public License
|
|
|
|
version 2 as published by the Free Software Foundation.
|
|
|
|
|
|
|
|
This library 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
|
|
|
|
Library General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
Boston, MA 02110-1301, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <config.h>
|
|
|
|
|
|
|
|
#include <tqcheckbox.h>
|
|
|
|
#include <tqevent.h>
|
|
|
|
#include <tqpushbutton.h>
|
|
|
|
#include <tqspinbox.h>
|
|
|
|
|
|
|
|
#include <kfiledialog.h>
|
|
|
|
#include <kimageio.h>
|
|
|
|
#include <klocale.h>
|
|
|
|
#include <kstandarddirs.h>
|
|
|
|
#include <kurldrag.h>
|
|
|
|
|
|
|
|
#include "bgsettings.h"
|
|
|
|
#include "bgwallpaper.h"
|
|
|
|
#include "bgwallpaper_ui.h"
|
|
|
|
|
|
|
|
/**** BGMultiWallpaperList ****/
|
|
|
|
|
|
|
|
BGMultiWallpaperList::BGMultiWallpaperList(TQWidget *parent, const char *name)
|
|
|
|
: TQListBox(parent, name)
|
|
|
|
{
|
|
|
|
setAcceptDrops(true);
|
|
|
|
setSelectionMode(TQListBox::Extended);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BGMultiWallpaperList::dragEnterEvent(TQDragEnterEvent *ev)
|
|
|
|
{
|
|
|
|
ev->accept(KURLDrag::canDecode(ev));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BGMultiWallpaperList::dropEvent(TQDropEvent *ev)
|
|
|
|
{
|
|
|
|
TQStringList files;
|
|
|
|
KURL::List urls;
|
|
|
|
KURLDrag::decode(ev, urls);
|
|
|
|
for(KURL::List::ConstIterator it = urls.begin();
|
|
|
|
it != urls.end(); ++it)
|
|
|
|
{
|
|
|
|
// TODO: Download remote files
|
|
|
|
if ((*it).isLocalFile())
|
|
|
|
files.append((*it).path());
|
|
|
|
}
|
|
|
|
insertStringList(files);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool BGMultiWallpaperList::hasSelection()
|
|
|
|
{
|
|
|
|
for ( unsigned i = 0; i < count(); i++)
|
|
|
|
{
|
|
|
|
if ( item( i ) && item( i )->isSelected() )
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void BGMultiWallpaperList::ensureSelectionVisible()
|
|
|
|
{
|
|
|
|
for ( int i = topItem(); i < topItem() + numItemsVisible() - 1; i++)
|
|
|
|
if ( item( i ) && item( i )->isSelected() )
|
|
|
|
return;
|
|
|
|
|
|
|
|
for ( unsigned i = 0; i < count(); i++)
|
|
|
|
if ( item( i ) && item( i )->isSelected() )
|
|
|
|
{
|
|
|
|
setTopItem( i );
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**** BGMultiWallpaperDialog ****/
|
|
|
|
|
|
|
|
BGMultiWallpaperDialog::BGMultiWallpaperDialog(KBackgroundSettings *settings,
|
|
|
|
TQWidget *parent, const char *name)
|
|
|
|
: KDialogBase(parent, name, true, i18n("Setup Slide Show"),
|
|
|
|
Ok | Cancel, Ok, true), m_pSettings(settings)
|
|
|
|
{
|
|
|
|
dlg = new BGMultiWallpaperBase(this);
|
|
|
|
setMainWidget(dlg);
|
|
|
|
|
|
|
|
dlg->m_spinInterval->setRange(1, 99999);
|
|
|
|
dlg->m_spinInterval->setSteps(1, 15);
|
|
|
|
dlg->m_spinInterval->setSuffix(i18n(" min"));
|
|
|
|
|
|
|
|
// Load
|
|
|
|
dlg->m_spinInterval->setValue(QMAX(1,m_pSettings->wallpaperChangeInterval()));
|
|
|
|
|
|
|
|
dlg->m_listImages->insertStringList(m_pSettings->wallpaperList());
|
|
|
|
|
|
|
|
if (m_pSettings->multiWallpaperMode() == KBackgroundSettings::Random)
|
|
|
|
dlg->m_cbRandom->setChecked(true);
|
|
|
|
|
|
|
|
connect(dlg->m_buttonAdd, TQT_SIGNAL(clicked()), TQT_SLOT(slotAdd()));
|
|
|
|
connect(dlg->m_buttonRemove, TQT_SIGNAL(clicked()), TQT_SLOT(slotRemove()));
|
|
|
|
connect(dlg->m_buttonMoveUp, TQT_SIGNAL(clicked()), TQT_SLOT(slotMoveUp()));
|
|
|
|
connect(dlg->m_buttonMoveDown, TQT_SIGNAL(clicked()), TQT_SLOT(slotMoveDown()));
|
|
|
|
connect(dlg->m_listImages, TQT_SIGNAL(clicked ( TQListBoxItem * )), TQT_SLOT(slotItemSelected( TQListBoxItem *)));
|
|
|
|
dlg->m_buttonRemove->setEnabled( false );
|
|
|
|
dlg->m_buttonMoveUp->setEnabled( false );
|
|
|
|
dlg->m_buttonMoveDown->setEnabled( false );
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void BGMultiWallpaperDialog::slotItemSelected( TQListBoxItem * )
|
|
|
|
{
|
|
|
|
dlg->m_buttonRemove->setEnabled( dlg->m_listImages->hasSelection() );
|
|
|
|
setEnabledMoveButtons();
|
|
|
|
}
|
|
|
|
|
|
|
|
void BGMultiWallpaperDialog::setEnabledMoveButtons()
|
|
|
|
{
|
|
|
|
bool hasSelection = dlg->m_listImages->hasSelection();
|
|
|
|
TQListBoxItem * item;
|
|
|
|
|
|
|
|
item = dlg->m_listImages->firstItem();
|
|
|
|
dlg->m_buttonMoveUp->setEnabled( hasSelection && item && !item->isSelected() );
|
|
|
|
item = dlg->m_listImages->item( dlg->m_listImages->count() - 1 );
|
|
|
|
dlg->m_buttonMoveDown->setEnabled( hasSelection && item && !item->isSelected() );
|
|
|
|
}
|
|
|
|
|
|
|
|
void BGMultiWallpaperDialog::slotAdd()
|
|
|
|
{
|
|
|
|
TQStringList mimeTypes = KImageIO::mimeTypes( KImageIO::Reading );
|
|
|
|
#ifdef HAVE_LIBART
|
|
|
|
mimeTypes += "image/svg+xml";
|
|
|
|
#endif
|
|
|
|
|
|
|
|
KFileDialog fileDialog(KGlobal::dirs()->findDirs("wallpaper", "").first(),
|
|
|
|
mimeTypes.join( " " ), this,
|
|
|
|
0L, true);
|
|
|
|
|
|
|
|
fileDialog.setCaption(i18n("Select Image"));
|
|
|
|
KFile::Mode mode = static_cast<KFile::Mode> (KFile::Files |
|
|
|
|
KFile::Directory |
|
|
|
|
KFile::ExistingOnly |
|
|
|
|
KFile::LocalOnly);
|
|
|
|
fileDialog.setMode(mode);
|
|
|
|
fileDialog.exec();
|
|
|
|
TQStringList files = fileDialog.selectedFiles();
|
|
|
|
if (files.isEmpty())
|
|
|
|
return;
|
|
|
|
|
|
|
|
dlg->m_listImages->insertStringList(files);
|
|
|
|
}
|
|
|
|
|
|
|
|
void BGMultiWallpaperDialog::slotRemove()
|
|
|
|
{
|
|
|
|
int current = -1;
|
|
|
|
for ( unsigned i = 0; i < dlg->m_listImages->count();)
|
|
|
|
{
|
|
|
|
TQListBoxItem * item = dlg->m_listImages->item( i );
|
|
|
|
if ( item && item->isSelected())
|
|
|
|
{
|
|
|
|
dlg->m_listImages->removeItem(i);
|
|
|
|
if (current == -1)
|
|
|
|
current = i;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
if ((current != -1) && (current < (signed)dlg->m_listImages->count()))
|
|
|
|
dlg->m_listImages->setSelected(current, true);
|
|
|
|
|
|
|
|
dlg->m_buttonRemove->setEnabled(dlg->m_listImages->hasSelection());
|
|
|
|
|
|
|
|
setEnabledMoveButtons();
|
|
|
|
}
|
|
|
|
|
|
|
|
void BGMultiWallpaperDialog::slotMoveUp()
|
|
|
|
{
|
|
|
|
for ( unsigned i = 1; i < dlg->m_listImages->count(); i++)
|
|
|
|
{
|
|
|
|
TQListBoxItem * item = dlg->m_listImages->item( i );
|
|
|
|
if ( item && item->isSelected() )
|
|
|
|
{
|
|
|
|
dlg->m_listImages->takeItem( item );
|
|
|
|
dlg->m_listImages->insertItem( item, i - 1 );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
dlg->m_listImages->ensureSelectionVisible();
|
|
|
|
setEnabledMoveButtons();
|
|
|
|
}
|
|
|
|
|
|
|
|
void BGMultiWallpaperDialog::slotMoveDown()
|
|
|
|
{
|
|
|
|
for ( unsigned i = dlg->m_listImages->count() - 1; i > 0; i--)
|
|
|
|
{
|
|
|
|
TQListBoxItem * item = dlg->m_listImages->item( i - 1 );
|
|
|
|
if ( item && item->isSelected())
|
|
|
|
{
|
|
|
|
dlg->m_listImages->takeItem( item );
|
|
|
|
dlg->m_listImages->insertItem( item, i );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
dlg->m_listImages->ensureSelectionVisible();
|
|
|
|
setEnabledMoveButtons();
|
|
|
|
}
|
|
|
|
|
|
|
|
void BGMultiWallpaperDialog::slotOk()
|
|
|
|
{
|
|
|
|
TQStringList lst;
|
|
|
|
for (unsigned i=0; i < dlg->m_listImages->count(); i++)
|
|
|
|
lst.append(dlg->m_listImages->text(i));
|
|
|
|
m_pSettings->setWallpaperList(lst);
|
|
|
|
m_pSettings->setWallpaperChangeInterval(dlg->m_spinInterval->value());
|
|
|
|
if (dlg->m_cbRandom->isChecked())
|
|
|
|
m_pSettings->setMultiWallpaperMode(KBackgroundSettings::Random);
|
|
|
|
else
|
|
|
|
m_pSettings->setMultiWallpaperMode(KBackgroundSettings::InOrder);
|
|
|
|
accept();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#include "bgwallpaper.moc"
|