mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 04:58:13 +00:00
GTreeView: Support navigating the tree with the up/down keys.
This commit is contained in:
parent
6673284b06
commit
b797458962
2 changed files with 41 additions and 0 deletions
|
@ -242,6 +242,7 @@ void GTreeView::did_update_selection()
|
||||||
}
|
}
|
||||||
if (opened_any)
|
if (opened_any)
|
||||||
update_content_size();
|
update_content_size();
|
||||||
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GTreeView::update_content_size()
|
void GTreeView::update_content_size()
|
||||||
|
@ -255,3 +256,42 @@ void GTreeView::update_content_size()
|
||||||
});
|
});
|
||||||
set_content_size({ width, height });
|
set_content_size({ width, height });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GTreeView::keydown_event(GKeyEvent& event)
|
||||||
|
{
|
||||||
|
if (!model())
|
||||||
|
return;
|
||||||
|
auto cursor_index = model()->selected_index();
|
||||||
|
if (event.key() == KeyCode::Key_Up) {
|
||||||
|
GModelIndex previous_index;
|
||||||
|
GModelIndex found_index;
|
||||||
|
traverse_in_paint_order([&] (const GModelIndex& index, const Rect&, const Rect&, int) {
|
||||||
|
if (index == cursor_index) {
|
||||||
|
found_index = previous_index;
|
||||||
|
return IterationDecision::Abort;
|
||||||
|
}
|
||||||
|
previous_index = index;
|
||||||
|
return IterationDecision::Continue;
|
||||||
|
});
|
||||||
|
if (found_index.is_valid()) {
|
||||||
|
model()->set_selected_index(found_index);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (event.key() == KeyCode::Key_Down) {
|
||||||
|
GModelIndex previous_index;
|
||||||
|
GModelIndex found_index;
|
||||||
|
traverse_in_paint_order([&] (const GModelIndex& index, const Rect&, const Rect&, int) {
|
||||||
|
if (previous_index == cursor_index) {
|
||||||
|
found_index = index;
|
||||||
|
return IterationDecision::Abort;
|
||||||
|
}
|
||||||
|
previous_index = index;
|
||||||
|
return IterationDecision::Continue;
|
||||||
|
});
|
||||||
|
if (found_index.is_valid())
|
||||||
|
model()->set_selected_index(found_index);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@ public:
|
||||||
protected:
|
protected:
|
||||||
virtual void paint_event(GPaintEvent&) override;
|
virtual void paint_event(GPaintEvent&) override;
|
||||||
virtual void mousedown_event(GMouseEvent&) override;
|
virtual void mousedown_event(GMouseEvent&) override;
|
||||||
|
virtual void keydown_event(GKeyEvent&) override;
|
||||||
virtual void did_update_selection() override;
|
virtual void did_update_selection() override;
|
||||||
virtual void did_update_model() override;
|
virtual void did_update_model() override;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue