]> git.lyx.org Git - features.git/commitdiff
Allow to restore default UI colors in prefs
authorJuergen Spitzmueller <spitz@lyx.org>
Sat, 22 Dec 2018 17:44:58 +0000 (18:44 +0100)
committerJuergen Spitzmueller <spitz@lyx.org>
Mon, 24 Dec 2018 10:51:38 +0000 (11:51 +0100)
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
src/frontends/qt4/GuiPrefs.h
src/frontends/qt4/ui/PrefColorsUi.ui
status.23x

index 8e4dbcde6a4608230032c61325f8ce8c690af238..58810dfb85e13c13ab5e720b8d81357034e05372 100644 (file)
@@ -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)]));
 }
 
 
index 8f43a37e534871df58fbe482cff5e7376b1df5c4..b36f2e60c388aa111dff0a9a374a5a75eb1ee16e 100644 (file)
@@ -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_;
 };
 
index e7c89c2e5e94913b471b71e1acecf812a5883ed7..7ce2248e58e389b049e16c127781d46fb78082a7 100644 (file)
@@ -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>
    <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>&amp;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">
          <verstretch>0</verstretch>
         </sizepolicy>
        </property>
+       <property name="toolTip">
+        <string>Change the selected color</string>
+       </property>
        <property name="text">
         <string>A&amp;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 &amp;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&amp;ll</string>
+       </property>
+      </widget>
+     </item>
+     <item row="3" column="1">
       <spacer>
        <property name="orientation">
         <enum>Qt::Vertical</enum>
      </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>&amp;Use system colors</string>
-     </property>
-    </widget>
-   </item>
    <item row="1" column="1">
     <spacer name="horizontalSpacer">
      <property name="orientation">
index 6ee0c6fe27a67547bfc9cd8341e0bcc8b6fed7af..26cb69799e533d4b08e3da796481873c7e6f47c7 100644 (file)
@@ -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).