aboutsummaryrefslogtreecommitdiff
path: root/src/ui/listwidget.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2010-12-11 20:59:35 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2010-12-11 20:59:35 +0000
commit1f28f1893ff9d75077d7d598044fcd5bc6ab3481 (patch)
tree55fa34e302af129172bf606c46e0061d0c7188c9 /src/ui/listwidget.cpp
parent44f8a54c0c7bda14ffebfed663a507312a28cbe8 (diff)
downloadqmmp-1f28f1893ff9d75077d7d598044fcd5bc6ab3481.tar.gz
qmmp-1f28f1893ff9d75077d7d598044fcd5bc6ab3481.tar.bz2
qmmp-1f28f1893ff9d75077d7d598044fcd5bc6ab3481.zip
fixed playlist behaviour (patch by Avihay Baratz)(Closes issue 378)
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@2000 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/ui/listwidget.cpp')
-rw-r--r--src/ui/listwidget.cpp78
1 files changed, 72 insertions, 6 deletions
diff --git a/src/ui/listwidget.cpp b/src/ui/listwidget.cpp
index 716480955..7f20f92d2 100644
--- a/src/ui/listwidget.cpp
+++ b/src/ui/listwidget.cpp
@@ -62,6 +62,8 @@ ListWidget::ListWidget(QWidget *parent)
m_timer = new QTimer(this);
m_timer->setInterval(50);
connect(m_timer, SIGNAL(timeout()), SLOT(autoscroll()));
+ m_anchor_pen_normal.setStyle(Qt::DotLine);
+ m_anchor_pen_selected.setStyle(Qt::DotLine);
}
@@ -103,6 +105,8 @@ void ListWidget::loadColors()
m_current.setNamedColor(m_skin->getPLValue("current"));
m_normal_bg.setNamedColor(m_skin->getPLValue("normalbg"));
m_selected_bg.setNamedColor(m_skin->getPLValue("selectedbg"));
+ m_anchor_pen_normal.setColor(m_selected_bg);
+ m_anchor_pen_selected.setColor(m_normal_bg);
}
void ListWidget::paintEvent(QPaintEvent *)
@@ -115,13 +119,31 @@ void ListWidget::paintEvent(QPaintEvent *)
for (int i=0; i<m_titles.size(); ++i )
{
- if (m_model->isSelected(i + m_first))
+ if (i==m_anchor_row-m_first)
{
- m_painter.setBrush(QBrush(m_selected_bg));
- m_painter.setPen(m_selected_bg);
+ if(m_model->isSelected(i + m_first))
+ {
+ m_painter.setPen(m_anchor_pen_selected);
+ m_painter.setBrush(QBrush(m_selected_bg));
+ }
+ else
+ {
+ m_painter.setPen(m_anchor_pen_normal);
+ m_painter.setBrush(QBrush(m_normal_bg));
+ }
m_painter.drawRect ( 6, 15+(i-1)*m_metrics->height() + 2,
width() - 10, m_metrics->height());
}
+ else
+ {
+ if (m_model->isSelected(i + m_first))
+ {
+ m_painter.setBrush(QBrush(m_selected_bg));
+ m_painter.setPen(m_selected_bg);
+ m_painter.drawRect ( 6, 15+(i-1)*m_metrics->height() + 2,
+ width() - 10, m_metrics->height());
+ }
+ }
if (m_model->currentRow() == i + m_first)
m_painter.setPen(m_current);
@@ -172,17 +194,18 @@ void ListWidget::mousePressEvent(QMouseEvent *e)
if (INVALID_ROW != row && m_model->count() > row)
{
+ /*
if (!(Qt::ControlModifier & e->modifiers () ||
Qt::ShiftModifier & e->modifiers () ||
m_model->isSelected(row)))
m_model->clearSelection();
-
+*/
if (m_model->isSelected(row) && (e->modifiers() == Qt::NoModifier))
m_select_on_release = true;
//qWarning("m_prev_clicked_row: %d",m_prev_clicked_row);
- m_pressed_row = row;
+ m_pressed_row = row;/*
if ((Qt::ShiftModifier & e->modifiers()))
{
@@ -212,7 +235,50 @@ void ListWidget::mousePressEvent(QMouseEvent *e)
if (m_model->getSelection(m_pressed_row).count() == 1)
m_anchor_row = m_pressed_row;
//qWarning("m_anchor_row: %d",m_anchor_row);
-
+*/
+ if (e->button()==Qt::LeftButton)
+ {
+ if ((Qt::ShiftModifier & e->modifiers()))
+ {
+ bool select = true;
+ if ((Qt::ControlModifier & e->modifiers()))
+ {
+ select = m_model->isSelected(m_anchor_row);
+ }
+ else //ControlModifier released
+ {
+ m_model->clearSelection();
+ //select = true;
+ }
+ if (m_pressed_row > m_anchor_row)
+ {
+ for (int j = m_anchor_row;j <= m_pressed_row;j++)
+ {
+ m_model->setSelected(j, select);
+ }
+ }
+ else
+ {
+ for (int j = m_anchor_row;j >= m_pressed_row;j--)
+ {
+ m_model->setSelected(j, select);
+ }
+ }
+ }
+ else //ShiftModifier released
+ {
+ if ((Qt::ControlModifier & e->modifiers()))
+ {
+ m_model->setSelected(row, !m_model->isSelected(row));
+ }
+ else //ControlModifier released
+ {
+ m_model->clearSelection();
+ m_model->setSelected(row, true);
+ }
+ m_anchor_row = m_pressed_row;
+ }
+ }
update();
}
QWidget::mousePressEvent(e);