summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2017-03-07 10:22:01 +0100
committerArno <arno@disconnect.de>2017-03-07 10:22:01 +0100
commit57357d21c3633ff7dbb120e231b8b9eaf9821fb6 (patch)
tree9378471bc18825b678e65b93313259335d8531c1
parentfad486922aa8ac8a4e55bd154bd8817f759d7ebd (diff)
downloadBeetPlayer-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.qrc1
-rw-r--r--configurationdialog.cpp66
-rw-r--r--configurationdialog.h7
-rw-r--r--fill-color.pngbin0 -> 4242 bytes
-rw-r--r--helper.cpp18
-rw-r--r--helper.h4
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
new file mode 100644
index 0000000..39c6c67
--- /dev/null
+++ b/fill-color.png
Binary files differ
diff --git a/helper.cpp b/helper.cpp
index eaf0dda..5fa3a3b 100644
--- a/helper.cpp
+++ b/helper.cpp
@@ -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);
+ }
}
diff --git a/helper.h b/helper.h
index 70d2836..0169491 100644
--- a/helper.h
+++ b/helper.h
@@ -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