aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-05-27 18:47:51 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-05-27 18:47:51 +0000
commit18033cfd3cb4f33490d7f59b7b24ae3ceb184a0b (patch)
treea2cc53f7c7a0fef8e64e69e24c632aab9f5d4c1f
parent55753bcabe762990c3ce3e31199db4d8581c3e2b (diff)
downloadqmmp-18033cfd3cb4f33490d7f59b7b24ae3ceb184a0b.tar.gz
qmmp-18033cfd3cb4f33490d7f59b7b24ae3ceb184a0b.tar.bz2
qmmp-18033cfd3cb4f33490d7f59b7b24ae3ceb184a0b.zip
fixed problem with column alignment
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@5037 90c681e8-e032-0410-971d-27865f9a5e38
-rw-r--r--src/plugins/Ui/skinned/listwidgetdrawer.cpp23
-rw-r--r--src/plugins/Ui/skinned/playlistheader.cpp17
-rw-r--r--src/qmmpui/playlistheadermodel.cpp23
-rw-r--r--src/qmmpui/playlistheadermodel.h2
4 files changed, 54 insertions, 11 deletions
diff --git a/src/plugins/Ui/skinned/listwidgetdrawer.cpp b/src/plugins/Ui/skinned/listwidgetdrawer.cpp
index b5bb22e3a..db0ff3f1d 100644
--- a/src/plugins/Ui/skinned/listwidgetdrawer.cpp
+++ b/src/plugins/Ui/skinned/listwidgetdrawer.cpp
@@ -148,11 +148,16 @@ void ListWidgetDrawer::prepareRow(ListWidgetRow *row)
for(int i = 0; i < row->titles.count() && visible_width > 0; ++i)
{
- int width = qMin(m_header_model->size(i) - 2 * m_padding,
+ int size = m_header_model->size(i);
+
+ if(i == 0 && row->numberColumnWidth)
+ size -= row->numberColumnWidth;
+
+ int width = qMin(size - 2 * m_padding,
visible_width - 2 * m_padding);
row->titles[i] = m_metrics->elidedText (row->titles[i], Qt::ElideRight, width);
- visible_width -= m_header_model->size(i);
+ visible_width -= size;
}
}
@@ -185,7 +190,7 @@ void ListWidgetDrawer::drawBackground(QPainter *painter, ListWidgetRow *row)
void ListWidgetDrawer::drawSeparator(QPainter *painter, ListWidgetRow *row, bool rtl)
{
int sx = row->rect.x() + 50;
- int sy = row->rect.y() + m_metrics->overlinePos() - 1;
+ int sy = row->rect.y() + m_metrics->overlinePos() - 1;
painter->setFont(m_font);
painter->setPen(m_normal);
@@ -248,9 +253,13 @@ void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl
if(sx - m_padding <= row->rect.x() + row->lengthColumnWidth)
break;
+ int size = m_header_model->size(i);
+ if(i == 0 && row->numberColumnWidth)
+ size -= row->numberColumnWidth;
+
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);
+ sx -= size;
if(m_header_model->count() > 1 && sx > row->rect.x() + row->lengthColumnWidth)
{
@@ -292,9 +301,13 @@ void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row, bool rtl
if(sx + m_padding >= row->rect.right() - row->lengthColumnWidth)
break;
+ int size = m_header_model->size(i);
+ if(i == 0 && row->numberColumnWidth)
+ size -= row->numberColumnWidth;
+
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);
+ sx += size;
if(m_header_model->count() > 1 && sx < row->rect.right() - row->lengthColumnWidth)
{
diff --git a/src/plugins/Ui/skinned/playlistheader.cpp b/src/plugins/Ui/skinned/playlistheader.cpp
index 79de5aa0e..4134b6607 100644
--- a/src/plugins/Ui/skinned/playlistheader.cpp
+++ b/src/plugins/Ui/skinned/playlistheader.cpp
@@ -120,6 +120,7 @@ void PlayListHeader::setNumberWidth(int width)
if(width != m_number_width)
{
m_number_width = width;
+ m_model->setMinimalSize(0, 30 + (m_number_width ? (m_number_width + 2 * m_pl_padding) : 0));
updateColumns();
}
}
@@ -152,22 +153,28 @@ void PlayListHeader::updateColumns()
for(int i = 0; i < m_model->count(); ++i)
{
+ int size = m_model->size(i);
+
+ //add number width to the first column
+ if(i == 0 && m_number_width)
+ size -= m_number_width + 2 * m_pl_padding;
+
if(rtl)
- m_rects << QRect(width() - sx - m_model->size(i), 0, m_model->size(i), height());
+ m_rects << QRect(width() - sx - size, 0, size, height());
else
- m_rects << QRect(sx, 0, m_model->size(i), height());
+ m_rects << QRect(sx, 0, size, height());
if(i == m_sorting_column)
{
m_names << m_metrics->elidedText(m_model->name(i), Qt::ElideRight,
- m_model->size(i) - 2 * m_padding - m_arrow_up.width() - 4);
+ size - 2 * m_padding - m_arrow_up.width() - 4);
}
else
{
m_names << m_metrics->elidedText(m_model->name(i), Qt::ElideRight,
- m_model->size(i) - 2 * m_padding);
+ size - 2 * m_padding);
}
- sx += m_model->size(i);
+ sx += size;
}
update();
}
diff --git a/src/qmmpui/playlistheadermodel.cpp b/src/qmmpui/playlistheadermodel.cpp
index 7a6b1695f..eb00fd883 100644
--- a/src/qmmpui/playlistheadermodel.cpp
+++ b/src/qmmpui/playlistheadermodel.cpp
@@ -39,6 +39,7 @@ PlayListHeaderModel::PlayListHeaderModel(QObject *parent) :
col.size = s.value("size", 150).toInt();
col.titleFormatter = new MetaDataFormatter(col.pattern);
col.autoResize = s.value("autoresize", false).toBool();
+ col.minSize = 30;
m_columns.append(col);
s.endGroup();
}
@@ -70,6 +71,7 @@ void PlayListHeaderModel::insert(int index, const QString &name, const QString &
col.titleFormatter = new MetaDataFormatter(pattern);
col.size = 50;
col.autoResize = false;
+ col.minSize = 30;
m_columns.insert(index, col);
sync();
emit columnAdded(index);
@@ -101,7 +103,7 @@ void PlayListHeaderModel::resize(int index, int size)
return;
}
- m_columns[index].size = qMax(size, 30);
+ m_columns[index].size = qMax(size, m_columns[index].minSize);
emit columnResized(index);
emit headerChanged();
}
@@ -120,6 +122,25 @@ void PlayListHeaderModel::setAutoResize(int index)
}
}
+void PlayListHeaderModel::setMinimalSize(int index, int size)
+{
+ if(index >= m_columns.size())
+ {
+ qWarning("ColumnManager: index is out of range");
+ return;
+ }
+
+ if(size < 10)
+ {
+ qWarning("ColumnManager: invalid size");
+ return;
+ }
+
+ m_columns[index].minSize = size;
+ if(m_columns[index].size < size)
+ resize(index, size);
+}
+
void PlayListHeaderModel::move(int from, int to)
{
if(from < 0 || from >= m_columns.size())
diff --git a/src/qmmpui/playlistheadermodel.h b/src/qmmpui/playlistheadermodel.h
index be84aafae..1cc4cf2eb 100644
--- a/src/qmmpui/playlistheadermodel.h
+++ b/src/qmmpui/playlistheadermodel.h
@@ -40,6 +40,7 @@ public:
void remove(int index);
void resize(int index, int size);
void setAutoResize(int index);
+ void setMinimalSize(int index, int size);
void move(int from, int to);
void execEdit(int index, QWidget *parent = 0);
void execInsert(int index, QWidget *parent = 0);
@@ -66,6 +67,7 @@ private:
QString name;
QString pattern;
int size;
+ int minSize;
bool autoResize;
MetaDataFormatter *titleFormatter;
};