diff options
Diffstat (limited to 'editor/editor_feature_profile.h')
-rw-r--r-- | editor/editor_feature_profile.h | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/editor/editor_feature_profile.h b/editor/editor_feature_profile.h new file mode 100644 index 0000000000..b7c2ebc1b2 --- /dev/null +++ b/editor/editor_feature_profile.h @@ -0,0 +1,142 @@ +#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<StringName> disabled_classes; + Set<StringName> disabled_editors; + Map<StringName, Set<StringName> > 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<EditorFeatureProfile> current; + Ref<EditorFeatureProfile> edited; + + void _erase_selected_profile(); + void _create_new_profile(); + String _get_selected_profile(); + + void _import_profiles(const Vector<String> &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<EditorFeatureProfile> get_current_profile(); + void notify_changed(); + + static EditorFeatureProfileManager *get_singleton() { return singleton; } + EditorFeatureProfileManager(); +}; + +#endif // EDITOR_FEATURE_PROFILE_H |