/**************************************************************************/1/* editor_main_screen.h */2/**************************************************************************/3/* This file is part of: */4/* GODOT ENGINE */5/* https://godotengine.org */6/**************************************************************************/7/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */8/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */9/* */10/* Permission is hereby granted, free of charge, to any person obtaining */11/* a copy of this software and associated documentation files (the */12/* "Software"), to deal in the Software without restriction, including */13/* without limitation the rights to use, copy, modify, merge, publish, */14/* distribute, sublicense, and/or sell copies of the Software, and to */15/* permit persons to whom the Software is furnished to do so, subject to */16/* the following conditions: */17/* */18/* The above copyright notice and this permission notice shall be */19/* included in all copies or substantial portions of the Software. */20/* */21/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */22/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */23/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */24/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */25/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */26/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */27/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */28/**************************************************************************/2930#pragma once3132#include "scene/gui/panel_container.h"3334class Button;35class ConfigFile;36class EditorPlugin;37class HBoxContainer;38class VBoxContainer;3940class EditorMainScreen : public PanelContainer {41GDCLASS(EditorMainScreen, PanelContainer);4243public:44enum EditorTable {45EDITOR_2D = 0,46EDITOR_3D,47EDITOR_SCRIPT,48EDITOR_GAME,49EDITOR_ASSETLIB,50};5152private:53VBoxContainer *main_screen_vbox = nullptr;54EditorPlugin *selected_plugin = nullptr;5556HBoxContainer *button_hb = nullptr;57Vector<Button *> buttons;58Vector<EditorPlugin *> editor_table;59HashMap<String, EditorPlugin *> main_editor_plugins;6061int _get_current_main_editor() const;6263protected:64void _notification(int p_what);6566public:67void set_button_container(HBoxContainer *p_button_hb);6869void save_layout_to_config(Ref<ConfigFile> p_config_file, const String &p_section) const;70void load_layout_from_config(Ref<ConfigFile> p_config_file, const String &p_section);7172void set_button_enabled(int p_index, bool p_enabled);73bool is_button_enabled(int p_index) const;7475void select_next();76void select_prev();77void select_by_name(const String &p_name);78void select(int p_index);79int get_selected_index() const;80int get_plugin_index(EditorPlugin *p_editor) const;81EditorPlugin *get_selected_plugin() const;82EditorPlugin *get_plugin_by_name(const String &p_plugin_name) const;83bool can_auto_switch_screens() const;8485VBoxContainer *get_control() const;8687void add_main_plugin(EditorPlugin *p_editor);88void remove_main_plugin(EditorPlugin *p_editor);8990EditorMainScreen();91};929394