summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibGUI/EditingEngine.h
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Libraries/LibGUI/EditingEngine.h')
-rw-r--r--Userland/Libraries/LibGUI/EditingEngine.h25
1 files changed, 23 insertions, 2 deletions
diff --git a/Userland/Libraries/LibGUI/EditingEngine.h b/Userland/Libraries/LibGUI/EditingEngine.h
index 13c71a3dca..d6dacb1205 100644
--- a/Userland/Libraries/LibGUI/EditingEngine.h
+++ b/Userland/Libraries/LibGUI/EditingEngine.h
@@ -22,6 +22,8 @@ enum EngineType {
Vim,
};
+class MoveLineUpOrDownCommand;
+
class EditingEngine {
AK_MAKE_NONCOPYABLE(EditingEngine);
AK_MAKE_NONMOVABLE(EditingEngine);
@@ -45,6 +47,8 @@ public:
bool is_regular() const { return engine_type() == EngineType::Regular; }
bool is_vim() const { return engine_type() == EngineType::Vim; }
+ void get_selection_line_boundaries(Badge<MoveLineUpOrDownCommand>, size_t& first_line, size_t& last_line);
+
protected:
EditingEngine() = default;
@@ -80,10 +84,27 @@ protected:
void delete_char();
virtual EngineType engine_type() const = 0;
+};
+
+class MoveLineUpOrDownCommand : public TextDocumentUndoCommand {
+public:
+ MoveLineUpOrDownCommand(TextDocument&, KeyEvent event, EditingEngine&);
+ virtual void undo() override;
+ virtual void redo() override;
+ bool merge_with(GUI::Command const&) override;
+ String action_text() const override;
+
+ static bool valid_operation(EditingEngine& engine, VerticalDirection direction);
private:
- void move_selected_lines_up();
- void move_selected_lines_down();
+ void move_lines(VerticalDirection);
+ TextRange retrieve_selection(VerticalDirection);
+
+ KeyEvent m_event;
+ VerticalDirection m_direction;
+ EditingEngine& m_engine;
+ TextRange m_selection;
+ TextPosition m_cursor;
};
}