aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Ui/skinned
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Ui/skinned')
-rw-r--r--src/plugins/Ui/skinned/listwidget.cpp2
-rw-r--r--src/plugins/Ui/skinned/playlistheader.cpp193
-rw-r--r--src/plugins/Ui/skinned/playlistheader.h24
3 files changed, 136 insertions, 83 deletions
diff --git a/src/plugins/Ui/skinned/listwidget.cpp b/src/plugins/Ui/skinned/listwidget.cpp
index 040f70404..3c92355b7 100644
--- a/src/plugins/Ui/skinned/listwidget.cpp
+++ b/src/plugins/Ui/skinned/listwidget.cpp
@@ -49,7 +49,7 @@ ListWidget::ListWidget(QWidget *parent)
m_skin = Skin::instance();
m_ui_settings = QmmpUiSettings::instance();
- PlayListHeaderModel *headerModel = PlayListManager::instance()->headerModel();
+ //PlayListHeaderModel *headerModel = PlayListManager::instance()->headerModel();
m_menu = new QMenu(this);
m_timer = new QTimer(this);
m_timer->setInterval(50);
diff --git a/src/plugins/Ui/skinned/playlistheader.cpp b/src/plugins/Ui/skinned/playlistheader.cpp
index b566ffe55..d02561299 100644
--- a/src/plugins/Ui/skinned/playlistheader.cpp
+++ b/src/plugins/Ui/skinned/playlistheader.cpp
@@ -30,6 +30,7 @@
#include <QLineEdit>
#include <QInputDialog>
#include <QIcon>
+#include <QHash>
#include <qmmp/qmmp.h>
#include <qmmpui/playlistmanager.h>
#include <qmmpui/playlistheadermodel.h>
@@ -68,6 +69,7 @@ PlayListHeader::PlayListHeader(QWidget *parent) :
m_pl_padding = 0;
m_number_width = 0;
m_sorting_column = -1;
+ m_update = false;
m_task = NO_TASK;
m_model = PlayListManager::instance()->headerModel();
m_skin = Skin::instance();
@@ -80,8 +82,6 @@ PlayListHeader::PlayListHeader(QWidget *parent) :
m_menu->addSeparator();
m_menu->addAction(QIcon::fromTheme("list-remove"), tr("Remove Column"), this, SLOT(removeColumn()));
- m_sizes << 50;
- m_minimal_sizes << 50;
connect(m_skin, SIGNAL(skinChanged()), this, SLOT(updateSkin()));
loadColors();
readSettings();
@@ -92,6 +92,8 @@ PlayListHeader::~PlayListHeader()
if (m_metrics)
delete m_metrics;
m_metrics = 0;
+ qDeleteAll(m_columns);
+ m_columns.clear();
}
void PlayListHeader::readSettings()
@@ -113,7 +115,25 @@ void PlayListHeader::readSettings()
pl_font.fromString(settings.value("pl_font", qApp->font().toString()).toString());
m_pl_padding = QFontMetrics(pl_font).width("9")/2;
+ if(!m_update)
+ {
+ m_model->restoreSettings(&settings);
+ QList<QVariant> sizes = settings.value("pl_column_sizes").toList();
+ int autoResizeColumn = settings.value("pl_autoresize_colum", -1).toInt();
+ for(int i = 0; i < m_model->count(); ++i)
+ {
+ Column *col = new Column();
+ if(i < sizes.count())
+ col->size = sizes.at(i).toInt();
+ if(i == autoResizeColumn)
+ col->autoResize = true;
+ m_columns.append(col);
+ }
+ m_update = true;
+ }
+
settings.endGroup();
+
updateColumns();
}
@@ -122,58 +142,63 @@ void PlayListHeader::setNumberWidth(int width)
if(width != m_number_width)
{
m_number_width = width;
- m_minimal_sizes[0] = 30 + (m_number_width ? (m_number_width + 2 * m_pl_padding) : 0);
+ m_columns[0]->minSize = 30 + (m_number_width ? (m_number_width + 2 * m_pl_padding) : 0);
+ m_columns[0]->size = qMax(m_columns[0]->size, m_columns[0]->minSize);
updateColumns();
}
}
void PlayListHeader::updateColumns()
{
- m_rects.clear();
- m_names.clear();
bool rtl = (layoutDirection() == Qt::RightToLeft);
+ while (m_columns.count() > m_model->count())
+ delete m_columns.takeFirst();
+
+ while(m_columns.count() < m_model->count())
+ m_columns << new Column();
+
int sx = 5;
if(m_number_width)
sx += m_number_width + 2 * m_pl_padding;
if(m_model->count() == 1)
{
- m_rects << (rtl ? QRect(5, 0, width() - sx - 5, height()) : QRect(sx, 0, width() - sx - 5, height()));
+ m_columns[0]->rect = (rtl ? QRect(5, 0, width() - sx - 5, height()) : QRect(sx, 0, width() - sx - 5, height()));
if(m_sorting_column == 0)
{
- m_names << m_metrics->elidedText(m_model->name(0), Qt::ElideRight,
- m_rects.last().width() - 2 * m_padding - m_arrow_up.width() - 4);
+ m_columns[0]->name = m_metrics->elidedText(m_model->name(0), Qt::ElideRight,
+ m_columns[0]->rect.width() - 2 * m_padding - m_arrow_up.width() - 4);
}
else
{
- m_names << m_metrics->elidedText(m_model->name(0), Qt::ElideRight,
- m_rects.last().width() - 2 * m_padding);
+ m_columns[0]->name = m_metrics->elidedText(m_model->name(0), Qt::ElideRight,
+ m_columns[0]->rect.width() - 2 * m_padding);
}
return;
}
for(int i = 0; i < m_model->count(); ++i)
{
- int size = m_sizes[i];
+ int size = m_columns[i]->size;
//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 - size, 0, size, height());
+ m_columns[i]->rect = QRect(width() - sx - size, 0, size, height());
else
- m_rects << QRect(sx, 0, size, height());
+ m_columns[i]->rect = QRect(sx, 0, size, height());
if(i == m_sorting_column)
{
- m_names << m_metrics->elidedText(m_model->name(i), Qt::ElideRight,
- size - 2 * m_padding - m_arrow_up.width() - 4);
+ m_columns[i]->name = m_metrics->elidedText(m_model->name(i), Qt::ElideRight,
+ size - 2 * m_padding - m_arrow_up.width() - 4);
}
else
{
- m_names << m_metrics->elidedText(m_model->name(i), Qt::ElideRight,
- size - 2 * m_padding);
+ m_columns[i]->name = m_metrics->elidedText(m_model->name(i), Qt::ElideRight,
+ size - 2 * m_padding);
}
sx += size;
@@ -188,7 +213,10 @@ int PlayListHeader::requiredHeight() const
QList<int> PlayListHeader::sizes() const
{
- return m_sizes;
+ QList<int> sizeList;
+ for(int i = 0; i < m_columns.size(); ++i)
+ sizeList.append(m_columns[i]->size);
+ return sizeList;
}
void PlayListHeader::showSortIndicator(int column, bool reverted)
@@ -218,7 +246,7 @@ void PlayListHeader::updateSkin()
void PlayListHeader::addColumn()
{
- int column = findColumn(m_pressed_pos);
+ /*int column = findColumn(m_pressed_pos);
if(column < 0 && m_pressed_pos.x() > m_rects.last().right())
column = m_model->count();
else if(column < 0 && m_pressed_pos.x() < m_rects.first().x())
@@ -227,7 +255,7 @@ void PlayListHeader::addColumn()
if(column < 0)
return;
- m_model->execInsert(column);
+ m_model->execInsert(column);*/
}
void PlayListHeader::editColumn()
@@ -251,15 +279,22 @@ void PlayListHeader::setAutoResize(bool yes)
if(m_pressed_column < 0)
return;
- //m_model->setAutoResize(yes ? m_pressed_column : -1);
+ if(yes)
+ {
+ for(int i = 0; i < m_columns.count(); ++i)
+ m_columns[i]->autoResize = false;
+ }
+
+ m_columns[m_pressed_column]->autoResize = yes;
}
void PlayListHeader::restoreSize()
{
if(m_pressed_column < 0)
- return;
+ return;
- m_sizes[m_pressed_column] = 100;
+ m_columns[m_pressed_column]->size = 150;
+ updateColumns();
}
void PlayListHeader::mousePressEvent(QMouseEvent *e)
@@ -276,27 +311,27 @@ void PlayListHeader::mousePressEvent(QMouseEvent *e)
if(rtl)
{
- if(e->pos().x() < m_rects[m_pressed_column].x() + m_metrics->width("9"))
+ if(e->pos().x() < m_columns[m_pressed_column]->rect.x() + m_metrics->width("9"))
{
- m_old_size = m_sizes[m_pressed_column];
+ m_old_size = m_columns[m_pressed_column]->size;
m_task = RESIZE;
}
else
{
- m_press_offset = e->pos().x() - m_rects.at(m_pressed_column).x();
+ m_press_offset = e->pos().x() - m_columns[m_pressed_column]->rect.x();
m_task = SORT;
}
}
else
{
- if(e->pos().x() > m_rects[m_pressed_column].right() - m_metrics->width("9"))
+ if(e->pos().x() > m_columns[m_pressed_column]->rect.right() - m_metrics->width("9"))
{
- m_old_size = m_sizes[m_pressed_column];
+ m_old_size = m_columns[m_pressed_column]->size;
m_task = RESIZE;
}
else
{
- m_press_offset = e->pos().x() - m_rects.at(m_pressed_column).x();
+ m_press_offset = e->pos().x() - m_columns[m_pressed_column]->rect.x();
m_task = SORT;
}
}
@@ -330,25 +365,25 @@ void PlayListHeader::mouseMoveEvent(QMouseEvent *e)
if(m_task == RESIZE && m_model->count() > 1)
{
if(rtl)
- m_sizes[m_pressed_column] = m_old_size - e->pos().x() + m_pressed_pos.x();
+ m_columns[m_pressed_column]->size = m_old_size - e->pos().x() + m_pressed_pos.x();
else
- m_sizes[m_pressed_column] = m_old_size + e->pos().x() - m_pressed_pos.x();
+ m_columns[m_pressed_column]->size = m_old_size + e->pos().x() - m_pressed_pos.x();
}
else if(m_task == MOVE)
{
m_mouse_pos = e->pos();
int dest = -1;
- for(int i = 0; i < m_rects.count(); ++i)
+ for(int i = 0; i < m_columns.count(); ++i)
{
- int x_delta = m_mouse_pos.x() - m_rects.at(i).x();
- if(x_delta < 0 || x_delta > m_rects.at(i).width())
+ int x_delta = m_mouse_pos.x() - m_columns[i]->rect.x();
+ if(x_delta < 0 || x_delta > m_columns[i]->rect.width())
continue;
if(rtl)
{
- if((x_delta > m_rects.at(i).width()/2 && m_pressed_column > i) ||
- (x_delta < m_rects.at(i).width()/2 && m_pressed_column < i))
+ if((x_delta > m_columns[i]->rect.width()/2 && m_pressed_column > i) ||
+ (x_delta < m_columns[i]->rect.width()/2 && m_pressed_column < i))
{
dest = i;
break;
@@ -356,8 +391,8 @@ void PlayListHeader::mouseMoveEvent(QMouseEvent *e)
}
else
{
- if((x_delta > m_rects.at(i).width()/2 && m_pressed_column < i) ||
- (x_delta < m_rects.at(i).width()/2 && m_pressed_column > i))
+ if((x_delta > m_columns[i]->rect.width()/2 && m_pressed_column < i) ||
+ (x_delta < m_columns[i]->rect.width()/2 && m_pressed_column > i))
{
dest = i;
break;
@@ -379,14 +414,14 @@ void PlayListHeader::mouseMoveEvent(QMouseEvent *e)
int column = findColumn(e->pos());
if(rtl)
{
- if(column >= 0 && e->pos().x() < m_rects[column].x() + m_metrics->width("9"))
+ if(column >= 0 && e->pos().x() < m_columns[column]->rect.x() + m_metrics->width("9"))
setCursor(Qt::SplitHCursor);
else
setCursor(Qt::ArrowCursor);
}
else
{
- if(column >= 0 && e->pos().x() > m_rects[column].right() - m_metrics->width("9"))
+ if(column >= 0 && e->pos().x() > m_columns[column]->rect.right() - m_metrics->width("9"))
setCursor(Qt::SplitHCursor);
else
setCursor(Qt::ArrowCursor);
@@ -396,13 +431,13 @@ void PlayListHeader::mouseMoveEvent(QMouseEvent *e)
void PlayListHeader::resizeEvent(QResizeEvent *e)
{
- /*if(m_model->count() == 1)
+ if(m_model->count() == 1)
{
updateColumns();
return;
}
- int delta = e->size().width() - e->oldSize().width();
+ /*int delta = e->size().width() - e->oldSize().width();
int index = m_model->autoResizeColumn();
if(index >= 0 && e->oldSize().width() > 10)
@@ -422,10 +457,10 @@ void PlayListHeader::resizeEvent(QResizeEvent *e)
void PlayListHeader::contextMenuEvent(QContextMenuEvent *e)
{
m_pressed_pos = e->pos();
- /*m_pressed_column = findColumn(e->pos());
+ m_pressed_column = findColumn(e->pos());
if(m_pressed_column >= 0)
{
- m_autoResize->setChecked(m_model->autoResizeColumn() == m_pressed_column);
+ m_autoResize->setChecked(m_columns[m_pressed_column]->autoResize);
m_autoResize->setEnabled(true);
foreach (QAction *action, m_menu->actions())
action->setVisible(true);
@@ -439,7 +474,7 @@ void PlayListHeader::contextMenuEvent(QContextMenuEvent *e)
action->setVisible(false);
}
}
- m_menu->exec(e->globalPos());*/
+ m_menu->exec(e->globalPos());
}
void PlayListHeader::paintEvent(QPaintEvent *)
@@ -459,45 +494,45 @@ void PlayListHeader::paintEvent(QPaintEvent *)
{
if(m_number_width)
{
- painter.drawLine(m_rects.at(0).right(), 0,
- m_rects.at(0).right(), height());
+ painter.drawLine(m_columns[0]->rect.right(), 0,
+ m_columns[0]->rect.right(), height());
}
- if(m_names.count() == 1)
+ if(m_columns.count() == 1)
{
- painter.drawText(m_rects[0].right() - m_padding - m_metrics->width(m_names[0]),
- m_metrics->ascent(), m_names[0]);
+ painter.drawText(m_columns[0]->rect.right() - m_padding - m_metrics->width(m_columns[0]->name),
+ m_metrics->ascent(), m_columns[0]->name);
if(m_sorting_column == 0)
{
- painter.drawPixmap(m_rects[0].x() + 4,
+ painter.drawPixmap(m_columns[0]->rect.x() + 4,
(height() - m_arrow_up.height()) / 2,
m_reverted ? m_arrow_up : m_arrow_down);
}
return;
}
- for(int i = 0; i < m_rects.count(); ++i)
+ for(int i = 0; i < m_columns.count(); ++i)
{
if(m_task == MOVE && i == m_pressed_column)
{
painter.setBrush(m_normal_bg);
painter.setPen(m_current);
- painter.drawRect(m_rects[i].x(), 0,
- m_rects[i].width(), height()-1);
+ painter.drawRect(m_columns[i]->rect.x(), 0,
+ m_columns[i]->rect.width(), height()-1);
painter.setBrush(m_normal);
painter.setPen(m_normal_bg);
continue;
}
- painter.drawText(m_rects[i].right() - m_padding - m_metrics->width(m_names[i]),
- m_metrics->ascent(), m_names[i]);
+ painter.drawText(m_columns[i]->rect.right() - m_padding - m_metrics->width(m_columns[i]->name),
+ m_metrics->ascent(), m_columns[i]->name);
- painter.drawLine(m_rects[i].x()-1, 0,
- m_rects[i].x()-1, height()+1);
+ painter.drawLine(m_columns[i]->rect.x()-1, 0,
+ m_columns[i]->rect.x()-1, height()+1);
if(i == m_sorting_column)
{
- painter.drawPixmap(m_rects[i].x() + 4,
+ painter.drawPixmap(m_columns[i]->rect.x() + 4,
(height() - m_arrow_up.height()) / 2,
m_reverted ? m_arrow_up : m_arrow_down);
}
@@ -507,56 +542,56 @@ void PlayListHeader::paintEvent(QPaintEvent *)
{
painter.setPen(m_normal);
painter.drawRect(m_mouse_pos.x() - m_press_offset, 0,
- m_rects.at(m_pressed_column).width(), height());
+ m_columns[m_pressed_column]->rect.width(), height());
painter.setPen(m_normal_bg);
painter.drawText(m_mouse_pos.x() - m_press_offset +
- m_rects.at(m_pressed_column).width() - m_padding -
- m_metrics->width(m_names.at(m_pressed_column)),
- m_metrics->ascent(), m_names.at(m_pressed_column));
+ m_columns[m_pressed_column]->rect.width() - m_padding -
+ m_metrics->width(m_columns[m_pressed_column]->name),
+ m_metrics->ascent(), m_columns[m_pressed_column]->name);
}
}
else
{
if(m_number_width)
{
- painter.drawLine(m_rects.at(0).x(), 0,
- m_rects.at(0).x(), height());
+ painter.drawLine(m_columns[0]->rect.x(), 0,
+ m_columns[0]->rect.x(), height());
}
- if(m_names.count() == 1)
+ if(m_columns.count() == 1)
{
- painter.drawText(m_rects[0].x() + m_padding, m_metrics->ascent(), m_names[0]);
+ painter.drawText(m_columns[0]->rect.x() + m_padding, m_metrics->ascent(), m_columns[0]->name);
if(m_sorting_column == 0)
{
- painter.drawPixmap(m_rects[0].right() - m_arrow_up.width() - 4,
+ painter.drawPixmap(m_columns[0]->rect.right() - m_arrow_up.width() - 4,
(height() - m_arrow_up.height()) / 2,
m_reverted ? m_arrow_up : m_arrow_down);
}
return;
}
- for(int i = 0; i < m_rects.count(); ++i)
+ for(int i = 0; i < m_columns.count(); ++i)
{
if(m_task == MOVE && i == m_pressed_column)
{
painter.setBrush(m_normal_bg);
painter.setPen(m_current);
- painter.drawRect(m_rects[i].x(), 0,
- m_rects[i].width(), height()-1);
+ painter.drawRect(m_columns[i]->rect.x(), 0,
+ m_columns[i]->rect.width(), height()-1);
painter.setBrush(m_normal);
painter.setPen(m_normal_bg);
continue;
}
- painter.drawText(m_rects[i].x() + m_padding, m_metrics->ascent(), m_names[i]);
+ painter.drawText(m_columns[i]->rect.x() + m_padding, m_metrics->ascent(), m_columns[i]->name);
- painter.drawLine(m_rects[i].right()+1, 0,
- m_rects[i].right()+1, height()+1);
+ painter.drawLine(m_columns[i]->rect.right()+1, 0,
+ m_columns[i]->rect.right()+1, height()+1);
if(i == m_sorting_column)
{
- painter.drawPixmap(m_rects[i].right() - m_arrow_up.width() - 4,
+ painter.drawPixmap(m_columns[i]->rect.right() - m_arrow_up.width() - 4,
(height() - m_arrow_up.height()) / 2,
m_reverted ? m_arrow_up : m_arrow_down);
}
@@ -566,11 +601,11 @@ void PlayListHeader::paintEvent(QPaintEvent *)
{
painter.setPen(m_normal);
painter.drawRect(m_mouse_pos.x() - m_press_offset, 0,
- m_rects.at(m_pressed_column).width(), height());
+ m_columns[m_pressed_column]->rect.width(), height());
painter.setPen(m_normal_bg);
painter.drawText(m_mouse_pos.x() - m_press_offset + m_padding,
- m_metrics->ascent(), m_names.at(m_pressed_column));
+ m_metrics->ascent(), m_columns[m_pressed_column]->name);
}
}
}
@@ -593,9 +628,9 @@ void PlayListHeader::loadColors()
int PlayListHeader::findColumn(QPoint pos)
{
- for(int i = 0; i < m_rects.count(); ++i)
+ for(int i = 0; i < m_columns.count(); ++i)
{
- if(m_rects.at(i).contains(pos))
+ if(m_columns[i]->rect.contains(pos))
return i;
}
return -1;
diff --git a/src/plugins/Ui/skinned/playlistheader.h b/src/plugins/Ui/skinned/playlistheader.h
index b773de749..0468fab3f 100644
--- a/src/plugins/Ui/skinned/playlistheader.h
+++ b/src/plugins/Ui/skinned/playlistheader.h
@@ -72,19 +72,36 @@ private:
void loadColors();
int findColumn(QPoint pos);
+ struct Column
+ {
+ Column()
+ {
+ size = 150;
+ minSize = 30;
+ autoResize = false;
+ }
+
+ QString name;
+ int size;
+ int minSize;
+ QRect rect; //geometry
+ bool autoResize;
+ };
+
Skin *m_skin;
QFontMetrics *m_metrics;
QMenu *m_menu;
QFont m_font;
QColor m_normal, m_normal_bg, m_current;
- QList <QRect> m_rects;
- QStringList m_names;
+ //QList <QRect> m_rects;
+ //QStringList m_names;
QPoint m_pressed_pos;
QPoint m_mouse_pos;
PlayListHeaderModel *m_model;
QAction *m_autoResize;
QPixmap m_arrow_up, m_arrow_down;
- QList<int> m_sizes, m_minimal_sizes;
+ //QList<int> m_sizes, m_minimal_sizes;
+ QList<Column*> m_columns;
bool m_reverted;
int m_number_width;
int m_pressed_column;
@@ -93,6 +110,7 @@ private:
int m_padding;
int m_pl_padding;
int m_sorting_column;
+ bool m_update;
enum
{