aboutsummaryrefslogtreecommitdiff
path: root/src/ui/listwidget.cpp
diff options
context:
space:
mode:
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);