From 45c5f68d8a10f37c7a5e3fe839caf8dbe346e585 Mon Sep 17 00:00:00 2001 From: huttongrabiel Date: Wed, 18 May 2022 11:33:33 -0700 Subject: [PATCH] LibGUI: Add casefold_selection function to choose case conversion Allows the passing of a Casing enum, Lowercase or Uppercase, and converts the selected text accordingly. If Lowercase is passed as the parameter, it converts the selected text to lowercase. If Uppercase is passed as the parameter, it converts the selected text to uppercase. --- Userland/Libraries/LibGUI/VimEditingEngine.cpp | 15 +++++++++++++++ Userland/Libraries/LibGUI/VimEditingEngine.h | 7 +++++++ 2 files changed, 22 insertions(+) diff --git a/Userland/Libraries/LibGUI/VimEditingEngine.cpp b/Userland/Libraries/LibGUI/VimEditingEngine.cpp index a12887a036..3d586f13a2 100644 --- a/Userland/Libraries/LibGUI/VimEditingEngine.cpp +++ b/Userland/Libraries/LibGUI/VimEditingEngine.cpp @@ -1411,4 +1411,19 @@ void VimEditingEngine::move_to_next_empty_lines_block() m_editor->set_cursor(new_cursor); }; +void VimEditingEngine::casefold_selection(Casing casing) +{ + VERIFY(!m_editor.is_null()); + VERIFY(m_editor->has_selection()); + + switch (casing) { + case Casing::Uppercase: + m_editor->insert_at_cursor_or_replace_selection(m_editor->selected_text().to_uppercase()); + return; + case Casing::Lowercase: + m_editor->insert_at_cursor_or_replace_selection(m_editor->selected_text().to_lowercase()); + return; + } +} + } diff --git a/Userland/Libraries/LibGUI/VimEditingEngine.h b/Userland/Libraries/LibGUI/VimEditingEngine.h index b7216d0892..d9e956524a 100644 --- a/Userland/Libraries/LibGUI/VimEditingEngine.h +++ b/Userland/Libraries/LibGUI/VimEditingEngine.h @@ -160,6 +160,11 @@ private: Selection }; + enum class Casing { + Uppercase, + Lowercase + }; + VimMode m_vim_mode { VimMode::Normal }; VimMotion m_motion; @@ -188,6 +193,8 @@ private: bool on_key_in_normal_mode(KeyEvent const& event); bool on_key_in_visual_mode(KeyEvent const& event); + void casefold_selection(Casing); + virtual EngineType engine_type() const override { return EngineType::Vim; } };