diff main/PreferencesDialog.cpp @ 2466:2197ba438a3f background-mode

Add support for picking up overview colour from desktop theme
author Chris Cannam
date Fri, 24 Jan 2020 12:44:49 +0000
parents a94b289f0b93
children cbde01e5c626
line wrap: on
line diff
--- a/main/PreferencesDialog.cpp	Fri Jan 24 12:44:37 2020 +0000
+++ b/main/PreferencesDialog.cpp	Fri Jan 24 12:44:49 2020 +0000
@@ -149,12 +149,14 @@
                                            int(ColourMapper::Sunset)).toInt());
     m_colour3DColour = (settings.value("colour-3d-plot-colour",
                                        int(ColourMapper::Green)).toInt());
+    m_overviewColourIsSet = false;
     m_overviewColour = ColourDatabase::getInstance()->getColour(tr("Green"));
     if (settings.contains("overview-colour")) {
         QString qcolorName =
             settings.value("overview-colour", m_overviewColour.name())
             .toString();
         m_overviewColour.setNamedColor(qcolorName);
+        m_overviewColourIsSet = true;
         SVCERR << "loaded colour " << m_overviewColour.name() << " from settings" << endl;
     }
     settings.endGroup();
@@ -170,11 +172,15 @@
 
     // can't have "add new colour", as it gets saved in the session not in prefs
     m_overviewColourCombo = new ColourComboBox(false);
-    int overviewColourIndex =
-        ColourDatabase::getInstance()->getColourIndex(m_overviewColour);
-    SVCERR << "index = " << overviewColourIndex << " for colour " << m_overviewColour.name() << endl;
-    if (overviewColourIndex >= 0) {
-        m_overviewColourCombo->setCurrentIndex(overviewColourIndex);
+    m_overviewColourCombo->includeUnsetEntry(tr("Follow desktop theme"));
+    if (m_overviewColourIsSet) {
+        int overviewColourIndex =
+            ColourDatabase::getInstance()->getColourIndex(m_overviewColour);
+        if (overviewColourIndex >= 0) {
+            m_overviewColourCombo->setCurrentIndex(overviewColourIndex + 1);
+        }
+    } else {
+        m_overviewColourCombo->setCurrentIndex(0);
     }
 
     connect(spectrogramGColour, SIGNAL(colourMapChanged(int)),
@@ -747,7 +753,10 @@
 void
 PreferencesDialog::overviewColourChanged(int colour)
 {
-    m_overviewColour = ColourDatabase::getInstance()->getColour(colour);
+    m_overviewColourIsSet = (colour >= 0);
+    if (m_overviewColourIsSet) {
+        m_overviewColour = ColourDatabase::getInstance()->getColour(colour);
+    }
     m_coloursChanged = true;
     m_applyButton->setEnabled(true);
 }
@@ -889,18 +898,23 @@
     // (dark/light), also default the overview colour preference to
     // something sensible
     
-    int overviewColour = m_overviewColourCombo->currentIndex();
-    int plainColours = 6; // we happen to know there are 6 "light" and 6 "dark"
+    int overviewColour = m_overviewColourCombo->getCurrentColourIndex();
+
+    if (overviewColour >= 0) {
+        int plainColours = 6; // we happen to know there are 6 light and 6 dark
     
-    if (mode == Preferences::DarkBackground && overviewColour < plainColours) {
-        overviewColour += plainColours;
+        if (mode == Preferences::DarkBackground &&
+            overviewColour < plainColours) {
+            overviewColour += plainColours;
+        }
+        if (mode == Preferences::LightBackground &&
+            overviewColour >= plainColours) {
+            overviewColour -= plainColours;
+        }
+
+        m_overviewColourCombo->setCurrentIndex(overviewColour + 1);
+        overviewColourChanged(overviewColour);
     }
-    if (mode == Preferences::LightBackground && overviewColour >= plainColours) {
-        overviewColour -= plainColours;
-    }
-
-    m_overviewColourCombo->setCurrentIndex(overviewColour);
-    overviewColourChanged(overviewColour);
 }
 
 void
@@ -1016,7 +1030,11 @@
     settings.setValue("spectrogram-colour", m_spectrogramGColour);
     settings.setValue("spectrogram-melodic-colour", m_spectrogramMColour);
     settings.setValue("colour-3d-plot-colour", m_colour3DColour);
-    settings.setValue("overview-colour", m_overviewColour.name());
+    if (m_overviewColourIsSet) {
+        settings.setValue("overview-colour", m_overviewColour.name());
+    } else {
+        settings.remove("overview-colour");
+    }
     settings.endGroup();
 
     settings.beginGroup("MainWindow");