Moved folding outside the resource files, now saved outside the project.
This commit is contained in:
parent
786ece2375
commit
e647342140
|
@ -259,6 +259,10 @@ RES ResourceLoader::load(const String &p_path, const String &p_type_hint, bool p
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (_loaded_callback) {
|
||||||
|
_loaded_callback(res, p_path);
|
||||||
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -635,6 +639,12 @@ void ResourceLoader::clear_path_remaps() {
|
||||||
path_remaps.clear();
|
path_remaps.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ResourceLoader::set_load_callback(ResourceLoadedCallback p_callback) {
|
||||||
|
_loaded_callback = p_callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
ResourceLoadedCallback ResourceLoader::_loaded_callback = NULL;
|
||||||
|
|
||||||
ResourceLoadErrorNotify ResourceLoader::err_notify = NULL;
|
ResourceLoadErrorNotify ResourceLoader::err_notify = NULL;
|
||||||
void *ResourceLoader::err_notify_ud = NULL;
|
void *ResourceLoader::err_notify_ud = NULL;
|
||||||
|
|
||||||
|
|
|
@ -78,6 +78,7 @@ typedef void (*ResourceLoadErrorNotify)(void *p_ud, const String &p_text);
|
||||||
typedef void (*DependencyErrorNotify)(void *p_ud, const String &p_loading, const String &p_which, const String &p_type);
|
typedef void (*DependencyErrorNotify)(void *p_ud, const String &p_loading, const String &p_which, const String &p_type);
|
||||||
|
|
||||||
typedef Error (*ResourceLoaderImport)(const String &p_path);
|
typedef Error (*ResourceLoaderImport)(const String &p_path);
|
||||||
|
typedef void (*ResourceLoadedCallback)(RES p_resource, const String &p_path);
|
||||||
|
|
||||||
class ResourceLoader {
|
class ResourceLoader {
|
||||||
|
|
||||||
|
@ -106,6 +107,8 @@ class ResourceLoader {
|
||||||
//internal load function
|
//internal load function
|
||||||
static RES _load(const String &p_path, const String &p_original_path, const String &p_type_hint, bool p_no_cache, Error *r_error);
|
static RES _load(const String &p_path, const String &p_original_path, const String &p_type_hint, bool p_no_cache, Error *r_error);
|
||||||
|
|
||||||
|
static ResourceLoadedCallback _loaded_callback;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static Ref<ResourceInteractiveLoader> load_interactive(const String &p_path, const String &p_type_hint = "", bool p_no_cache = false, Error *r_error = NULL);
|
static Ref<ResourceInteractiveLoader> load_interactive(const String &p_path, const String &p_type_hint = "", bool p_no_cache = false, Error *r_error = NULL);
|
||||||
static RES load(const String &p_path, const String &p_type_hint = "", bool p_no_cache = false, Error *r_error = NULL);
|
static RES load(const String &p_path, const String &p_type_hint = "", bool p_no_cache = false, Error *r_error = NULL);
|
||||||
|
@ -150,6 +153,7 @@ public:
|
||||||
static void load_translation_remaps();
|
static void load_translation_remaps();
|
||||||
static void clear_translation_remaps();
|
static void clear_translation_remaps();
|
||||||
|
|
||||||
|
static void set_load_callback(ResourceLoadedCallback p_callback);
|
||||||
static ResourceLoaderImport import;
|
static ResourceLoaderImport import;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -90,7 +90,7 @@ Error ResourceSaver::save(const String &p_path, const RES &p_resource, uint32_t
|
||||||
rwcopy->set_path(old_path);
|
rwcopy->set_path(old_path);
|
||||||
|
|
||||||
if (save_callback && p_path.begins_with("res://"))
|
if (save_callback && p_path.begins_with("res://"))
|
||||||
save_callback(p_path);
|
save_callback(p_resource, p_path);
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -46,7 +46,7 @@ public:
|
||||||
virtual ~ResourceFormatSaver() {}
|
virtual ~ResourceFormatSaver() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef void (*ResourceSavedCallback)(const String &p_path);
|
typedef void (*ResourceSavedCallback)(Ref<Resource> p_resource, const String &p_path);
|
||||||
|
|
||||||
class ResourceSaver {
|
class ResourceSaver {
|
||||||
|
|
||||||
|
|
|
@ -440,16 +440,6 @@ void Object::set(const StringName &p_name, const Variant &p_value, bool *r_valid
|
||||||
if (r_valid)
|
if (r_valid)
|
||||||
*r_valid = true;
|
*r_valid = true;
|
||||||
return;
|
return;
|
||||||
#ifdef TOOLS_ENABLED
|
|
||||||
} else if (p_name == CoreStringNames::get_singleton()->_sections_unfolded) {
|
|
||||||
Array arr = p_value;
|
|
||||||
for (int i = 0; i < arr.size(); i++) {
|
|
||||||
editor_section_folding.insert(arr[i]);
|
|
||||||
}
|
|
||||||
if (r_valid)
|
|
||||||
*r_valid = true;
|
|
||||||
return;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//something inside the object... :|
|
//something inside the object... :|
|
||||||
|
@ -520,16 +510,7 @@ Variant Object::get(const StringName &p_name, bool *r_valid) const {
|
||||||
if (r_valid)
|
if (r_valid)
|
||||||
*r_valid = true;
|
*r_valid = true;
|
||||||
return ret;
|
return ret;
|
||||||
#ifdef TOOLS_ENABLED
|
|
||||||
} else if (p_name == CoreStringNames::get_singleton()->_sections_unfolded) {
|
|
||||||
Array array;
|
|
||||||
for (Set<String>::Element *E = editor_section_folding.front(); E; E = E->next()) {
|
|
||||||
array.push_back(E->get());
|
|
||||||
}
|
|
||||||
if (r_valid)
|
|
||||||
*r_valid = true;
|
|
||||||
return array;
|
|
||||||
#endif
|
|
||||||
} else {
|
} else {
|
||||||
//something inside the object... :|
|
//something inside the object... :|
|
||||||
bool success = _getv(p_name, ret);
|
bool success = _getv(p_name, ret);
|
||||||
|
@ -657,11 +638,6 @@ void Object::get_property_list(List<PropertyInfo> *p_list, bool p_reversed) cons
|
||||||
#endif
|
#endif
|
||||||
p_list->push_back(PropertyInfo(Variant::OBJECT, "script", PROPERTY_HINT_RESOURCE_TYPE, "Script", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_STORE_IF_NONZERO));
|
p_list->push_back(PropertyInfo(Variant::OBJECT, "script", PROPERTY_HINT_RESOURCE_TYPE, "Script", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_STORE_IF_NONZERO));
|
||||||
}
|
}
|
||||||
#ifdef TOOLS_ENABLED
|
|
||||||
if (editor_section_folding.size()) {
|
|
||||||
p_list->push_back(PropertyInfo(Variant::ARRAY, CoreStringNames::get_singleton()->_sections_unfolded, PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (!metadata.empty())
|
if (!metadata.empty())
|
||||||
p_list->push_back(PropertyInfo(Variant::DICTIONARY, "__meta__", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL | PROPERTY_USAGE_STORE_IF_NONZERO));
|
p_list->push_back(PropertyInfo(Variant::DICTIONARY, "__meta__", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL | PROPERTY_USAGE_STORE_IF_NONZERO));
|
||||||
if (script_instance && !p_reversed) {
|
if (script_instance && !p_reversed) {
|
||||||
|
|
|
@ -723,6 +723,9 @@ public:
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
void editor_set_section_unfold(const String &p_section, bool p_unfolded);
|
void editor_set_section_unfold(const String &p_section, bool p_unfolded);
|
||||||
bool editor_is_section_unfolded(const String &p_section);
|
bool editor_is_section_unfolded(const String &p_section);
|
||||||
|
const Set<String> &editor_get_section_folding() const { return editor_section_folding; }
|
||||||
|
void editor_clear_section_folding() { editor_section_folding.clear(); }
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//used by script languages to store binding data
|
//used by script languages to store binding data
|
||||||
|
|
|
@ -1305,11 +1305,6 @@ void EditorFileSystem::_save_late_updated_files() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorFileSystem::_resource_saved(const String &p_path) {
|
|
||||||
|
|
||||||
EditorFileSystem::get_singleton()->update_file(p_path);
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector<String> EditorFileSystem::_get_dependencies(const String &p_path) {
|
Vector<String> EditorFileSystem::_get_dependencies(const String &p_path) {
|
||||||
|
|
||||||
List<String> deps;
|
List<String> deps;
|
||||||
|
@ -1772,7 +1767,6 @@ EditorFileSystem::EditorFileSystem() {
|
||||||
abort_scan = false;
|
abort_scan = false;
|
||||||
scanning_changes = false;
|
scanning_changes = false;
|
||||||
scanning_changes_done = false;
|
scanning_changes_done = false;
|
||||||
ResourceSaver::set_save_callback(_resource_saved);
|
|
||||||
|
|
||||||
DirAccess *da = DirAccess::create(DirAccess::ACCESS_RESOURCES);
|
DirAccess *da = DirAccess::create(DirAccess::ACCESS_RESOURCES);
|
||||||
if (da->change_dir("res://.import") != OK) {
|
if (da->change_dir("res://.import") != OK) {
|
||||||
|
|
|
@ -204,8 +204,6 @@ class EditorFileSystem : public Node {
|
||||||
|
|
||||||
bool _update_scan_actions();
|
bool _update_scan_actions();
|
||||||
|
|
||||||
static void _resource_saved(const String &p_path);
|
|
||||||
|
|
||||||
void _update_extensions();
|
void _update_extensions();
|
||||||
|
|
||||||
void _reimport_file(const String &p_file);
|
void _reimport_file(const String &p_file);
|
||||||
|
|
|
@ -0,0 +1,168 @@
|
||||||
|
#include "editor_folding.h"
|
||||||
|
|
||||||
|
#include "editor_settings.h"
|
||||||
|
|
||||||
|
PoolVector<String> EditorFolding::_get_unfolds(const Object *p_object) {
|
||||||
|
|
||||||
|
PoolVector<String> sections;
|
||||||
|
sections.resize(p_object->editor_get_section_folding().size());
|
||||||
|
if (sections.size()) {
|
||||||
|
PoolVector<String>::Write w = sections.write();
|
||||||
|
int idx = 0;
|
||||||
|
for (const Set<String>::Element *E = p_object->editor_get_section_folding().front(); E; E = E->next()) {
|
||||||
|
w[idx++] = E->get();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sections;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorFolding::save_resource_folding(const RES &p_resource, const String &p_path) {
|
||||||
|
Ref<ConfigFile> config;
|
||||||
|
config.instance();
|
||||||
|
PoolVector<String> unfolds = _get_unfolds(p_resource.ptr());
|
||||||
|
config->set_value("folding", "sections_unfolded", unfolds);
|
||||||
|
|
||||||
|
String path = EditorSettings::get_singleton()->get_project_settings_dir();
|
||||||
|
String file = p_path.get_file() + "-folding-" + p_path.md5_text() + ".cfg";
|
||||||
|
file = EditorSettings::get_singleton()->get_project_settings_dir().plus_file(file);
|
||||||
|
config->save(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorFolding::_set_unfolds(Object *p_object, const PoolVector<String> &p_unfolds) {
|
||||||
|
|
||||||
|
int uc = p_unfolds.size();
|
||||||
|
PoolVector<String>::Read r = p_unfolds.read();
|
||||||
|
p_object->editor_clear_section_folding();
|
||||||
|
for (int i = 0; i < uc; i++) {
|
||||||
|
p_object->editor_set_section_unfold(r[i], true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorFolding::load_resource_folding(RES p_resource, const String &p_path) {
|
||||||
|
|
||||||
|
Ref<ConfigFile> config;
|
||||||
|
config.instance();
|
||||||
|
|
||||||
|
String path = EditorSettings::get_singleton()->get_project_settings_dir();
|
||||||
|
String file = p_path.get_file() + "-folding-" + p_path.md5_text() + ".cfg";
|
||||||
|
file = EditorSettings::get_singleton()->get_project_settings_dir().plus_file(file);
|
||||||
|
|
||||||
|
if (config->load(file) != OK) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
PoolVector<String> unfolds;
|
||||||
|
|
||||||
|
if (config->has_section_key("folding", "sections_unfolded")) {
|
||||||
|
unfolds = config->get_value("folding", "sections_unfolded");
|
||||||
|
}
|
||||||
|
_set_unfolds(p_resource.ptr(), unfolds);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorFolding::_fill_folds(const Node *p_root, const Node *p_node, Array &p_folds, Array &resource_folds, Set<RES> &resources) {
|
||||||
|
if (p_root != p_node) {
|
||||||
|
if (!p_node->get_owner()) {
|
||||||
|
return; //not owned, bye
|
||||||
|
}
|
||||||
|
if (p_node->get_owner() != p_root && !p_root->is_editable_instance(p_node)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PoolVector<String> unfolds = _get_unfolds(p_node);
|
||||||
|
|
||||||
|
if (unfolds.size()) {
|
||||||
|
p_folds.push_back(p_root->get_path_to(p_node));
|
||||||
|
p_folds.push_back(unfolds);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<PropertyInfo> plist;
|
||||||
|
p_node->get_property_list(&plist);
|
||||||
|
for (List<PropertyInfo>::Element *E = plist.front(); E; E = E->next()) {
|
||||||
|
if (E->get().type == Variant::OBJECT) {
|
||||||
|
RES res = p_node->get(E->get().name);
|
||||||
|
if (res.is_valid() && !resources.has(res) && res->get_path() != String() && !res->get_path().is_resource_file()) {
|
||||||
|
|
||||||
|
PoolVector<String> res_unfolds = _get_unfolds(res.ptr());
|
||||||
|
resource_folds.push_back(res->get_path());
|
||||||
|
resource_folds.push_back(res_unfolds);
|
||||||
|
resources.insert(res);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < p_node->get_child_count(); i++) {
|
||||||
|
_fill_folds(p_root, p_node->get_child(i), p_folds, resource_folds, resources);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void EditorFolding::save_scene_folding(const Node *p_scene, const String &p_path) {
|
||||||
|
|
||||||
|
Ref<ConfigFile> config;
|
||||||
|
config.instance();
|
||||||
|
|
||||||
|
Array unfolds, res_unfolds;
|
||||||
|
Set<RES> resources;
|
||||||
|
_fill_folds(p_scene, p_scene, unfolds, res_unfolds, resources);
|
||||||
|
|
||||||
|
config->set_value("folding", "node_unfolds", unfolds);
|
||||||
|
config->set_value("folding", "resource_unfolds", res_unfolds);
|
||||||
|
|
||||||
|
String path = EditorSettings::get_singleton()->get_project_settings_dir();
|
||||||
|
String file = p_path.get_file() + "-folding-" + p_path.md5_text() + ".cfg";
|
||||||
|
file = EditorSettings::get_singleton()->get_project_settings_dir().plus_file(file);
|
||||||
|
print_line("save folding for: " + file);
|
||||||
|
config->save(file);
|
||||||
|
}
|
||||||
|
void EditorFolding::load_scene_folding(Node *p_scene, const String &p_path) {
|
||||||
|
|
||||||
|
Ref<ConfigFile> config;
|
||||||
|
config.instance();
|
||||||
|
|
||||||
|
String path = EditorSettings::get_singleton()->get_project_settings_dir();
|
||||||
|
String file = p_path.get_file() + "-folding-" + p_path.md5_text() + ".cfg";
|
||||||
|
file = EditorSettings::get_singleton()->get_project_settings_dir().plus_file(file);
|
||||||
|
|
||||||
|
if (config->load(file) != OK) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Array unfolds;
|
||||||
|
if (config->has_section_key("folding", "node_unfolds")) {
|
||||||
|
unfolds = config->get_value("folding", "node_unfolds");
|
||||||
|
}
|
||||||
|
Array res_unfolds;
|
||||||
|
if (config->has_section_key("folding", "resource_unfolds")) {
|
||||||
|
res_unfolds = config->get_value("folding", "resource_unfolds");
|
||||||
|
}
|
||||||
|
|
||||||
|
ERR_FAIL_COND(unfolds.size() & 1);
|
||||||
|
ERR_FAIL_COND(res_unfolds.size() & 1);
|
||||||
|
|
||||||
|
for (int i = 0; i < unfolds.size(); i += 2) {
|
||||||
|
NodePath path = unfolds[i];
|
||||||
|
PoolVector<String> un = unfolds[i + 1];
|
||||||
|
Node *node = p_scene->get_node(path);
|
||||||
|
if (!node) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
_set_unfolds(node, un);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < res_unfolds.size(); i += 2) {
|
||||||
|
String path = res_unfolds[i];
|
||||||
|
RES res;
|
||||||
|
if (ResourceCache::has(path)) {
|
||||||
|
res = RES(ResourceCache::get(path));
|
||||||
|
}
|
||||||
|
if (res.is_null()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
PoolVector<String> unfolds = res_unfolds[i + 1];
|
||||||
|
_set_unfolds(res.ptr(), unfolds);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorFolding::EditorFolding() {
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
#ifndef EDITOR_FOLDING_H
|
||||||
|
#define EDITOR_FOLDING_H
|
||||||
|
|
||||||
|
#include "scene/main/node.h"
|
||||||
|
|
||||||
|
class EditorFolding {
|
||||||
|
|
||||||
|
PoolVector<String> _get_unfolds(const Object *p_object);
|
||||||
|
void _set_unfolds(Object *p_object, const PoolVector<String> &p_unfolds);
|
||||||
|
|
||||||
|
void _fill_folds(const Node *p_root, const Node *p_node, Array &p_folds, Array &resource_folds, Set<RES> &resources);
|
||||||
|
|
||||||
|
public:
|
||||||
|
void save_resource_folding(const RES &p_resource, const String &p_path);
|
||||||
|
void load_resource_folding(RES p_resource, const String &p_path);
|
||||||
|
|
||||||
|
void save_scene_folding(const Node *p_scene, const String &p_path);
|
||||||
|
void load_scene_folding(Node *p_scene, const String &p_path);
|
||||||
|
|
||||||
|
EditorFolding();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // EDITOR_FOLDING_H
|
|
@ -1061,6 +1061,9 @@ void EditorNode::_save_scene(String p_file, int idx) {
|
||||||
set_current_version(editor_data.get_undo_redo().get_version());
|
set_current_version(editor_data.get_undo_redo().get_version());
|
||||||
else
|
else
|
||||||
editor_data.set_edited_scene_version(0, idx);
|
editor_data.set_edited_scene_version(0, idx);
|
||||||
|
|
||||||
|
editor_folding.save_scene_folding(scene, p_file);
|
||||||
|
|
||||||
_update_title();
|
_update_title();
|
||||||
_update_scene_tabs();
|
_update_scene_tabs();
|
||||||
} else {
|
} else {
|
||||||
|
@ -2907,6 +2910,8 @@ Error EditorNode::load_scene(const String &p_scene, bool p_ignore_broken_deps, b
|
||||||
_update_scene_tabs();
|
_update_scene_tabs();
|
||||||
_add_to_recent_scenes(lpath);
|
_add_to_recent_scenes(lpath);
|
||||||
|
|
||||||
|
editor_folding.load_scene_folding(new_scene, lpath);
|
||||||
|
|
||||||
prev_scene->set_disabled(previous_scenes.size() == 0);
|
prev_scene->set_disabled(previous_scenes.size() == 0);
|
||||||
opening_prev = false;
|
opening_prev = false;
|
||||||
|
|
||||||
|
@ -4544,6 +4549,19 @@ void EditorNode::_video_driver_selected(int p_which) {
|
||||||
_update_video_driver_color();
|
_update_video_driver_color();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EditorNode::_resource_saved(RES p_resource, const String &p_path) {
|
||||||
|
if (EditorFileSystem::get_singleton()) {
|
||||||
|
EditorFileSystem::get_singleton()->update_file(p_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
singleton->editor_folding.save_resource_folding(p_resource, p_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorNode::_resource_loaded(RES p_resource, const String &p_path) {
|
||||||
|
|
||||||
|
singleton->editor_folding.load_resource_folding(p_resource, p_path);
|
||||||
|
}
|
||||||
|
|
||||||
void EditorNode::_bind_methods() {
|
void EditorNode::_bind_methods() {
|
||||||
|
|
||||||
ClassDB::bind_method("_menu_option", &EditorNode::_menu_option);
|
ClassDB::bind_method("_menu_option", &EditorNode::_menu_option);
|
||||||
|
@ -5831,6 +5849,9 @@ EditorNode::EditorNode() {
|
||||||
print_handler.userdata = this;
|
print_handler.userdata = this;
|
||||||
add_print_handler(&print_handler);
|
add_print_handler(&print_handler);
|
||||||
|
|
||||||
|
ResourceSaver::set_save_callback(_resource_saved);
|
||||||
|
ResourceLoader::set_load_callback(_resource_loaded);
|
||||||
|
|
||||||
#ifdef OSX_ENABLED
|
#ifdef OSX_ENABLED
|
||||||
ED_SHORTCUT("editor/editor_2d", TTR("Open 2D Editor"), KEY_MASK_ALT | KEY_1);
|
ED_SHORTCUT("editor/editor_2d", TTR("Open 2D Editor"), KEY_MASK_ALT | KEY_1);
|
||||||
ED_SHORTCUT("editor/editor_3d", TTR("Open 3D Editor"), KEY_MASK_ALT | KEY_2);
|
ED_SHORTCUT("editor/editor_3d", TTR("Open 3D Editor"), KEY_MASK_ALT | KEY_2);
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#include "editor/editor_about.h"
|
#include "editor/editor_about.h"
|
||||||
#include "editor/editor_data.h"
|
#include "editor/editor_data.h"
|
||||||
#include "editor/editor_export.h"
|
#include "editor/editor_export.h"
|
||||||
|
#include "editor/editor_folding.h"
|
||||||
#include "editor/editor_inspector.h"
|
#include "editor/editor_inspector.h"
|
||||||
#include "editor/editor_log.h"
|
#include "editor/editor_log.h"
|
||||||
#include "editor/editor_name_dialog.h"
|
#include "editor/editor_name_dialog.h"
|
||||||
|
@ -386,6 +387,7 @@ private:
|
||||||
EditorSelection *editor_selection;
|
EditorSelection *editor_selection;
|
||||||
ProjectExportDialog *project_export;
|
ProjectExportDialog *project_export;
|
||||||
EditorResourcePreview *resource_preview;
|
EditorResourcePreview *resource_preview;
|
||||||
|
EditorFolding editor_folding;
|
||||||
|
|
||||||
EditorFileServer *file_server;
|
EditorFileServer *file_server;
|
||||||
|
|
||||||
|
@ -601,6 +603,9 @@ private:
|
||||||
PrintHandlerList print_handler;
|
PrintHandlerList print_handler;
|
||||||
static void _print_handler(void *p_this, const String &p_string, bool p_error);
|
static void _print_handler(void *p_this, const String &p_string, bool p_error);
|
||||||
|
|
||||||
|
static void _resource_saved(RES p_resource, const String &p_path);
|
||||||
|
static void _resource_loaded(RES p_resource, const String &p_path);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void _notification(int p_what);
|
void _notification(int p_what);
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
|
|
@ -1835,7 +1835,7 @@ void Node::set_editable_instance(Node *p_node, bool p_editable) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Node::is_editable_instance(Node *p_node) const {
|
bool Node::is_editable_instance(const Node *p_node) const {
|
||||||
|
|
||||||
if (!p_node)
|
if (!p_node)
|
||||||
return false; //easier, null is never editable :)
|
return false; //easier, null is never editable :)
|
||||||
|
|
|
@ -303,7 +303,7 @@ public:
|
||||||
String get_filename() const;
|
String get_filename() const;
|
||||||
|
|
||||||
void set_editable_instance(Node *p_node, bool p_editable);
|
void set_editable_instance(Node *p_node, bool p_editable);
|
||||||
bool is_editable_instance(Node *p_node) const;
|
bool is_editable_instance(const Node *p_node) const;
|
||||||
void set_editable_instances(const HashMap<NodePath, int> &p_editable_instances);
|
void set_editable_instances(const HashMap<NodePath, int> &p_editable_instances);
|
||||||
HashMap<NodePath, int> get_editable_instances() const;
|
HashMap<NodePath, int> get_editable_instances() const;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue