diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2020-07-19 10:36:26 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2020-07-19 10:36:26 +0000 |
| commit | 02cea0a8908363cf58090b5c11c12c49ec46272c (patch) | |
| tree | 7d8008828717d887aa4aa1291f6cfa03947ee594 | |
| parent | ba55dab9032ac3cb48d7b05baf3384f141c845e0 (diff) | |
| download | qmmp-02cea0a8908363cf58090b5c11c12c49ec46272c.tar.gz qmmp-02cea0a8908363cf58090b5c11c12c49ec46272c.tar.bz2 qmmp-02cea0a8908363cf58090b5c11c12c49ec46272c.zip | |
skinned: added playlist color settings
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@9443 90c681e8-e032-0410-971d-27865f9a5e38
| -rwxr-xr-x | bin/qmmp_launcher | 2 | ||||
| -rw-r--r-- | src/plugins/Ui/qsui/qsuisettings.cpp | 2 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/colorwidget.cpp | 63 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/colorwidget.h | 54 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/forms/skinnedsettings.ui | 471 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/listwidget.cpp | 4 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/listwidgetdrawer.cpp | 130 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/listwidgetdrawer.h | 8 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/skinned.pro | 6 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/skinnedsettings.cpp | 80 |
10 files changed, 761 insertions, 59 deletions
diff --git a/bin/qmmp_launcher b/bin/qmmp_launcher index 9a745bf23..1d1d0b8f1 100755 --- a/bin/qmmp_launcher +++ b/bin/qmmp_launcher @@ -1,7 +1,7 @@ #!/bin/sh MYDIR=$(dirname $0) #QT_LIB_DIR=$(dirname $(which qmake))/../lib -QT_LIB_DIR=/opt/qt512/lib +QT_LIB_DIR=/opt/qt515/lib QMMP_LIB_DIRS=$MYDIR/../lib:$MYDIR/../src/qmmpui if [ -z ${LD_LIBRARY_PATH} ]; then diff --git a/src/plugins/Ui/qsui/qsuisettings.cpp b/src/plugins/Ui/qsui/qsuisettings.cpp index 900a1142e..af6f856c2 100644 --- a/src/plugins/Ui/qsui/qsuisettings.cpp +++ b/src/plugins/Ui/qsui/qsuisettings.cpp @@ -209,7 +209,7 @@ void QSUiSettings::readSettings() m_ui.plCurrentTrackBgColor->setColor(settings.value("pl_current_bg_color", normal_bg).toString()); m_ui.plOverrideGroupBgCheckBox->setChecked(settings.value("pl_override_group_bg", false).toBool()); m_ui.plOverrideCurrentBgCheckBox->setChecked(settings.value("pl_override_current_bg", false).toBool()); - //waveform seekbar color + //waveform seekbar colors m_ui.wfsbBgColor->setColor(settings.value("wfsb_bg_color", "Black").toString()); m_ui.wfsbRmsColor->setColor(settings.value("wfsb_rms_color", "#DDDDDD").toString()); m_ui.wfsbWaveFormColor->setColor(settings.value("wfsb_waveform_color", "#BECBFF").toString()); diff --git a/src/plugins/Ui/skinned/colorwidget.cpp b/src/plugins/Ui/skinned/colorwidget.cpp new file mode 100644 index 000000000..8c07bed3d --- /dev/null +++ b/src/plugins/Ui/skinned/colorwidget.cpp @@ -0,0 +1,63 @@ +/*************************************************************************** + * Copyright (C) 2005-2020 by Ilya Kotov * + * forkotov02@ya.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include <QPalette> +#include <QDebug> +#include "colorwidget.h" + +ColorWidget::ColorWidget(QWidget *parent) : QFrame(parent) +{ + setFrameShape(QFrame::Box); + setAutoFillBackground(true); +} + +ColorWidget::~ColorWidget() +{} + +QColorDialog::ColorDialogOptions ColorWidget::options() const +{ + return m_options; +} + +void ColorWidget::setOptions(QColorDialog::ColorDialogOptions options) +{ + m_options = options; +} + +void ColorWidget::mousePressEvent(QMouseEvent *) +{ + QColor color = QColorDialog::getColor(QColor(m_colorName), parentWidget(), + tr("Select Color"), m_options); + if (color.isValid()) + { + setColor(color.name((m_options & QColorDialog::ShowAlphaChannel) ? QColor::HexArgb : QColor::HexRgb)); + } +} + +void ColorWidget::setColor(QString c) +{ + m_colorName = c; + setStyleSheet(QString("QFrame { background: %1 }").arg(m_colorName)); +} + +const QString ColorWidget::colorName() const +{ + return m_colorName; +} diff --git a/src/plugins/Ui/skinned/colorwidget.h b/src/plugins/Ui/skinned/colorwidget.h new file mode 100644 index 000000000..f141f8902 --- /dev/null +++ b/src/plugins/Ui/skinned/colorwidget.h @@ -0,0 +1,54 @@ +/*************************************************************************** + * Copyright (C) 2005-2020 by Ilya Kotov * + * forkotov02@ya.ru * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ +#ifndef COLORWIDGET_H +#define COLORWIDGET_H + +#include <QFrame> +#include <QPaintEvent> +#include <QColorDialog> + +/** +@author Ilya Kotov +*/ +class ColorWidget : public QFrame +{ + Q_OBJECT + Q_PROPERTY(QColorDialog::ColorDialogOptions options READ options WRITE setOptions) +public: + ColorWidget(QWidget *parent = nullptr); + ~ColorWidget(); + + QColorDialog::ColorDialogOptions options() const; + void setOptions(QColorDialog::ColorDialogOptions options); + + const QString colorName() const; + +public slots: + void setColor(QString); + +private: + void mousePressEvent(QMouseEvent *) override; + QString m_colorName; + QColorDialog::ColorDialogOptions m_options = QColorDialog::ColorDialogOptions(); + + +}; + +#endif diff --git a/src/plugins/Ui/skinned/forms/skinnedsettings.ui b/src/plugins/Ui/skinned/forms/skinnedsettings.ui index 89d97e8eb..c3e98b280 100644 --- a/src/plugins/Ui/skinned/forms/skinnedsettings.ui +++ b/src/plugins/Ui/skinned/forms/skinnedsettings.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>489</width> - <height>458</height> + <height>465</height> </rect> </property> <property name="windowTitle"> @@ -54,6 +54,10 @@ <property name="text"> <string>Add...</string> </property> + <property name="icon"> + <iconset theme="list-add"> + <normaloff>.</normaloff>.</iconset> + </property> </widget> </item> <item row="1" column="2"> @@ -67,6 +71,10 @@ <property name="text"> <string>Refresh</string> </property> + <property name="icon"> + <iconset theme="view-refresh"> + <normaloff>.</normaloff>.</iconset> + </property> </widget> </item> <item row="1" column="3"> @@ -379,6 +387,10 @@ <property name="text"> <string>Edit template</string> </property> + <property name="icon"> + <iconset theme="configure"> + <normaloff>.</normaloff>.</iconset> + </property> </widget> </item> <item> @@ -411,6 +423,455 @@ </item> </layout> </widget> + <widget class="QWidget" name="tab_3"> + <attribute name="title"> + <string>Colors</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_4"> + <item> + <widget class="QGroupBox" name="groupBox_3"> + <property name="title"> + <string>Playlist Colors</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_7"> + <item> + <widget class="QCheckBox" name="plSkinColorsCheckBox"> + <property name="text"> + <string>Use skin colors</string> + </property> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QWidget" name="widget_2" native="true"> + <property name="enabled"> + <bool>false</bool> + </property> + <layout class="QGridLayout" name="gridLayout_5"> + <item row="4" column="6"> + <widget class="ColorWidget" name="plGrTextColor"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="frameShape"> + <enum>QFrame::Box</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Plain</enum> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="ColorWidget" name="plHlColor"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="frameShape"> + <enum>QFrame::Box</enum> + </property> + </widget> + </item> + <item row="8" column="1"> + <widget class="ColorWidget" name="plCurrentTrackBgColor"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="frameShape"> + <enum>QFrame::Box</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Plain</enum> + </property> + </widget> + </item> + <item row="2" column="6"> + <widget class="ColorWidget" name="plTextHlCurrentColor"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="frameShape"> + <enum>QFrame::Box</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Plain</enum> + </property> + </widget> + </item> + <item row="1" column="6"> + <widget class="ColorWidget" name="plTextCurrentColor"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="frameShape"> + <enum>QFrame::Box</enum> + </property> + </widget> + </item> + <item row="0" column="2" rowspan="5" colspan="2"> + <spacer name="horizontalSpacer_5"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>43</height> + </size> + </property> + </spacer> + </item> + <item row="0" column="7" rowspan="5"> + <spacer name="horizontalSpacer_6"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>66</width> + <height>68</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_8"> + <property name="text"> + <string>Background #2:</string> + </property> + </widget> + </item> + <item row="8" column="4" colspan="4"> + <spacer name="horizontalSpacer_10"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>189</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="0" column="1"> + <widget class="ColorWidget" name="plBg1Color"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="frameShape"> + <enum>QFrame::Box</enum> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_11"> + <property name="text"> + <string>Highlighted background:</string> + </property> + </widget> + </item> + <item row="0" column="4" colspan="2"> + <widget class="QLabel" name="label_12"> + <property name="text"> + <string>Normal text:</string> + </property> + </widget> + </item> + <item row="3" column="1" rowspan="2"> + <widget class="ColorWidget" name="plSplitterColor"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="baseSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="frameShape"> + <enum>QFrame::Box</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Plain</enum> + </property> + </widget> + </item> + <item row="3" column="0" rowspan="2"> + <widget class="QLabel" name="label_19"> + <property name="text"> + <string>Splitter:</string> + </property> + </widget> + </item> + <item row="1" column="4" colspan="2"> + <widget class="QLabel" name="label_13"> + <property name="text"> + <string>Current text:</string> + </property> + </widget> + </item> + <item row="2" column="4" colspan="2"> + <widget class="QLabel" name="label_14"> + <property name="text"> + <string>Highlighted text:</string> + </property> + </widget> + </item> + <item row="8" column="0"> + <widget class="QLabel" name="label_20"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Current track background:</string> + </property> + </widget> + </item> + <item row="0" column="6"> + <widget class="ColorWidget" name="plTextNormalColor"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="frameShape"> + <enum>QFrame::Box</enum> + </property> + </widget> + </item> + <item row="7" column="0" colspan="5"> + <widget class="QCheckBox" name="plOverrideCurrentBgCheckBox"> + <property name="text"> + <string>Override current track background</string> + </property> + </widget> + </item> + <item row="6" column="1"> + <widget class="ColorWidget" name="plGrBgColor"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="frameShape"> + <enum>QFrame::Box</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Plain</enum> + </property> + </widget> + </item> + <item row="6" column="4" colspan="4"> + <spacer name="horizontalSpacer_9"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>110</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="6" column="0"> + <widget class="QLabel" name="label_15"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Group background:</string> + </property> + </widget> + </item> + <item row="5" column="0" colspan="8"> + <widget class="QCheckBox" name="plOverrideGroupBgCheckBox"> + <property name="text"> + <string>Override group background</string> + </property> + </widget> + </item> + <item row="4" column="4" colspan="2"> + <widget class="QLabel" name="label_16"> + <property name="text"> + <string>Group text:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="ColorWidget" name="plBg2Color"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + <property name="frameShape"> + <enum>QFrame::Box</enum> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="label_7"> + <property name="text"> + <string>Background #1:</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <spacer name="verticalSpacer_4"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>98</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> <widget class="QWidget" name="tab_2"> <attribute name="title"> <string>Fonts</string> @@ -577,6 +1038,14 @@ </item> </layout> </widget> + <customwidgets> + <customwidget> + <class>ColorWidget</class> + <extends>QFrame</extends> + <header>colorwidget.h</header> + <container>1</container> + </customwidget> + </customwidgets> <resources/> <connections> <connection> diff --git a/src/plugins/Ui/skinned/listwidget.cpp b/src/plugins/Ui/skinned/listwidget.cpp index cf313fcd1..0f446dd07 100644 --- a/src/plugins/Ui/skinned/listwidget.cpp +++ b/src/plugins/Ui/skinned/listwidget.cpp @@ -160,7 +160,7 @@ void ListWidget::paintEvent(QPaintEvent *) for (int i = 0; i < m_rows.size(); ++i ) { - m_drawer.drawBackground(&painter, m_rows[i]); + m_drawer.drawBackground(&painter, m_rows[i], i); if(m_rows[i]->flags & ListWidgetRow::GROUP) { @@ -495,7 +495,7 @@ void ListWidget::setViewPosition(int sc) void ListWidget::updateSkin() { - m_drawer.loadColors(); + m_drawer.loadSkinColors(); update(); } diff --git a/src/plugins/Ui/skinned/listwidgetdrawer.cpp b/src/plugins/Ui/skinned/listwidgetdrawer.cpp index f0d230105..00cbe498b 100644 --- a/src/plugins/Ui/skinned/listwidgetdrawer.cpp +++ b/src/plugins/Ui/skinned/listwidgetdrawer.cpp @@ -48,7 +48,7 @@ ListWidgetDrawer::ListWidgetDrawer() m_metrics = nullptr; m_extra_metrics = nullptr; readSettings(); - loadColors(); + loadSkinColors(); } ListWidgetDrawer::~ListWidgetDrawer() @@ -72,6 +72,41 @@ void ListWidgetDrawer::readSettings() m_font.fromString(settings.value ("pl_font", qApp->font().toString()).toString()); m_extra_font = m_font; m_extra_font.setPointSize(m_font.pointSize() - 1); + m_use_skin_colors = settings.value("pl_use_skin_colors", true).toBool(); + loadSkinColors(); + + if(!m_use_skin_colors) + { + m_normal_bg.setNamedColor(settings.value("pl_bg1_color", m_normal_bg.name()).toString()); + m_alternate.setNamedColor(settings.value("pl_bg2_color", m_alternate.name()).toString()); + m_selected_bg.setNamedColor(settings.value("pl_highlight_color", m_selected_bg.name()).toString()); + m_normal.setNamedColor(settings.value("pl_normal_text_color", m_normal.name()).toString()); + m_current.setNamedColor(settings.value("pl_current_text_color",m_current.name()).toString()); + m_highlighted.setNamedColor(settings.value("pl_hl_text_color",m_highlighted.name()).toString()); + m_splitter.setNamedColor(settings.value("pl_splitter_color", m_splitter).toString()); + m_group_text.setNamedColor(settings.value("pl_group_text", m_group_text.name()).toString()); + if(settings.value("pl_override_group_bg", false).toBool()) + { + m_group_bg.setNamedColor(settings.value("pl_group_bg", m_normal_bg.name()).toString()); + m_group_alt_bg = m_group_bg; + } + else + { + m_group_bg = m_normal_bg; + m_group_alt_bg = m_alternate; + } + if(settings.value("pl_override_current_bg", false).toBool()) + { + m_current_bg.setNamedColor(settings.value("pl_current_bg_color", m_normal_bg.name()).toString()); + m_current_alt_bg = m_current_bg; + } + else + { + m_current_bg = m_normal_bg; + m_current_alt_bg = m_alternate; + } + } + if (m_update) { delete m_metrics; @@ -84,12 +119,20 @@ void ListWidgetDrawer::readSettings() m_row_height = m_metrics->lineSpacing() + 1; } -void ListWidgetDrawer::loadColors() +void ListWidgetDrawer::loadSkinColors() { m_normal.setNamedColor(m_skin->getPLValue("normal")); m_current.setNamedColor(m_skin->getPLValue("current")); m_normal_bg.setNamedColor(m_skin->getPLValue("normalbg")); m_selected_bg.setNamedColor(m_skin->getPLValue("selectedbg")); + m_alternate = m_normal_bg; + m_highlighted = m_normal; + m_splitter = m_alternate_splitter_color ? m_current : m_normal; + m_group_bg = m_normal_bg; + m_group_alt_bg = m_normal_bg; + m_group_text = m_normal; + m_current_bg = m_normal_bg; + m_current_alt_bg = m_normal_bg; } int ListWidgetDrawer::rowHeight() const @@ -186,9 +229,51 @@ void ListWidgetDrawer::fillBackground(QPainter *painter, int width, int height) painter->drawRect(0,0,width,height); } -void ListWidgetDrawer::drawBackground(QPainter *painter, ListWidgetRow *row) +void ListWidgetDrawer::drawBackground(QPainter *painter, ListWidgetRow *row, int index) { - painter->setBrush((row->flags & ListWidgetRow::SELECTED) ? m_selected_bg : m_normal_bg); + if(row->flags & ListWidgetRow::SELECTED) + { + painter->setBrush(m_selected_bg); + } + else if(row->flags & ListWidgetRow::GROUP) + { + if(index % 2) + { + painter->setBrush(QBrush(m_group_alt_bg)); + painter->setPen(m_group_alt_bg); + } + else + { + painter->setBrush(QBrush(m_group_bg)); + painter->setPen(m_group_bg); + } + } + else if(row->flags & ListWidgetRow::CURRENT) + { + if(index % 2) + { + painter->setBrush(QBrush(m_current_alt_bg)); + painter->setPen(m_current_alt_bg); + } + else + { + painter->setBrush(QBrush(m_current_bg)); + painter->setPen(m_current_bg); + } + } + else + { + if(index % 2) + { + painter->setBrush(QBrush(m_alternate)); + painter->setPen(m_alternate); + } + else + { + painter->setBrush(QBrush(m_normal_bg)); + painter->setPen(m_normal_bg); + } + } if(m_show_anchor && (row->flags & ListWidgetRow::ANCHOR)) { @@ -198,10 +283,6 @@ void ListWidgetDrawer::drawBackground(QPainter *painter, ListWidgetRow *row) { painter->setPen(m_selected_bg); } - else - { - painter->setPen(m_normal_bg); - } painter->drawRect(row->rect); } @@ -211,7 +292,7 @@ void ListWidgetDrawer::drawSeparator(QPainter *painter, ListWidgetRow *row, bool int sy = row->rect.y() + m_metrics->overlinePos() - 1; painter->setFont(m_font); - painter->setPen(m_normal); + painter->setPen(row->flags & ListWidgetRow::SELECTED ? m_highlighted : m_group_text); if(rtl) sx = row->rect.right() - sx - m_metrics->horizontalAdvance(row->titles[0]); @@ -222,7 +303,7 @@ void ListWidgetDrawer::drawSeparator(QPainter *painter, ListWidgetRow *row, bool sy -= (m_metrics->lineSpacing()/2 - 2); - painter->setPen(m_normal); + //painter->setPen(m_group_text); if(rtl) { painter->drawLine(row->rect.x() + 5, sy, sx - 5, sy); @@ -230,7 +311,7 @@ void ListWidgetDrawer::drawSeparator(QPainter *painter, ListWidgetRow *row, bool row->rect.right() - row->numberColumnWidth - m_padding, sy); if(m_show_splitters && row->numberColumnWidth) { - painter->setPen(m_alternate_splitter_color ? m_current : m_normal); + painter->setPen(m_splitter); painter->drawLine(row->rect.right() - row->numberColumnWidth, row->rect.top(), row->rect.right() - row->numberColumnWidth, row->rect.bottom() + 1); } @@ -242,7 +323,7 @@ void ListWidgetDrawer::drawSeparator(QPainter *painter, ListWidgetRow *row, bool row->rect.width(), sy); if(m_show_splitters && row->numberColumnWidth) { - painter->setPen(m_alternate_splitter_color ? m_current : m_normal); + painter->setPen(m_splitter); painter->drawLine(row->rect.left() + row->numberColumnWidth, row->rect.top(), row->rect.left() + row->numberColumnWidth, row->rect.bottom() + 1); } @@ -257,6 +338,14 @@ void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl bool draw_extra = false; painter->setFont(m_font); + QColor textColor = m_normal; + + if(row->flags & ListWidgetRow::CURRENT) + textColor = m_current; + //else if(row->flags & ListWidgetRow::SELECTED) + // textColor = m_normal; + + painter->setPen(textColor); if(rtl) { @@ -266,14 +355,13 @@ void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl if(row->numberColumnWidth) { sx -= row->numberColumnWidth; - painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal); QString number = QString("%1").arg(row->number); painter->drawText(sx + m_padding, sy, number); if(m_show_splitters) { - painter->setPen(m_alternate_splitter_color ? m_current : m_normal); + painter->setPen(row->flags & ListWidgetRow::SELECTED ? m_highlighted : m_splitter); painter->drawLine(sx, row->rect.top(), sx, row->rect.bottom() + 1); - painter->setPen(m_normal); + painter->setPen(row->flags & ListWidgetRow::SELECTED ? m_highlighted : textColor); } } @@ -300,7 +388,7 @@ void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl { for(int i = 0; i < row->sizes.count(); i++) { - painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal); + painter->setPen(row->flags & ListWidgetRow::SELECTED ? m_highlighted : textColor); draw_extra = (i == row->trackStateColumn && !row->extraString.isEmpty()); if(row->alignment[i] == ListWidgetRow::ALIGN_LEFT) @@ -333,7 +421,7 @@ void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl if(m_show_splitters && (!row->autoResize || i < row->sizes.count() - 1)) //do not draw last vertical line { - painter->setPen(m_alternate_splitter_color ? m_current : m_normal); + painter->setPen(row->flags & ListWidgetRow::SELECTED ? m_highlighted : m_splitter); painter->drawLine(sx, row->rect.top(), sx, row->rect.bottom() + 1); } } @@ -352,9 +440,9 @@ void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl painter->drawText(sx - m_padding - m_metrics->horizontalAdvance(number), sy, number); if(m_show_splitters) { - painter->setPen(m_alternate_splitter_color ? m_current : m_normal); + painter->setPen(row->flags & ListWidgetRow::SELECTED ? m_highlighted : m_splitter); painter->drawLine(sx, row->rect.top(), sx, row->rect.bottom() + 1); - painter->setPen(m_normal); + painter->setPen(row->flags & ListWidgetRow::SELECTED ? m_highlighted : textColor); } } @@ -381,7 +469,7 @@ void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl { for(int i = 0; i < row->sizes.count(); i++) { - painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal); + painter->setPen(row->flags & ListWidgetRow::SELECTED ? m_highlighted : textColor); draw_extra = (i == row->trackStateColumn && !row->extraString.isEmpty()); if(row->alignment[i] == ListWidgetRow::ALIGN_LEFT) @@ -414,7 +502,7 @@ void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl if(m_show_splitters && (!row->autoResize || i < row->sizes.count() - 1)) //do not draw last vertical line { - painter->setPen(m_alternate_splitter_color ? m_current : m_normal); + painter->setPen(row->flags & ListWidgetRow::SELECTED ? m_highlighted : m_splitter); painter->drawLine(sx, row->rect.top(), sx, row->rect.bottom() + 1); } } diff --git a/src/plugins/Ui/skinned/listwidgetdrawer.h b/src/plugins/Ui/skinned/listwidgetdrawer.h index 5b2f41ab8..9cf297cab 100644 --- a/src/plugins/Ui/skinned/listwidgetdrawer.h +++ b/src/plugins/Ui/skinned/listwidgetdrawer.h @@ -83,20 +83,21 @@ public: ~ListWidgetDrawer(); void readSettings(); - void loadColors(); + void loadSkinColors(); int rowHeight() const; int numberWidth() const; void calculateNumberWidth(int count); void setSingleColumnMode(int enabled); void prepareRow(ListWidgetRow *row); void fillBackground(QPainter *painter, int width, int height); - void drawBackground(QPainter *painter, ListWidgetRow *row); + void drawBackground(QPainter *painter, ListWidgetRow *row, int index); void drawSeparator(QPainter *painter, ListWidgetRow *row, bool rtl); void drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl); void drawDropLine(QPainter *painter, int row_number, int width, int header_height); private: - QColor m_normal, m_current, m_normal_bg, m_selected_bg; + QColor m_normal, m_current, m_normal_bg, m_selected_bg, m_alternate, m_highlighted, m_splitter; + QColor m_group_bg, m_group_alt_bg, m_group_text, m_current_bg, m_current_alt_bg; Skin *m_skin; QFontMetrics *m_metrics; QFontMetrics *m_extra_metrics; @@ -106,6 +107,7 @@ private: bool m_show_anchor; bool m_align_numbers; bool m_show_lengths; + bool m_use_skin_colors; bool m_single_column; bool m_show_splitters; bool m_alternate_splitter_color; diff --git a/src/plugins/Ui/skinned/skinned.pro b/src/plugins/Ui/skinned/skinned.pro index 9c0d0e354..a2cdf3c1a 100644 --- a/src/plugins/Ui/skinned/skinned.pro +++ b/src/plugins/Ui/skinned/skinned.pro @@ -53,7 +53,8 @@ HEADERS += mainwindow.h \ hotkeyeditor.h \ listwidgetdrawer.h \ playlistheader.h \ - horizontalslider.h + horizontalslider.h \ + colorwidget.h SOURCES += mainwindow.cpp \ button.cpp \ @@ -105,7 +106,8 @@ SOURCES += mainwindow.cpp \ hotkeyeditor.cpp \ listwidgetdrawer.cpp \ playlistheader.cpp \ - horizontalslider.cpp + horizontalslider.cpp \ + colorwidget.cpp FORMS += \ forms/preseteditor.ui \ diff --git a/src/plugins/Ui/skinned/skinnedsettings.cpp b/src/plugins/Ui/skinned/skinnedsettings.cpp index d0b616037..89fba0d22 100644 --- a/src/plugins/Ui/skinned/skinnedsettings.cpp +++ b/src/plugins/Ui/skinned/skinnedsettings.cpp @@ -41,10 +41,6 @@ SkinnedSettings::SkinnedSettings(QWidget *parent) : QWidget(parent) loadSkins(); loadFonts(); createActions(); - //setup icons - m_ui.skinInstallButton->setIcon(QIcon::fromTheme("list-add")); - m_ui.skinReloadButton->setIcon(QIcon::fromTheme("view-refresh")); - m_ui.popupTemplateButton->setIcon(QIcon::fromTheme("configure")); } SkinnedSettings::~SkinnedSettings() @@ -262,35 +258,63 @@ void SkinnedSettings::readSettings() m_ui.hiddenCheckBox->setChecked(settings.value("start_hidden", false).toBool()); m_ui.hideOnCloseCheckBox->setChecked(settings.value("hide_on_close", false).toBool()); m_ui.windowTitleLineEdit->setText(settings.value("window_title_format","%if(%p,%p - %t,%t)").toString()); + //playlist colors + m_ui.plSkinColorsCheckBox->setChecked(settings.value("pl_use_skin_colors", true).toBool()); + m_ui.plBg1Color->setColor(settings.value("pl_bg1_color", "#0d0d0d").toString()); + m_ui.plBg2Color->setColor(settings.value("pl_bg2_color", "#0d0d0d").toString()); + m_ui.plHlColor->setColor(settings.value("pl_highlight_color", "#2a2a2a").toString()); + m_ui.plTextNormalColor->setColor(settings.value("pl_normal_text_color", "#5a5a5a").toString()); + m_ui.plTextCurrentColor->setColor(settings.value("pl_current_text_color", "#407dec").toString()); + m_ui.plTextHlCurrentColor->setColor(settings.value("pl_hl_text_color", "#5a5a5a").toString()); + m_ui.plGrBgColor->setColor(settings.value("pl_group_bg", "#0d0d0d").toString()); + m_ui.plSplitterColor->setColor(settings.value("pl_splitter_color", "#5a5a5a").toString()); + m_ui.plGrTextColor->setColor(settings.value("pl_group_text", "#5a5a5a").toString()); + m_ui.plCurrentTrackBgColor->setColor(settings.value("pl_current_bg_color", "#0d0d0d").toString()); + m_ui.plOverrideGroupBgCheckBox->setChecked(settings.value("pl_override_group_bg", false).toBool()); + m_ui.plOverrideCurrentBgCheckBox->setChecked(settings.value("pl_override_current_bg", false).toBool()); settings.endGroup(); } void SkinnedSettings::writeSettings() { - QSettings settings (Qmmp::configFile(), QSettings::IniFormat); + QSettings settings(Qmmp::configFile(), QSettings::IniFormat); settings.beginGroup("Skinned"); - settings.setValue ("pl_show_protocol", m_ui.protocolCheckBox->isChecked()); - settings.setValue ("pl_show_numbers", m_ui.numbersCheckBox->isChecked()); - settings.setValue ("pl_show_lengths", m_ui.lengthsCheckBox->isChecked()); - settings.setValue ("pl_align_numbers", m_ui.alignCheckBox->isChecked()); - settings.setValue ("pl_show_anchor", m_ui.anchorCheckBox->isChecked()); - settings.setValue ("pl_show_plalists", m_ui.playlistsCheckBox->isChecked()); - settings.setValue ("pl_show_splitters", m_ui.showSplittersCheckBox->isChecked()); - settings.setValue ("pl_alt_splitter_color", m_ui.alternateSplitterColorCheckBox->isChecked()); - settings.setValue ("pl_show_popup", m_ui.popupCheckBox->isChecked()); - settings.setValue ("pl_separator", m_ui.plSeplineEdit->text()); - settings.setValue ("pl_show_create_button", m_ui.showNewPLCheckBox->isChecked()); - settings.setValue ("mw_opacity", 1.0 - (double)m_ui.mwTransparencySlider->value()/100); - settings.setValue ("eq_opacity", 1.0 - (double)m_ui.eqTransparencySlider->value()/100); - settings.setValue ("pl_opacity", 1.0 - (double)m_ui.plTransparencySlider->value()/100); - settings.setValue ("bitmap_font", m_ui.useBitmapCheckBox->isChecked()); - settings.setValue ("skin_cursors", m_ui.skinCursorsCheckBox->isChecked()); - settings.setValue ("skin_name", m_currentSkinName); - settings.setValue ("start_hidden", m_ui.hiddenCheckBox->isChecked()); - settings.setValue ("hide_on_close", m_ui.hideOnCloseCheckBox->isChecked()); - settings.setValue ("window_title_format", m_ui.windowTitleLineEdit->text()); - settings.setValue ("mw_font", m_ui.mainFontLabel->font().toString()); - settings.setValue ("pl_font", m_ui.plFontLabel->font().toString()); - settings.setValue ("pl_header_font", m_ui.headerFontLabel->font().toString()); + settings.setValue("pl_show_protocol", m_ui.protocolCheckBox->isChecked()); + settings.setValue("pl_show_numbers", m_ui.numbersCheckBox->isChecked()); + settings.setValue("pl_show_lengths", m_ui.lengthsCheckBox->isChecked()); + settings.setValue("pl_align_numbers", m_ui.alignCheckBox->isChecked()); + settings.setValue("pl_show_anchor", m_ui.anchorCheckBox->isChecked()); + settings.setValue("pl_show_plalists", m_ui.playlistsCheckBox->isChecked()); + settings.setValue("pl_show_splitters", m_ui.showSplittersCheckBox->isChecked()); + settings.setValue("pl_alt_splitter_color", m_ui.alternateSplitterColorCheckBox->isChecked()); + settings.setValue("pl_show_popup", m_ui.popupCheckBox->isChecked()); + settings.setValue("pl_separator", m_ui.plSeplineEdit->text()); + settings.setValue("pl_show_create_button", m_ui.showNewPLCheckBox->isChecked()); + settings.setValue("mw_opacity", 1.0 - (double)m_ui.mwTransparencySlider->value()/100); + settings.setValue("eq_opacity", 1.0 - (double)m_ui.eqTransparencySlider->value()/100); + settings.setValue("pl_opacity", 1.0 - (double)m_ui.plTransparencySlider->value()/100); + settings.setValue("bitmap_font", m_ui.useBitmapCheckBox->isChecked()); + settings.setValue("skin_cursors", m_ui.skinCursorsCheckBox->isChecked()); + settings.setValue("skin_name", m_currentSkinName); + settings.setValue("start_hidden", m_ui.hiddenCheckBox->isChecked()); + settings.setValue("hide_on_close", m_ui.hideOnCloseCheckBox->isChecked()); + settings.setValue("window_title_format", m_ui.windowTitleLineEdit->text()); + settings.setValue("mw_font", m_ui.mainFontLabel->font().toString()); + settings.setValue("pl_font", m_ui.plFontLabel->font().toString()); + settings.setValue("pl_header_font", m_ui.headerFontLabel->font().toString()); + //playlist colors + settings.setValue("pl_use_skin_colors", m_ui.plSkinColorsCheckBox->isChecked()); + settings.setValue("pl_bg1_color", m_ui.plBg1Color->colorName()); + settings.setValue("pl_bg2_color", m_ui.plBg2Color->colorName()); + settings.setValue("pl_highlight_color", m_ui.plHlColor->colorName()); + settings.setValue("pl_normal_text_color", m_ui.plTextNormalColor->colorName()); + settings.setValue("pl_current_text_color", m_ui.plTextCurrentColor->colorName()); + settings.setValue("pl_hl_text_color", m_ui.plTextHlCurrentColor->colorName()); + settings.setValue("pl_group_bg", m_ui.plGrBgColor->colorName()); + settings.setValue("pl_splitter_color", m_ui.plSplitterColor->colorName()); + settings.setValue("pl_group_text", m_ui.plGrTextColor->colorName()); + settings.setValue("pl_current_bg_color", m_ui.plCurrentTrackBgColor->colorName()); + settings.setValue("pl_override_group_bg", m_ui.plOverrideGroupBgCheckBox->isChecked()); + settings.setValue("pl_override_current_bg", m_ui.plOverrideCurrentBgCheckBox->isChecked()); settings.endGroup(); } |
