198
184
// the other pages will be updated as necessary
199
185
_pageNeedsUpdate.fill(true);
200
preparePage( _ui->tabWidget->currentIndex() );
186
preparePage(_ui->tabWidget->currentIndex());
204
189
createTempProfile();
207
192
const Profile::Ptr EditProfileDialog::lookupProfile() const
211
196
void EditProfileDialog::preparePage(int page)
213
const Profile::Ptr info = lookupProfile();
198
const Profile::Ptr profile = lookupProfile();
215
Q_ASSERT( _pageNeedsUpdate.count() > page );
200
Q_ASSERT(_pageNeedsUpdate.count() > page);
218
203
QWidget* pageWidget = _ui->tabWidget->widget(page);
220
if ( _pageNeedsUpdate[page] )
222
if ( pageWidget == _ui->generalTab )
223
setupGeneralPage(info);
224
else if ( pageWidget == _ui->tabsTab )
226
else if ( pageWidget == _ui->appearanceTab )
227
setupAppearancePage(info);
228
else if ( pageWidget == _ui->scrollingTab )
229
setupScrollingPage(info);
230
else if ( pageWidget == _ui->keyboardTab )
231
setupKeyboardPage(info);
232
else if ( pageWidget == _ui->advancedTab )
233
setupAdvancedPage(info);
205
if (_pageNeedsUpdate[page]) {
206
if (pageWidget == _ui->generalTab)
207
setupGeneralPage(profile);
208
else if (pageWidget == _ui->tabsTab)
209
setupTabsPage(profile);
210
else if (pageWidget == _ui->appearanceTab)
211
setupAppearancePage(profile);
212
else if (pageWidget == _ui->scrollingTab)
213
setupScrollingPage(profile);
214
else if (pageWidget == _ui->keyboardTab)
215
setupKeyboardPage(profile);
216
else if (pageWidget == _ui->mouseTab)
217
setupMousePage(profile);
218
else if (pageWidget == _ui->advancedTab)
219
setupAdvancedPage(profile);
237
223
_pageNeedsUpdate[page] = false;
240
226
// start page entry animation for color schemes
241
if ( pageWidget == _ui->appearanceTab )
242
_colorSchemeAnimationTimeLine->start();
227
if (pageWidget == _ui->appearanceTab)
228
_colorSchemeAnimationTimeLine->start();
244
230
void EditProfileDialog::selectProfileName()
246
232
_ui->profileNameEdit->setFocus();
247
233
_ui->profileNameEdit->selectAll();
249
void EditProfileDialog::setupGeneralPage(const Profile::Ptr info)
235
void EditProfileDialog::setupGeneralPage(const Profile::Ptr profile)
251
237
// basic profile options
253
ProfileGroup::Ptr group = info->asGroup();
254
if ( !group || group->profiles().count() < 2)
256
_ui->profileNameEdit->setText( info->name() );
239
_ui->emptyNameWarningWidget->setWordWrap(false);
240
_ui->emptyNameWarningWidget->setCloseButtonVisible(false);
241
_ui->emptyNameWarningWidget->setMessageType(KMessageWidget::Warning);
243
ProfileGroup::Ptr group = profile->asGroup();
244
if (!group || group->profiles().count() < 2) {
245
_ui->profileNameEdit->setText(profile->name());
257
246
_ui->profileNameEdit->setClearButtonShown(true);
259
_ui->emptyNameWarningWidget->setVisible( info->name().isEmpty() );
248
_ui->emptyNameWarningWidget->setVisible(profile->name().isEmpty());
260
249
_ui->emptyNameWarningWidget->setText(i18n("Profile name is empty."));
264
_ui->profileNameEdit->setText( groupProfileNames(group,-1) );
251
_ui->profileNameEdit->setText(groupProfileNames(group, -1));
265
252
_ui->profileNameEdit->setEnabled(false);
266
253
_ui->profileNameLabel->setEnabled(false);
273
ShellCommand command( info->command() , info->arguments() );
274
_ui->commandEdit->setText( command.fullCommand() );
259
ShellCommand command(profile->command() , profile->arguments());
260
_ui->commandEdit->setText(command.fullCommand());
275
261
KUrlCompletion* exeCompletion = new KUrlCompletion(KUrlCompletion::ExeCompletion);
276
262
exeCompletion->setParent(this);
277
263
exeCompletion->setDir(QString());
278
_ui->commandEdit->setCompletionObject( exeCompletion );
264
_ui->commandEdit->setCompletionObject(exeCompletion);
280
_ui->initialDirEdit->setText( info->defaultWorkingDirectory() );
266
_ui->initialDirEdit->setText(profile->defaultWorkingDirectory());
281
267
KUrlCompletion* dirCompletion = new KUrlCompletion(KUrlCompletion::DirCompletion);
282
268
dirCompletion->setParent(this);
283
_ui->initialDirEdit->setCompletionObject( dirCompletion );
269
_ui->initialDirEdit->setCompletionObject(dirCompletion);
284
270
_ui->initialDirEdit->setClearButtonShown(true);
286
_ui->dirSelectButton->setIcon( KIcon("folder-open") );
287
_ui->iconSelectButton->setIcon( KIcon(info->icon()) );
288
_ui->startInSameDirButton->setChecked(info->property<bool>(Profile::StartInCurrentSessionDir));
272
_ui->dirSelectButton->setIcon(KIcon("folder-open"));
273
_ui->iconSelectButton->setIcon(KIcon(profile->icon()));
274
_ui->startInSameDirButton->setChecked(profile->startInCurrentSessionDir());
290
276
// window options
291
_ui->showMenuBarButton->setChecked( info->property<bool>(Profile::ShowMenuBar) );
292
_ui->showTerminalSizeHintButton->setChecked( info->property<bool>(Profile::ShowTerminalSizeHint) );
293
_ui->saveGeometryOnExitButton->setChecked( info->property<bool>(Profile::SaveGeometryOnExit) );
277
_ui->showTerminalSizeHintButton->setChecked(profile->showTerminalSizeHint());
278
_ui->saveGeometryOnExitButton->setChecked(profile->saveGeometryOnExit());
295
280
// signals and slots
296
connect( _ui->dirSelectButton , SIGNAL(clicked()) , this , SLOT(selectInitialDir()) );
297
connect( _ui->iconSelectButton , SIGNAL(clicked()) , this , SLOT(selectIcon()) );
298
connect( _ui->startInSameDirButton , SIGNAL(toggled(bool)) , this ,
281
connect(_ui->dirSelectButton, SIGNAL(clicked()), this, SLOT(selectInitialDir()));
282
connect(_ui->iconSelectButton, SIGNAL(clicked()), this, SLOT(selectIcon()));
283
connect(_ui->startInSameDirButton, SIGNAL(toggled(bool)), this ,
299
284
SLOT(startInSameDir(bool)));
300
connect( _ui->profileNameEdit , SIGNAL(textChanged(QString)) , this ,
301
SLOT(profileNameChanged(QString)) );
302
connect( _ui->initialDirEdit , SIGNAL(textChanged(QString)) , this ,
303
SLOT(initialDirChanged(QString)) );
304
connect(_ui->commandEdit , SIGNAL(textChanged(QString)) , this ,
305
SLOT(commandChanged(QString)) );
306
connect(_ui->environmentEditButton , SIGNAL(clicked()) , this ,
307
SLOT(showEnvironmentEditor()) );
285
connect(_ui->profileNameEdit, SIGNAL(textChanged(QString)), this,
286
SLOT(profileNameChanged(QString)));
287
connect(_ui->initialDirEdit, SIGNAL(textChanged(QString)), this,
288
SLOT(initialDirChanged(QString)));
289
connect(_ui->commandEdit, SIGNAL(textChanged(QString)), this,
290
SLOT(commandChanged(QString)));
291
connect(_ui->environmentEditButton , SIGNAL(clicked()), this,
292
SLOT(showEnvironmentEditor()));
309
connect(_ui->showMenuBarButton , SIGNAL(toggled(bool)) , this ,
310
SLOT(showMenuBar(bool)) );
311
connect(_ui->saveGeometryOnExitButton , SIGNAL(toggled(bool)) , this ,
312
SLOT(saveGeometryOnExit(bool)) );
313
connect(_ui->showTerminalSizeHintButton , SIGNAL(toggled(bool)) , this ,
314
SLOT(showTerminalSizeHint(bool)) );
294
connect(_ui->saveGeometryOnExitButton, SIGNAL(toggled(bool)), this,
295
SLOT(saveGeometryOnExit(bool)));
296
connect(_ui->showTerminalSizeHintButton, SIGNAL(toggled(bool)), this,
297
SLOT(showTerminalSizeHint(bool)));
316
299
void EditProfileDialog::showEnvironmentEditor()
318
const Profile::Ptr info = lookupProfile();
320
KDialog* dialog = new KDialog(this);
321
KTextEdit* edit = new KTextEdit(dialog);
323
QStringList currentEnvironment = info->property<QStringList>(Profile::Environment);
325
edit->setPlainText( currentEnvironment.join("\n") );
326
edit->setToolTip( i18n("One environment variable per line" ) );
328
dialog->setPlainCaption(i18n("Edit Environment"));
329
dialog->setMainWidget(edit);
331
if ( dialog->exec() == QDialog::Accepted )
301
const Profile::Ptr profile = lookupProfile();
303
QWeakPointer<KDialog> dialog = new KDialog(this);
304
KTextEdit* edit = new KTextEdit(dialog.data());
306
QStringList currentEnvironment = profile->environment();
308
edit->setPlainText(currentEnvironment.join("\n"));
309
edit->setToolTip(i18n("One environment variable per line"));
311
dialog.data()->setPlainCaption(i18n("Edit Environment"));
312
dialog.data()->setMainWidget(edit);
314
if (dialog.data()->exec() == QDialog::Accepted) {
333
315
QStringList newEnvironment = edit->toPlainText().split('\n');
334
updateTempProfileProperty(Profile::Environment,newEnvironment);
316
updateTempProfileProperty(Profile::Environment, newEnvironment);
337
dialog->deleteLater();
319
delete dialog.data();
339
void EditProfileDialog::setupTabsPage(const Profile::Ptr info)
321
void EditProfileDialog::setupTabsPage(const Profile::Ptr profile)
341
323
// tab title format
342
_ui->tabTitleEdit->setClearButtonShown(true);
343
_ui->remoteTabTitleEdit->setClearButtonShown(true);
344
_ui->tabTitleEdit->setText( info->property<QString>(Profile::LocalTabTitleFormat) );
345
_ui->remoteTabTitleEdit->setText(
346
info->property<QString>(Profile::RemoteTabTitleFormat));
349
int tabBarMode = info->property<int>(Profile::TabBarMode);
350
int tabBarPosition = info->property<int>(Profile::TabBarPosition);
351
int newTabBehavior = info->property<int>(Profile::NewTabBehavior);
353
// note: Items should be in the same order as the
354
// Profile::TabBarModeEnum enum
355
_ui->tabBarVisibilityCombo->addItems( QStringList() << i18n("Always Hide Tab Bar")
356
<< i18n("Show Tab Bar When Needed")
357
<< i18n("Always Show Tab Bar") );
358
_ui->tabBarVisibilityCombo->setCurrentIndex(tabBarMode);
360
// note: Items should be in the same order as the
361
// Profile::TabBarPositionEnum enum
362
_ui->tabBarPositionCombo->addItems( QStringList() << i18n("Below Terminal Displays")
363
<< i18n("Above Terminal Displays") );
364
_ui->tabBarPositionCombo->setCurrentIndex(tabBarPosition);
366
// note: Items should be in the same order as the
367
// Profile::NewTabBehaviorEnum enum
368
_ui->newTabBehaviorCombo->addItems( QStringList() << i18n("Put New Tab At The End")
369
<< i18n("Put New Tab After Current Tab") );
370
_ui->newTabBehaviorCombo->setCurrentIndex(newTabBehavior);
372
_ui->newTabButton->setChecked(info->property<bool>(Profile::ShowNewAndCloseTabButtons));
324
_ui->renameTabWidget->setTabTitleText(profile->localTabTitleFormat());
325
_ui->renameTabWidget->setRemoteTabTitleText(profile->remoteTabTitleFormat());
327
connect(_ui->renameTabWidget, SIGNAL(tabTitleFormatChanged(QString)), this,
328
SLOT(tabTitleFormatChanged(QString)));
329
connect(_ui->renameTabWidget, SIGNAL(remoteTabTitleFormatChanged(QString)), this,
330
SLOT(remoteTabTitleFormatChanged(QString)));
374
332
// tab monitoring
375
int silenceSeconds = info->property<int>(Profile::SilenceSeconds);
333
const int silenceSeconds = profile->silenceSeconds();
376
334
_ui->silenceSecondsSpinner->setValue(silenceSeconds);
379
connect( _ui->tabBarVisibilityCombo , SIGNAL(activated(int)) , this ,
380
SLOT(tabBarVisibilityChanged(int)) );
381
connect( _ui->tabBarPositionCombo , SIGNAL(activated(int)) , this ,
382
SLOT(tabBarPositionChanged(int)) );
383
connect( _ui->newTabBehaviorCombo , SIGNAL(activated(int)) , this ,
384
SLOT(newTabBehaviorChanged(int)) );
385
connect( _ui->newTabButton , SIGNAL(toggled(bool)) , this ,
386
SLOT(showNewTabButton(bool)) );
388
connect(_ui->tabTitleEdit , SIGNAL(textChanged(QString)) , this ,
389
SLOT(tabTitleFormatChanged(QString)) );
390
connect(_ui->remoteTabTitleEdit , SIGNAL(textChanged(QString)) , this ,
391
SLOT(remoteTabTitleFormatChanged(QString)));
393
connect( _ui->silenceSecondsSpinner , SIGNAL(valueChanged(int)) ,
394
this , SLOT(silenceSecondsChanged(int)) );
396
// menus for local and remote tab title dynamic elements
397
TabTitleFormatAction* localTabTitleAction = new TabTitleFormatAction(this);
398
localTabTitleAction->setContext(Session::LocalTabTitle);
399
_ui->tabTitleEditButton->setMenu(localTabTitleAction->menu());
400
connect( localTabTitleAction , SIGNAL(dynamicElementSelected(QString)) ,
401
this , SLOT(insertTabTitleText(QString)) );
403
TabTitleFormatAction* remoteTabTitleAction = new TabTitleFormatAction(this);
404
remoteTabTitleAction->setContext(Session::RemoteTabTitle);
405
_ui->remoteTabTitleEditButton->setMenu(remoteTabTitleAction->menu());
406
connect( remoteTabTitleAction , SIGNAL(dynamicElementSelected(QString)) ,
407
this , SLOT(insertRemoteTabTitleText(QString)) );
409
void EditProfileDialog::showNewTabButton(bool show)
411
updateTempProfileProperty(Profile::ShowNewAndCloseTabButtons,show);
413
void EditProfileDialog::tabBarVisibilityChanged(int newValue)
415
updateTempProfileProperty( Profile::TabBarMode , newValue );
417
void EditProfileDialog::tabBarPositionChanged(int newValue)
419
updateTempProfileProperty( Profile::TabBarPosition , newValue );
421
void EditProfileDialog::newTabBehaviorChanged(int newValue)
423
updateTempProfileProperty( Profile::NewTabBehavior , newValue );
425
void EditProfileDialog::insertTabTitleText(const QString& text)
427
_ui->tabTitleEdit->insert(text);
429
void EditProfileDialog::insertRemoteTabTitleText(const QString& text)
431
_ui->remoteTabTitleEdit->insert(text);
433
void EditProfileDialog::showMenuBar(bool show)
435
updateTempProfileProperty(Profile::ShowMenuBar,show);
437
void EditProfileDialog::saveGeometryOnExit(bool save)
439
updateTempProfileProperty(Profile::SaveGeometryOnExit,save);
441
void EditProfileDialog::showTerminalSizeHint(bool show)
443
updateTempProfileProperty(Profile::ShowTerminalSizeHint,show);
335
_ui->silenceSecondsSpinner->setSuffix(ki18ncp("Unit of time", " second", " seconds"));
337
connect(_ui->silenceSecondsSpinner, SIGNAL(valueChanged(int)),
338
this, SLOT(silenceSecondsChanged(int)));
341
void EditProfileDialog::saveGeometryOnExit(bool value)
343
updateTempProfileProperty(Profile::SaveGeometryOnExit, value);
345
void EditProfileDialog::showTerminalSizeHint(bool value)
347
updateTempProfileProperty(Profile::ShowTerminalSizeHint, value);
445
349
void EditProfileDialog::tabTitleFormatChanged(const QString& format)
447
updateTempProfileProperty(Profile::LocalTabTitleFormat,format);
351
updateTempProfileProperty(Profile::LocalTabTitleFormat, format);
449
353
void EditProfileDialog::remoteTabTitleFormatChanged(const QString& format)
451
updateTempProfileProperty(Profile::RemoteTabTitleFormat,format);
355
updateTempProfileProperty(Profile::RemoteTabTitleFormat, format);
454
358
void EditProfileDialog::silenceSecondsChanged(int seconds)
519
425
_ui->colorSchemeList->setMouseTracking(true);
520
426
_ui->colorSchemeList->installEventFilter(this);
521
_ui->colorSchemeList->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn );
427
_ui->colorSchemeList->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
523
connect( _ui->colorSchemeList->selectionModel() ,
524
SIGNAL(selectionChanged(QItemSelection,QItemSelection))
525
, this , SLOT(colorSchemeSelected()) );
526
connect( _ui->colorSchemeList , SIGNAL(entered(QModelIndex)) , this ,
527
SLOT(previewColorScheme(QModelIndex)) );
429
connect(_ui->colorSchemeList->selectionModel(),
430
SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
431
this, SLOT(colorSchemeSelected()));
432
connect(_ui->colorSchemeList, SIGNAL(entered(QModelIndex)), this,
433
SLOT(previewColorScheme(QModelIndex)));
529
435
updateColorSchemeButtons();
531
connect( _ui->editColorSchemeButton , SIGNAL(clicked()) , this ,
532
SLOT(editColorScheme()) );
533
connect( _ui->removeColorSchemeButton , SIGNAL(clicked()) , this ,
534
SLOT(removeColorScheme()) );
535
connect( _ui->newColorSchemeButton , SIGNAL(clicked()) , this ,
536
SLOT(newColorScheme()) );
437
connect(_ui->editColorSchemeButton, SIGNAL(clicked()), this,
438
SLOT(editColorScheme()));
439
connect(_ui->removeColorSchemeButton, SIGNAL(clicked()), this,
440
SLOT(removeColorScheme()));
441
connect(_ui->newColorSchemeButton, SIGNAL(clicked()), this,
442
SLOT(newColorScheme()));
538
444
// setup font preview
539
bool antialias = info->property<bool>(Profile::AntiAliasFonts);
445
const bool antialias = profile->antiAliasFonts();
541
QFont font = info->font();
542
font.setStyleStrategy(antialias ? QFont::PreferAntialias : QFont::NoAntialias);
447
QFont profileFont = profile->font();
448
profileFont.setStyleStrategy(antialias ? QFont::PreferAntialias : QFont::NoAntialias);
544
450
_ui->fontPreviewLabel->installEventFilter(this);
545
_ui->fontPreviewLabel->setFont(font);
546
setFontSliderRange(font);
547
setFontSliderValue(font);
549
connect( _ui->fontSizeSlider , SIGNAL(valueChanged(int)) , this ,
550
SLOT(setFontSize(int)) );
551
connect( _ui->editFontButton , SIGNAL(clicked()) , this ,
552
SLOT(showFontDialog()) );
554
// setup font smoothing
451
_ui->fontPreviewLabel->setFont(profileFont);
452
setFontSliderRange(profileFont);
453
setFontSliderValue(profileFont);
455
connect(_ui->fontSizeSlider, SIGNAL(valueChanged(int)), this,
456
SLOT(setFontSize(int)));
457
connect(_ui->selectFontButton, SIGNAL(clicked()), this,
458
SLOT(showFontDialog()));
460
// setup font smoothing
555
461
_ui->antialiasTextButton->setChecked(antialias);
556
connect( _ui->antialiasTextButton , SIGNAL(toggled(bool)) , this ,
557
SLOT(setAntialiasText(bool)) );
462
connect(_ui->antialiasTextButton, SIGNAL(toggled(bool)), this,
463
SLOT(setAntialiasText(bool)));
559
bool boldIntense = info->property<bool>(Profile::BoldIntense);
560
_ui->boldIntenseButton->setChecked(boldIntense);
561
connect( _ui->boldIntenseButton , SIGNAL(toggled(bool)) , this ,
562
SLOT(setBoldIntense(bool)));
465
_ui->boldIntenseButton->setChecked(profile->boldIntense());
466
connect(_ui->boldIntenseButton, SIGNAL(toggled(bool)), this,
467
SLOT(setBoldIntense(bool)));
564
469
void EditProfileDialog::setAntialiasText(bool enable)
566
QFont font = _ui->fontPreviewLabel->font();
567
font.setStyleStrategy(enable ? QFont::PreferAntialias : QFont::NoAntialias);
471
QFont profileFont = _ui->fontPreviewLabel->font();
472
profileFont.setStyleStrategy(enable ? QFont::PreferAntialias : QFont::NoAntialias);
569
474
// update preview to reflect text smoothing state
571
updateTempProfileProperty(Profile::AntiAliasFonts,enable);
475
fontSelected(profileFont);
476
updateTempProfileProperty(Profile::AntiAliasFonts, enable);
573
478
void EditProfileDialog::setBoldIntense(bool enable)
575
preview(Profile::BoldIntense,enable);
576
updateTempProfileProperty(Profile::BoldIntense,enable);
480
preview(Profile::BoldIntense, enable);
481
updateTempProfileProperty(Profile::BoldIntense, enable);
578
483
void EditProfileDialog::colorSchemeAnimationUpdate()
580
485
QAbstractItemModel* model = _ui->colorSchemeList->model();
582
for ( int i = model->rowCount() ; i >= 0 ; i-- )
583
_ui->colorSchemeList->update( model->index(i,0) );
487
for (int i = model->rowCount() ; i >= 0 ; i--)
488
_ui->colorSchemeList->update(model->index(i, 0));
585
490
void EditProfileDialog::updateColorSchemeList(bool selectCurrentScheme)
668
if ( selectCurrentTranslator && selectedItem )
670
_ui->keyBindingList->selectionModel()->setCurrentIndex( selectedItem->index() ,
671
QItemSelectionModel::Select );
564
if (selectCurrentTranslator && selectedItem) {
565
_ui->keyBindingList->selectionModel()->setCurrentIndex(selectedItem->index() ,
566
QItemSelectionModel::Select);
674
bool EditProfileDialog::eventFilter( QObject* watched , QEvent* event )
569
bool EditProfileDialog::eventFilter(QObject* watched , QEvent* aEvent)
676
if ( watched == _ui->colorSchemeList && event->type() == QEvent::Leave )
678
if ( _tempProfile->isPropertySet(Profile::ColorScheme) )
679
preview(Profile::ColorScheme,_tempProfile->colorScheme());
571
if (watched == _ui->colorSchemeList && aEvent->type() == QEvent::Leave) {
572
if (_tempProfile->isPropertySet(Profile::ColorScheme))
573
preview(Profile::ColorScheme, _tempProfile->colorScheme());
681
575
unpreview(Profile::ColorScheme);
683
if ( watched == _ui->fontPreviewLabel && event->type() == QEvent::FontChange )
577
if (watched == _ui->fontPreviewLabel && aEvent->type() == QEvent::FontChange) {
685
578
const QFont& labelFont = _ui->fontPreviewLabel->font();
686
qreal size = labelFont.pointSizeF();
687
QString fontSize = KGlobal::locale()->formatNumber(size, size == floor(size) ? 0 : 1);
579
qreal fontSizeF = labelFont.pointSizeF();
580
QString fontSize = KGlobal::locale()->formatNumber(fontSizeF, fontSizeF == floor(fontSizeF) ? 0 : 1);
688
581
_ui->fontPreviewLabel->setText(i18n("%1, size %2", labelFont.family(), fontSize));
691
return KDialog::eventFilter(watched,event);
584
return KDialog::eventFilter(watched, aEvent);
693
586
void EditProfileDialog::unpreviewAll()
695
588
_delayedPreviewTimer->stop();
696
589
_delayedPreviewProperties.clear();
698
QHash<Profile::Property,QVariant> map;
699
QHashIterator<int,QVariant> iter(_previewedProperties);
700
while ( iter.hasNext() )
591
QHash<Profile::Property, QVariant> map;
592
QHashIterator<int, QVariant> iter(_previewedProperties);
593
while (iter.hasNext()) {
703
map.insert((Profile::Property)iter.key(),iter.value());
595
map.insert((Profile::Property)iter.key(), iter.value());
706
598
// undo any preview changes
707
if ( !map.isEmpty() )
708
SessionManager::instance()->changeProfile(_profile,map,false);
600
ProfileManager::instance()->changeProfile(_profile, map, false);
710
void EditProfileDialog::unpreview(int property)
602
void EditProfileDialog::unpreview(int aProperty)
712
_delayedPreviewProperties.remove(property);
604
_delayedPreviewProperties.remove(aProperty);
714
if (!_previewedProperties.contains(property))
606
if (!_previewedProperties.contains(aProperty))
717
QHash<Profile::Property,QVariant> map;
718
map.insert((Profile::Property)property,_previewedProperties[property]);
719
SessionManager::instance()->changeProfile(_profile,map,false);
609
QHash<Profile::Property, QVariant> map;
610
map.insert((Profile::Property)aProperty, _previewedProperties[aProperty]);
611
ProfileManager::instance()->changeProfile(_profile, map, false);
721
_previewedProperties.remove(property);
613
_previewedProperties.remove(aProperty);
723
void EditProfileDialog::delayedPreview(int property , const QVariant& value)
615
void EditProfileDialog::delayedPreview(int aProperty , const QVariant& value)
725
_delayedPreviewProperties.insert(property,value);
617
_delayedPreviewProperties.insert(aProperty, value);
727
619
_delayedPreviewTimer->stop();
728
620
_delayedPreviewTimer->start(300);
730
622
void EditProfileDialog::delayedPreviewActivate()
732
Q_ASSERT( qobject_cast<QTimer*>(sender()) );
624
Q_ASSERT(qobject_cast<QTimer*>(sender()));
734
QMutableHashIterator<int,QVariant> iter(_delayedPreviewProperties);
735
if ( iter.hasNext() )
626
QMutableHashIterator<int, QVariant> iter(_delayedPreviewProperties);
627
if (iter.hasNext()) {
738
preview(iter.key(),iter.value());
629
preview(iter.key(), iter.value());
741
void EditProfileDialog::preview(int property , const QVariant& value)
632
void EditProfileDialog::preview(int aProperty , const QVariant& value)
743
QHash<Profile::Property,QVariant> map;
744
map.insert((Profile::Property)property,value);
634
QHash<Profile::Property, QVariant> map;
635
map.insert((Profile::Property)aProperty, value);
746
_delayedPreviewProperties.remove(property);
637
_delayedPreviewProperties.remove(aProperty);
748
639
const Profile::Ptr original = lookupProfile();
753
644
// TODO - Save the original values for each profile and use to unpreview properties
754
645
ProfileGroup::Ptr group = original->asGroup();
755
646
if (group && group->profiles().count() > 1 &&
756
original->property<QVariant>((Profile::Property)property).isNull())
647
original->property<QVariant>((Profile::Property)aProperty).isNull())
759
if (!_previewedProperties.contains(property))
761
_previewedProperties.insert(property , original->property<QVariant>((Profile::Property)property) );
650
if (!_previewedProperties.contains(aProperty)) {
651
_previewedProperties.insert(aProperty , original->property<QVariant>((Profile::Property)aProperty));
764
654
// temporary change to color scheme
765
SessionManager::instance()->changeProfile( _profile , map , false);
655
ProfileManager::instance()->changeProfile(_profile , map , false);
767
657
void EditProfileDialog::previewColorScheme(const QModelIndex& index)
769
const QString& name = index.data(Qt::UserRole+1).value<const ColorScheme*>()->name();
659
const QString& name = index.data(Qt::UserRole + 1).value<const ColorScheme*>()->name();
771
delayedPreview( Profile::ColorScheme , name );
661
delayedPreview(Profile::ColorScheme , name);
773
663
void EditProfileDialog::removeColorScheme()
775
665
QModelIndexList selected = _ui->colorSchemeList->selectionModel()->selectedIndexes();
777
if ( !selected.isEmpty() )
779
const QString& name = selected.first().data(Qt::UserRole+1).value<const ColorScheme*>()->name();
667
if (!selected.isEmpty()) {
668
const QString& name = selected.first().data(Qt::UserRole + 1).value<const ColorScheme*>()->name();
781
if (ColorSchemeManager::instance()->deleteColorScheme(name))
670
if (ColorSchemeManager::instance()->deleteColorScheme(name))
782
671
_ui->colorSchemeList->model()->removeRow(selected.first().row());
785
674
void EditProfileDialog::showColorSchemeEditor(bool isNewScheme)
787
676
QModelIndexList selected = _ui->colorSchemeList->selectionModel()->selectedIndexes();
789
678
QAbstractItemModel* model = _ui->colorSchemeList->model();
790
679
const ColorScheme* colors = 0;
791
if ( !selected.isEmpty() )
792
colors = model->data(selected.first(),Qt::UserRole+1).value<const ColorScheme*>();
680
if (!selected.isEmpty())
681
colors = model->data(selected.first(), Qt::UserRole + 1).value<const ColorScheme*>();
794
683
colors = ColorSchemeManager::instance()->defaultColorScheme();
796
685
Q_ASSERT(colors);
798
KDialog* dialog = new KDialog(this);
687
QWeakPointer<KDialog> dialog = new KDialog(this);
801
dialog->setCaption(i18n("New Color Scheme"));
690
dialog.data()->setCaption(i18n("New Color Scheme"));
803
dialog->setCaption(i18n("Edit Color Scheme"));
692
dialog.data()->setCaption(i18n("Edit Color Scheme"));
805
694
ColorSchemeEditor* editor = new ColorSchemeEditor;
806
dialog->setMainWidget(editor);
695
dialog.data()->setMainWidget(editor);
807
696
editor->setup(colors);
810
699
editor->setDescription(i18n("New Color Scheme"));
812
if ( dialog->exec() == QDialog::Accepted )
701
if (dialog.data()->exec() == QDialog::Accepted) {
814
702
ColorScheme* newScheme = new ColorScheme(*editor->colorScheme());
816
704
// if this is a new color scheme, pick a name based on the description
818
706
newScheme->setName(newScheme->description());
820
ColorSchemeManager::instance()->addColorScheme( newScheme );
708
ColorSchemeManager::instance()->addColorScheme(newScheme);
822
710
updateColorSchemeList(true);
824
preview(Profile::ColorScheme,newScheme->name());
712
preview(Profile::ColorScheme, newScheme->name());
714
delete dialog.data();
827
716
void EditProfileDialog::newColorScheme()
829
showColorSchemeEditor(true);
718
showColorSchemeEditor(true);
831
720
void EditProfileDialog::editColorScheme()
897
778
_tempProfile->setHidden(true);
900
void EditProfileDialog::updateTempProfileProperty(Profile::Property property, const QVariant & value)
781
void EditProfileDialog::updateTempProfileProperty(Profile::Property aProperty, const QVariant & value)
902
_tempProfile->setProperty(property, value);
783
_tempProfile->setProperty(aProperty, value);
903
784
updateButtonApply();
906
void EditProfileDialog::updateButtonApply( )
787
void EditProfileDialog::updateButtonApply()
908
789
bool userModified = false;
910
QHashIterator<Profile::Property,QVariant> iter(_tempProfile->setProperties());
911
while ( iter.hasNext() )
791
QHashIterator<Profile::Property, QVariant> iter(_tempProfile->setProperties());
792
while (iter.hasNext()) {
915
Profile::Property property = iter.key();
916
QVariant value = iter.value() ;
795
Profile::Property aProperty = iter.key();
796
QVariant value = iter.value();
918
798
// for previewed property
919
if( _previewedProperties.contains(int(property)) )
921
if ( value != _previewedProperties.value(int(property)))
923
userModified = true ;
927
// for not-previewed property
928
else if ( (value != _profile->property<QVariant>(property)) )
930
userModified = true ;
799
if (_previewedProperties.contains(int(aProperty))) {
800
if (value != _previewedProperties.value(int(aProperty))) {
804
// for not-previewed property
805
} else if ((value != _profile->property<QVariant>(aProperty))) {
935
811
enableButtonApply(userModified);
938
void EditProfileDialog::setupKeyboardPage(const Profile::Ptr /* info */)
814
void EditProfileDialog::setupKeyboardPage(const Profile::Ptr /* profile */)
940
816
// setup translator list
941
updateKeyBindingsList(true);
817
updateKeyBindingsList(true);
943
connect( _ui->keyBindingList->selectionModel() ,
944
SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
945
SLOT(keyBindingSelected()) );
946
connect( _ui->newKeyBindingsButton , SIGNAL(clicked()) , this ,
947
SLOT(newKeyBinding()) );
819
connect(_ui->keyBindingList->selectionModel(),
820
SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
821
SLOT(keyBindingSelected()));
822
connect(_ui->newKeyBindingsButton, SIGNAL(clicked()), this,
823
SLOT(newKeyBinding()));
949
825
updateKeyBindingsButtons();
951
connect( _ui->editKeyBindingsButton , SIGNAL(clicked()) , this ,
952
SLOT(editKeyBinding()) );
953
connect( _ui->removeKeyBindingsButton , SIGNAL(clicked()) , this ,
954
SLOT(removeKeyBinding()) );
827
connect(_ui->editKeyBindingsButton, SIGNAL(clicked()), this,
828
SLOT(editKeyBinding()));
829
connect(_ui->removeKeyBindingsButton, SIGNAL(clicked()), this,
830
SLOT(removeKeyBinding()));
956
832
void EditProfileDialog::keyBindingSelected()
958
834
QModelIndexList selected = _ui->keyBindingList->selectionModel()->selectedIndexes();
960
if ( !selected.isEmpty() )
836
if (!selected.isEmpty()) {
962
837
QAbstractItemModel* model = _ui->keyBindingList->model();
963
const KeyboardTranslator* translator = model->data(selected.first(),Qt::UserRole+1)
964
.value<const KeyboardTranslator*>();
965
updateTempProfileProperty(Profile::KeyBindings,translator->name());
838
const KeyboardTranslator* translator = model->data(selected.first(), Qt::UserRole + 1)
839
.value<const KeyboardTranslator*>();
840
updateTempProfileProperty(Profile::KeyBindings, translator->name());
968
843
updateKeyBindingsButtons();
1065
936
// setup scrollbar radio
1066
937
int scrollBarPosition = profile->property<int>(Profile::ScrollBarPosition);
1068
RadioOption positions[] = { {_ui->scrollBarHiddenButton,Profile::ScrollBarHidden,SLOT(hideScrollBar())},
1069
{_ui->scrollBarLeftButton,Profile::ScrollBarLeft,SLOT(showScrollBarLeft())},
1070
{_ui->scrollBarRightButton,Profile::ScrollBarRight,SLOT(showScrollBarRight())},
939
RadioOption positions[] = { {_ui->scrollBarHiddenButton, Enum::ScrollBarHidden, SLOT(hideScrollBar())},
940
{_ui->scrollBarLeftButton, Enum::ScrollBarLeft, SLOT(showScrollBarLeft())},
941
{_ui->scrollBarRightButton, Enum::ScrollBarRight, SLOT(showScrollBarRight())},
1074
setupRadio( positions , scrollBarPosition );
945
setupRadio(positions , scrollBarPosition);
1076
947
// setup scrollback type radio
1077
948
int scrollBackType = profile->property<int>(Profile::HistoryMode);
1079
RadioOption types[] = { {_ui->disableScrollbackButton,Profile::DisableHistory,SLOT(noScrollBack())},
1080
{_ui->fixedScrollbackButton,Profile::FixedSizeHistory,SLOT(fixedScrollBack())},
1081
{_ui->unlimitedScrollbackButton,Profile::UnlimitedHistory,SLOT(unlimitedScrollBack())},
1083
setupRadio( types , scrollBackType );
949
_ui->historySizeWidget->setMode(Enum::HistoryModeEnum(scrollBackType));
950
connect(_ui->historySizeWidget, SIGNAL(historyModeChanged(Enum::HistoryModeEnum)),
951
this, SLOT(historyModeChanged(Enum::HistoryModeEnum)));
1085
953
// setup scrollback line count spinner
1086
int historySize = profile->property<int>(Profile::HistorySize);
1087
_ui->scrollBackLinesSpinner->setValue( historySize );
1088
_ui->scrollBackLinesSpinner->setSingleStep( historySize / 10 );
954
const int historySize = profile->historySize();
955
_ui->historySizeWidget->setLineCount(historySize);
1091
957
// signals and slots
1092
connect( _ui->scrollBackLinesSpinner , SIGNAL(valueChanged(int)) , this ,
1093
SLOT(scrollBackLinesChanged(int)) );
958
connect(_ui->historySizeWidget, SIGNAL(historySizeChanged(int)),
959
this, SLOT(historySizeChanged(int)));
1096
void EditProfileDialog::scrollBackLinesChanged(int lineCount)
962
void EditProfileDialog::historySizeChanged(int lineCount)
1098
964
updateTempProfileProperty(Profile::HistorySize , lineCount);
1100
void EditProfileDialog::noScrollBack()
1102
updateTempProfileProperty(Profile::HistoryMode , Profile::DisableHistory);
1104
void EditProfileDialog::fixedScrollBack()
1106
updateTempProfileProperty(Profile::HistoryMode , Profile::FixedSizeHistory);
1108
void EditProfileDialog::unlimitedScrollBack()
1110
updateTempProfileProperty(Profile::HistoryMode , Profile::UnlimitedHistory );
966
void EditProfileDialog::historyModeChanged(Enum::HistoryModeEnum mode)
968
updateTempProfileProperty(Profile::HistoryMode, mode);
1112
970
void EditProfileDialog::hideScrollBar()
1114
updateTempProfileProperty(Profile::ScrollBarPosition , Profile::ScrollBarHidden );
972
updateTempProfileProperty(Profile::ScrollBarPosition, Enum::ScrollBarHidden);
1116
974
void EditProfileDialog::showScrollBarLeft()
1118
updateTempProfileProperty(Profile::ScrollBarPosition , Profile::ScrollBarLeft );
976
updateTempProfileProperty(Profile::ScrollBarPosition, Enum::ScrollBarLeft);
1120
978
void EditProfileDialog::showScrollBarRight()
1122
updateTempProfileProperty(Profile::ScrollBarPosition , Profile::ScrollBarRight );
980
updateTempProfileProperty(Profile::ScrollBarPosition, Enum::ScrollBarRight);
1124
void EditProfileDialog::setupAdvancedPage(const Profile::Ptr profile)
982
void EditProfileDialog::setupMousePage(const Profile::Ptr profile)
1126
BooleanOption options[] = { { _ui->enableBlinkingTextButton , Profile::BlinkingTextEnabled ,
1127
SLOT(toggleBlinkingText(bool)) },
1128
{ _ui->enableFlowControlButton , Profile::FlowControlEnabled ,
1129
SLOT(toggleFlowControl(bool)) },
1130
{ _ui->enableResizeWindowButton , Profile::AllowProgramsToResizeWindow ,
1131
SLOT(toggleResizeWindow(bool)) },
1132
{ _ui->enableBlinkingCursorButton , Profile::BlinkingCursorEnabled ,
1133
SLOT(toggleBlinkingCursor(bool)) },
1134
{ _ui->underlineLinksButton , Profile::UnderlineLinksEnabled,
1135
SLOT(toggleUnderlineLinks(bool)) },
1136
{ _ui->enableBidiRenderingButton , Profile::BidiRenderingEnabled ,
1137
SLOT(togglebidiRendering(bool)) },
1138
{ 0 , Profile::Property(0) , 0 }
1140
setupCheckBoxes( options , profile );
984
BooleanOption options[] = { {
985
_ui->underlineLinksButton , Profile::UnderlineLinksEnabled,
986
SLOT(toggleUnderlineLinks(bool))
989
_ui->copyTextToClipboardButton , Profile::AutoCopySelectedText,
990
SLOT(toggleCopyTextToClipboard(bool))
992
{ 0 , Profile::Property(0) , 0 }
994
setupCheckBoxes(options , profile);
996
// setup middle click paste mode
997
const int middleClickPasteMode = profile->property<int>(Profile::MiddleClickPasteMode);
998
RadioOption pasteModes[] = {
999
{_ui->pasteFromX11SelectionButton, Enum::PasteFromX11Selection, SLOT(pasteFromX11Selection())},
1000
{_ui->pasteFromClipboardButton, Enum::PasteFromClipboard, SLOT(pasteFromClipboard())},
1003
setupRadio(pasteModes , middleClickPasteMode);
1142
1005
// interaction options
1143
_ui->wordCharacterEdit->setText( profile->property<QString>(Profile::WordCharacters) );
1006
_ui->wordCharacterEdit->setText(profile->wordCharacters());
1145
connect( _ui->wordCharacterEdit , SIGNAL(textChanged(QString)) , this ,
1146
SLOT(wordCharactersChanged(QString)) );
1008
connect(_ui->wordCharacterEdit, SIGNAL(textChanged(QString)), this,
1009
SLOT(wordCharactersChanged(QString)));
1148
1011
int tripleClickMode = profile->property<int>(Profile::TripleClickMode);
1149
1012
_ui->tripleClickModeCombo->setCurrentIndex(tripleClickMode);
1151
connect( _ui->tripleClickModeCombo , SIGNAL(activated(int)) , this ,
1152
SLOT(TripleClickModeChanged(int)) );
1014
connect(_ui->tripleClickModeCombo, SIGNAL(activated(int)), this,
1015
SLOT(TripleClickModeChanged(int)));
1017
void EditProfileDialog::setupAdvancedPage(const Profile::Ptr profile)
1019
BooleanOption options[] = { {
1020
_ui->enableBlinkingTextButton , Profile::BlinkingTextEnabled ,
1021
SLOT(toggleBlinkingText(bool))
1024
_ui->enableFlowControlButton , Profile::FlowControlEnabled ,
1025
SLOT(toggleFlowControl(bool))
1028
_ui->enableBlinkingCursorButton , Profile::BlinkingCursorEnabled ,
1029
SLOT(toggleBlinkingCursor(bool))
1032
_ui->enableBidiRenderingButton , Profile::BidiRenderingEnabled ,
1033
SLOT(togglebidiRendering(bool))
1035
{ 0 , Profile::Property(0) , 0 }
1037
setupCheckBoxes(options , profile);
1154
1039
// cursor options
1155
if ( profile->property<bool>(Profile::UseCustomCursorColor) )
1040
if (profile->useCustomCursorColor())
1156
1041
_ui->customCursorColorButton->setChecked(true);
1158
1043
_ui->autoCursorColorButton->setChecked(true);
1160
_ui->customColorSelectButton->setColor( profile->property<QColor>(Profile::CustomCursorColor) );
1045
_ui->customColorSelectButton->setColor(profile->customCursorColor());
1162
connect( _ui->customCursorColorButton , SIGNAL(clicked()) , this , SLOT(customCursorColor()) );
1163
connect( _ui->autoCursorColorButton , SIGNAL(clicked()) , this , SLOT(autoCursorColor()) );
1164
connect( _ui->customColorSelectButton , SIGNAL(changed(QColor)) ,
1165
SLOT(customCursorColorChanged(QColor)) );
1047
connect(_ui->customCursorColorButton, SIGNAL(clicked()), this, SLOT(customCursorColor()));
1048
connect(_ui->autoCursorColorButton, SIGNAL(clicked()), this, SLOT(autoCursorColor()));
1049
connect(_ui->customColorSelectButton, SIGNAL(changed(QColor)),
1050
SLOT(customCursorColorChanged(QColor)));
1167
1052
int shape = profile->property<int>(Profile::CursorShape);
1168
1053
_ui->cursorShapeCombo->setCurrentIndex(shape);
1170
connect( _ui->cursorShapeCombo , SIGNAL(activated(int)) , this , SLOT(setCursorShape(int)) );
1055
connect(_ui->cursorShapeCombo, SIGNAL(activated(int)), this, SLOT(setCursorShape(int)));
1172
1057
// encoding options
1173
1058
QAction* codecAction = new KCodecAction(this);
1174
_ui->selectEncodingButton->setMenu( codecAction->menu() );
1175
connect( codecAction , SIGNAL(triggered(QTextCodec*)) , this , SLOT(setDefaultCodec(QTextCodec*)) );
1177
_ui->characterEncodingLabel->setText( profile->property<QString>(Profile::DefaultEncoding) );
1059
_ui->selectEncodingButton->setMenu(codecAction->menu());
1060
connect(codecAction, SIGNAL(triggered(QTextCodec*)), this, SLOT(setDefaultCodec(QTextCodec*)));
1062
_ui->characterEncodingLabel->setText(profile->defaultEncoding());
1180
1064
void EditProfileDialog::setDefaultCodec(QTextCodec* codec)
1182
1066
QString name = QString(codec->name());
1184
updateTempProfileProperty(Profile::DefaultEncoding,name);
1068
updateTempProfileProperty(Profile::DefaultEncoding, name);
1185
1069
_ui->characterEncodingLabel->setText(codec->name());
1187
1071
void EditProfileDialog::customCursorColorChanged(const QColor& color)
1189
updateTempProfileProperty(Profile::CustomCursorColor,color);
1073
updateTempProfileProperty(Profile::CustomCursorColor, color);
1191
1075
// ensure that custom cursor colors are enabled
1192
1076
_ui->customCursorColorButton->click();
1194
1078
void EditProfileDialog::wordCharactersChanged(const QString& text)
1196
updateTempProfileProperty(Profile::WordCharacters,text);
1080
updateTempProfileProperty(Profile::WordCharacters, text);
1198
1082
void EditProfileDialog::autoCursorColor()
1200
updateTempProfileProperty(Profile::UseCustomCursorColor,false);
1084
updateTempProfileProperty(Profile::UseCustomCursorColor, false);
1202
1086
void EditProfileDialog::customCursorColor()
1204
updateTempProfileProperty(Profile::UseCustomCursorColor,true);
1088
updateTempProfileProperty(Profile::UseCustomCursorColor, true);
1206
1090
void EditProfileDialog::setCursorShape(int index)
1208
updateTempProfileProperty(Profile::CursorShape,index);
1092
updateTempProfileProperty(Profile::CursorShape, index);
1210
1094
void EditProfileDialog::togglebidiRendering(bool enable)
1212
updateTempProfileProperty(Profile::BidiRenderingEnabled,enable);
1096
updateTempProfileProperty(Profile::BidiRenderingEnabled, enable);
1214
1098
void EditProfileDialog::toggleBlinkingCursor(bool enable)
1216
updateTempProfileProperty(Profile::BlinkingCursorEnabled,enable);
1100
updateTempProfileProperty(Profile::BlinkingCursorEnabled, enable);
1218
1102
void EditProfileDialog::toggleUnderlineLinks(bool enable)
1220
updateTempProfileProperty(Profile::UnderlineLinksEnabled,enable);
1104
updateTempProfileProperty(Profile::UnderlineLinksEnabled, enable);
1106
void EditProfileDialog::toggleCopyTextToClipboard(bool enable)
1108
updateTempProfileProperty(Profile::AutoCopySelectedText, enable);
1110
void EditProfileDialog::pasteFromX11Selection()
1112
updateTempProfileProperty(Profile::MiddleClickPasteMode, Enum::PasteFromX11Selection);
1114
void EditProfileDialog::pasteFromClipboard()
1116
updateTempProfileProperty(Profile::MiddleClickPasteMode, Enum::PasteFromClipboard);
1222
1118
void EditProfileDialog::TripleClickModeChanged(int newValue)
1224
updateTempProfileProperty(Profile::TripleClickMode,newValue);
1120
updateTempProfileProperty(Profile::TripleClickMode, newValue);
1226
1122
void EditProfileDialog::toggleBlinkingText(bool enable)
1228
updateTempProfileProperty(Profile::BlinkingTextEnabled,enable);
1124
updateTempProfileProperty(Profile::BlinkingTextEnabled, enable);
1230
1126
void EditProfileDialog::toggleFlowControl(bool enable)
1232
updateTempProfileProperty(Profile::FlowControlEnabled,enable);
1234
void EditProfileDialog::toggleResizeWindow(bool enable)
1236
updateTempProfileProperty(Profile::AllowProgramsToResizeWindow,enable);
1238
void EditProfileDialog::fontSelected(const QFont& font)
1240
QFont previewFont = font;
1242
setFontSliderRange(font);
1243
setFontSliderValue(font);
1245
_ui->fontPreviewLabel->setFont(previewFont);
1247
preview(Profile::Font,font);
1248
updateTempProfileProperty(Profile::Font,font);
1128
updateTempProfileProperty(Profile::FlowControlEnabled, enable);
1130
void EditProfileDialog::fontSelected(const QFont& aFont)
1132
QFont previewFont = aFont;
1134
setFontSliderRange(aFont);
1135
setFontSliderValue(aFont);
1137
_ui->fontPreviewLabel->setFont(previewFont);
1139
preview(Profile::Font, aFont);
1140
updateTempProfileProperty(Profile::Font, aFont);
1251
1142
void EditProfileDialog::showFontDialog()
1144
QString sampleText = QString("ell 'lL', one '1', little eye 'i', big eye");
1145
sampleText += QString("'I', lL1iI, Zero '0', little oh 'o', big oh 'O', 0oO");
1146
sampleText += QString("`~!@#$%^&*()_+-=[]\\{}|:\";'<>?,./");
1147
sampleText += QString("0123456789");
1148
sampleText += QString("\nThe Quick Brown Fox Jumps Over The Lazy Dog\n");
1149
sampleText += i18n("--- Type anything in this box ---");
1253
1150
QFont currentFont = _ui->fontPreviewLabel->font();
1255
KFontDialog* dialog = new KFontDialog(this, KFontChooser::FixedFontsOnly);
1256
dialog->setFont(currentFont, true);
1258
connect( dialog , SIGNAL(fontSelected(QFont)) , this , SLOT(fontSelected(QFont)) );
1260
if (dialog->exec() == QDialog::Rejected)
1152
QWeakPointer<KFontDialog> dialog = new KFontDialog(this, KFontChooser::FixedFontsOnly);
1153
dialog.data()->setCaption(i18n("Select Fixed Width Font"));
1154
dialog.data()->setFont(currentFont, true);
1156
// TODO (hindenburg): When https://git.reviewboard.kde.org/r/103357 is
1157
// committed, change the below.
1158
// Use text more fitting to show font differences in a terminal
1159
QList<KFontChooser*> chooserList = dialog.data()->findChildren<KFontChooser*>();
1160
if (!chooserList.isEmpty())
1161
chooserList.at(0)->setSampleText(sampleText);
1163
connect(dialog.data(), SIGNAL(fontSelected(QFont)), this, SLOT(fontSelected(QFont)));
1165
if (dialog.data()->exec() == QDialog::Rejected)
1261
1166
fontSelected(currentFont);
1167
delete dialog.data();
1263
1169
void EditProfileDialog::setFontSize(int pointSize)
1322
1225
bool transparencyAvailable = KWindowSystem::compositingActive();
1324
painter->setRenderHint( QPainter::Antialiasing );
1227
painter->setRenderHint(QPainter::Antialiasing);
1326
1229
// draw background
1327
painter->setPen( QPen(scheme->foregroundColor() , 1) );
1230
painter->setPen(QPen(scheme->foregroundColor() , 1));
1329
1232
// radial gradient for background
1330
1233
// from a lightened version of the scheme's background color in the center to
1331
1234
// a darker version at the outer edge
1332
1235
QColor color = scheme->backgroundColor();
1333
QRectF backgroundRect = QRectF(option.rect).adjusted(1.5,1.5,-1.5,-1.5);
1236
QRectF backgroundRect = QRectF(option.rect).adjusted(1.5, 1.5, -1.5, -1.5);
1335
1238
QRadialGradient backgroundGradient(backgroundRect.center() , backgroundRect.width() / 2);
1336
backgroundGradient.setColorAt( 0 , color.lighter(105) );
1337
backgroundGradient.setColorAt( 1 , color.darker(115) );
1239
backgroundGradient.setColorAt(0 , color.lighter(105));
1240
backgroundGradient.setColorAt(1 , color.darker(115));
1339
1242
const int backgroundRectXRoundness = 4;
1340
1243
const int backgroundRectYRoundness = 30;
1342
1245
QPainterPath backgroundRectPath(backgroundRect.topLeft());
1343
backgroundRectPath.addRoundRect( backgroundRect , backgroundRectXRoundness , backgroundRectYRoundness );
1246
backgroundRectPath.addRoundRect(backgroundRect , backgroundRectXRoundness , backgroundRectYRoundness);
1345
if ( transparencyAvailable )
1248
if (transparencyAvailable) {
1347
1249
painter->save();
1348
1250
color.setAlphaF(scheme->opacity());
1349
painter->setCompositionMode( QPainter::CompositionMode_Source );
1251
painter->setCompositionMode(QPainter::CompositionMode_Source);
1350
1252
painter->setBrush(backgroundGradient);
1352
1254
painter->drawPath(backgroundRectPath);
1353
1255
painter->restore();
1357
1257
painter->setBrush(backgroundGradient);
1358
1258
painter->drawPath(backgroundRectPath);
1361
1261
// draw stripe at the side using scheme's foreground color
1362
painter->setPen( QPen(Qt::NoPen) );
1363
QPainterPath path( option.rect.topLeft() );
1364
path.lineTo( option.rect.width() / 10.0 , option.rect.top() );
1365
path.lineTo( option.rect.bottomLeft() );
1366
path.lineTo( option.rect.topLeft() );
1367
painter->setBrush( scheme->foregroundColor() );
1262
painter->setPen(QPen(Qt::NoPen));
1263
QPainterPath path(option.rect.topLeft());
1264
path.lineTo(option.rect.width() / 10.0 , option.rect.top());
1265
path.lineTo(option.rect.bottomLeft());
1266
path.lineTo(option.rect.topLeft());
1267
painter->setBrush(scheme->foregroundColor());
1368
1268
painter->drawPath(path.intersected(backgroundRectPath));
1371
1271
// with a linear gradient going from translucent white to transparent
1372
QLinearGradient gradient( option.rect.topLeft() , option.rect.bottomLeft() );
1373
gradient.setColorAt( 0 , QColor(255,255,255,90) );
1374
gradient.setColorAt( 1 , Qt::transparent );
1272
QLinearGradient gradient(option.rect.topLeft() , option.rect.bottomLeft());
1273
gradient.setColorAt(0 , QColor(255, 255, 255, 90));
1274
gradient.setColorAt(1 , Qt::transparent);
1375
1275
painter->setBrush(gradient);
1376
painter->drawRoundRect( backgroundRect , 4 , 30 );
1276
painter->drawRoundRect(backgroundRect , 4 , 30);
1378
1278
//const bool isChecked = index.data(Qt::CheckStateRole) == Qt::Checked;
1379
1279
const bool isSelected = option.state & QStyle::State_Selected;
1381
1281
// draw border on selected items
1382
if ( isSelected ) //|| isChecked )
1282
if (isSelected) { //|| isChecked )
1384
1283
static const int selectedBorderWidth = 6;
1387
painter->setBrush( QBrush(Qt::NoBrush) );
1285
painter->setBrush(QBrush(Qt::NoBrush));
1390
1288
QColor highlightColor = option.palette.highlight().color();
1393
1291
highlightColor.setAlphaF(1.0);
1395
1293
highlightColor.setAlphaF(0.7);