Pārlūkot izejas kodu

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.
Andreas Kling 4 gadi atpakaļ
vecāks
revīzija
ece555b684
2 mainītis faili ar 17 papildinājumiem un 0 dzēšanām
  1. 16 0
      Libraries/LibGUI/IconView.cpp
  2. 1 0
      Libraries/LibGUI/IconView.h

+ 16 - 0
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;

+ 1 - 0
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;