/* * Copyright (c) 2018-2020, Andreas Kling * Copyright (c) 2022, the SerenityOS developers. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include "Resources.h" #include "UndoSelection.h" #include #include #include #include #include #include namespace FontEditor { extern Resources g_resources; class GlyphEditorWidget; class MainWidget final : public GUI::Widget { C_OBJECT(MainWidget) public: static ErrorOr> try_create(); virtual ~MainWidget() override = default; void show_error(Error, StringView action, StringView filename = {}); void reset(); ErrorOr initialize(StringView path, RefPtr&&); ErrorOr initialize_menubar(GUI::Window&); ErrorOr open_file(StringView, NonnullOwnPtr); ErrorOr save_file(StringView, NonnullOwnPtr); bool request_close(); String const& path() { return m_path; } private: MainWidget() = default; ErrorOr create_widgets(); ErrorOr create_actions(); ErrorOr create_models(); ErrorOr create_toolbars(); ErrorOr create_undo_stack(); ErrorOr> create_preview_window(); virtual void drag_enter_event(GUI::DragEvent&) override; virtual void drop_event(GUI::DropEvent&) override; void undo(); void redo(); void restore_state(); void did_modify_font(); void update_action_text(); void update_statusbar(); void update_preview(); void update_title(); void set_scale_and_save(i32); void set_actions_enabled(bool); void set_widgets_enabled(bool); ErrorOr copy_selected_glyphs(); ErrorOr cut_selected_glyphs(); void paste_glyphs(); void delete_selected_glyphs(); void push_undo(StringView action_text); void reset_selection(); RefPtr m_glyph_map_widget; RefPtr m_glyph_editor_widget; RefPtr m_new_action; RefPtr m_open_action; RefPtr m_save_action; RefPtr m_save_as_action; RefPtr m_cut_action; RefPtr m_copy_action; RefPtr m_paste_action; RefPtr m_delete_action; RefPtr m_copy_text_action; RefPtr m_select_all_action; RefPtr m_undo_action; RefPtr m_redo_action; RefPtr m_undo_selection; OwnPtr m_undo_stack; RefPtr m_go_to_glyph_action; RefPtr m_previous_glyph_action; RefPtr m_next_glyph_action; RefPtr m_open_preview_action; RefPtr m_show_metadata_action; RefPtr m_show_unicode_blocks_action; RefPtr m_show_toolbar_action; RefPtr m_show_statusbar_action; RefPtr m_highlight_modifications_action; RefPtr m_show_system_emoji_action; GUI::ActionGroup m_glyph_editor_scale_actions; RefPtr m_scale_five_action; RefPtr m_scale_ten_action; RefPtr m_scale_fifteen_action; GUI::ActionGroup m_glyph_tool_actions; RefPtr m_move_glyph_action; RefPtr m_paint_glyph_action; RefPtr m_flip_horizontal_action; RefPtr m_flip_vertical_action; RefPtr m_rotate_clockwise_action; RefPtr m_rotate_counterclockwise_action; RefPtr m_statusbar; RefPtr m_toolbar_container; RefPtr m_unicode_block_container; RefPtr m_width_control_container; RefPtr m_weight_combobox; RefPtr m_slope_combobox; RefPtr m_spacing_spinbox; RefPtr m_baseline_spinbox; RefPtr m_mean_line_spinbox; RefPtr m_presentation_spinbox; RefPtr m_glyph_editor_width_spinbox; RefPtr m_glyph_editor_present_checkbox; RefPtr m_name_textbox; RefPtr m_family_textbox; RefPtr m_search_textbox; RefPtr m_fixed_width_checkbox; RefPtr m_font_metadata_groupbox; RefPtr m_unicode_block_listview; RefPtr m_unicode_block_model; RefPtr m_filter_model; RefPtr m_context_menu; RefPtr m_preview_label; RefPtr m_preview_textbox; RefPtr m_font_preview_window; String m_path; RefPtr m_font; Vector m_font_weight_list; Vector m_font_slope_list; Vector m_unicode_block_list; Unicode::CodePointRange m_range { 0x0000, 0x10FFFF }; bool m_initialized { false }; }; }