/* * Copyright (c) 2018-2020, Andreas Kling * Copyright (c) 2022, the SerenityOS developers. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include "UndoSelection.h" #include #include #include #include #include #include namespace FontEditor { class GlyphEditorWidget; class MainWidget final : public GUI::Widget { C_OBJECT(MainWidget) public: static ErrorOr> try_create() { NonnullRefPtr font_editor = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) MainWidget())); TRY(font_editor->create_actions()); TRY(font_editor->create_models()); TRY(font_editor->create_toolbars()); TRY(font_editor->create_undo_stack()); return font_editor; } virtual ~MainWidget() override = default; ErrorOr initialize(DeprecatedString const& path, RefPtr&&); ErrorOr initialize_menubar(GUI::Window&); ErrorOr open_file(DeprecatedString const&); ErrorOr save_file(DeprecatedString const&); bool request_close(); void update_title(); DeprecatedString const& path() { return m_path; } Gfx::BitmapFont const& edited_font() { return *m_edited_font; } bool is_showing_font_metadata() { return m_font_metadata; } void set_show_font_metadata(bool); bool is_showing_unicode_blocks() { return m_unicode_blocks; } void set_show_unicode_blocks(bool); void set_show_toolbar(bool); void set_show_statusbar(bool); void set_highlight_modifications(bool); void set_show_system_emoji(bool); private: MainWidget(); 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 did_modify_font(); void update_statusbar(); void update_preview(); void set_scale_and_save(i32); ErrorOr copy_selected_glyphs(); ErrorOr cut_selected_glyphs(); void paste_glyphs(); void delete_selected_glyphs(); void push_undo(); void reset_selection_and_push_undo(); void show_error(Error, StringView action, StringView basename = {}); RefPtr m_edited_font; 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_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; DeprecatedString m_path; Vector m_font_weight_list; Vector m_font_slope_list; Vector m_unicode_block_list; bool m_font_metadata { true }; bool m_unicode_blocks { true }; Unicode::CodePointRange m_range { 0x0000, 0x10FFFF }; }; }