/** * @file EditorWidget.h * @author apio (cloudapio.eu) * @brief Multiline text editing widget. * * @copyright Copyright (c) 2024, the Luna authors. * */ #include <luna/String.h> #include <os/Timer.h> #include <ui/Font.h> #include <ui/TextInput.h> #include <ui/Widget.h> class EditorWidget : public ui::TextInput { public: EditorWidget(SharedPtr<ui::Font> font); Result<void> load_file(const os::Path& path); Result<void> save_file(); Result<ui::EventResult> handle_key_event(const ui::KeyEventRequest& request) override; Result<void> draw(ui::Canvas& canvas) override; os::Path& path() { return m_path; } private: SharedPtr<ui::Font> m_font; struct Line { usize begin; usize end; }; Vector<Line> m_lines; os::Path m_path { AT_FDCWD }; Result<void> recalculate_lines(); void recalculate_cursor_position(); void recalculate_cursor_index(); };