godot/editor/editor_feature_profile.h
Juan Linietsky a20235aeb0 Add ability to edit editor feature profiles
Allows enabling/disabling parts of the editor and storing/loading profiles for that.
2019-04-08 19:18:51 -03:00

143 lines
3.6 KiB
C++

#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