changeset 1579:85f04c956f03 background-mode

Add optional unset entry to colour combo
author Chris Cannam
date Fri, 24 Jan 2020 12:40:27 +0000
parents 57a4ee52ad69
children a2ff9c01889e
files widgets/ColourComboBox.cpp widgets/ColourComboBox.h
diffstat 2 files changed, 55 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/widgets/ColourComboBox.cpp	Fri Jan 24 12:40:07 2020 +0000
+++ b/widgets/ColourComboBox.cpp	Fri Jan 24 12:40:27 2020 +0000
@@ -38,15 +38,29 @@
     connect(this, SIGNAL(activated(int)), this, SLOT(comboActivated(int)));
     connect(ColourDatabase::getInstance(), SIGNAL(colourDatabaseChanged()),
             this, SLOT(rebuild()));
-
-    if (count() < 20 && count() > maxVisibleItems()) {
-        setMaxVisibleItems(count());
-    }
 }
 
 void
-ColourComboBox::comboActivated(int index)
+ColourComboBox::includeUnsetEntry(QString entry)
 {
+    m_unsetEntry = entry;
+    
+    rebuild();
+
+    blockSignals(true);
+    int ix = currentIndex();
+    setCurrentIndex(ix + 1);
+    blockSignals(false);
+}
+
+void
+ColourComboBox::comboActivated(int comboIndex)
+{
+    int index = comboIndex;
+    if (m_unsetEntry != "") {
+        index = comboIndex - 1; // so index is the colour index
+    }
+    
     if (!m_withAddNewColourEntry ||
         index < int(ColourDatabase::getInstance()->getColourCount())) {
         emit colourChanged(index);
@@ -81,6 +95,10 @@
     
     clear();
 
+    if (m_unsetEntry != "") {
+        addItem(m_unsetEntry);
+    }
+    
     int size = (QFontMetrics(QFont()).height() * 2) / 3;
     if (size < 12) size = 12;
     
@@ -95,6 +113,12 @@
     }
 
     setCurrentIndex(ix);
+
+    if (count() < 18) {
+        setMaxVisibleItems(count());
+    } else {
+        setMaxVisibleItems(10);
+    }
     
     blockSignals(false);
 }
--- a/widgets/ColourComboBox.h	Fri Jan 24 12:40:07 2020 +0000
+++ b/widgets/ColourComboBox.h	Fri Jan 24 12:40:27 2020 +0000
@@ -29,7 +29,32 @@
 public:
     ColourComboBox(bool withAddNewColourEntry, QWidget *parent = 0);
 
+    /**
+     * Add an entry at the top of the combo for "no colour selected",
+     * with the given label.
+     */
+    void includeUnsetEntry(QString label);
+
+    /**
+     * Get the current colour index. This is the same as
+     * QComboBox::currentIndex() if there is no unset entry, or 1 less
+     * than it if includeUnsetEntry() has been used. So if there is an
+     * unset entry, and it is selected, this returns -1.
+     */
+    int getCurrentColourIndex() const {
+        int index = currentIndex();
+        if (m_unsetEntry == "") {
+            return index;
+        } else {
+            return index - 1;
+        }
+    }
+
 signals:
+    /**
+     * Emitted when the current index is changed. The argument is the
+     * value returned by getCurrentColourIndex()
+     */
     void colourChanged(int colourIndex);
 
 private slots:
@@ -38,6 +63,7 @@
     
 private:
     bool m_withAddNewColourEntry;
+    QString m_unsetEntry;
 };
 
 #endif