feat: Improve left and right cursor navigation in Instances

Signed-off-by: Edgars Cirulis <edgarsciruliss@gmail.com>
This commit is contained in:
Edgars Cirulis 2024-08-26 01:34:31 +03:00
parent 23c69e7f94
commit 630df29010
No known key found for this signature in database
GPG Key ID: 5BE6511FFBB39F10

View File

@ -848,7 +848,7 @@ QRegion InstanceView::visualRegionForSelection(const QItemSelection& selection)
return region;
}
QModelIndex InstanceView::moveCursor(QAbstractItemView::CursorAction cursorAction, [[maybe_unused]] Qt::KeyboardModifiers modifiers)
QModelIndex InstanceView::moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers)
{
auto current = currentIndex();
if (!current.isValid()) {
@ -865,6 +865,7 @@ QModelIndex InstanceView::moveCursor(QAbstractItemView::CursorAction cursorActio
if (m_currentCursorColumn < 0) {
m_currentCursorColumn = column;
}
// Handle different movement actions.
switch (cursorAction) {
case MoveUp: {
if (row == 0) {
@ -925,16 +926,47 @@ QModelIndex InstanceView::moveCursor(QAbstractItemView::CursorAction cursorActio
if (column > 0) {
m_currentCursorColumn = column - 1;
return cat->rows[row][column - 1];
} else if (row > 0) {
row -= 1;
int newRowSize = cat->rows[row].size();
m_currentCursorColumn = newRowSize - 1;
return cat->rows[row][m_currentCursorColumn];
} else {
int prevGroupIndex = group_index - 1;
while (prevGroupIndex >= 0) {
auto prevGroup = m_groups[prevGroupIndex];
if (prevGroup->collapsed) {
prevGroupIndex--;
continue;
}
int lastRow = prevGroup->numRows() - 1;
int lastCol = prevGroup->rows[lastRow].size() - 1;
m_currentCursorColumn = lastCol;
return prevGroup->rows[lastRow][lastCol];
}
}
// TODO: moving to previous line
return current;
}
case MoveRight: {
if (column < cat->rows[row].size() - 1) {
m_currentCursorColumn = column + 1;
return cat->rows[row][column + 1];
} else if (row < cat->rows.size() - 1) {
row += 1;
m_currentCursorColumn = 0;
return cat->rows[row][m_currentCursorColumn];
} else {
int nextGroupIndex = group_index + 1;
while (nextGroupIndex < m_groups.size()) {
auto nextGroup = m_groups[nextGroupIndex];
if (nextGroup->collapsed) {
nextGroupIndex++;
continue;
}
m_currentCursorColumn = 0;
return nextGroup->rows[0][0];
}
}
// TODO: moving to next line
return current;
}
case MoveHome: {
@ -947,6 +979,7 @@ QModelIndex InstanceView::moveCursor(QAbstractItemView::CursorAction cursorActio
return cat->rows[row][last];
}
default:
// For unsupported cursor actions, return the current index.
break;
}
return current;