aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/Ui/skinned/listwidget.cpp4
-rw-r--r--src/plugins/Ui/skinned/listwidgetdrawer.cpp57
-rw-r--r--src/plugins/Ui/skinned/listwidgetdrawer.h1
-rw-r--r--src/qmmpui/columnmanager.cpp14
-rw-r--r--src/qmmpui/columnmanager.h3
5 files changed, 71 insertions, 8 deletions
diff --git a/src/plugins/Ui/skinned/listwidget.cpp b/src/plugins/Ui/skinned/listwidget.cpp
index 6dbdafc90..62051f16f 100644
--- a/src/plugins/Ui/skinned/listwidget.cpp
+++ b/src/plugins/Ui/skinned/listwidget.cpp
@@ -174,8 +174,8 @@ void ListWidget::mousePressEvent(QMouseEvent *e)
{
if(m_popupWidget)
m_popupWidget->hide();
- int y = e->y();
- int index = indexAt(y);
+
+ int index = indexAt(e->y());
if (INVALID_INDEX != index && m_model->count() > index)
{
diff --git a/src/plugins/Ui/skinned/listwidgetdrawer.cpp b/src/plugins/Ui/skinned/listwidgetdrawer.cpp
index 07de62cfa..6f4ac55f2 100644
--- a/src/plugins/Ui/skinned/listwidgetdrawer.cpp
+++ b/src/plugins/Ui/skinned/listwidgetdrawer.cpp
@@ -22,6 +22,7 @@
#include <QPainter>
#include <QApplication>
#include <qmmp/qmmp.h>
+#include <qmmpui/qmmpuisettings.h>
#include "skin.h"
#include "listwidgetdrawer.h"
@@ -82,6 +83,30 @@ int ListWidgetDrawer::rowHeight() const
return m_row_height;
}
+int ListWidgetDrawer::columnAt(int x, ListWidgetRow *row) const
+{
+ if(row->flags & ListWidgetRow::GROUP)
+ return -1;
+
+ int offset = 0;
+ for(int i = 0; i < QmmpUiSettings::instance()->columnManager()->count() - 1; i++)
+ {
+ offset += QmmpUiSettings::instance()->columnManager()->size(i);
+ if(x > row->x[ListWidgetRow::TITLE] + offset - m_metrics->width("9")/2 &&
+ x < row->x[ListWidgetRow::TITLE] + offset + m_metrics->width("9")/2)
+ {
+ return i;
+ }
+
+ /*if(i = QmmpUiSettings::instance()->columnManager()->count() - 1)
+ {
+ painter->drawLine(row->x[ListWidgetRow::TITLE] + offset - m_metrics->width("9")/2, row->rect.top(),
+ row->x[ListWidgetRow::TITLE] + offset - m_metrics->width("9")/2, row->rect.bottom() + 1);
+ }*/
+ }
+ return -1;
+}
+
void ListWidgetDrawer::calculateNumberWidth(int count)
{
//song numbers width
@@ -126,9 +151,23 @@ void ListWidgetDrawer::prepareRow(ListWidgetRow *row)
}
//elide title
- int title_width = row->x[ListWidgetRow::EXTRA_STRING] - row->x[ListWidgetRow::TITLE] -
+ int visible_width = row->x[ListWidgetRow::EXTRA_STRING] - row->x[ListWidgetRow::TITLE] -
m_metrics->width("9");
- row->titles[0] = m_metrics->elidedText (row->titles[0], Qt::ElideRight, title_width);
+
+ int offset = 0;
+ for(int i = 0; i < row->titles.count(); ++i)
+ {
+ int width = qMin(QmmpUiSettings::instance()->columnManager()->size(i) - m_metrics->width(9),
+ visible_width - offset);
+ if(i == row->titles.count() - 1)
+ width = visible_width - offset;
+
+ if(width <= 0)
+ break;
+ row->titles[i] = m_metrics->elidedText (row->titles[i], Qt::ElideRight, width);
+ offset += QmmpUiSettings::instance()->columnManager()->size(i);
+ }
+ //row->titles[0] = m_metrics->elidedText (row->titles[0], Qt::ElideRight, title_width);
}
void ListWidgetDrawer::fillBackground(QPainter *painter, int width, int height)
@@ -200,7 +239,19 @@ void ListWidgetDrawer::drawTrack(QPainter *painter, ListWidgetRow *row)
QString number = QString("%1").arg(row->number);
painter->drawText(row->x[ListWidgetRow::NUMBER], sy, number);
}
- painter->drawText(row->x[ListWidgetRow::TITLE], sy, row->titles[0]);
+
+ int offset = 0;
+ for(int i = 0; i < QmmpUiSettings::instance()->columnManager()->count(); i++)
+ {
+ painter->drawText(row->x[ListWidgetRow::TITLE] + offset, sy, row->titles[i]);
+ offset += QmmpUiSettings::instance()->columnManager()->size(i);
+
+ if(i != QmmpUiSettings::instance()->columnManager()->count() - 1)
+ {
+ painter->drawLine(row->x[ListWidgetRow::TITLE] + offset - m_metrics->width("9")/2, row->rect.top(),
+ row->x[ListWidgetRow::TITLE] + offset - m_metrics->width("9")/2, row->rect.bottom() + 1);
+ }
+ }
QString extra_string = row->extraString;
diff --git a/src/plugins/Ui/skinned/listwidgetdrawer.h b/src/plugins/Ui/skinned/listwidgetdrawer.h
index 537becc22..2f3028e37 100644
--- a/src/plugins/Ui/skinned/listwidgetdrawer.h
+++ b/src/plugins/Ui/skinned/listwidgetdrawer.h
@@ -74,6 +74,7 @@ public:
void readSettings();
void loadColors();
int rowHeight() const;
+ int columnAt(int x, ListWidgetRow *row) const;
void calculateNumberWidth(int count);
void prepareRow(ListWidgetRow *row);
void fillBackground(QPainter *painter, int width, int height);
diff --git a/src/qmmpui/columnmanager.cpp b/src/qmmpui/columnmanager.cpp
index fd4e028a0..a806fc749 100644
--- a/src/qmmpui/columnmanager.cpp
+++ b/src/qmmpui/columnmanager.cpp
@@ -92,6 +92,16 @@ void ColumnManager::execEditor(int index, QWidget *parent)
}
+int ColumnManager::width()
+{
+ int width = 0;
+ for(int i = 0; i < m_columns.count(); ++i)
+ {
+ width += m_columns[i].size;
+ }
+ return width;
+}
+
int ColumnManager::count()
{
return m_columns.count();
@@ -114,7 +124,7 @@ int ColumnManager::size(int index) const
qWarning("ColumnManager: index is out of range");
return 0;
}
- return m_columns.count();
+ return m_columns[index].size;
}
const QString ColumnManager::name(int index) const
@@ -148,7 +158,7 @@ void ColumnManager::sync()
Column col = m_columns.at(i);
s.setValue("name", col.name);
s.setValue("pattern", col.pattern);
- s.value("size", col.size).toInt();
+ s.setValue("size", col.size);
s.endGroup();
}
s.setValue("column_count", m_columns.count());
diff --git a/src/qmmpui/columnmanager.h b/src/qmmpui/columnmanager.h
index 587480bb4..da0dedb04 100644
--- a/src/qmmpui/columnmanager.h
+++ b/src/qmmpui/columnmanager.h
@@ -40,6 +40,7 @@ public:
void remove(int index);
void resize(int index, int size);
void execEditor(int index, QWidget *parent = 0);
+ int width();
int count();
const MetaDataFormatter* titleFormatter(int index) const;
@@ -60,7 +61,7 @@ private:
{
QString name;
QString pattern;
- QString size;
+ int size;
MetaDataFormatter *titleFormatter;
};
QList<Column> m_columns;