diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2014-07-14 12:21:43 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2014-07-14 12:21:43 +0000 |
| commit | d02e23f839bf878fc63910af1a83b62cf687ad74 (patch) | |
| tree | 73c554436d104282fe6438a2c3dea19e63a0f37a /src/plugins/Ui/skinned/keyboardmanager.cpp | |
| parent | 73cc156717ff95676b3a4b21501c9ec48a104c9e (diff) | |
| download | qmmp-d02e23f839bf878fc63910af1a83b62cf687ad74.tar.gz qmmp-d02e23f839bf878fc63910af1a83b62cf687ad74.tar.bz2 qmmp-d02e23f839bf878fc63910af1a83b62cf687ad74.zip | |
skinned: fixed selection behaviour
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@4364 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Ui/skinned/keyboardmanager.cpp')
| -rw-r--r-- | src/plugins/Ui/skinned/keyboardmanager.cpp | 49 |
1 files changed, 33 insertions, 16 deletions
diff --git a/src/plugins/Ui/skinned/keyboardmanager.cpp b/src/plugins/Ui/skinned/keyboardmanager.cpp index 9d015074c..e1fc3f87f 100644 --- a/src/plugins/Ui/skinned/keyboardmanager.cpp +++ b/src/plugins/Ui/skinned/keyboardmanager.cpp @@ -80,7 +80,9 @@ void KeyboardManager::keyUp (QKeyEvent * ke) return; } - if (! (ke->modifiers() & Qt::ShiftModifier || ke->modifiers() & Qt::AltModifier)) + if (! (ke->modifiers() & Qt::ShiftModifier || + ke->modifiers() & Qt::AltModifier || + ke->modifiers() & Qt::ControlModifier)) { m_listWidget->model()->clearSelection(); m_listWidget->setAnchorIndex(-1); @@ -103,7 +105,11 @@ void KeyboardManager::keyUp (QKeyEvent * ke) m_listWidget->model()->moveItems (rows.first(), rows.first() - 1); m_listWidget->setAnchorIndex (rows.first() - 1); } - + else if(ke->modifiers() == Qt::ControlModifier) + { + m_listWidget->setAnchorIndex (qMax(m_listWidget->anchorIndex() - 1, + 0)); + } else { if(s == SELECT_TOP) @@ -121,11 +127,15 @@ void KeyboardManager::keyUp (QKeyEvent * ke) m_listWidget->model()->setSelected (rows.first(), true); m_listWidget->setAnchorIndex(rows.first()); } - else + else if(rows.contains(m_listWidget->anchorIndex()) || m_listWidget->anchorIndex() < 0) { m_listWidget->model()->setSelected (rows.first() - 1, true); m_listWidget->setAnchorIndex(rows.first() - 1); } + else if(m_listWidget->anchorIndex() >= 0) + { + m_listWidget->model()->setSelected (m_listWidget->anchorIndex(), true); + } } if(m_listWidget->anchorIndex() < first_visible) @@ -145,7 +155,9 @@ void KeyboardManager::keyDown (QKeyEvent * ke) return; } - if (! (ke->modifiers() & Qt::ShiftModifier || ke->modifiers() & Qt::AltModifier)) + if (!(ke->modifiers() & Qt::ShiftModifier || + ke->modifiers() & Qt::AltModifier || + ke->modifiers() & Qt::ControlModifier)) { m_listWidget->model()->clearSelection(); m_listWidget->setAnchorIndex(-1); @@ -168,6 +180,11 @@ void KeyboardManager::keyDown (QKeyEvent * ke) m_listWidget->model()->moveItems (rows.last(), rows.last() + 1); m_listWidget->setAnchorIndex (rows.last() + 1); } + else if(ke->modifiers() == Qt::ControlModifier) + { + m_listWidget->setAnchorIndex (qMin(m_listWidget->anchorIndex() + 1, + m_listWidget->model()->count() - 1)); + } else { if(s == SELECT_TOP) @@ -185,11 +202,15 @@ void KeyboardManager::keyDown (QKeyEvent * ke) m_listWidget->model()->setSelected (rows.last(), true); m_listWidget->setAnchorIndex(rows.last()); } - else + else if(rows.contains(m_listWidget->anchorIndex()) || m_listWidget->anchorIndex() < 0) { m_listWidget->model()->setSelected (rows.last() + 1, true); m_listWidget->setAnchorIndex(rows.last() + 1); } + else if(m_listWidget->anchorIndex() >= 0) + { + m_listWidget->model()->setSelected (m_listWidget->anchorIndex(), true); + } } if(m_listWidget->anchorIndex() > last_visible) @@ -202,7 +223,7 @@ void KeyboardManager::keyPgUp (QKeyEvent *) { int page_size = m_listWidget->visibleRows(); int first = m_listWidget->firstVisibleIndex(); - int offset = (first - page_size >= 0) ? first - page_size:0; + int offset = qMax(first - page_size, 0); m_listWidget->scroll (offset); m_listWidget->model()->clearSelection(); @@ -217,9 +238,7 @@ void KeyboardManager::keyPgDown (QKeyEvent *) { int page_size = m_listWidget->visibleRows(); int first = m_listWidget->firstVisibleIndex(); - int offset = (first + page_size < m_listWidget->model()->count()) ? - first + page_size : m_listWidget->model()->count() - 1; - + int offset = qMin(first + page_size, m_listWidget->model()->count() - 1); m_listWidget->scroll (offset); m_listWidget->model()->clearSelection(); @@ -232,10 +251,10 @@ void KeyboardManager::keyPgDown (QKeyEvent *) void KeyboardManager::keyEnter (QKeyEvent *) { - QList<int> rows = m_listWidget->model()->selectedIndexes(); - if (rows.count() > 0) + QList<int> indexes = m_listWidget->model()->selectedIndexes(); + if (indexes.count() > 0) { - m_listWidget->model()->setCurrent (rows.first()); + m_listWidget->model()->setCurrent (indexes.first()); MediaPlayer::instance()->stop(); PlayListManager::instance()->activatePlayList(m_listWidget->model()); MediaPlayer::instance()->play(); @@ -260,10 +279,8 @@ void KeyboardManager::keyHome(QKeyEvent *ke) void KeyboardManager::keyEnd(QKeyEvent *ke) { - int page_size = m_listWidget->visibleRows(); - int scroll_to = m_listWidget->model()->count() - page_size; - if(scroll_to >= 0) - m_listWidget->scroll(scroll_to); + int scroll_to = qMax(m_listWidget->model()->count() - m_listWidget->visibleRows(), 0); + m_listWidget->scroll(scroll_to); if(ke->modifiers() & Qt::ShiftModifier) { for(int i = m_listWidget->anchorIndex(); i < m_listWidget->model()->count(); ++i) |
