/* * Copyright (c) 2018-2020, Andreas Kling * Copyright (c) 2021, Mustafa Quraish * Copyright (c) 2022, the SerenityOS developers. * Copyright (c) 2022, Timothy Slater * Copyright (c) 2024, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include "HexEditor.h" #include "ValueInspectorModel.h" #include #include #include #include #include #include #include #include #include namespace HexEditor { class HexEditorWidget final : public GUI::Widget { C_OBJECT_ABSTRACT(HexEditorWidget) public: virtual ~HexEditorWidget() override = default; void open_file(ByteString const& filename, NonnullOwnPtr); void open_annotations_file(StringView filename); ErrorOr initialize_menubar(GUI::Window&); bool request_close(); static ErrorOr> create(); protected: static ErrorOr> try_create(); private: ErrorOr setup(); HexEditorWidget() = default; void set_path(StringView); void update_title(); void update_side_panel_visibility(); void set_annotations_visible(bool visible); void initialize_annotations_model(); void set_search_results_visible(bool visible); void set_value_inspector_visible(bool visible); void update_inspector_values(size_t position); virtual void drag_enter_event(GUI::DragEvent&) override; virtual void drop_event(GUI::DropEvent&) override; RefPtr m_editor; ByteString m_path; ByteString m_name; ByteString m_extension; ByteString m_annotations_path; int m_goto_history { 0 }; String m_search_text; ByteBuffer m_search_buffer; int last_found_index() const { return m_last_found_index == -1 ? 0 : m_last_found_index; } int m_last_found_index { -1 }; RefPtr m_new_action; RefPtr m_open_action; RefPtr m_save_action; RefPtr m_save_as_action; RefPtr m_open_annotations_action; RefPtr m_save_annotations_action; RefPtr m_save_annotations_as_action; RefPtr m_undo_action; RefPtr m_redo_action; RefPtr m_find_action; RefPtr m_goto_offset_action; RefPtr m_layout_toolbar_action; RefPtr m_layout_annotations_action; RefPtr m_layout_search_results_action; RefPtr m_layout_value_inspector_action; RefPtr m_copy_hex_action; RefPtr m_copy_text_action; RefPtr m_copy_as_c_code_action; RefPtr m_fill_selection_action; GUI::ActionGroup m_bytes_per_row_actions; GUI::ActionGroup m_value_inspector_mode_actions; RefPtr m_statusbar; RefPtr m_toolbar; RefPtr m_toolbar_container; RefPtr m_search_results; RefPtr m_search_results_container; RefPtr m_side_panel_container; RefPtr m_value_inspector_container; RefPtr m_value_inspector; RefPtr m_annotations_container; RefPtr m_annotations; RefPtr m_annotations_sorting_model; RefPtr m_annotations_context_menu; RefPtr m_edit_annotation_action; RefPtr m_delete_annotation_action; bool m_value_inspector_little_endian { true }; bool m_selecting_from_inspector { false }; }; }