Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/editor/settings/editor_settings.h
9896 views
1
/**************************************************************************/
2
/* editor_settings.h */
3
/**************************************************************************/
4
/* This file is part of: */
5
/* GODOT ENGINE */
6
/* https://godotengine.org */
7
/**************************************************************************/
8
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
9
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
10
/* */
11
/* Permission is hereby granted, free of charge, to any person obtaining */
12
/* a copy of this software and associated documentation files (the */
13
/* "Software"), to deal in the Software without restriction, including */
14
/* without limitation the rights to use, copy, modify, merge, publish, */
15
/* distribute, sublicense, and/or sell copies of the Software, and to */
16
/* permit persons to whom the Software is furnished to do so, subject to */
17
/* the following conditions: */
18
/* */
19
/* The above copyright notice and this permission notice shall be */
20
/* included in all copies or substantial portions of the Software. */
21
/* */
22
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
23
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
24
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
25
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
26
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
27
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
28
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
29
/**************************************************************************/
30
31
#pragma once
32
33
#include "core/input/shortcut.h"
34
#include "core/io/config_file.h"
35
#include "core/io/resource.h"
36
#include "core/os/thread_safe.h"
37
38
class EditorPlugin;
39
40
class EditorSettings : public Resource {
41
GDCLASS(EditorSettings, Resource);
42
43
_THREAD_SAFE_CLASS_
44
45
public:
46
struct Plugin {
47
EditorPlugin *instance = nullptr;
48
String path;
49
String name;
50
String author;
51
String version;
52
String description;
53
bool installs = false;
54
String script;
55
Vector<String> install_files;
56
};
57
58
enum NetworkMode {
59
NETWORK_OFFLINE,
60
NETWORK_ONLINE,
61
};
62
63
enum InitialScreen {
64
INITIAL_SCREEN_AUTO = -5, // Remembers last screen position.
65
INITIAL_SCREEN_WITH_MOUSE_FOCUS = -4,
66
INITIAL_SCREEN_WITH_KEYBOARD_FOCUS = -3,
67
INITIAL_SCREEN_PRIMARY = -2,
68
};
69
70
private:
71
struct VariantContainer {
72
int order = 0;
73
Variant variant;
74
Variant initial;
75
bool basic = false;
76
bool has_default_value = false;
77
bool hide_from_editor = false;
78
bool save = false;
79
bool restart_if_changed = false;
80
81
VariantContainer() {}
82
83
VariantContainer(const Variant &p_variant, int p_order) :
84
order(p_order),
85
variant(p_variant) {
86
}
87
};
88
89
static Ref<EditorSettings> singleton;
90
91
HashSet<String> changed_settings;
92
93
mutable Ref<ConfigFile> project_metadata;
94
HashMap<String, PropertyInfo> hints;
95
HashMap<String, VariantContainer> props;
96
int last_order;
97
98
Ref<Resource> clipboard;
99
mutable HashMap<String, Ref<Shortcut>> shortcuts;
100
HashMap<String, List<Ref<InputEvent>>> builtin_action_overrides;
101
102
Vector<String> favorites;
103
HashMap<String, PackedStringArray> favorite_properties;
104
Vector<String> recent_dirs;
105
106
bool save_changed_setting = true;
107
bool optimize_save = true; //do not save stuff that came from config but was not set from engine
108
bool initialized = false;
109
110
bool _set(const StringName &p_name, const Variant &p_value);
111
bool _set_only(const StringName &p_name, const Variant &p_value);
112
bool _get(const StringName &p_name, Variant &r_ret) const;
113
void _initial_set(const StringName &p_name, const Variant &p_value, bool p_basic = false);
114
void _get_property_list(List<PropertyInfo> *p_list) const;
115
void _add_property_info_bind(const Dictionary &p_info);
116
bool _property_can_revert(const StringName &p_name) const;
117
bool _property_get_revert(const StringName &p_name, Variant &r_property) const;
118
119
void _set_initialized();
120
void _load_defaults(Ref<ConfigFile> p_extra_config = Ref<ConfigFile>());
121
void _load_default_visual_shader_editor_theme();
122
static String _guess_exec_args_for_extenal_editor(const String &p_value);
123
const String _get_project_metadata_path() const;
124
#ifndef DISABLE_DEPRECATED
125
void _remove_deprecated_settings();
126
#endif
127
128
protected:
129
static void _bind_methods();
130
131
public:
132
enum {
133
NOTIFICATION_EDITOR_SETTINGS_CHANGED = 10000
134
};
135
136
static EditorSettings *get_singleton();
137
static String get_existing_settings_path();
138
static String get_newest_settings_path();
139
140
static void create();
141
void setup_language();
142
void setup_network();
143
static void save();
144
static void destroy();
145
void set_optimize_save(bool p_optimize);
146
147
bool has_default_value(const String &p_setting) const;
148
void set_setting(const String &p_setting, const Variant &p_value);
149
Variant get_setting(const String &p_setting) const;
150
bool has_setting(const String &p_setting) const;
151
void erase(const String &p_setting);
152
void raise_order(const String &p_setting);
153
void set_initial_value(const StringName &p_setting, const Variant &p_value, bool p_update_current = false);
154
void set_restart_if_changed(const StringName &p_setting, bool p_restart);
155
void set_basic(const StringName &p_setting, bool p_basic);
156
void set_manually(const StringName &p_setting, const Variant &p_value, bool p_emit_signal = false) {
157
if (p_emit_signal) {
158
_set(p_setting, p_value);
159
} else {
160
_set_only(p_setting, p_value);
161
}
162
}
163
void add_property_hint(const PropertyInfo &p_hint);
164
PackedStringArray get_changed_settings() const;
165
bool check_changed_settings_in_group(const String &p_setting_prefix) const;
166
void mark_setting_changed(const String &p_setting);
167
168
void set_resource_clipboard(const Ref<Resource> &p_resource) { clipboard = p_resource; }
169
Ref<Resource> get_resource_clipboard() const { return clipboard; }
170
171
void set_project_metadata(const String &p_section, const String &p_key, const Variant &p_data);
172
Variant get_project_metadata(const String &p_section, const String &p_key, const Variant &p_default) const;
173
174
void set_favorites(const Vector<String> &p_favorites);
175
Vector<String> get_favorites() const;
176
void set_favorite_properties(const HashMap<String, PackedStringArray> &p_favorite_properties);
177
HashMap<String, PackedStringArray> get_favorite_properties() const;
178
void set_recent_dirs(const Vector<String> &p_recent_dirs);
179
Vector<String> get_recent_dirs() const;
180
void load_favorites_and_recent_dirs();
181
182
static HashMap<StringName, Color> get_godot2_text_editor_theme();
183
static bool is_default_text_editor_theme(const String &p_theme_name);
184
void update_text_editor_themes_list();
185
186
Vector<String> get_script_templates(const String &p_extension, const String &p_custom_path = String());
187
String get_editor_layouts_config() const;
188
static float get_auto_display_scale();
189
190
void _add_shortcut_default(const String &p_name, const Ref<Shortcut> &p_shortcut);
191
void add_shortcut(const String &p_name, const Ref<Shortcut> &p_shortcut);
192
bool is_shortcut(const String &p_name, const Ref<InputEvent> &p_event) const;
193
Ref<Shortcut> get_shortcut(const String &p_name) const;
194
void get_shortcut_list(List<String> *r_shortcuts);
195
196
void set_builtin_action_override(const String &p_name, const TypedArray<InputEvent> &p_events);
197
const Array get_builtin_action_overrides(const String &p_name) const;
198
199
void notify_changes();
200
201
virtual void get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const override;
202
203
EditorSettings();
204
};
205
206
//not a macro any longer
207
208
#define EDITOR_DEF(m_var, m_val) _EDITOR_DEF(m_var, Variant(m_val))
209
#define EDITOR_DEF_RST(m_var, m_val) _EDITOR_DEF(m_var, Variant(m_val), true)
210
#define EDITOR_DEF_BASIC(m_var, m_val) _EDITOR_DEF(m_var, Variant(m_val), false, true)
211
Variant _EDITOR_DEF(const String &p_setting, const Variant &p_default, bool p_restart_if_changed = false, bool p_basic = false);
212
213
#define EDITOR_GET(m_var) _EDITOR_GET(m_var)
214
Variant _EDITOR_GET(const String &p_setting);
215
216
#define ED_IS_SHORTCUT(p_name, p_ev) (EditorSettings::get_singleton()->is_shortcut(p_name, p_ev))
217
Ref<Shortcut> ED_SHORTCUT(const String &p_path, const String &p_name, Key p_keycode = Key::NONE, bool p_physical = false);
218
Ref<Shortcut> ED_SHORTCUT_ARRAY(const String &p_path, const String &p_name, const PackedInt32Array &p_keycodes, bool p_physical = false);
219
void ED_SHORTCUT_OVERRIDE(const String &p_path, const String &p_feature, Key p_keycode = Key::NONE, bool p_physical = false);
220
void ED_SHORTCUT_OVERRIDE_ARRAY(const String &p_path, const String &p_feature, const PackedInt32Array &p_keycodes, bool p_physical = false);
221
Ref<Shortcut> ED_GET_SHORTCUT(const String &p_path);
222
223