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;
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 };

View file

@ -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)