diff options
author | Andreas Kling <kling@serenityos.org> | 2020-09-24 11:40:19 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-09-24 11:40:19 +0200 |
commit | ece555b684a6e6dc46e471ba06b669ebfbfcc160 (patch) | |
tree | 2ee60a007b4a7b86bb3b38b7ddd59a71fc979d32 | |
parent | 7d30cf71223e27db4569a11d8e1c750056650ee7 (diff) | |
download | serenity-ece555b684a6e6dc46e471ba06b669ebfbfcc160.zip |
LibGUI: Support inline editing in GUI::IconView
IconView now responds to the editing key (F2) if the view is editable.
It does feel a little bit weird to have content_rect() return the text
rect for an item, and not the whole item rect. This internal API could
probably be better.
-rw-r--r-- | Libraries/LibGUI/IconView.cpp | 16 | ||||
-rw-r--r-- | Libraries/LibGUI/IconView.h | 1 |
2 files changed, 17 insertions, 0 deletions
diff --git a/Libraries/LibGUI/IconView.cpp b/Libraries/LibGUI/IconView.cpp index 9b26ee78b1..42a7498d43 100644 --- a/Libraries/LibGUI/IconView.cpp +++ b/Libraries/LibGUI/IconView.cpp @@ -388,6 +388,14 @@ void IconView::update_item_rects(int item_index, ItemData& item_data) const item_data.text_rect.set_top(item_rect.y() + item_data.text_offset_y); } +Gfx::IntRect IconView::content_rect(const ModelIndex& index) const +{ + if (!index.is_valid()) + return {}; + auto& item_data = get_item_data(index.row()); + return item_data.text_rect; +} + void IconView::get_item_rects(int item_index, ItemData& item_data, const Gfx::Font& font) const { auto item_rect = this->item_rect(item_index); @@ -602,6 +610,14 @@ void IconView::keydown_event(KeyEvent& event) if (!m_visual_row_count || !m_visual_column_count) return; + if (event.key() == KeyCode::Key_F2) { + if (is_editable() && edit_triggers() & EditTrigger::EditKeyPressed) { + begin_editing(cursor_index()); + event.accept(); + return; + } + } + if (event.key() == KeyCode::Key_Return) { activate_selected(); return; diff --git a/Libraries/LibGUI/IconView.h b/Libraries/LibGUI/IconView.h index c4ae146e86..24f0326ca8 100644 --- a/Libraries/LibGUI/IconView.h +++ b/Libraries/LibGUI/IconView.h @@ -49,6 +49,7 @@ public: void set_model_column(int column) { m_model_column = column; } virtual ModelIndex index_at_event_position(const Gfx::IntPoint&) const override; + virtual Gfx::IntRect content_rect(const ModelIndex&) const override; virtual void select_all() override; |