summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Holthuis <jan.holthuis@ruhr-uni-bochum.de>2020-03-03 18:30:21 +0100
committerJan Holthuis <jan.holthuis@ruhr-uni-bochum.de>2020-03-03 21:51:40 +0100
commit5b4c695789ec81f89b8f2d2f65c339148a1906dd (patch)
tree252748be49b061dd9268ad5ead240329eb280f59
parent3f94fd676c29297e0a1c46f60b59d93d2def0f9e (diff)
widget/wcolorpicker: Add support for switching palettes with different sizes
-rw-r--r--src/widget/wcolorpicker.cpp51
-rw-r--r--src/widget/wcolorpicker.h4
-rw-r--r--src/widget/wcuemenupopup.h4
-rw-r--r--src/widget/woverview.cpp2
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()) {