diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2013-08-30 07:21:23 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2013-08-30 07:21:23 +0000 |
| commit | adba90cee9e3a72367f4df24c62cc38b35d5b9c3 (patch) | |
| tree | ef3e6637b176a557e967e245f4f128a46f278b15 | |
| parent | 97cc9509c83dbc5f6ea81e59a61fa9adc3680906 (diff) | |
| download | qmmp-adba90cee9e3a72367f4df24c62cc38b35d5b9c3.tar.gz qmmp-adba90cee9e3a72367f4df24c62cc38b35d5b9c3.tar.bz2 qmmp-adba90cee9e3a72367f4df24c62cc38b35d5b9c3.zip | |
skinned: improved keyboard manager
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@3675 90c681e8-e032-0410-971d-27865f9a5e38
| -rw-r--r-- | src/plugins/Ui/skinned/keyboardmanager.cpp | 215 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/keyboardmanager.h | 55 |
2 files changed, 121 insertions, 149 deletions
diff --git a/src/plugins/Ui/skinned/keyboardmanager.cpp b/src/plugins/Ui/skinned/keyboardmanager.cpp index be7a0f458..a7685011b 100644 --- a/src/plugins/Ui/skinned/keyboardmanager.cpp +++ b/src/plugins/Ui/skinned/keyboardmanager.cpp @@ -73,161 +73,128 @@ void KeyboardManager::keyUp (QKeyEvent * ke) { QList<int> rows = m_listWidget->model()->selectedIndexes(); - if (rows.count() > 0) + if(rows.isEmpty()) { - if(rows.first() == 0 && rows.count() == 1) - return; + m_listWidget->model()->setSelected(m_listWidget->firstVisibleRow(), true); + m_listWidget->setAnchorRow(m_listWidget->firstVisibleRow()); + return; + } - if (! (ke->modifiers() & Qt::ShiftModifier || ke->modifiers() & Qt::AltModifier)) - { - m_listWidget->model()->clearSelection(); - m_listWidget->setAnchorRow(-1); - } + if (! (ke->modifiers() & Qt::ShiftModifier || ke->modifiers() & Qt::AltModifier)) + { + m_listWidget->model()->clearSelection(); + m_listWidget->setAnchorRow(-1); + } + + int first_visible = m_listWidget->firstVisibleRow(); + int last_visible = m_listWidget->visibleRows() + first_visible - 1; + + int s = SELECT_NEXT; + + if(rows.last() < first_visible) + s = SELECT_TOP; + else if(rows.first() > last_visible) + s = SELECT_BOTTOM; + + if (ke->modifiers() == Qt::AltModifier) + { + if(rows.first() == 0) + return; + m_listWidget->model()->moveItems (rows.first(), rows.first() - 1); + m_listWidget->setAnchorRow (rows.first() - 1); + } - bool select_top = false; - int first_visible = m_listWidget->firstVisibleRow(); - int last_visible = m_listWidget->visibleRows() + first_visible - 1; - foreach (int i, rows) + else + { + if(s == SELECT_TOP) { - if (i > last_visible || i < first_visible) - { - select_top = true; - break; - } + m_listWidget->model()->setSelected (first_visible, true); + m_listWidget->setAnchorRow(first_visible); } - - if (!select_top || ke->modifiers() & Qt::ShiftModifier || ke->modifiers() & Qt::AltModifier) + else if(s == SELECT_BOTTOM) { - if (ke->modifiers() == Qt::AltModifier) - { - if(rows.first() == 0) - return; - m_listWidget->model()->moveItems (rows.first(),rows.first() - 1); - m_listWidget->setAnchorRow (m_listWidget->anchorRow() - 1); - } - else - { - if (rows.last() > m_listWidget->anchorRow() && ke->modifiers() & Qt::ShiftModifier) - { - m_listWidget->model()->setSelected (rows.last(),false); - } - else if (rows.first() > 0) - { - m_listWidget->model()->setSelected (rows.first() - 1,true); - } - else - { - m_listWidget->model()->setSelected (rows.first(),true); - if(m_listWidget->anchorRow() == -1) - m_listWidget->setAnchorRow(rows.first()); - } - - if (! (ke->modifiers() & Qt::ShiftModifier) && rows.first() > 0) - m_listWidget->setAnchorRow (rows.first() - 1); - } + m_listWidget->model()->setSelected (last_visible, true); + m_listWidget->setAnchorRow(last_visible); } - else + else if(rows.first() == 0) { - m_listWidget->model()->setSelected (m_listWidget->firstVisibleRow(),true); - m_listWidget->setAnchorRow(m_listWidget->firstVisibleRow()); + m_listWidget->model()->setSelected (rows.first(), true); + m_listWidget->setAnchorRow(rows.first()); } - - rows = m_listWidget->model()->selectedIndexes(); - - if (rows.first() < m_listWidget->firstVisibleRow() && m_listWidget->firstVisibleRow() > 0) + else { - int r = rows.last() > m_listWidget->anchorRow() ? rows.last(): rows.first(); - if(ke->modifiers() & Qt::ShiftModifier && (r >= m_listWidget->firstVisibleRow())) - ; - else - m_listWidget->scroll (m_listWidget->firstVisibleRow() - 1); + m_listWidget->model()->setSelected (rows.first() - 1, true); + m_listWidget->setAnchorRow(rows.first() - 1); } } - else + + if(m_listWidget->anchorRow() < first_visible) { - //if(m_listWidget->getAnchorRow() == -1) - m_listWidget->setAnchorRow(m_listWidget->firstVisibleRow()); - m_listWidget->model()->setSelected (m_listWidget->firstVisibleRow(),true); + m_listWidget->scroll (m_listWidget->firstVisibleRow() - 1); } } void KeyboardManager::keyDown (QKeyEvent * ke) { QList<int> rows = m_listWidget->model()->selectedIndexes(); - //qWarning("count: %d",rows.count()); - if (rows.count() > 0) + + if(rows.isEmpty()) { - if (! (ke->modifiers() & Qt::ShiftModifier || ke->modifiers() & Qt::AltModifier)) - { - m_listWidget->model()->clearSelection(); - m_listWidget->setAnchorRow(-1); - } + m_listWidget->model()->setSelected(m_listWidget->firstVisibleRow(), true); + m_listWidget->setAnchorRow(m_listWidget->firstVisibleRow()); + return; + } - bool select_top = false; - int first_visible = m_listWidget->firstVisibleRow(); - int last_visible = m_listWidget->visibleRows() + first_visible - 1; - foreach (int i, rows) + if (! (ke->modifiers() & Qt::ShiftModifier || ke->modifiers() & Qt::AltModifier)) + { + m_listWidget->model()->clearSelection(); + m_listWidget->setAnchorRow(-1); + } + + int first_visible = m_listWidget->firstVisibleRow(); + int last_visible = m_listWidget->visibleRows() + first_visible - 1; + + int s = SELECT_NEXT; + + if(rows.last() < first_visible) + s = SELECT_TOP; + else if(rows.first() > last_visible) + s = SELECT_BOTTOM; + + if (ke->modifiers() == Qt::AltModifier) + { + if(rows.last() == m_listWidget->model()->count() - 1) + return; + m_listWidget->model()->moveItems (rows.last(), rows.last() + 1); + m_listWidget->setAnchorRow (rows.last() + 1); + } + else + { + if(s == SELECT_TOP) { - if (i > last_visible || i < first_visible) - { - select_top = true; - break; - } + m_listWidget->model()->setSelected (first_visible, true); + m_listWidget->setAnchorRow(first_visible); } - - if (!select_top || ke->modifiers() & Qt::ShiftModifier || ke->modifiers() & Qt::AltModifier) + else if(s == SELECT_BOTTOM) { - if (ke->modifiers() == Qt::AltModifier) - { - if(rows.last() == m_listWidget->model()->count() - 1) - return; - m_listWidget->model()->moveItems (rows.last(),rows.last() + 1); - m_listWidget->setAnchorRow (m_listWidget->anchorRow() + 1); - } - else - { - //qWarning("list_widget %d",m_listWidget->getAnchorRow()); - //qWarning("model count: %d rows.last(): %d",m_listWidget->model()->count(),rows.last()); - if (rows.first() < m_listWidget->anchorRow() && ke->modifiers() & Qt::ShiftModifier) - m_listWidget->model()->setSelected (rows.first(),false); - else if (rows.last() < m_listWidget->model()->count() - 1) - { - m_listWidget->model()->setSelected (rows.last() + 1,true); - } - else - { - m_listWidget->model()->setSelected (rows.last(),true); - if(m_listWidget->anchorRow() == -1) - m_listWidget->setAnchorRow(rows.last()); - } - - if (! (ke->modifiers() & Qt::ShiftModifier) && rows.last() < m_listWidget->model()->count() - 1) - m_listWidget->setAnchorRow (rows.last() + 1); - } + m_listWidget->model()->setSelected (last_visible, true); + m_listWidget->setAnchorRow(last_visible); } - else + else if(rows.last() == m_listWidget->model()->count() - 1) { - m_listWidget->model()->setSelected (m_listWidget->firstVisibleRow(),true); - m_listWidget->setAnchorRow(m_listWidget->firstVisibleRow()); + m_listWidget->model()->setSelected (rows.last(), true); + m_listWidget->setAnchorRow(rows.last()); } - - rows = m_listWidget->model()->selectedIndexes(); - - if (!rows.isEmpty() && rows.last() >= m_listWidget->visibleRows() + m_listWidget->firstVisibleRow()) + else { - int r = rows.first() < m_listWidget->anchorRow() ? rows.first(): rows.last(); - if(ke->modifiers() & Qt::ShiftModifier && - (r < m_listWidget->firstVisibleRow() + m_listWidget->visibleRows())) - ; - else - m_listWidget->scroll (m_listWidget->firstVisibleRow() + 1); + m_listWidget->model()->setSelected (rows.last() + 1, true); + m_listWidget->setAnchorRow(rows.last() + 1); } } - else + + if(m_listWidget->anchorRow() > last_visible) { - m_listWidget->model()->setSelected (m_listWidget->firstVisibleRow(),true); - //if(m_listWidget->getAnchorRow() == -1) - m_listWidget->setAnchorRow(m_listWidget->firstVisibleRow()); + m_listWidget->scroll (m_listWidget->firstVisibleRow() + 1); } } diff --git a/src/plugins/Ui/skinned/keyboardmanager.h b/src/plugins/Ui/skinned/keyboardmanager.h index c9ccc13b2..1df393e59 100644 --- a/src/plugins/Ui/skinned/keyboardmanager.h +++ b/src/plugins/Ui/skinned/keyboardmanager.h @@ -33,34 +33,39 @@ class QKeyEvent; */ class KeyboardManager { - public: - /*! - * Constructor. Takes \b PlayList object as an argument. - */ - KeyboardManager (ListWidget *l); +public: + /*! + * Constructor. Takes \b PlayList object as an argument. + */ + KeyboardManager (ListWidget *l); + /*! + * Handles key press events from \b PlayList object. Returns \b true + * if the key was handled, otherwise \b false. + */ + bool handleKeyPress (QKeyEvent*); + /*! + * Handles key release events from \b PlayList object. Returns \b true + * if the key was handled, otherwise \b false. + */ + bool handleKeyRelease (QKeyEvent*); - /*! - * Handles key press events from \b PlayList object. Returns \b true - * if the key was handled, otherwise \b false. - */ - bool handleKeyPress (QKeyEvent*); +private: + void keyUp (QKeyEvent* ke); + void keyDown (QKeyEvent* ke); + void keyPgUp (QKeyEvent* ke); + void keyPgDown (QKeyEvent* ke); + void keyEnter (QKeyEvent* ke); + void keyHome(QKeyEvent* ke); + void keyEnd(QKeyEvent* ke); - /*! - * Handles key release events from \b PlayList object. Returns \b true - * if the key was handled, otherwise \b false. - */ - bool handleKeyRelease (QKeyEvent*); + ListWidget* m_listWidget; - protected: - void keyUp (QKeyEvent* ke); - void keyDown (QKeyEvent* ke); - void keyPgUp (QKeyEvent* ke); - void keyPgDown (QKeyEvent* ke); - void keyEnter (QKeyEvent* ke); - void keyHome(QKeyEvent* ke); - void keyEnd(QKeyEvent* ke); - private: - ListWidget* m_listWidget; + enum SelectMode + { + SELECT_TOP = 0, + SELECT_BOTTOM, + SELECT_NEXT + }; }; #endif |
