mirror of
https://github.com/godotengine/godot.git
synced 2025-12-08 06:09:55 +00:00
Add ability to edit editor feature profiles
Allows enabling/disabling parts of the editor and storing/loading profiles for that.
This commit is contained in:
parent
9ab17b664d
commit
a20235aeb0
24 changed files with 1586 additions and 67 deletions
142
editor/editor_feature_profile.h
Normal file
142
editor/editor_feature_profile.h
Normal file
|
|
@ -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
|
||||
Loading…
Add table
Add a link
Reference in a new issue