1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-10 03:57:35 +00:00

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. :^)
This commit is contained in:
Andreas Kling 2020-08-28 20:47:02 +02:00
parent f3e4b62be9
commit 5daa19fdab
2 changed files with 13 additions and 2 deletions

View file

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

View file

@ -29,6 +29,7 @@
#include <LibGUI/HeaderView.h> #include <LibGUI/HeaderView.h>
#include <LibGUI/Menu.h> #include <LibGUI/Menu.h>
#include <LibGUI/Model.h> #include <LibGUI/Model.h>
#include <LibGUI/ModelEditingDelegate.h>
#include <LibGUI/Painter.h> #include <LibGUI/Painter.h>
#include <LibGUI/ScrollBar.h> #include <LibGUI/ScrollBar.h>
#include <LibGUI/TableView.h> #include <LibGUI/TableView.h>
@ -171,7 +172,17 @@ void TableView::keydown_event(KeyEvent& event)
activate(cursor_index()); activate(cursor_index());
return; 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) void TableView::move_cursor(CursorMovement movement, SelectionUpdate selection_update)