aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Ui
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-02-16 17:26:09 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-02-16 17:26:09 +0000
commit240dee9062f8ea50ba7650b47a76c8c1a697b8f0 (patch)
tree3522e19a300781cef6c4b3d2cf5563601a9d435c /src/plugins/Ui
parent472956381b9231b86beb02de0b60a622faf4dd49 (diff)
downloadqmmp-240dee9062f8ea50ba7650b47a76c8c1a697b8f0.tar.gz
qmmp-240dee9062f8ea50ba7650b47a76c8c1a697b8f0.tar.bz2
qmmp-240dee9062f8ea50ba7650b47a76c8c1a697b8f0.zip
refactoring
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@4737 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Ui')
-rw-r--r--src/plugins/Ui/skinned/listwidget.cpp43
-rw-r--r--src/plugins/Ui/skinned/listwidget.h6
-rw-r--r--src/plugins/Ui/skinned/listwidgetdrawer.cpp57
-rw-r--r--src/plugins/Ui/skinned/listwidgetdrawer.h13
4 files changed, 66 insertions, 53 deletions
diff --git a/src/plugins/Ui/skinned/listwidget.cpp b/src/plugins/Ui/skinned/listwidget.cpp
index 57d4209ca..3142be84e 100644
--- a/src/plugins/Ui/skinned/listwidget.cpp
+++ b/src/plugins/Ui/skinned/listwidget.cpp
@@ -44,7 +44,6 @@ ListWidget::ListWidget(QWidget *parent)
m_update = false;
m_skin = Skin::instance();
m_popupWidget = 0;
- m_metrics = 0;
m_drop_index = INVALID_INDEX;
m_menu = new QMenu(this);
m_scroll_direction = NONE;
@@ -67,8 +66,6 @@ ListWidget::ListWidget(QWidget *parent)
ListWidget::~ListWidget()
{
- if(m_metrics)
- delete m_metrics;
qDeleteAll(m_rows);
m_rows.clear();
}
@@ -77,18 +74,12 @@ void ListWidget::readSettings()
{
QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
settings.beginGroup("Skinned");
- m_font.fromString(settings.value("pl_font", QApplication::font().toString()).toString());
m_show_protocol = settings.value ("pl_show_protocol", false).toBool();
- m_show_number = settings.value ("pl_show_numbers", true).toBool();
- m_align_numbres = settings.value ("pl_align_numbers", false).toBool();
- m_show_anchor = settings.value("pl_show_anchor", false).toBool();
bool show_popup = settings.value("pl_show_popup", false).toBool();
if (m_update)
{
m_drawer.readSettings();
- delete m_metrics;
- m_metrics = new QFontMetrics(m_font);
m_row_count = height() / m_drawer.rowHeight();
updateList(PlayListModel::STRUCTURE);
if(m_popupWidget)
@@ -100,7 +91,6 @@ void ListWidget::readSettings()
else
{
m_update = true;
- m_metrics = new QFontMetrics(m_font);
}
if(show_popup)
m_popupWidget = new PlayListPopup::PopupWidget(this);
@@ -141,7 +131,6 @@ PlayListModel *ListWidget::model()
void ListWidget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
- painter.setFont(m_font);
m_drawer.fillBackground(&painter, width(), height());
#if QT_VERSION >= 0x040700
painter.setLayoutDirection(Qt::LayoutDirectionAuto);
@@ -154,11 +143,11 @@ void ListWidget::paintEvent(QPaintEvent *)
if(m_rows[i]->flags & ListWidgetRow::GROUP)
{
- m_drawer.drawSeparator(&painter, m_number_width, m_rows[i], rtl);
+ m_drawer.drawSeparator(&painter, m_rows[i], rtl);
continue;
}
- m_drawer.drawTrack(&painter, m_number_width, m_rows[i], rtl);
+ m_drawer.drawTrack(&painter, m_rows[i], rtl);
}
//draw drop line
if(m_drop_index != INVALID_INDEX)
@@ -166,10 +155,7 @@ void ListWidget::paintEvent(QPaintEvent *)
m_drawer.drawDropLine(&painter, m_drop_index - m_first, width());
}
//draw line
- if(m_number_width)
- {
- m_drawer.drawVerticalLine(&painter, m_number_width, m_rows.count(), width(), rtl);
- }
+ m_drawer.drawVerticalLine(&painter, m_rows.count(), width(), rtl);
}
void ListWidget::mouseDoubleClickEvent (QMouseEvent *e)
@@ -314,12 +300,7 @@ void ListWidget::updateList(int flags)
emit positionChanged(m_first, m_model->count() - m_row_count);
//song numbers width
- if(m_show_number && m_align_numbres && m_model->count())
- {
- m_number_width = m_metrics->width("9") * QString::number(m_model->trackCount()).size();
- }
- else
- m_number_width = 0;
+ m_drawer.calculateNumberWidth(m_model->count());
items = m_model->mid(m_first, m_row_count);
@@ -347,7 +328,7 @@ void ListWidget::updateList(int flags)
if(flags == PlayListModel::SELECTION)
continue;
- row->rect = QRect(5, i * m_drawer.rowHeight(), width() - 10, m_metrics->lineSpacing());
+ row->rect = QRect(5, i * m_drawer.rowHeight(), width() - 10, m_drawer.rowHeight() - 1);
row->title = items[i]->formattedTitle();
(m_first + i) == m_model->currentIndex() ? row->flags |= ListWidgetRow::CURRENT :
@@ -358,8 +339,6 @@ void ListWidget::updateList(int flags)
row->flags |= ListWidgetRow::GROUP;
row->number = 0;
row->length.clear();
- row->title = m_metrics->elidedText (row->title, Qt::ElideRight,
- width() - m_number_width - 22 - 70);
}
else
{
@@ -375,17 +354,9 @@ void ListWidget::updateList(int flags)
row->number = ++prev_number;
}
row->length = items[i]->formattedLength();
- if(m_show_number && !m_align_numbres)
- row->title.prepend(QString("%1").arg(row->number)+". ");
row->extraString = getExtraString(m_first + i);
- //elide titles
- int extra_string_width = row->extraString.isEmpty() ? 0 : m_metrics->width(row->extraString);
- if(m_number_width)
- extra_string_width += m_number_width + m_metrics->width("9");
-
- row->title = m_metrics->elidedText (row->title, Qt::ElideRight,
- width() - m_metrics->width(row->length) - 22 - extra_string_width);
}
+ m_drawer.prepareRow(row); //elide titles
}
update();
}
@@ -406,7 +377,7 @@ void ListWidget::autoscroll()
}
else if(m_scroll_direction == TOP && m_first > 0)
{
- m_first --;
+ m_first--;
m_model->moveItems(m_pressed_index, m_first);
m_pressed_index = m_first;
}
diff --git a/src/plugins/Ui/skinned/listwidget.h b/src/plugins/Ui/skinned/listwidget.h
index 808762570..e87395fc3 100644
--- a/src/plugins/Ui/skinned/listwidget.h
+++ b/src/plugins/Ui/skinned/listwidget.h
@@ -112,8 +112,6 @@ private:
QMenu *m_menu;
PlayListModel *m_model;
int m_row_count, m_first;
- QFont m_font;
- QFontMetrics *m_metrics;
Skin *m_skin;
int m_anchor_index;
/*!
@@ -123,10 +121,6 @@ private:
int m_prev_y;
bool m_select_on_release;
bool m_show_protocol;
- bool m_show_number;
- bool m_show_anchor;
- bool m_align_numbres;
- int m_number_width;
int m_drop_index;
QList<ListWidgetRow *> m_rows;
QmmpUiSettings *m_ui_settings;
diff --git a/src/plugins/Ui/skinned/listwidgetdrawer.cpp b/src/plugins/Ui/skinned/listwidgetdrawer.cpp
index 1e113b6eb..10f5034c6 100644
--- a/src/plugins/Ui/skinned/listwidgetdrawer.cpp
+++ b/src/plugins/Ui/skinned/listwidgetdrawer.cpp
@@ -29,7 +29,11 @@ ListWidgetDrawer::ListWidgetDrawer()
{
m_skin = Skin::instance();
m_update = false;
+ m_show_anchor = false;
+ m_show_number = false;
+ m_align_numbres = false;
m_row_height = 0;
+ m_number_width = 0;
readSettings();
loadColors();
}
@@ -47,6 +51,8 @@ void ListWidgetDrawer::readSettings()
QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
settings.beginGroup("Skinned");
m_show_anchor = settings.value("pl_show_anchor", false).toBool();
+ m_show_number = settings.value ("pl_show_numbers", true).toBool();
+ m_align_numbres = settings.value ("pl_align_numbers", 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);
@@ -74,6 +80,38 @@ int ListWidgetDrawer::rowHeight() const
return m_row_height;
}
+void ListWidgetDrawer::calculateNumberWidth(int count)
+{
+ //song numbers width
+ if(m_show_number && m_align_numbres && count)
+ {
+ m_number_width = m_metrics->width("9") * QString::number(count).size();
+ }
+ else
+ m_number_width = 0;
+}
+
+void ListWidgetDrawer::prepareRow(ListWidgetRow *row)
+{
+ if(row->flags & ListWidgetRow::GROUP)
+ {
+ row->title = m_metrics->elidedText (row->title, Qt::ElideRight,
+ row->rect.width() - m_number_width - 12 - 70);
+ return;
+ }
+
+ if(m_show_number && !m_align_numbres)
+ row->title.prepend(QString("%1").arg(row->number)+". ");
+
+ //elide titles
+ int extra_string_width = row->extraString.isEmpty() ? 0 : m_metrics->width(row->extraString);
+ if(m_number_width)
+ extra_string_width += m_number_width + m_metrics->width("9");
+
+ row->title = m_metrics->elidedText (row->title, Qt::ElideRight,
+ row->rect.width() - m_metrics->width(row->length) - 12 - extra_string_width);
+}
+
void ListWidgetDrawer::fillBackground(QPainter *painter, int width, int height)
{
painter->setBrush(m_normal_bg);
@@ -100,11 +138,12 @@ void ListWidgetDrawer::drawBackground(QPainter *painter, ListWidgetRow *row)
painter->drawRect(row->rect);
}
-void ListWidgetDrawer::drawSeparator(QPainter *painter, int m_number_width, ListWidgetRow *row, bool rtl)
+void ListWidgetDrawer::drawSeparator(QPainter *painter, ListWidgetRow *row, bool rtl)
{
int sx = row->rect.x() + 50;
int sy = row->rect.y() + m_metrics->overlinePos() - 1;
+ painter->setFont(m_font);
painter->setPen(m_normal);
if(m_number_width)
@@ -130,11 +169,12 @@ void ListWidgetDrawer::drawSeparator(QPainter *painter, int m_number_width, List
}
}
-void ListWidgetDrawer::drawTrack(QPainter *painter, int m_number_width, ListWidgetRow *row, bool rtl)
+void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl)
{
int sx = 0;
int sy = row->rect.y() + m_metrics->overlinePos() - 1;
+ painter->setFont(m_font);
painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal);
if(m_number_width)
@@ -188,10 +228,13 @@ void ListWidgetDrawer::drawDropLine(QPainter *painter, int row_number, int width
width - 5 , row_number * m_row_height);
}
-void ListWidgetDrawer::drawVerticalLine(QPainter *painter, int m_number_width, int row_count, int width, bool rtl)
+void ListWidgetDrawer::drawVerticalLine(QPainter *painter, int row_count, int width, bool rtl)
{
- painter->setPen(m_normal);
- int sx = rtl ? width - 10 - m_number_width - m_metrics->width("9")/2 - 1 :
- 10 + m_number_width + m_metrics->width("9")/2 - 1;
- painter->drawLine(sx, 2, sx, row_count * (1 + m_metrics->lineSpacing()) - m_metrics->descent());
+ if(m_number_width)
+ {
+ painter->setPen(m_normal);
+ int sx = rtl ? width - 10 - m_number_width - m_metrics->width("9")/2 - 1 :
+ 10 + m_number_width + m_metrics->width("9")/2 - 1;
+ painter->drawLine(sx, 2, sx, row_count * (1 + m_metrics->lineSpacing()) - m_metrics->descent());
+ }
}
diff --git a/src/plugins/Ui/skinned/listwidgetdrawer.h b/src/plugins/Ui/skinned/listwidgetdrawer.h
index 3b67f4227..efcb11d22 100644
--- a/src/plugins/Ui/skinned/listwidgetdrawer.h
+++ b/src/plugins/Ui/skinned/listwidgetdrawer.h
@@ -64,12 +64,14 @@ public:
void readSettings();
void loadColors();
int rowHeight() const;
+ void calculateNumberWidth(int count);
+ void prepareRow(ListWidgetRow *row);
void fillBackground(QPainter *painter, int width, int height);
void drawBackground(QPainter *painter, ListWidgetRow *row);
- void drawSeparator(QPainter *painter, int m_number_width, ListWidgetRow *row, bool rtl);
- void drawTrack(QPainter *painter, int m_number_width, ListWidgetRow *row, bool rtl);
+ 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);
- void drawVerticalLine(QPainter *painter, int m_number_width, int row_count, int width, bool rtl);
+ void drawVerticalLine(QPainter *painter, int row_count, int width, bool rtl);
private:
QColor m_normal, m_current, m_normal_bg, m_selected_bg;
@@ -77,8 +79,11 @@ private:
QFontMetrics *m_metrics;
QFontMetrics *m_extra_metrics;
QFont m_font, m_extra_font;
- bool m_show_anchor;
bool m_update;
+ bool m_show_number;
+ bool m_show_anchor;
+ bool m_align_numbres;
+ int m_number_width;
int m_row_height;
};