aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/Ui/skinned/keyboardmanager.cpp215
-rw-r--r--src/plugins/Ui/skinned/keyboardmanager.h55
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