aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Ui/skinned/listwidgetdrawer.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-02-15 17:22:04 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-02-15 17:22:04 +0000
commit631f5b826ce2547fa55a22133e95f232a03c4b3f (patch)
tree90a0f5ffa6b1f3fa5c655c171bf31bddb2080c18 /src/plugins/Ui/skinned/listwidgetdrawer.cpp
parent14be2d439ed0bf0b3d1389bc6b9174808606974c (diff)
downloadqmmp-631f5b826ce2547fa55a22133e95f232a03c4b3f.tar.gz
qmmp-631f5b826ce2547fa55a22133e95f232a03c4b3f.tar.bz2
qmmp-631f5b826ce2547fa55a22133e95f232a03c4b3f.zip
moved drawing functions to separate class
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@4725 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Ui/skinned/listwidgetdrawer.cpp')
-rw-r--r--src/plugins/Ui/skinned/listwidgetdrawer.cpp166
1 files changed, 166 insertions, 0 deletions
diff --git a/src/plugins/Ui/skinned/listwidgetdrawer.cpp b/src/plugins/Ui/skinned/listwidgetdrawer.cpp
new file mode 100644
index 000000000..3a2e15edb
--- /dev/null
+++ b/src/plugins/Ui/skinned/listwidgetdrawer.cpp
@@ -0,0 +1,166 @@
+/***************************************************************************
+ * Copyright (C) 2015 by Ilya Kotov *
+ * forkotov02@hotmail.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 <QSettings>
+#include <QPainter>
+#include <QApplication>
+#include <qmmp/qmmp.h>
+#include "skin.h"
+#include "listwidgetdrawer.h"
+
+ListWidgetDrawer::ListWidgetDrawer()
+{
+ m_skin = Skin::instance();
+ m_update = false;
+ readSettings();
+ loadColors();
+}
+
+ListWidgetDrawer::~ListWidgetDrawer()
+{
+ if(m_metrics)
+ delete m_metrics;
+ if(m_extra_metrics)
+ delete m_extra_metrics;
+}
+
+void ListWidgetDrawer::readSettings()
+{
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ settings.beginGroup("Skinned");
+ m_show_anchor = settings.value("pl_show_anchor", false).toBool();
+ m_font.fromString(settings.value("pl_font", QApplication::font().toString()).toString());
+ m_extra_font = m_font;
+ m_extra_font.setPointSize(m_font.pointSize() - 1);
+ if (m_update)
+ {
+ delete m_metrics;
+ delete m_extra_metrics;
+ }
+ m_update = true;
+ m_metrics = new QFontMetrics(m_font);
+ m_extra_metrics = new QFontMetrics(m_extra_font);
+}
+
+void ListWidgetDrawer::loadColors()
+{
+ 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"));
+}
+
+void ListWidgetDrawer::drawBackground(QPainter *painter, ListWidgetRow *row)
+{
+ painter->setBrush((row->flags & ListWidgetRow::SELECTED) ? m_selected_bg : m_normal_bg);
+
+ if(m_show_anchor && (row->flags & ListWidgetRow::ANCHOR))
+ {
+ painter->setPen(m_normal);
+ }
+ else if(row->flags & ListWidgetRow::SELECTED)
+ {
+ painter->setPen(m_selected_bg);
+ }
+ else
+ {
+ painter->setPen(m_normal_bg);
+ }
+ painter->drawRect(row->rect);
+}
+
+void ListWidgetDrawer::drawSeparator(QPainter *painter, int m_number_width, ListWidgetRow *row, bool rtl)
+{
+ int sx = row->rect.x() + 50;
+
+ painter->setPen(m_normal);
+
+ if(m_number_width)
+ sx += m_number_width + m_metrics->width("9");
+ if(rtl)
+ sx = row->rect.right() - sx - m_metrics->width(row->title);
+
+ painter->drawText(sx, row->textY, row->title);
+
+ int sy = row->textY - m_metrics->lineSpacing()/2 + 2;
+
+ if(rtl)
+ {
+ painter->drawLine(10, sy, sx - 5, sy);
+ painter->drawLine(sx + m_metrics->width(row->title) + 5, sy,
+ sx + m_metrics->width(row->title) + 35, sy);
+ }
+ else
+ {
+ painter->drawLine(sx - 45, sy, sx - 5, sy);
+ painter->drawLine(sx + m_metrics->width(row->title) + 5, sy,
+ row->rect.width(), sy);
+ }
+}
+
+void ListWidgetDrawer::drawTrack(QPainter *painter, int m_number_width, ListWidgetRow *row, bool rtl)
+{
+ int sx = 0;
+
+ painter->setPen(row->current ? m_current : m_normal);
+
+ if(m_number_width)
+ {
+ QString number = QString("%1").arg(row->number);
+ sx = 10 + m_number_width - m_metrics->width(number);
+ if(rtl)
+ sx = row->rect.right() - sx - m_metrics->width(number);
+
+ painter->drawText(sx, row->textY, number);
+
+ sx = 10 + m_number_width + m_metrics->width("9");
+ if(rtl)
+ sx = row->rect.right() - sx - m_metrics->width(row->title);
+ }
+ else
+ {
+ sx = rtl ? row->rect.right() - 10 - m_metrics->width(row->title) : 10;
+ }
+
+ painter->drawText(sx, row->textY, row->title);
+
+ QString extra_string = row->extraString;
+
+ if(!extra_string.isEmpty())
+ {
+ painter->setFont(m_extra_font);
+
+ if(row->length.isEmpty())
+ {
+ sx = rtl ? 7 : row->rect.right() - 7 - m_extra_metrics->width(extra_string);
+ painter->drawText(sx, row->textY, extra_string);
+ }
+ else
+ {
+ sx = row->rect.right() - 10 - m_extra_metrics->width(extra_string) - m_metrics->width(row->length);
+ if(rtl)
+ sx = row->rect.right() - sx - m_extra_metrics->width(extra_string);
+ painter->drawText(sx, row->textY, extra_string);
+ }
+ painter->setFont(m_font);
+ }
+ sx = rtl ? 9 : row->rect.right() - 7 - m_metrics->width(row->length);
+ painter->drawText(sx, row->textY, row->length);
+}