aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Ui/skinned/keyboardmanager.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2013-08-30 07:21:23 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2013-08-30 07:21:23 +0000
commitadba90cee9e3a72367f4df24c62cc38b35d5b9c3 (patch)
treeef3e6637b176a557e967e245f4f128a46f278b15 /src/plugins/Ui/skinned/keyboardmanager.cpp
parent97cc9509c83dbc5f6ea81e59a61fa9adc3680906 (diff)
downloadqmmp-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
Diffstat (limited to 'src/plugins/Ui/skinned/keyboardmanager.cpp')
-rw-r--r--src/plugins/Ui/skinned/keyboardmanager.cpp215
1 files changed, 91 insertions, 124 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);
}
}