Mercurial > hg > svgui
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