/* * Copyright (c) 2018-2020, Andreas Kling * Copyright (c) 2020, Itamar S. * Copyright (c) 2020, the SerenityOS developers * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #pragma once #include "Debugger/DebugInfoWidget.h" #include "Debugger/DisassemblyWidget.h" #include "EditorWrapper.h" #include "FindInFilesWidget.h" #include "FormEditorWidget.h" #include "Git/DiffViewer.h" #include "Git/GitWidget.h" #include "Locator.h" #include "Project.h" #include "TerminalWrapper.h" #include #include #include namespace HackStudio { class HackStudioWidget : public GUI::Widget { C_OBJECT(HackStudioWidget) public: virtual ~HackStudioWidget() override; void open_file(const String& filename); Vector selected_file_names() const; void update_actions(); Project& project(); GUI::TextEditor& current_editor(); EditorWrapper& current_editor_wrapper(); void set_current_editor_wrapper(RefPtr); String currently_open_file() const { return m_currently_open_file; } void initialize_menubar(GUI::MenuBar&); private: static String get_full_path_of_serenity_source(const String& file); HackStudioWidget(const String& path_to_project); void open_project(String filename); enum class EditMode { Text, Form, Diff, }; void set_edit_mode(EditMode); NonnullRefPtr create_project_tree_view_context_menu(); NonnullRefPtr create_new_action(); NonnullRefPtr create_open_selected_action(); NonnullRefPtr create_add_existing_file_action(); NonnullRefPtr create_delete_action(); NonnullRefPtr create_switch_to_next_editor_action(); NonnullRefPtr create_switch_to_previous_editor_action(); NonnullRefPtr create_remove_current_editor_action(); NonnullRefPtr create_open_action(); NonnullRefPtr create_save_action(); NonnullRefPtr create_add_editor_action(); NonnullRefPtr create_add_terminal_action(); NonnullRefPtr create_remove_current_terminal_action(); NonnullRefPtr create_debug_action(); NonnullRefPtr create_build_action(); NonnullRefPtr create_run_action(); NonnullRefPtr create_stop_action(); void add_new_editor(GUI::Widget& parent); NonnullRefPtr get_editor_of_file(const String& file_name); String get_project_executable_path() const; void on_action_tab_change(); void reveal_action_tab(GUI::Widget&); void initialize_debugger(); void create_project_tree_view(GUI::Widget& parent); void create_form_editor(GUI::Widget& parent); void create_toolbar(GUI::Widget& parent); void create_action_tab(GUI::Widget& parent); void create_app_menubar(GUI::MenuBar&); void create_project_menubar(GUI::MenuBar&); void create_edit_menubar(GUI::MenuBar&); void create_build_menubar(GUI::MenuBar&); void create_view_menubar(GUI::MenuBar&); void create_help_menubar(GUI::MenuBar&); void run(TerminalWrapper& wrapper); void build(TerminalWrapper& wrapper); void hide_action_tabs(); NonnullRefPtrVector m_all_editor_wrappers; RefPtr m_current_editor_wrapper; String m_currently_open_file; OwnPtr m_project; RefPtr m_project_tree_view; RefPtr m_right_hand_splitter; RefPtr m_right_hand_stack; RefPtr m_editors_splitter; RefPtr m_form_inner_container; RefPtr m_form_editor_widget; RefPtr m_form_widget_tree_view; RefPtr m_diff_viewer; RefPtr m_git_widget; RefPtr m_project_tree_view_context_menu; RefPtr m_action_tab_widget; RefPtr m_terminal_wrapper; RefPtr m_locator; RefPtr m_find_in_files_widget; RefPtr m_debug_info_widget; RefPtr m_disassembly_widget; RefPtr m_debugger_thread; RefPtr m_current_editor_in_execution; RefPtr m_new_action; RefPtr m_open_selected_action; RefPtr m_add_existing_file_action; RefPtr m_delete_action; RefPtr m_switch_to_next_editor; RefPtr m_switch_to_previous_editor; RefPtr m_remove_current_editor_action; RefPtr m_open_action; RefPtr m_save_action; RefPtr m_add_editor_action; RefPtr m_add_terminal_action; RefPtr m_remove_current_terminal_action; RefPtr m_stop_action; RefPtr m_debug_action; RefPtr m_build_action; RefPtr m_run_action; }; }