aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/Ui/skinned/listwidget.cpp108
-rw-r--r--src/plugins/Ui/skinned/listwidget.h4
2 files changed, 57 insertions, 55 deletions
diff --git a/src/plugins/Ui/skinned/listwidget.cpp b/src/plugins/Ui/skinned/listwidget.cpp
index 954987ca7..c85a9cbf8 100644
--- a/src/plugins/Ui/skinned/listwidget.cpp
+++ b/src/plugins/Ui/skinned/listwidget.cpp
@@ -36,7 +36,7 @@
#include "popupwidget.h"
#include "playlist.h"
-#define INVALID_ROW -1
+#define INVALID_INDEX -1
ListWidget::ListWidget(QWidget *parent)
: QWidget(parent)
@@ -51,7 +51,7 @@ ListWidget::ListWidget(QWidget *parent)
m_menu = new QMenu(this);
m_scroll_direction = NONE;
m_prev_y = 0;
- m_anchor_row = INVALID_ROW;
+ m_anchor_index = INVALID_INDEX;
m_player = MediaPlayer::instance();
connect (m_player, SIGNAL(repeatableChanged(bool)), SLOT(updateList()));
m_first = 0;
@@ -126,12 +126,12 @@ int ListWidget::firstVisibleRow() const
int ListWidget::anchorRow() const
{
- return m_anchor_row;
+ return m_anchor_index;
}
void ListWidget::setAnchorRow(int r)
{
- m_anchor_row = r;
+ m_anchor_index = r;
update();
}
@@ -170,7 +170,7 @@ void ListWidget::paintEvent(QPaintEvent *)
{
sy = (i + 1) * (2 + m_metrics->lineSpacing()) - 2 - m_metrics->descent();
- if (m_show_anchor && i == m_anchor_row - m_first)
+ if (m_show_anchor && i == m_anchor_index - m_first)
{
painter.setBrush(m_rows[i]->selected ? m_selected_bg : m_normal_bg);
painter.setPen(m_normal);
@@ -265,14 +265,13 @@ void ListWidget::paintEvent(QPaintEvent *)
}
sx = rtl ? 9 : width() - 7 - m_metrics->width(m_rows[i]->length);
painter.drawText(sx, sy, m_rows[i]->length);
-
- //draw drop line
- if(m_drop_row == (m_first + i))
- {
- painter.setPen(m_current);
- painter.drawLine (6, i * (m_metrics->lineSpacing() + 2),
- width() - 4 , i * (m_metrics->lineSpacing() + 2));
- }
+ }
+ //draw drop line
+ if(m_drop_row != -1)
+ {
+ painter.setPen(m_current);
+ painter.drawLine (6, (m_drop_row - m_first) * (m_metrics->lineSpacing() + 2),
+ width() - 4 , (m_drop_row - m_first) * (m_metrics->lineSpacing() + 2));
}
//draw line
if(m_number_width)
@@ -287,10 +286,10 @@ void ListWidget::paintEvent(QPaintEvent *)
void ListWidget::mouseDoubleClickEvent (QMouseEvent *e)
{
int y = e->y();
- int row = rowAt(y);
- if (INVALID_ROW != row)
+ int index = indexAt(y);
+ if (INVALID_INDEX != index)
{
- m_model->setCurrent(row);
+ m_model->setCurrent(index);
emit selectionChanged();
update();
}
@@ -302,29 +301,29 @@ void ListWidget::mousePressEvent(QMouseEvent *e)
m_popupWidget->hide();
m_scroll = true;
int y = e->y();
- int row = rowAt(y);
+ int index = indexAt(y);
- if (INVALID_ROW != row && m_model->count() > row)
+ if (INVALID_INDEX != index && m_model->count() > index)
{
- m_pressed_row = row;
+ m_pressed_row = index;
if(e->button() == Qt::RightButton)
{
- if(!m_model->isSelected(row))
+ if(!m_model->isSelected(index))
{
m_model->clearSelection();
- m_model->setSelected(row, true);
+ m_model->setSelected(index, true);
}
- m_anchor_row = m_pressed_row;
- if(m_model->isGroup(row) && m_model->selectedTracks().isEmpty())
+ m_anchor_index = m_pressed_row;
+ if(m_model->isGroup(index) && m_model->selectedTracks().isEmpty())
{
- PlayListGroup *group = m_model->group(row);
+ PlayListGroup *group = m_model->group(index);
m_model->setSelected(group->tracks());
}
QWidget::mousePressEvent(e);
return;
}
- if (m_model->isSelected(row) && (e->modifiers() == Qt::NoModifier))
+ if (m_model->isSelected(index) && (e->modifiers() == Qt::NoModifier))
{
m_select_on_release = true;
QWidget::mousePressEvent(e);
@@ -334,34 +333,34 @@ void ListWidget::mousePressEvent(QMouseEvent *e)
if ((Qt::ShiftModifier & e->modifiers()))
{
bool select = true;
- if (m_pressed_row > m_anchor_row)
+ if (m_pressed_row > m_anchor_index)
{
- for (int j = m_anchor_row;j <= m_pressed_row;j++)
+ for (int j = m_anchor_index;j <= m_pressed_row;j++)
{
m_model->setSelected(j, select);
}
}
else
{
- for (int j = m_anchor_row;j >= m_pressed_row;j--)
+ for (int j = m_anchor_index;j >= m_pressed_row;j--)
{
m_model->setSelected(j, select);
}
}
- m_anchor_row = m_pressed_row;
+ m_anchor_index = m_pressed_row;
}
else //ShiftModifier released
{
if ((Qt::ControlModifier & e->modifiers()))
{
- m_model->setSelected(row, !m_model->isSelected(row));
+ m_model->setSelected(index, !m_model->isSelected(index));
}
else //ControlModifier released
{
m_model->clearSelection();
- m_model->setSelected(row, true);
+ m_model->setSelected(index, true);
}
- m_anchor_row = m_pressed_row;
+ m_anchor_index = m_pressed_row;
}
update();
}
@@ -401,14 +400,14 @@ bool ListWidget::event (QEvent *e)
if(e->type() == QEvent::ToolTip)
{
QHelpEvent *helpEvent = (QHelpEvent *) e;
- int row = rowAt(helpEvent->y());
- if(row < 0 || !m_model->isTrack(row))
+ int index = indexAt(helpEvent->y());
+ if(index < 0 || !m_model->isTrack(index))
{
m_popupWidget->deactivate();
return QWidget::event(e);
}
e->accept();
- m_popupWidget->prepare(m_model->track(row), helpEvent->globalPos());
+ m_popupWidget->prepare(m_model->track(index), helpEvent->globalPos());
return true;
}
else if(e->type() == QEvent::Leave)
@@ -549,10 +548,11 @@ void ListWidget::dropEvent(QDropEvent *event)
event->acceptProposedAction();
QApplication::restoreOverrideCursor();
- int index = rowAt(event->pos().y());
- if(index != INVALID_ROW)
- index += m_first;
-
+ int index = indexAt(event->pos().y());
+ if(index == INVALID_INDEX)
+ {
+ index = qMin(m_first + m_row_count, m_model->count());
+ }
m_model->insert(index, list_urls);
}
m_drop_row = -1;
@@ -566,10 +566,12 @@ void ListWidget::dragLeaveEvent(QDragLeaveEvent *)
void ListWidget::dragMoveEvent(QDragMoveEvent *event)
{
- int row = rowAt(event->pos().y());
- if(row != m_drop_row)
+ int index = indexAt(event->pos().y());
+ if(index == INVALID_INDEX)
+ index = qMin(m_first + m_row_count, m_model->count());
+ if(index != m_drop_row)
{
- m_drop_row = row;
+ m_drop_row = index;
update();
}
}
@@ -622,9 +624,9 @@ void ListWidget::mouseMoveEvent(QMouseEvent *e)
}
m_timer->stop();
- int row = rowAt(e->y());
+ int index = indexAt(e->y());
- if (INVALID_ROW != row)
+ if (INVALID_INDEX != index)
{
SimpleSelection sel = m_model->getSelection(m_pressed_row);
if(sel.count() > 1 && m_scroll_direction == TOP)
@@ -637,18 +639,18 @@ void ListWidget::mouseMoveEvent(QMouseEvent *e)
if(sel.m_bottom == m_model->count() - 1 || sel.m_bottom == m_first + m_row_count)
return;
}
- m_model->moveItems(m_pressed_row,row);
+ m_model->moveItems(m_pressed_row,index);
m_prev_y = e->y();
m_scroll = false;
- m_pressed_row = row;
- m_anchor_row = row;
+ m_pressed_row = index;
+ m_anchor_index = index;
}
}
else if(m_popupWidget)
{
- int row = rowAt(e->y());
- if(row < 0 || !m_model->isTrack(row) || m_popupWidget->url() != m_model->track(row)->url())
+ int index = indexAt(e->y());
+ if(index < 0 || !m_model->isTrack(index) || m_popupWidget->url() != m_model->track(index)->url())
m_popupWidget->deactivate();
}
}
@@ -659,24 +661,24 @@ void ListWidget::mouseReleaseEvent(QMouseEvent *e)
{
m_model->clearSelection();
m_model->setSelected(m_pressed_row,true);
- m_anchor_row = m_pressed_row;
+ m_anchor_index = m_pressed_row;
m_select_on_release = false;
}
- m_pressed_row = INVALID_ROW;
+ m_pressed_row = INVALID_INDEX;
m_scroll_direction = NONE;
m_timer->stop();
m_scroll = false;
QWidget::mouseReleaseEvent(e);
}
-int ListWidget::rowAt(int y) const
+int ListWidget::indexAt(int y) const
{
for (int i = 0; i < qMin(m_row_count, m_model->count() - m_first); ++i)
{
if ((y >= i * (m_metrics->lineSpacing() + 2)) && (y <= (i+1) * (m_metrics->lineSpacing() + 2)))
return m_first + i;
}
- return INVALID_ROW;
+ return INVALID_INDEX;
}
void ListWidget::contextMenuEvent(QContextMenuEvent * event)
diff --git a/src/plugins/Ui/skinned/listwidget.h b/src/plugins/Ui/skinned/listwidget.h
index 57f5f4d1a..e75906662 100644
--- a/src/plugins/Ui/skinned/listwidget.h
+++ b/src/plugins/Ui/skinned/listwidget.h
@@ -95,7 +95,7 @@ protected:
void mouseReleaseEvent(QMouseEvent *);
void resizeEvent(QResizeEvent *);
void wheelEvent(QWheelEvent *);
- int rowAt(int)const;
+ int indexAt(int)const;
void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent *event);
void dragLeaveEvent(QDragLeaveEvent *);
@@ -124,7 +124,7 @@ private:
QFontMetrics *m_extra_metrics;
Skin *m_skin;
QColor m_normal, m_current, m_normal_bg, m_selected_bg;
- int m_anchor_row;
+ int m_anchor_index;
enum ScrollDirection
{