99
101
QGridLayout * g = new QGridLayout( base );
101
103
d->mThemeList = new ThemeListWidget( base );
104
d->mThemeList->setSelectionMode(QAbstractItemView::ExtendedSelection);
102
105
d->mThemeList->setSortingEnabled( true );
103
g->addWidget( d->mThemeList, 0, 0, 5, 1 );
106
g->addWidget( d->mThemeList, 0, 0, 7, 1 );
105
connect( d->mThemeList, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
106
SLOT(themeListCurrentItemChanged(QListWidgetItem*,QListWidgetItem*)) );
108
connect( d->mThemeList, SIGNAL(itemClicked(QListWidgetItem*)),
109
SLOT(themeListItemClicked(QListWidgetItem*)) );
108
111
d->mNewThemeButton = new QPushButton( i18n( "New Theme" ), base );
109
112
d->mNewThemeButton->setIcon( KIcon( QLatin1String( "document-new" ) ) );
126
129
f->setMinimumHeight( 24 );
127
130
g->addWidget( f, 2, 1, Qt::AlignVCenter );
133
d->mExportThemeButton = new QPushButton( i18n( "Export Theme..." ), base );
134
g->addWidget( d->mExportThemeButton, 3, 1 );
136
connect( d->mExportThemeButton, SIGNAL(clicked()),
137
SLOT(exportThemeButtonClicked()) );
139
d->mImportThemeButton = new QPushButton( i18n( "Import Theme..." ), base );
140
g->addWidget( d->mImportThemeButton, 4, 1 );
141
connect( d->mImportThemeButton, SIGNAL(clicked()),
142
SLOT(importThemeButtonClicked()) );
144
f = new QFrame( base );
145
f->setFrameStyle( QFrame::Sunken | QFrame::HLine );
146
f->setMinimumHeight( 24 );
147
g->addWidget( f, 5, 1, Qt::AlignVCenter );
129
150
d->mDeleteThemeButton = new QPushButton( i18n( "Delete Theme" ), base );
130
151
d->mDeleteThemeButton->setIcon( KIcon( QLatin1String( "edit-delete" ) ) );
131
152
d->mDeleteThemeButton->setIconSize( QSize( KIconLoader::SizeSmall, KIconLoader::SizeSmall ) );
132
g->addWidget( d->mDeleteThemeButton, 3, 1 );
153
g->addWidget( d->mDeleteThemeButton, 6, 1 );
134
155
connect( d->mDeleteThemeButton, SIGNAL(clicked()),
135
156
SLOT(deleteThemeButtonClicked()) );
137
158
d->mEditor = new ThemeEditor( base );
138
g->addWidget( d->mEditor, 5, 0, 1, 2 );
159
g->addWidget( d->mEditor, 8, 0, 1, 2 );
140
161
connect( d->mEditor, SIGNAL(themeNameChanged()),
141
162
SLOT(editedThemeNameChanged()) );
234
void ConfigureThemesDialog::Private::themeListCurrentItemChanged( QListWidgetItem * cur, QListWidgetItem * )
257
void ConfigureThemesDialog::Private::themeListItemClicked(QListWidgetItem* cur)
261
const int numberOfSelectedItem(mThemeList->selectedItems().count());
238
263
ThemeListWidgetItem * item = cur ? dynamic_cast< ThemeListWidgetItem * >( cur ) : 0;
239
264
mDeleteThemeButton->setEnabled( item && !item->theme()->readOnly() );
240
mCloneThemeButton->setEnabled( item );
265
mCloneThemeButton->setEnabled( numberOfSelectedItem == 1 );
241
266
mEditor->editTheme( item ? item->theme() : 0 );
267
mExportThemeButton->setEnabled( numberOfSelectedItem > 0 );
243
269
if ( item && !item->isSelected() )
244
270
item->setSelected( true ); // make sure it's true
349
380
item = new ThemeListWidgetItem( mThemeList, copyTheme );
351
382
mThemeList->setCurrentItem( item );
383
mEditor->editTheme( item->theme() );
385
const int numberOfSelectedItem(mThemeList->selectedItems().count());
352
386
mDeleteThemeButton->setEnabled( item && !item->theme()->readOnly() );
387
mExportThemeButton->setEnabled( item );
388
mCloneThemeButton->setEnabled(numberOfSelectedItem == 1);
356
391
void ConfigureThemesDialog::Private::deleteThemeButtonClicked()
358
ThemeListWidgetItem * item = dynamic_cast< ThemeListWidgetItem * >( mThemeList->currentItem() );
393
QList<QListWidgetItem *> list = mThemeList->selectedItems();
361
if ( mThemeList->count() < 2 )
362
return; // no way: desperately try to keep at least one option set alive :)
364
398
mEditor->editTheme( 0 ); // forget it
366
delete item; // this will trigger themeListCurrentItemChanged()
368
mDeleteThemeButton->setEnabled( item && !item->theme()->readOnly() );
399
Q_FOREACH(QListWidgetItem * it, list) {
400
ThemeListWidgetItem * item = dynamic_cast< ThemeListWidgetItem * >( it );
403
if(!item->theme()->readOnly()) {
404
delete item;// this will trigger themeListCurrentItemChanged()
406
if ( mThemeList->count() < 2 )
407
break; // no way: desperately try to keep at least one option set alive :)
410
ThemeListWidgetItem *newItem = dynamic_cast< ThemeListWidgetItem * >(mThemeList->currentItem());
411
mDeleteThemeButton->setEnabled( newItem && !newItem->theme()->readOnly() );
412
mExportThemeButton->setEnabled( newItem );
413
const int numberOfSelectedItem(mThemeList->selectedItems().count());
414
mCloneThemeButton->setEnabled(numberOfSelectedItem == 1);
417
void ConfigureThemesDialog::Private::importThemeButtonClicked()
419
const QString filename = KFileDialog::getOpenFileName(QString(),QString::fromLatin1("*"),q,i18n("Import Theme"));
420
if(!filename.isEmpty()) {
421
KConfig config(filename);
423
if(config.hasGroup(QLatin1String("MessageListView::Themes"))) {
424
KConfigGroup grp( &config, QLatin1String("MessageListView::Themes") );
425
const int cnt = grp.readEntry( "Count", 0 );
427
while ( idx < cnt ) {
428
const QString data = grp.readEntry( QString::fromLatin1( "Set%1" ).arg( idx ), QString() );
429
if ( !data.isEmpty() )
431
Theme * set = new Theme();
432
if ( set->loadFromString( data ) ) {
433
set->setReadOnly( false );
434
set->detach(); // detach shared data
435
set->generateUniqueId(); // regenerate id so it becomes different
436
set->setName( uniqueNameForTheme( set->name() ) );
437
(void)new ThemeListWidgetItem( mThemeList, *set );
448
void ConfigureThemesDialog::Private::exportThemeButtonClicked()
450
QList<QListWidgetItem *> list = mThemeList->selectedItems();
454
const QString filename = KFileDialog::getSaveFileName(QString(),QString::fromLatin1("*"),q,i18n("Export Theme"));
455
if(!filename.isEmpty()) {
456
KConfig config(filename);
458
KConfigGroup grp( &config, QLatin1String("MessageListView::Themes") );
459
grp.writeEntry( "Count", list.count() );
462
Q_FOREACH(QListWidgetItem *item, list) {
463
ThemeListWidgetItem * themeItem = static_cast< ThemeListWidgetItem * >( item );
464
grp.writeEntry( QString::fromLatin1( "Set%1" ).arg( idx ), themeItem->theme()->saveToString() );
371
471
#include "configurethemesdialog.moc"