#ifndef EDITOR_FEATURE_PROFILE_H #define EDITOR_FEATURE_PROFILE_H #include "core/os/file_access.h" #include "core/reference.h" #include "editor/editor_file_dialog.h" #include "scene/gui/dialogs.h" #include "scene/gui/option_button.h" #include "scene/gui/separator.h" #include "scene/gui/split_container.h" #include "scene/gui/tree.h" class EditorFeatureProfile : public Reference { GDCLASS(EditorFeatureProfile, Reference); public: enum Feature { FEATURE_3D, FEATURE_SCRIPT, FEATURE_ASSET_LIB, FEATURE_SCENE_TREE, FEATURE_IMPORT_DOCK, FEATURE_NODE_DOCK, FEATURE_FILESYSTEM_DOCK, FEATURE_MAX }; private: Set disabled_classes; Set disabled_editors; Map > disabled_properties; bool features_disabled[FEATURE_MAX]; static const char *feature_names[FEATURE_MAX]; static const char *feature_identifiers[FEATURE_MAX]; String _get_feature_name(Feature p_feature) { return get_feature_name(p_feature); } protected: static void _bind_methods(); public: void set_disable_class(const StringName &p_class, bool p_disabled); bool is_class_disabled(const StringName &p_class) const; void set_disable_class_editor(const StringName &p_class, bool p_disabled); bool is_class_editor_disabled(const StringName &p_class) const; void set_disable_class_property(const StringName &p_class, const StringName &p_property, bool p_disabled); bool is_class_property_disabled(const StringName &p_class, const StringName &p_property) const; bool has_class_properties_disabled(const StringName &p_class) const; void set_disable_feature(Feature p_feature, bool p_disable); bool is_feature_disabled(Feature p_feature) const; Error save_to_file(const String &p_path); Error load_from_file(const String &p_path); static String get_feature_name(Feature p_feature); EditorFeatureProfile(); }; VARIANT_ENUM_CAST(EditorFeatureProfile::Feature) class EditorFeatureProfileManager : public AcceptDialog { GDCLASS(EditorFeatureProfileManager, AcceptDialog); enum Action { PROFILE_CLEAR, PROFILE_SET, PROFILE_IMPORT, PROFILE_EXPORT, PROFILE_NEW, PROFILE_ERASE, PROFILE_MAX }; enum ClassOptions { CLASS_OPTION_DISABLE_EDITOR }; ConfirmationDialog *erase_profile_dialog; ConfirmationDialog *new_profile_dialog; LineEdit *new_profile_name; LineEdit *current_profile_name; OptionButton *profile_list; Button *profile_actions[PROFILE_MAX]; HSplitContainer *h_split; Tree *class_list; Tree *property_list; EditorFileDialog *import_profiles; EditorFileDialog *export_profile; void _profile_action(int p_action); void _profile_selected(int p_what); String current_profile; void _update_profile_list(const String &p_select_profile = String()); void _update_selected_profile(); void _fill_classes_from(TreeItem *p_parent, const String &p_class, const String &p_selected); Ref current; Ref edited; void _erase_selected_profile(); void _create_new_profile(); String _get_selected_profile(); void _import_profiles(const Vector &p_paths); void _export_profile(const String &p_path); bool updating_features; void _class_list_item_selected(); void _class_list_item_edited(); void _property_item_edited(); void _save_and_update(); Timer *update_timer; void _emit_current_profile_changed(); static EditorFeatureProfileManager *singleton; protected: static void _bind_methods(); void _notification(int p_what); public: Ref get_current_profile(); void notify_changed(); static EditorFeatureProfileManager *get_singleton() { return singleton; } EditorFeatureProfileManager(); }; #endif // EDITOR_FEATURE_PROFILE_H