Git commit 2b8d43ef48d572ee7a64725bd08cfd0447d3be33 by Kurt Hindenburg. Committed on 22/05/2013 at 15:23. Pushed by hindenburg into branch 'master'.
Transform ColorSchemeEditor class from QWidget to KDialog Move some code from EditProfileDialog::showColorSchemeEditor * a part went in the slot EditProfileDialog::saveColorScheme * a part becomes obsolete since ColorSchemeEditor is the whole KDialog * a small part went into ColorSchemeEditor constructor Make ColorSchemeEditor a non-modal dialog : The terminal is not frozen when the dialog is open - The Kdialog has an Apply button - Some safeguard to check that there is only one ColorSchemeEditor open - Use reference rather than pointer in ColorSchemeEditor interface Thanks to Renan for improving on Konsole's ColorScheme. Patch by renan fargetton renan.fargetton at gmail.com REVIEW: 110560 GUI: M +21 -8 src/ColorSchemeEditor.cpp M +12 -2 src/ColorSchemeEditor.h M +31 -25 src/EditProfileDialog.cpp M +6 -0 src/EditProfileDialog.h http://commits.kde.org/konsole/2b8d43ef48d572ee7a64725bd08cfd0447d3be33 diff --git a/src/ColorSchemeEditor.cpp b/src/ColorSchemeEditor.cpp index 8ccbd7f..afe13c3 100644 --- a/src/ColorSchemeEditor.cpp +++ b/src/ColorSchemeEditor.cpp @@ -46,12 +46,18 @@ const int COLOR_COLUMN = 1; // column 1 : actual colors const int INTENSE_COLOR_COLUMN = 2; // column 2 : intense colors ColorSchemeEditor::ColorSchemeEditor(QWidget* aParent) - : QWidget(aParent) + : KDialog(aParent) , _isNewScheme(false) , _colors(0) { + // Kdialog buttons + setButtons(KDialog::Ok | KDialog::Cancel | KDialog::Apply); + connect(this, SIGNAL(applyClicked()), this, SLOT(saveColorScheme())); + connect(this, SIGNAL(okClicked()), this, SLOT(saveColorScheme())); + + // ui _ui = new Ui::ColorSchemeEditor(); - _ui->setupUi(this); + _ui->setupUi(mainWidget()); // description edit _ui->descriptionEdit->setClearButtonShown(true); @@ -191,14 +197,17 @@ void ColorSchemeEditor::setup(const ColorScheme* scheme, bool isNewScheme) { _isNewScheme = isNewScheme; - if (_isNewScheme) { - setDescription(i18n("New Color Scheme")); - } - delete _colors; _colors = new ColorScheme(*scheme); + if (_isNewScheme) { + setCaption(i18n("New Color Scheme")); + setDescription(i18n("New Color Scheme")); + } else { + setCaption(i18n("Edit Color Scheme")); + } + // setup description edit _ui->descriptionEdit->setText(_colors->description()); @@ -246,13 +255,17 @@ void ColorSchemeEditor::setupColorTable(const ColorScheme* colors) _ui->colorTable->setFixedHeight(_ui->colorTable->verticalHeader()->length() + _ui->colorTable->horizontalHeader()->height() + 2); } -ColorScheme* ColorSchemeEditor::colorScheme() const +ColorScheme& ColorSchemeEditor::colorScheme() const { - return _colors; + return *_colors; } bool ColorSchemeEditor::isNewScheme() const { return _isNewScheme; } +void ColorSchemeEditor::saveColorScheme() +{ + emit colorSchemeSaveRequested(colorScheme(), _isNewScheme); +} #include "ColorSchemeEditor.moc" diff --git a/src/ColorSchemeEditor.h b/src/ColorSchemeEditor.h index 11090d4..9e67849 100644 --- a/src/ColorSchemeEditor.h +++ b/src/ColorSchemeEditor.h @@ -23,6 +23,12 @@ // Qt #include <QWidget> +// KDE +#include <KDialog> + +// Konsole +#include "Profile.h" + class QTableWidgetItem; namespace Ui @@ -46,7 +52,7 @@ class ColorScheme; * * When changes are made the colorsChanged() signal is emitted. */ -class ColorSchemeEditor : public QWidget +class KONSOLEPRIVATE_EXPORT ColorSchemeEditor : public KDialog { Q_OBJECT @@ -58,12 +64,14 @@ public: /** Initializes the dialog with the properties of the specified color scheme. */ void setup(const ColorScheme* scheme, bool isNewScheme); /** Returns the modified color scheme. */ - ColorScheme* colorScheme() const; + ColorScheme& colorScheme() const; bool isNewScheme() const; signals: /** Emitted when the colors in the color scheme change. */ void colorsChanged(ColorScheme* scheme); + /** Used to send back colorscheme changes into the profile edited */ + void colorSchemeSaveRequested(const ColorScheme& scheme,bool isNewScheme); public slots: /** Sets the text displayed in the description edit field. */ @@ -75,6 +83,8 @@ private slots: void editColorItem(QTableWidgetItem* item); void wallpaperPathChanged(const QString& path); void selectWallpaper(); + /** Triggered by apply/ok buttons */ + void saveColorScheme(); private: void setupColorTable(const ColorScheme* table); diff --git a/src/EditProfileDialog.cpp b/src/EditProfileDialog.cpp index 98ae2e7..33bb87e 100644 --- a/src/EditProfileDialog.cpp +++ b/src/EditProfileDialog.cpp @@ -69,6 +69,7 @@ EditProfileDialog::EditProfileDialog(QWidget* aParent) : KDialog(aParent) , _colorSchemeAnimationTimeLine(0) , _delayedPreviewTimer(new QTimer(this)) + , _colorDialog(0) { setCaption(i18n("Edit Profile")); setButtons(KDialog::Ok | KDialog::Cancel | KDialog::Apply); @@ -697,34 +698,24 @@ void EditProfileDialog::showColorSchemeEditor(bool isNewScheme) Q_ASSERT(colors); // Setting up ColorSchemeEditor ui - QWeakPointer<KDialog> dialog = new KDialog(this); - - if (isNewScheme) - dialog.data()->setCaption(i18n("New Color Scheme")); - else - dialog.data()->setCaption(i18n("Edit Color Scheme")); - - ColorSchemeEditor* editor = new ColorSchemeEditor; - dialog.data()->setMainWidget(editor); - editor->setup(colors, isNewScheme); - - if (isNewScheme) - editor->setDescription(i18n("New Color Scheme")); - - if (dialog.data()->exec() == QDialog::Accepted) { - ColorScheme* newScheme = new ColorScheme(*editor->colorScheme()); - - // if this is a new color scheme, pick a name based on the description - if (isNewScheme) - newScheme->setName(newScheme->description()); - - ColorSchemeManager::instance()->addColorScheme(newScheme); + // close any running ColorSchemeEditor + if (_colorDialog) { + closeColorSchemeEditor(); + } + _colorDialog = new ColorSchemeEditor(this); - updateColorSchemeList(true); + connect(_colorDialog, SIGNAL(colorSchemeSaveRequested(const ColorScheme&, bool)), + this, SLOT(saveColorScheme(const ColorScheme&,bool))); + _colorDialog->setup(colors, isNewScheme); - preview(Profile::ColorScheme, newScheme->name()); + _colorDialog->show(); +} +void EditProfileDialog::closeColorSchemeEditor() +{ + if (_colorDialog) { + _colorDialog->close(); + delete _colorDialog; } - delete dialog.data(); } void EditProfileDialog::newColorScheme() { @@ -734,6 +725,21 @@ void EditProfileDialog::editColorScheme() { showColorSchemeEditor(false); } +void EditProfileDialog::saveColorScheme(const ColorScheme& scheme, bool isNewScheme) +{ + ColorScheme* newScheme = new ColorScheme(scheme); + + // if this is a new color scheme, pick a name based on the description + if (isNewScheme) { + newScheme->setName(newScheme->description()); + } + + ColorSchemeManager::instance()->addColorScheme(newScheme); + + updateColorSchemeList(true); + + preview(Profile::ColorScheme, newScheme->name()); +} void EditProfileDialog::colorSchemeSelected() { QModelIndexList selected = _ui->colorSchemeList->selectionModel()->selectedIndexes(); diff --git a/src/EditProfileDialog.h b/src/EditProfileDialog.h index 1f752af..1f401af 100644 --- a/src/EditProfileDialog.h +++ b/src/EditProfileDialog.h @@ -31,6 +31,8 @@ // Konsole #include "Profile.h" #include "Enumeration.h" +#include "ColorScheme.h" +#include "ColorSchemeEditor.h" class QAbstractButton; class QItemSelectionModel; @@ -126,6 +128,7 @@ private slots: void showFontDialog(); void newColorScheme(); void editColorScheme(); + void saveColorScheme(const ColorScheme& scheme, bool isNewScheme); void removeColorScheme(); void colorSchemeSelected(); void previewColorScheme(const QModelIndex& index); @@ -196,6 +199,7 @@ private: void updateKeyBindingsButtons(); void showColorSchemeEditor(bool isNewScheme); + void closeColorSchemeEditor(); void showKeyBindingEditor(bool newTranslator); void preview(int property , const QVariant& value); @@ -250,6 +254,8 @@ private: QHash<int, QVariant> _delayedPreviewProperties; QTimer* _delayedPreviewTimer; + + ColorSchemeEditor* _colorDialog; }; /**
