diff options
author | Arno <arno@disconnect.de> | 2017-03-07 10:22:01 +0100 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2017-03-07 10:22:01 +0100 |
commit | 57357d21c3633ff7dbb120e231b8b9eaf9821fb6 (patch) | |
tree | 9378471bc18825b678e65b93313259335d8531c1 | |
parent | fad486922aa8ac8a4e55bd154bd8817f759d7ebd (diff) | |
download | BeetPlayer-57357d21c3633ff7dbb120e231b8b9eaf9821fb6.tar.gz BeetPlayer-57357d21c3633ff7dbb120e231b8b9eaf9821fb6.tar.bz2 BeetPlayer-57357d21c3633ff7dbb120e231b8b9eaf9821fb6.zip |
Implement color choosing dialog for QTreeViews
Hmm, this shouldn't be so hard. Quite a lot of code for such an easy
thing, but maybe it's just me and I'm over-complicating things...
-rw-r--r-- | beetplayer.qrc | 1 | ||||
-rw-r--r-- | configurationdialog.cpp | 66 | ||||
-rw-r--r-- | configurationdialog.h | 7 | ||||
-rw-r--r-- | fill-color.png | bin | 0 -> 4242 bytes | |||
-rw-r--r-- | helper.cpp | 18 | ||||
-rw-r--r-- | helper.h | 4 |
6 files changed, 94 insertions, 2 deletions
diff --git a/beetplayer.qrc b/beetplayer.qrc index 7688f96..9f495ac 100644 --- a/beetplayer.qrc +++ b/beetplayer.qrc @@ -24,5 +24,6 @@ <file>folder.png</file> <file>splash.png</file> <file>gaping_ass.png</file> + <file>fill-color.png</file> </qresource> </RCC> diff --git a/configurationdialog.cpp b/configurationdialog.cpp index 88e70a4..1d3b605 100644 --- a/configurationdialog.cpp +++ b/configurationdialog.cpp @@ -2,10 +2,14 @@ #include <QLineEdit> #include <QLabel> #include <QPushButton> +#include <QCheckBox> #include <QTabWidget> #include <QSettings> +#include <QColorDialog> +#include <QSignalMapper> #include "configurationdialog.h" +#include "helper.h" ConfigurationDialog::ConfigurationDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f) { //database setup @@ -38,10 +42,44 @@ ConfigurationDialog::ConfigurationDialog(QWidget *parent, Qt::WindowFlags f) : Q bLayout->addWidget(cancelB); bLayout->addStretch(); + //colors + QWidget *colorWidget = new QWidget; + QGridLayout *colorGrid = new QGridLayout; + colorGrid->setColumnStretch(1, 4); + colorGrid->addWidget(new QLabel(tr("Base color")), 0, 0); + mBaseColorL = new QLabel; + mBaseColorL->setFrameStyle(QFrame::Sunken | QFrame::Panel); + mBaseColorL->setScaledContents(true); + colorGrid->addWidget(mBaseColorL, 0, 1); + QPushButton *baseColorB = new QPushButton; + baseColorB->setIcon(QIcon(":/fill-color.png")); + colorGrid->addWidget(baseColorB, 0, 2); + colorGrid->addWidget(new QLabel(tr("Alt. color")), 1, 0); + mAltColorL = new QLabel; + mAltColorL->setFrameStyle(QFrame::Sunken | QFrame::Panel); + mAltColorL->setScaledContents(true); + colorGrid->addWidget(mAltColorL, 1, 1); + QPushButton *altColorB = new QPushButton; + altColorB->setIcon(QIcon(":/fill-color.png")); + colorGrid->addWidget(altColorB, 1, 2); + QVBoxLayout *colorL = new QVBoxLayout; + colorL->addLayout(colorGrid); + colorL->addStretch(); + colorWidget->setLayout(colorL); + mUseAltColors = new QCheckBox(tr("Use alt. row colors")); + colorGrid->addWidget(mUseAltColors, 2, 1, 1, 2, Qt::AlignLeft); + QSignalMapper *colorMapper = new QSignalMapper(this); + colorMapper->setMapping(baseColorB, mBaseColorL); + colorMapper->setMapping(altColorB, mAltColorL); + connect(baseColorB, SIGNAL(clicked()), colorMapper, SLOT(map())); + connect(altColorB, SIGNAL(clicked()), colorMapper, SLOT(map())); + connect(colorMapper, SIGNAL(mapped(QWidget*)), this, SLOT(chooseColor(QWidget*))); + //dialog layout QVBoxLayout *mainLayout = new QVBoxLayout; QTabWidget *tab = new QTabWidget; tab->addTab(dbWidget, tr("Database")); + tab->addTab(colorWidget, tr("Colors")); mainLayout->addWidget(tab); mainLayout->addLayout(bLayout); readSettings(); @@ -55,12 +93,40 @@ void ConfigurationDialog::accept(){ s.setValue("dbuser", mDbUser->text()); s.setValue("dbpass", mDbPass->text()); s.setValue("dbname", mDbName->text()); + QColor baseColor = Helper::colorFromLabel(mBaseColorL); + s.setValue("basecolor", baseColor); + QColor altColor = Helper::colorFromLabel(mAltColorL); + s.setValue("altcolor", altColor); + s.setValue("usealtcolors", mUseAltColors->isChecked()); QDialog::accept(); } + +void ConfigurationDialog::chooseColor(QWidget *label){ + QLabel *curLabel = static_cast<QLabel*>(label); + QColor startColor = Helper::colorFromLabel(curLabel); + if(!startColor.isValid()){ + startColor = palette().base().color(); + } + QColor newColor = QColorDialog::getColor(startColor, this); + if(newColor.isValid()){ + QPixmap newPm(curLabel->sizeHint()); + newPm.fill(newColor); + curLabel->setPixmap(newPm); + } +} + void ConfigurationDialog::readSettings(){ QSettings s; mDbHost->setText(s.value("dbhost").toString()); mDbUser->setText(s.value("dbuser").toString()); mDbPass->setText(s.value("dbpass").toString()); mDbName->setText(s.value("dbname").toString()); + QVariant baseColorV = s.value("basecolor", palette().base().color()); + QColor baseColor = baseColorV.value<QColor>(); + Helper::fillLabel(mBaseColorL, baseColor); + QVariant altColorV = s.value("altcolor", palette().alternateBase().color()); + QColor altColor = altColorV.value<QColor>(); + Helper::fillLabel(mAltColorL, altColor); + bool useAltColors = s.value("usealtcolors", false).toBool(); + mUseAltColors->setChecked(useAltColors); } diff --git a/configurationdialog.h b/configurationdialog.h index 9a8bad8..36f63f8 100644 --- a/configurationdialog.h +++ b/configurationdialog.h @@ -4,7 +4,8 @@ #include <QDialog> class QLineEdit; -class QPushButton; +class QCheckBox; +class QLabel; class ConfigurationDialog : public QDialog { Q_OBJECT @@ -13,6 +14,7 @@ class ConfigurationDialog : public QDialog { public slots: virtual void accept(); + void chooseColor(QWidget *label); private: void readSettings(); @@ -20,6 +22,9 @@ class ConfigurationDialog : public QDialog { QLineEdit *mDbUser; QLineEdit *mDbPass; QLineEdit *mDbName; + QLabel *mBaseColorL; + QLabel *mAltColorL; + QCheckBox *mUseAltColors; }; #endif // CONFIGURATIONDIALOG_H diff --git a/fill-color.png b/fill-color.png Binary files differnew file mode 100644 index 0000000..39c6c67 --- /dev/null +++ b/fill-color.png @@ -1,6 +1,6 @@ #include <QPainter> -#include <QPalette> #include <QAction> +#include <QLabel> #include <QApplication> #include <taglib/fileref.h> @@ -35,4 +35,20 @@ namespace Helper { TagLib::AudioProperties *props = f.audioProperties(); return props->lengthInSeconds(); } + + QColor colorFromLabel(QLabel *l){ + QColor retval; + const QPixmap *pm = l->pixmap(); + if(pm){ + QImage img = pm->toImage(); + retval = img.pixelColor(0, 0); + } + return retval; + } + + void fillLabel(QLabel *l, QColor c){ + QPixmap newPm(l->sizeHint()); + newPm.fill(c); + l->setPixmap(newPm); + } } @@ -3,13 +3,17 @@ #include <QIcon> #include <QChar> +#include <QColor> class QAction; +class QLabel; namespace Helper { QIcon iconFromQChar(const QChar &c, int pixelSize); QAction* createSeparator(QObject *parent); quint64 lengthInSeconds(const QString &file); + QColor colorFromLabel(QLabel *l); + void fillLabel(QLabel *l, QColor c); } #endif // HELPER_H |