diff options
author | Jan Holthuis <jan.holthuis@ruhr-uni-bochum.de> | 2020-03-03 18:30:21 +0100 |
---|---|---|
committer | Jan Holthuis <jan.holthuis@ruhr-uni-bochum.de> | 2020-03-03 21:51:40 +0100 |
commit | 5b4c695789ec81f89b8f2d2f65c339148a1906dd (patch) | |
tree | 252748be49b061dd9268ad5ead240329eb280f59 | |
parent | 3f94fd676c29297e0a1c46f60b59d93d2def0f9e (diff) |
widget/wcolorpicker: Add support for switching palettes with different sizes
-rw-r--r-- | src/widget/wcolorpicker.cpp | 51 | ||||
-rw-r--r-- | src/widget/wcolorpicker.h | 4 | ||||
-rw-r--r-- | src/widget/wcuemenupopup.h | 4 | ||||
-rw-r--r-- | src/widget/woverview.cpp | 2 |
4 files changed, 38 insertions, 23 deletions
diff --git a/src/widget/wcolorpicker.cpp b/src/widget/wcolorpicker.cpp index 542133bbf9..b02a6ff769 100644 --- a/src/widget/wcolorpicker.cpp +++ b/src/widget/wcolorpicker.cpp @@ -54,6 +54,30 @@ WColorPicker::WColorPicker(ColorOption colorOption, const ColorPalette& palette, // better than having buttons without any colors (which would make the // color picker unusable). m_pStyle = QStyleFactory::create(QString("fusion")); + setLayout(pLayout); + addColorButtons(); +} + +void WColorPicker::removeColorButtons() { + QGridLayout* pLayout = static_cast<QGridLayout*>(layout()); + VERIFY_OR_DEBUG_ASSERT(pLayout) { + qWarning() << "Color Picker has no layout!"; + return; + } + + while (!m_colorButtons.isEmpty()) { + QPushButton* pColorButton = m_colorButtons.takeLast(); + pLayout->removeWidget(pColorButton); + delete pColorButton; + } +} + +void WColorPicker::addColorButtons() { + QGridLayout* pLayout = static_cast<QGridLayout*>(layout()); + VERIFY_OR_DEBUG_ASSERT(pLayout) { + qWarning() << "Color Picker has no layout!"; + return; + } int row = 0; int column = 0; @@ -80,7 +104,6 @@ WColorPicker::WColorPicker(ColorOption colorOption, const ColorPalette& palette, } void WColorPicker::addColorButton(mixxx::RgbColor::optional_t color, QGridLayout* pLayout, int row, int column) { - setLayout(pLayout); parented_ptr<QPushButton> pColorButton = make_parented<QPushButton>("", this); if (m_pStyle) { pColorButton->setStyle(m_pStyle); @@ -175,25 +198,15 @@ void WColorPicker::setSelectedColor(mixxx::RgbColor::optional_t color) { pButton->style()->polish(pButton); } -void WColorPicker::useColorSet(const ColorPalette& palette) { - resetSelectedColor(); - - for (int i = 0; i < m_colorButtons.size(); ++i) { - int j = i; - if (m_colorOption == ColorOption::AllowNoColor) { - j++; - } - - if (i >= palette.size() || j >= m_colorButtons.size()) { - return; - } - - // Set the background color of the button. This can't be overridden in skin stylesheets. - m_colorButtons.at(j)->setStyleSheet( - QString("QPushButton { background-color: %1; }") - .arg(mixxx::RgbColor::toQString(palette.at(i)))); - m_colorButtons.at(j)->setToolTip(mixxx::RgbColor::toQString(palette.at(i), tr("No Color"))); +void WColorPicker::setColorPalette(const ColorPalette& palette) { + if (m_palette == palette) { + return; } + + resetSelectedColor(); + removeColorButtons(); + m_palette = palette; + addColorButtons(); } void WColorPicker::slotColorPicked(mixxx::RgbColor::optional_t color) { diff --git a/src/widget/wcolorpicker.h b/src/widget/wcolorpicker.h index 8c744c1385..d905e61246 100644 --- a/src/widget/wcolorpicker.h +++ b/src/widget/wcolorpicker.h @@ -21,7 +21,7 @@ class WColorPicker : public QWidget { void resetSelectedColor(); void setSelectedColor(mixxx::RgbColor::optional_t color); - void useColorSet(const ColorPalette& palette); + void setColorPalette(const ColorPalette& palette); signals: void colorPicked(mixxx::RgbColor::optional_t color); @@ -30,6 +30,8 @@ class WColorPicker : public QWidget { void slotColorPicked(mixxx::RgbColor::optional_t color); private: + void addColorButtons(); + void removeColorButtons(); void addColorButton(mixxx::RgbColor::optional_t color, QGridLayout* pLayout, int row, int column); ColorOption m_colorOption; mixxx::RgbColor::optional_t m_selectedColor; diff --git a/src/widget/wcuemenupopup.h b/src/widget/wcuemenupopup.h index 3c8094e8be..2cdf8307b8 100644 --- a/src/widget/wcuemenupopup.h +++ b/src/widget/wcuemenupopup.h @@ -23,9 +23,9 @@ class WCueMenuPopup : public QWidget { void setTrackAndCue(TrackPointer pTrack, CuePointer pCue); - void useColorSet(const ColorPalette& palette) { + void setColorPalette(const ColorPalette& palette) { if (m_pColorPicker != nullptr) { - m_pColorPicker->useColorSet(palette); + m_pColorPicker->setColorPalette(palette); } } diff --git a/src/widget/woverview.cpp b/src/widget/woverview.cpp index fe6c3eb52d..4fb65c6fbf 100644 --- a/src/widget/woverview.cpp +++ b/src/widget/woverview.cpp @@ -134,7 +134,7 @@ void WOverview::setup(const QDomNode& node, const SkinContext& context) { ColorPaletteSettings colorPaletteSettings(m_pConfig); auto colorPalette = colorPaletteSettings.getHotcueColorPalette(); - m_pCueMenuPopup->useColorSet(colorPalette); + m_pCueMenuPopup->setColorPalette(colorPalette); for (const auto& pMark: m_marks) { if (pMark->isValid()) { |