~ubuntu-branches/ubuntu/vivid/kdepim/vivid

« back to all changes in this revision

Viewing changes to messagelist/utils/configurethemesdialog.cpp

  • Committer: Package Import Robot
  • Author(s): Scott Kitterman, Jonathan Riddell, Rohan Garg, Scott Kitterman
  • Date: 2012-11-21 13:12:36 UTC
  • mfrom: (0.2.33)
  • Revision ID: package-import@ubuntu.com-20121121131236-32ijw9a2txrar80k
Tags: 4:4.9.80-0ubuntu1
[ Jonathan Riddell ]
* New upstream beta release

[ Rohan Garg ]
* Add nepomuk-core-dev to build-deps

[ Scott Kitterman ]
* Add new package, libpimcommon4
  - Add libpimcommon4.install
  - Add to debian/control, including kdepim-dbg and kdepim-dev depends
  - Add to kdepim-dev.install
* Remove usr/bin/backupmail and related files from kmail.install as they are
  not provided by upstream anymore
* Add usr/bin/pimsettingexporter and related files to kmail.install
* Add libnepomukwidgets-dev to build-depends

Show diffs side-by-side

added added

removed removed

Lines of Context:
34
34
#include <KLocale>
35
35
#include <KIconLoader>
36
36
#include <KMessageBox>
 
37
#include <KFileDialog>
 
38
#include <KConfigGroup>
37
39
 
38
40
namespace MessageList
39
41
{
99
101
  QGridLayout * g = new QGridLayout( base );
100
102
 
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 );
104
107
 
105
 
  connect( d->mThemeList, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
106
 
           SLOT(themeListCurrentItemChanged(QListWidgetItem*,QListWidgetItem*)) );
 
108
  connect( d->mThemeList, SIGNAL(itemClicked(QListWidgetItem*)),
 
109
           SLOT(themeListItemClicked(QListWidgetItem*)) );
107
110
 
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 );
128
131
 
 
132
 
 
133
  d->mExportThemeButton = new QPushButton( i18n( "Export Theme..." ), base );
 
134
  g->addWidget( d->mExportThemeButton, 3, 1 );
 
135
 
 
136
  connect( d->mExportThemeButton, SIGNAL(clicked()),
 
137
           SLOT(exportThemeButtonClicked()) );
 
138
 
 
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()) );
 
143
 
 
144
  f = new QFrame( base );
 
145
  f->setFrameStyle( QFrame::Sunken | QFrame::HLine );
 
146
  f->setMinimumHeight( 24 );
 
147
  g->addWidget( f, 5, 1, Qt::AlignVCenter );
 
148
 
 
149
 
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 );
133
154
 
134
155
  connect( d->mDeleteThemeButton, SIGNAL(clicked()),
135
156
           SLOT(deleteThemeButtonClicked()) );
136
157
 
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 );
139
160
 
140
161
  connect( d->mEditor, SIGNAL(themeNameChanged()),
141
162
           SLOT(editedThemeNameChanged()) );
157
178
void ConfigureThemesDialog::selectTheme( const QString &themeId )
158
179
{
159
180
  ThemeListWidgetItem * item = d->findThemeItemById( themeId );
160
 
  if ( item )
 
181
  if ( item ) {
161
182
    d->mThemeList->setCurrentItem( item );
 
183
    d->themeListItemClicked(item);
 
184
  }
162
185
}
163
186
 
164
187
void ConfigureThemesDialog::Private::okButtonClicked()
231
254
}
232
255
 
233
256
 
234
 
void ConfigureThemesDialog::Private::themeListCurrentItemChanged( QListWidgetItem * cur, QListWidgetItem * )
 
257
void ConfigureThemesDialog::Private::themeListItemClicked(QListWidgetItem* cur)
235
258
{
236
259
  commitEditor();
237
260
 
 
261
  const int numberOfSelectedItem(mThemeList->selectedItems().count());
 
262
 
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 );
242
268
 
243
269
  if ( item && !item->isSelected() )
244
270
    item->setSelected( true ); // make sure it's true
300
326
}
301
327
 
302
328
 
303
 
QString ConfigureThemesDialog::Private::uniqueNameForTheme( QString baseName, Theme * skipTheme )
 
