GItemView: Implement up/down/left/right keyboard navigation.

This commit is contained in:
Andreas Kling 2019-03-23 04:05:58 +01:00
parent 82ca3e58b8
commit 1355d09c72
Notes: sideshowbarker 2024-07-19 14:58:05 +09:00

View file

@ -144,12 +144,41 @@ void GItemView::keydown_event(GKeyEvent& event)
{
if (!model())
return;
if (!m_visual_row_count || !m_visual_column_count)
return;
auto& model = *this->model();
if (event.key() == KeyCode::Key_Return) {
model.activate(model.selected_index());
return;
}
if (event.key() == KeyCode::Key_Up) {
GModelIndex new_index;
if (model.selected_index().is_valid())
new_index = { model.selected_index().row() - m_visual_column_count, model.selected_index().column() };
else
new_index = { 0, 0 };
if (model.is_valid(new_index)) {
model.set_selected_index(new_index);
scroll_into_view(new_index, Orientation::Vertical);
update();
}
return;
}
if (event.key() == KeyCode::Key_Down) {
GModelIndex new_index;
if (model.selected_index().is_valid())
new_index = { model.selected_index().row() + m_visual_column_count, model.selected_index().column() };
else
new_index = { 0, 0 };
if (model.is_valid(new_index)) {
model.set_selected_index(new_index);
scroll_into_view(new_index, Orientation::Vertical);
update();
}
return;
}
if (event.key() == KeyCode::Key_Left) {
GModelIndex new_index;
if (model.selected_index().is_valid())
new_index = { model.selected_index().row() - 1, model.selected_index().column() };
@ -162,7 +191,7 @@ void GItemView::keydown_event(GKeyEvent& event)
}
return;
}
if (event.key() == KeyCode::Key_Down) {
if (event.key() == KeyCode::Key_Right) {
GModelIndex new_index;
if (model.selected_index().is_valid())
new_index = { model.selected_index().row() + 1, model.selected_index().column() };