1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 09:38:11 +00:00

LibGUI: Add shortcut for inserting new line

This adds shortcut for inserting a new empty indented line
above/below current cursor position.

- <Ctrl-Return> for inserting line below.
- <Ctrl-Shift-Return> for inserting line above.
This commit is contained in:
Snow 2022-12-02 16:14:57 +08:00 committed by Sam Atkins
parent e06f9174a1
commit 2f8c7b1b30
3 changed files with 81 additions and 0 deletions

View file

@ -919,6 +919,55 @@ void RemoveTextCommand::undo()
m_document.set_all_cursors(new_cursor);
}
InsertLineCommand::InsertLineCommand(TextDocument& document, TextPosition cursor, DeprecatedString&& text, InsertPosition pos)
: TextDocumentUndoCommand(document)
, m_cursor(cursor)
, m_text(move(text))
, m_pos(pos)
{
}
void InsertLineCommand::redo()
{
size_t line_number = compute_line_number();
m_document.insert_line(line_number, make<TextDocumentLine>(m_document, m_text));
m_document.set_all_cursors(TextPosition { line_number, m_document.line(line_number).length() });
}
void InsertLineCommand::undo()
{
size_t line_number = compute_line_number();
m_document.remove_line(line_number);
m_document.set_all_cursors(m_cursor);
}
size_t InsertLineCommand::compute_line_number() const
{
if (m_pos == InsertPosition::Above)
return m_cursor.line();
if (m_pos == InsertPosition::Below)
return m_cursor.line() + 1;
VERIFY_NOT_REACHED();
}
DeprecatedString InsertLineCommand::action_text() const
{
StringBuilder action_text_builder;
action_text_builder.append("Insert Line"sv);
if (m_pos == InsertPosition::Above) {
action_text_builder.append(" (Above)"sv);
} else if (m_pos == InsertPosition::Below) {
action_text_builder.append(" (Below)"sv);
} else {
VERIFY_NOT_REACHED();
}
return action_text_builder.to_deprecated_string();
}
ReplaceAllTextCommand::ReplaceAllTextCommand(GUI::TextDocument& document, DeprecatedString const& text, GUI::TextRange const& range, DeprecatedString const& action_text)
: TextDocumentUndoCommand(document)
, m_text(text)