329
QString ConfigureThemesDialog::Private::uniqueNameForTheme( const QString& baseName, Theme * skipTheme )
304
330
{
305
331
  QString ret = baseName;
306
332
  if( ret.isEmpty() )
320
346
 
321
347
void ConfigureThemesDialog::Private::newThemeButtonClicked()
322
348
{
 
349
  const int numberOfSelectedItem(mThemeList->selectedItems().count());
323
350
  Theme emptyTheme;
324
351
  emptyTheme.setName( uniqueNameForTheme( i18n( "New Theme" ) ) );
325
352
  Theme::Column * col = new Theme::Column();
331
358
  ThemeListWidgetItem * item = new ThemeListWidgetItem( mThemeList, emptyTheme );
332
359
 
333
360
  mThemeList->setCurrentItem( item );
 
361
  mEditor->editTheme( item->theme() );
 
362
 
334
363
  mDeleteThemeButton->setEnabled( item && !item->theme()->readOnly() );
335
 
 
 
364
  mExportThemeButton->setEnabled( item );
 
365
  mCloneThemeButton->setEnabled(numberOfSelectedItem == 1);
336
366
}
337
367
 
338
368
void ConfigureThemesDialog::Private::cloneThemeButtonClicked()
340
370
  ThemeListWidgetItem * item = dynamic_cast< ThemeListWidgetItem * >( mThemeList->currentItem() );
341
371
  if ( !item )
342
372
    return;
343
 
 
 
373
  commitEditor();
 
374
  item->setSelected(false);
344
375
  Theme copyTheme( *( item->theme() ) );
345
376
  copyTheme.setReadOnly( false );
346
377
  copyTheme.detach(); // detach shared data
349
380
  item = new ThemeListWidgetItem( mThemeList, copyTheme );
350
381
 
351
382
  mThemeList->setCurrentItem( item );
 
383
  mEditor->editTheme( item->theme() );
 
384
 
 
385
  const int numberOfSelectedItem(mThemeList->selectedItems().count());
352
386
  mDeleteThemeButton->setEnabled( item && !item->theme()->readOnly() );
353
 
 
 
387
  mExportThemeButton->setEnabled( item );
 
388
  mCloneThemeButton->setEnabled(numberOfSelectedItem == 1);
354
389
}
355
390
 
356
391
void ConfigureThemesDialog::Private::deleteThemeButtonClicked()
357
392
{
358
 
  ThemeListWidgetItem * item = dynamic_cast< ThemeListWidgetItem * >( mThemeList->currentItem() );
359
 
  if ( !item )
 
393
  QList<QListWidgetItem *> list = mThemeList->selectedItems();
 
394
  if(list.isEmpty()) {
360
395
    return;
361
 
  if ( mThemeList->count() < 2 )
362
 
    return; // no way: desperately try to keep at least one option set alive :)
 
396
  }
363
397
 
364
398
  mEditor->editTheme( 0 ); // forget it
365
 
 
366
 
  delete item; // this will trigger themeListCurrentItemChanged()
367
 
 
368
 
  mDeleteThemeButton->setEnabled( item && !item->theme()->readOnly() );
369
 
}
 
399
  Q_FOREACH(QListWidgetItem * it, list) {
 
400
    ThemeListWidgetItem * item = dynamic_cast< ThemeListWidgetItem * >( it );
 
401
    if ( !item )
 
402
      return;
 
403
    if(!item->theme()->readOnly()) {
 
404
      delete item;// this will trigger themeListCurrentItemChanged()
 
405
    }
 
406
    if ( mThemeList->count() < 2 )
 
407
      break; // no way: desperately try to keep at least one option set alive :)
 
408
  }
 
409
 
 
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);
 
415
}
 
416
 
 
417
void ConfigureThemesDialog::Private::importThemeButtonClicked()
 
418
{
 
419
  const QString filename = KFileDialog::getOpenFileName(QString(),QString::fromLatin1("*"),q,i18n("Import Theme"));
 
420
  if(!filename.isEmpty()) {
 
421
    KConfig config(filename);
 
422
 
 
423
    if(config.hasGroup(QLatin1String("MessageListView::Themes"))) {
 
424
      KConfigGroup grp( &config, QLatin1String("MessageListView::Themes") );
 
425
      const int cnt = grp.readEntry( "Count", 0 );
 
426
      int idx = 0;
 
427
      while ( idx < cnt ) {
 
428
        const QString data = grp.readEntry( QString::fromLatin1( "Set%1" ).arg( idx ), QString() );
 
429
        if ( !data.isEmpty() )
 
430
        {
 
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 );
 
438
          } else {
 
439
            delete set;
 
440
          }
 
441
        }
 
442
        ++idx;
 
443
      }
 
444
    }
 
445
  }
 
446
}
 
447
 
 
448
void ConfigureThemesDialog::Private::exportThemeButtonClicked()
 
449
{
 
450
  QList<QListWidgetItem *> list = mThemeList->selectedItems();
 
451
  if(list.isEmpty()) {
 
452
    return;
 
453
  }
 
454
  const QString filename = KFileDialog::getSaveFileName(QString(),QString::fromLatin1("*"),q,i18n("Export Theme"));
 
455
  if(!filename.isEmpty()) {
 
456
     KConfig config(filename);
 
457
 
 
458
     KConfigGroup grp( &config, QLatin1String("MessageListView::Themes") );
 
459
     grp.writeEntry( "Count", list.count() );
 
460
 
 
461
     int idx = 0;
 
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() );
 
465
       ++idx;
 
466
     }
 
467
  }
 
468
}
 
469
 
370
470
 
371
471
#include "configurethemesdialog.moc"