1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-12 13:20:55 +00:00

Merge pull request #97415 from YeldhamDev/i_love_all_my_properties_equally

Make possible to favorite properties in the inspector
This commit is contained in:
Thaddeus Crews
2024-11-11 14:17:57 -06:00
8 changed files with 491 additions and 38 deletions

View File

@@ -1496,10 +1496,26 @@ void EditorSettings::set_favorites(const Vector<String> &p_favorites) {
}
}
void EditorSettings::set_favorite_properties(const HashMap<String, PackedStringArray> &p_favorite_properties) {
favorite_properties = p_favorite_properties;
String favorite_properties_file = EditorPaths::get_singleton()->get_project_settings_dir().path_join("favorite_properties");
Ref<ConfigFile> cf;
cf.instantiate();
for (const KeyValue<String, PackedStringArray> &kv : p_favorite_properties) {
cf->set_value(kv.key, "properties", kv.value);
}
cf->save(favorite_properties_file);
}
Vector<String> EditorSettings::get_favorites() const {
return favorites;
}
HashMap<String, PackedStringArray> EditorSettings::get_favorite_properties() const {
return favorite_properties;
}
void EditorSettings::set_recent_dirs(const Vector<String> &p_recent_dirs) {
recent_dirs = p_recent_dirs;
String recent_dirs_file;
@@ -1522,23 +1538,51 @@ Vector<String> EditorSettings::get_recent_dirs() const {
void EditorSettings::load_favorites_and_recent_dirs() {
String favorites_file;
String favorite_properties_file;
String recent_dirs_file;
if (Engine::get_singleton()->is_project_manager_hint()) {
favorites_file = EditorPaths::get_singleton()->get_config_dir().path_join("favorite_dirs");
favorite_properties_file = EditorPaths::get_singleton()->get_config_dir().path_join("favorite_properties");
recent_dirs_file = EditorPaths::get_singleton()->get_config_dir().path_join("recent_dirs");
} else {
favorites_file = EditorPaths::get_singleton()->get_project_settings_dir().path_join("favorites");
favorite_properties_file = EditorPaths::get_singleton()->get_project_settings_dir().path_join("favorite_properties");
recent_dirs_file = EditorPaths::get_singleton()->get_project_settings_dir().path_join("recent_dirs");
}
/// File Favorites
Ref<FileAccess> f = FileAccess::open(favorites_file, FileAccess::READ);
if (f.is_valid()) {
String line = f->get_line().strip_edges();
while (!line.is_empty()) {
favorites.push_back(line);
favorites.append(line);
line = f->get_line().strip_edges();
}
}
/// Inspector Favorites
Ref<ConfigFile> cf;
cf.instantiate();
if (cf->load(favorite_properties_file) == OK) {
List<String> secs;
cf->get_sections(&secs);
for (String &E : secs) {
PackedStringArray properties = PackedStringArray(cf->get_value(E, "properties"));
if (EditorNode::get_editor_data().is_type_recognized(E) || ResourceLoader::exists(E, "Script")) {
for (const String &property : properties) {
if (!favorite_properties[E].has(property)) {
favorite_properties[E].push_back(property);
}
}
}
}
}
/// Recent Directories
f = FileAccess::open(recent_dirs_file, FileAccess::READ);
if (f.is_valid()) {
String line = f->get_line().strip_edges();