From 12dfeb984504442b4e41e857e05d4bfeffa80e13 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 28 Aug 2020 20:50:12 +0200 Subject: [PATCH] LibGUI: Allow rollback of model editing delegate input In the StringModelEditingDelegate convenience class, we simply hook up the escape key to editor rollback. This means you can cancel an ongoing cell edit by pressing escape. :^) --- Libraries/LibGUI/AbstractView.cpp | 4 ++++ Libraries/LibGUI/ModelEditingDelegate.h | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/Libraries/LibGUI/AbstractView.cpp b/Libraries/LibGUI/AbstractView.cpp index 3c8e455cb2..db2146befd 100644 --- a/Libraries/LibGUI/AbstractView.cpp +++ b/Libraries/LibGUI/AbstractView.cpp @@ -147,6 +147,10 @@ void AbstractView::begin_editing(const ModelIndex& index) model()->set_data(m_edit_index, m_editing_delegate->value()); stop_editing(); }; + m_editing_delegate->on_rollback = [this] { + ASSERT(model()); + stop_editing(); + }; } void AbstractView::stop_editing() diff --git a/Libraries/LibGUI/ModelEditingDelegate.h b/Libraries/LibGUI/ModelEditingDelegate.h index 4d270f64a9..91904ef4bc 100644 --- a/Libraries/LibGUI/ModelEditingDelegate.h +++ b/Libraries/LibGUI/ModelEditingDelegate.h @@ -49,6 +49,7 @@ public: const Widget* widget() const { return m_widget; } Function on_commit; + Function on_rollback; virtual Variant value() const = 0; virtual void set_value(const Variant&) = 0; @@ -64,6 +65,11 @@ protected: if (on_commit) on_commit(); } + void rollback() + { + if (on_rollback) + on_rollback(); + } const ModelIndex& index() const { return m_index; } @@ -84,6 +90,9 @@ public: textbox->on_return_pressed = [this] { commit(); }; + textbox->on_escape_pressed = [this] { + rollback(); + }; return textbox; } virtual Variant value() const override { return static_cast(widget())->text(); }