瀏覽代碼

LibGUI: Implement a basic "any key pressed" edit trigger for TableView

This trigger allows you to initiate cell editing by simply starting to
type something into the cell. :^)
Andreas Kling 4 年之前
父節點
當前提交
5daa19fdab
共有 2 個文件被更改,包括 13 次插入2 次删除
  1. 1 1
      Libraries/LibGUI/AbstractView.h
  2. 12 1
      Libraries/LibGUI/TableView.cpp

+ 1 - 1
Libraries/LibGUI/AbstractView.h

@@ -144,6 +144,7 @@ protected:
     ModelIndex m_edit_index;
     RefPtr<Widget> m_edit_widget;
     Gfx::IntRect m_edit_widget_content_rect;
+    OwnPtr<ModelEditingDelegate> m_editing_delegate;
 
     Gfx::IntPoint m_left_mousedown_position;
     bool m_might_drag { false };
@@ -156,7 +157,6 @@ protected:
 
 private:
     RefPtr<Model> m_model;
-    OwnPtr<ModelEditingDelegate> m_editing_delegate;
     ModelSelection m_selection;
     ModelIndex m_cursor_index;
     unsigned m_edit_triggers { EditTrigger::DoubleClicked | EditTrigger::EditKeyPressed };

+ 12 - 1
Libraries/LibGUI/TableView.cpp

@@ -29,6 +29,7 @@
 #include <LibGUI/HeaderView.h>
 #include <LibGUI/Menu.h>
 #include <LibGUI/Model.h>
+#include <LibGUI/ModelEditingDelegate.h>
 #include <LibGUI/Painter.h>
 #include <LibGUI/ScrollBar.h>
 #include <LibGUI/TableView.h>
@@ -171,7 +172,17 @@ void TableView::keydown_event(KeyEvent& event)
             activate(cursor_index());
         return;
     }
-    return AbstractTableView::keydown_event(event);
+
+    AbstractTableView::keydown_event(event);
+
+    if (event.is_accepted())
+        return;
+
+    if (is_editable() && edit_triggers() & EditTrigger::AnyKeyPressed && !event.text().is_empty()) {
+        begin_editing(cursor_index());
+        if (m_editing_delegate)
+            m_editing_delegate->set_value(event.text());
+    }
 }
 
 void TableView::move_cursor(CursorMovement movement, SelectionUpdate selection_update)