mirror of
https://github.com/RGBCube/serenity
synced 2025-07-23 20:57:41 +00:00
LibGUI: Show command name in GUI::TextEditor undo/redo action text
We can now show things like "Undo Insert Text" and "Redo Remove Text" instead of just "Undo" and "Redo" in menu items. Pretty neat! :^)
This commit is contained in:
parent
c670d8c56d
commit
ce90d87eb6
3 changed files with 27 additions and 0 deletions
|
@ -719,6 +719,11 @@ InsertTextCommand::InsertTextCommand(TextDocument& document, const String& text,
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String InsertTextCommand::action_text() const
|
||||||
|
{
|
||||||
|
return "Insert Text";
|
||||||
|
}
|
||||||
|
|
||||||
bool InsertTextCommand::merge_with(GUI::Command const& other)
|
bool InsertTextCommand::merge_with(GUI::Command const& other)
|
||||||
{
|
{
|
||||||
if (!is<InsertTextCommand>(other))
|
if (!is<InsertTextCommand>(other))
|
||||||
|
@ -804,6 +809,11 @@ RemoveTextCommand::RemoveTextCommand(TextDocument& document, const String& text,
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String RemoveTextCommand::action_text() const
|
||||||
|
{
|
||||||
|
return "Remove Text";
|
||||||
|
}
|
||||||
|
|
||||||
bool RemoveTextCommand::merge_with(GUI::Command const& other)
|
bool RemoveTextCommand::merge_with(GUI::Command const& other)
|
||||||
{
|
{
|
||||||
if (!is<RemoveTextCommand>(other))
|
if (!is<RemoveTextCommand>(other))
|
||||||
|
|
|
@ -113,6 +113,8 @@ public:
|
||||||
void undo();
|
void undo();
|
||||||
void redo();
|
void redo();
|
||||||
|
|
||||||
|
UndoStack const& undo_stack() const { return m_undo_stack; }
|
||||||
|
|
||||||
void notify_did_change();
|
void notify_did_change();
|
||||||
void set_all_cursors(const TextPosition&);
|
void set_all_cursors(const TextPosition&);
|
||||||
|
|
||||||
|
@ -207,6 +209,7 @@ public:
|
||||||
virtual void undo() override;
|
virtual void undo() override;
|
||||||
virtual void redo() override;
|
virtual void redo() override;
|
||||||
virtual bool merge_with(GUI::Command const&) override;
|
virtual bool merge_with(GUI::Command const&) override;
|
||||||
|
virtual String action_text() const override;
|
||||||
const String& text() const { return m_text; }
|
const String& text() const { return m_text; }
|
||||||
const TextRange& range() const { return m_range; }
|
const TextRange& range() const { return m_range; }
|
||||||
|
|
||||||
|
@ -222,6 +225,7 @@ public:
|
||||||
virtual void redo() override;
|
virtual void redo() override;
|
||||||
const TextRange& range() const { return m_range; }
|
const TextRange& range() const { return m_range; }
|
||||||
virtual bool merge_with(GUI::Command const&) override;
|
virtual bool merge_with(GUI::Command const&) override;
|
||||||
|
virtual String action_text() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
String m_text;
|
String m_text;
|
||||||
|
|
|
@ -1636,9 +1636,22 @@ void TextEditor::document_did_change()
|
||||||
|
|
||||||
void TextEditor::document_did_update_undo_stack()
|
void TextEditor::document_did_update_undo_stack()
|
||||||
{
|
{
|
||||||
|
auto make_action_text = [](auto prefix, auto suffix) {
|
||||||
|
StringBuilder builder;
|
||||||
|
builder.append(prefix);
|
||||||
|
if (suffix.has_value()) {
|
||||||
|
builder.append(' ');
|
||||||
|
builder.append(suffix.value());
|
||||||
|
}
|
||||||
|
return builder.to_string();
|
||||||
|
};
|
||||||
|
|
||||||
m_undo_action->set_enabled(can_undo());
|
m_undo_action->set_enabled(can_undo());
|
||||||
m_redo_action->set_enabled(can_redo());
|
m_redo_action->set_enabled(can_redo());
|
||||||
|
|
||||||
|
m_undo_action->set_text(make_action_text("&Undo", document().undo_stack().undo_action_text()));
|
||||||
|
m_redo_action->set_text(make_action_text("&Redo", document().undo_stack().redo_action_text()));
|
||||||
|
|
||||||
// FIXME: This is currently firing more often than it should.
|
// FIXME: This is currently firing more often than it should.
|
||||||
// Ideally we'd only send this out when the undo stack modified state actually changes.
|
// Ideally we'd only send this out when the undo stack modified state actually changes.
|
||||||
if (on_modified_change)
|
if (on_modified_change)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue