aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Ui
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-04-27 13:15:21 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-04-27 13:15:21 +0000
commit7491dcbef57ed26bda29306cbb55c76155e34318 (patch)
treedfb84bae3f0930b0d44d50ab4f74c23d671048a7 /src/plugins/Ui
parentce771ed4e70a5cd96521413bd6f4a48e2b7900d8 (diff)
downloadqmmp-7491dcbef57ed26bda29306cbb55c76155e34318.tar.gz
qmmp-7491dcbef57ed26bda29306cbb55c76155e34318.tar.bz2
qmmp-7491dcbef57ed26bda29306cbb55c76155e34318.zip
improved RTL locales support
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@4866 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Ui')
-rw-r--r--src/plugins/Ui/skinned/listwidget.cpp2
-rw-r--r--src/plugins/Ui/skinned/listwidgetdrawer.cpp117
-rw-r--r--src/plugins/Ui/skinned/listwidgetdrawer.h4
-rw-r--r--src/plugins/Ui/skinned/playlistheader.cpp4
4 files changed, 86 insertions, 41 deletions
diff --git a/src/plugins/Ui/skinned/listwidget.cpp b/src/plugins/Ui/skinned/listwidget.cpp
index ac1bd0d60..e6c5e10a5 100644
--- a/src/plugins/Ui/skinned/listwidget.cpp
+++ b/src/plugins/Ui/skinned/listwidget.cpp
@@ -162,7 +162,7 @@ void ListWidget::paintEvent(QPaintEvent *)
continue;
}
- m_drawer.drawTrack(&painter, m_rows[i]);
+ m_drawer.drawTrack(&painter, m_rows[i], rtl);
}
//draw drop line
if(m_drop_index != INVALID_INDEX)
diff --git a/src/plugins/Ui/skinned/listwidgetdrawer.cpp b/src/plugins/Ui/skinned/listwidgetdrawer.cpp
index 03de46836..f5261bd93 100644
--- a/src/plugins/Ui/skinned/listwidgetdrawer.cpp
+++ b/src/plugins/Ui/skinned/listwidgetdrawer.cpp
@@ -31,7 +31,7 @@
ListWidgetDrawer::ListWidgetDrawer()
{
m_skin = Skin::instance();
- m_column_manager = QmmpUiSettings::instance()->headerModel();
+ m_header_model = QmmpUiSettings::instance()->headerModel();
m_update = false;
m_show_anchor = false;
m_show_number = false;
@@ -144,11 +144,11 @@ void ListWidgetDrawer::prepareRow(ListWidgetRow *row)
for(int i = 0; i < row->titles.count() && visible_width > 0; ++i)
{
- int width = qMin(QmmpUiSettings::instance()->headerModel()->size(i) - 2 * m_padding,
+ int width = qMin(m_header_model->size(i) - 2 * m_padding,
visible_width - 2 * m_padding);
row->titles[i] = m_metrics->elidedText (row->titles[i], Qt::ElideRight, width);
- visible_width -= QmmpUiSettings::instance()->headerModel()->size(i);
+ visible_width -= m_header_model->size(i);
}
}
@@ -214,55 +214,102 @@ void ListWidgetDrawer::drawSeparator(QPainter *painter, ListWidgetRow *row, bool
}
}
-void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row)
+void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl)
{
int sy = row->rect.y() + m_metrics->overlinePos() - 1;
- int sx = row->rect.x();
+ int sx = rtl ? row->rect.right() : row->rect.x();
painter->setFont(m_font);
- //|= number=|=col1 =|=col2 =|=extra=duration=|
- if(row->numberColumnWidth)
+ if(rtl)
{
- 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 - m_metrics->width(number), sy, number);
- painter->setPen(m_normal);
- painter->drawLine(sx, row->rect.top(), sx, row->rect.bottom() + 1);
- }
+ //|=duration=extra=|= col2=|= col1=|=number =|
+ 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);
+ painter->setPen(m_normal);
+ painter->drawLine(sx, row->rect.top(), sx, row->rect.bottom() + 1);
+ }
- for(int i = 0; i < QmmpUiSettings::instance()->headerModel()->count(); i++)
- {
- if(sx + m_padding >= row->rect.right() - row->lengthColumnWidth)
- break;
+ for(int i = 0; i < m_header_model->count(); i++)
+ {
+ if(sx - m_padding <= row->rect.x() + row->lengthColumnWidth)
+ break;
+
+ painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal);
+ painter->drawText(sx - m_padding - m_metrics->width(row->titles[i]), sy, row->titles[i]);
+ sx -= m_header_model->size(i);
+
+ if(m_header_model->count() > 1 && sx > row->rect.x() + row->lengthColumnWidth)
+ {
+ painter->setPen(m_normal);
+ painter->drawLine(sx, row->rect.top(), sx, row->rect.bottom() + 1);
+ }
+ }
+ sx = row->rect.x() + m_padding;
painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal);
- painter->drawText(sx + m_padding, sy, row->titles[i]);
- sx += QmmpUiSettings::instance()->headerModel()->size(i);
- if(m_column_manager->count() > 1 && sx < row->rect.right() - row->lengthColumnWidth)
+ if(!row->length.isEmpty())
{
+ painter->drawText(sx, sy, row->length);
+ sx += m_metrics->width(row->length) + m_padding;
+ }
+
+ if(!row->extraString.isEmpty())
+ {
+ painter->setFont(m_extra_font);
+ painter->drawText(sx, sy, row->extraString);
+ }
+ }
+ else
+ {
+ //|= number=|=col1 =|=col2 =|=extra=duration=|
+ 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 - m_metrics->width(number), sy, number);
painter->setPen(m_normal);
painter->drawLine(sx, row->rect.top(), sx, row->rect.bottom() + 1);
}
- }
- sx = row->rect.right() - m_padding;
- painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal);
+ for(int i = 0; i < m_header_model->count(); i++)
+ {
+ if(sx + m_padding >= row->rect.right() - row->lengthColumnWidth)
+ break;
+
+ painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal);
+ painter->drawText(sx + m_padding, sy, row->titles[i]);
+ sx += m_header_model->size(i);
+
+ if(m_header_model->count() > 1 && sx < row->rect.right() - row->lengthColumnWidth)
+ {
+ painter->setPen(m_normal);
+ painter->drawLine(sx, row->rect.top(), sx, row->rect.bottom() + 1);
+ }
+ }
- if(!row->length.isEmpty())
- {
- sx -= m_metrics->width(row->length);
- painter->drawText(sx, sy, row->length);
- sx -= m_padding;
- }
+ sx = row->rect.right() - m_padding;
+ painter->setPen(row->flags & ListWidgetRow::CURRENT ? m_current : m_normal);
- if(!row->extraString.isEmpty())
- {
- sx -= m_extra_metrics->width(row->extraString);
- painter->setFont(m_extra_font);
- painter->drawText(sx, sy, row->extraString);
+ if(!row->length.isEmpty())
+ {
+ sx -= m_metrics->width(row->length);
+ painter->drawText(sx, sy, row->length);
+ sx -= m_padding;
+ }
+
+ if(!row->extraString.isEmpty())
+ {
+ sx -= m_extra_metrics->width(row->extraString);
+ painter->setFont(m_extra_font);
+ painter->drawText(sx, sy, row->extraString);
+ }
}
}
diff --git a/src/plugins/Ui/skinned/listwidgetdrawer.h b/src/plugins/Ui/skinned/listwidgetdrawer.h
index 5e3873fba..b7f59a411 100644
--- a/src/plugins/Ui/skinned/listwidgetdrawer.h
+++ b/src/plugins/Ui/skinned/listwidgetdrawer.h
@@ -77,7 +77,7 @@ public:
void fillBackground(QPainter *painter, int width, int height);
void drawBackground(QPainter *painter, ListWidgetRow *row);
void drawSeparator(QPainter *painter, ListWidgetRow *row, bool rtl);
- void drawTrack(QPainter *painter, ListWidgetRow *row);
+ void drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl);
void drawDropLine(QPainter *painter, int row_number, int width);
private:
@@ -85,7 +85,7 @@ private:
Skin *m_skin;
QFontMetrics *m_metrics;
QFontMetrics *m_extra_metrics;
- PlayListHeaderModel *m_column_manager;
+ PlayListHeaderModel *m_header_model;
QFont m_font, m_extra_font;
bool m_update;
bool m_show_number;
diff --git a/src/plugins/Ui/skinned/playlistheader.cpp b/src/plugins/Ui/skinned/playlistheader.cpp
index b62fa7dde..ff4fa5c8d 100644
--- a/src/plugins/Ui/skinned/playlistheader.cpp
+++ b/src/plugins/Ui/skinned/playlistheader.cpp
@@ -97,8 +97,6 @@ void PlayListHeader::readSettings()
{
QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
settings.beginGroup("Skinned");
- QFont pl_font;
- pl_font.fromString(settings.value("pl_font", qApp->font().toString()).toString());
m_font.fromString(settings.value("header_font", qApp->font().toString()).toString());
if (m_metrics)
@@ -107,7 +105,7 @@ void PlayListHeader::readSettings()
m_metrics = 0;
}
- m_metrics = new QFontMetrics(pl_font);
+ m_metrics = new QFontMetrics(m_font);
m_show_number = settings.value ("pl_show_numbers", true).toBool();
m_align_numbres = settings.value ("pl_align_numbers", false).toBool();
m_padding = m_metrics->width("9")/2;