commit 6145cb798d8744f0813d77231cf40f327c4169c7
Author: Juergen Spitzmueller <[email protected]>
Date: Sat Dec 22 18:44:58 2018 +0100
Allow to restore default UI colors in prefs
Patch by Daniel Ramöller (racoon), with slight modifications of mine.
Fixes: #10062
(cherry picked from commit 81e4f8dfb610ae8e6a5cc79a869030b229587b26
with minor adaptations)
---
src/frontends/qt4/GuiPrefs.cpp | 126 +++++++++++++++++++++++++++++++---
src/frontends/qt4/GuiPrefs.h | 11 +++
src/frontends/qt4/ui/PrefColorsUi.ui | 58 ++++++++++------
status.23x | 3 +
4 files changed, 165 insertions(+), 33 deletions(-)
diff --git a/src/frontends/qt4/GuiPrefs.cpp b/src/frontends/qt4/GuiPrefs.cpp
index 8e4dbcd..58810df 100644
--- a/src/frontends/qt4/GuiPrefs.cpp
+++ b/src/frontends/qt4/GuiPrefs.cpp
@@ -1230,6 +1230,10 @@ PrefColors::PrefColors(GuiPreferences * form)
connect(colorChangePB, SIGNAL(clicked()),
this, SLOT(changeColor()));
+ connect(colorResetPB, SIGNAL(clicked()),
+ this, SLOT(resetColor()));
+ connect(colorResetAllPB, SIGNAL(clicked()),
+ this, SLOT(resetAllColor()));
connect(lyxObjectsLW, SIGNAL(itemSelectionChanged()),
this, SLOT(changeLyxObjectsSelection()));
connect(lyxObjectsLW, SIGNAL(itemActivated(QListWidgetItem*)),
@@ -1257,15 +1261,17 @@ void PrefColors::applyRC(LyXRC & rc) const
void PrefColors::updateRC(LyXRC const & rc)
{
- for (unsigned int i = 0; i < lcolors_.size(); ++i) {
+ for (size_type i = 0; i < lcolors_.size(); ++i) {
QColor color = QColor(guiApp->colorCache().get(lcolors_[i],
false));
QPixmap coloritem(32, 32);
coloritem.fill(color);
- lyxObjectsLW->item(i)->setIcon(QIcon(coloritem));
+ lyxObjectsLW->item(int(i))->setIcon(QIcon(coloritem));
newcolors_[i] = curcolors_[i] = color.name();
}
syscolorsCB->setChecked(rc.use_system_colors);
changeLyxObjectsSelection();
+
+ setDisabledResets();
}
@@ -1277,25 +1283,115 @@ void PrefColors::changeColor()
if (row < 0)
return;
- QString const color = newcolors_[row];
- QColor c = QColorDialog::getColor(QColor(color), qApp->focusWidget());
+ QString const color = newcolors_[size_t(row)];
+ QColor const c = QColorDialog::getColor(QColor(color),
qApp->focusWidget());
- if (c.isValid() && c.name() != color) {
- newcolors_[row] = c.name();
- QPixmap coloritem(32, 32);
- coloritem.fill(c);
- lyxObjectsLW->currentItem()->setIcon(QIcon(coloritem));
+ if (setColor(row, c, color)) {
+ setDisabledResets();
// emit signal
changed();
}
}
+
+void PrefColors::resetColor()
+{
+ int const row = lyxObjectsLW->currentRow();
+
+ // just to be sure
+ if (row < 0)
+ return;
+
+ QString const color = newcolors_[size_t(row)];
+ QColor const c = getDefaultColorByRow(row);
+
+ if (setColor(row, c, color)) {
+ setDisabledResets();
+ // emit signal
+ changed();
+ }
+}
+
+
+void PrefColors::resetAllColor()
+{
+ bool isChanged = false;
+
+ colorResetAllPB->setDisabled(true);
+
+ for (int irow = 0, count = lyxObjectsLW->count(); irow < count; ++irow)
{
+ QString const color = newcolors_[size_t(irow)];
+ QColor const c = getDefaultColorByRow(irow);
+
+ if (setColor(irow, c, color))
+ isChanged = true;
+ }
+
+ if (isChanged) {
+ setDisabledResets();
+ // emit signal
+ changed();
+ }
+}
+
+
+bool PrefColors::setColor(int const row, QColor const new_color,
+ QString const old_color)
+{
+ if (new_color.isValid() && new_color.name() != old_color) {
+ newcolors_[size_t(row)] = new_color.name();
+ QPixmap coloritem(32, 32);
+ coloritem.fill(new_color);
+ lyxObjectsLW->item(row)->setIcon(QIcon(coloritem));
+ return true;
+ }
+ return false;
+}
+
+
+void PrefColors::setDisabledResets()
+{
+ int const row = lyxObjectsLW->currentRow();
+ // set disable reset buttons ...
+ if (row >= 0)
+ colorResetPB->setDisabled(isDefaultColor(row,
newcolors_[size_t(row)]));
+
+ colorResetAllPB->setDisabled(true);
+
+ // ... in between process qt events to give quicker visual feedback to
the user ...
+ guiApp->processEvents();
+
+ // ... set disable Reset All button
+ for (int irow = 0, count = lyxObjectsLW->count(); irow < count; ++irow)
{
+ if (!isDefaultColor(irow, newcolors_[size_t(irow)])) {
+ colorResetAllPB->setDisabled(false);
+ // the break condition might hide performance issues
+ // if a non-default color is at the top of the list
+ break;
+ }
+ }
+}
+
+
+bool PrefColors::isDefaultColor(int const row, QString const color)
+{
+ return color == getDefaultColorByRow(row).name();
+}
+
+
+QColor PrefColors::getDefaultColorByRow(int const row)
+{
+ ColorSet const defaultcolor;
+ return defaultcolor.getX11Name(lcolors_[size_t(row)]).c_str();
+}
+
+
void PrefColors::changeSysColor()
{
for (int row = 0 ; row < lyxObjectsLW->count() ; ++row) {
// skip colors that are taken from system palette
bool const disable = syscolorsCB->isChecked()
- && guiApp->colorCache().isSystem(lcolors_[row]);
+ && guiApp->colorCache().isSystem(lcolors_[size_t(row)]);
QListWidgetItem * const item = lyxObjectsLW->item(row);
Qt::ItemFlags const flags = item->flags();
@@ -1307,9 +1403,17 @@ void PrefColors::changeSysColor()
}
}
+
void PrefColors::changeLyxObjectsSelection()
{
- colorChangePB->setDisabled(lyxObjectsLW->currentRow() < 0);
+ int currentRow = lyxObjectsLW->currentRow();
+ colorChangePB->setDisabled(currentRow < 0);
+
+ if (currentRow < 0)
+ colorResetPB->setDisabled(true);
+ else
+ colorResetPB->setDisabled(
+ isDefaultColor(currentRow,
newcolors_[size_t(currentRow)]));
}
diff --git a/src/frontends/qt4/GuiPrefs.h b/src/frontends/qt4/GuiPrefs.h
index 8f43a37..b36f2e6 100644
--- a/src/frontends/qt4/GuiPrefs.h
+++ b/src/frontends/qt4/GuiPrefs.h
@@ -259,12 +259,23 @@ public:
private Q_SLOTS:
void changeColor();
+ void resetColor();
+ void resetAllColor();
void changeSysColor();
void changeLyxObjectsSelection();
+ bool setColor(int const row, QColor const new_color,
+ QString const old_color);
+ bool isDefaultColor(int const row, QString const color);
+ void setDisabledResets();
private:
+ ///
+ QColor getDefaultColorByRow(int const row);
+ ///
std::vector<ColorCode> lcolors_;
+ ///
std::vector<QString> curcolors_;
+ ///
std::vector<QString> newcolors_;
};
diff --git a/src/frontends/qt4/ui/PrefColorsUi.ui
b/src/frontends/qt4/ui/PrefColorsUi.ui
index e7c89c2..7ce2248 100644
--- a/src/frontends/qt4/ui/PrefColorsUi.ui
+++ b/src/frontends/qt4/ui/PrefColorsUi.ui
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>PrefColorsUi</class>
<widget class="QWidget" name="PrefColorsUi">
@@ -5,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>339</width>
+ <width>397</width>
<height>254</height>
</rect>
</property>
@@ -19,9 +20,19 @@
<string/>
</property>
<layout class="QGridLayout" name="gridLayout_2">
+ <item row="1" column="0">
+ <widget class="QCheckBox" name="syscolorsCB">
+ <property name="toolTip">
+ <string>Use the color scheme of your Operating System/Desktop
Environment</string>
+ </property>
+ <property name="text">
+ <string>&Use system colors</string>
+ </property>
+ </widget>
+ </item>
<item row="0" column="0" colspan="2">
<layout class="QGridLayout" name="gridLayout">
- <item row="0" column="0" rowspan="2">
+ <item row="0" column="0" rowspan="5">
<widget class="QListWidget" name="lyxObjectsLW">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
@@ -42,12 +53,35 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="toolTip">
+ <string>Change the selected color</string>
+ </property>
<property name="text">
<string>A&lter...</string>
</property>
</widget>
</item>
<item row="1" column="1">
+ <widget class="QPushButton" name="colorResetPB">
+ <property name="toolTip">
+ <string>Reset the selected color to its original value</string>
+ </property>
+ <property name="text">
+ <string>Reset to &Default</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QPushButton" name="colorResetAllPB">
+ <property name="toolTip">
+ <string>Reset all colors to their original value</string>
+ </property>
+ <property name="text">
+ <string>Reset A&ll</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
<spacer>
<property name="orientation">
<enum>Qt::Vertical</enum>
@@ -62,26 +96,6 @@
</item>
</layout>
</item>
- <item row="0" column="2">
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="1" column="0">
- <widget class="QCheckBox" name="syscolorsCB">
- <property name="text">
- <string>&Use system colors</string>
- </property>
- </widget>
- </item>
<item row="1" column="1">
<spacer name="horizontalSpacer">
<property name="orientation">
diff --git a/status.23x b/status.23x
index 6ee0c6f..26cb697 100644
--- a/status.23x
+++ b/status.23x
@@ -37,6 +37,9 @@ What's new
- Add "Reset" and "Reset All Fields" buttons to Text Properties
dialog (bug 11415).
+- Add "Reset to Default" and "Reset All" buttons to Color Preferences
+ (bug 10062).
+
- Insert new graphics inset on the correct cursor position.
- Fix regression where spaces are disappearing when editing text (bug 11412).