diff options
author | karroffel <therzog@mail.de> | 2018-04-04 13:06:15 +0200 |
---|---|---|
committer | karroffel <therzog@mail.de> | 2018-04-04 13:07:43 +0200 |
commit | f29139f3cf1774769b914df5a66c010f7ce86926 (patch) | |
tree | 2cd3a9af719cb20718a63261b65fd1e6670b3dcd /modules/gdnative | |
parent | 57c0339d9f33a1dec70ec2b35050aabe3bd8f77d (diff) |
[GDNative] enable saving GDNativeLibrary as sub resource
Diffstat (limited to 'modules/gdnative')
-rw-r--r-- | modules/gdnative/gdnative.cpp | 95 | ||||
-rw-r--r-- | modules/gdnative/gdnative.h | 4 |
2 files changed, 96 insertions, 3 deletions
diff --git a/modules/gdnative/gdnative.cpp b/modules/gdnative/gdnative.cpp index 4448321ff9..897588385a 100644 --- a/modules/gdnative/gdnative.cpp +++ b/modules/gdnative/gdnative.cpp @@ -66,8 +66,93 @@ GDNativeLibrary::GDNativeLibrary() { GDNativeLibrary::~GDNativeLibrary() { } +bool GDNativeLibrary::_set(const StringName &p_name, const Variant &p_property) { + + String name = p_name; + + if (name.begins_with("entry/")) { + String key = name.substr(6, name.length() - 6); + + config_file->set_value("entry", key, p_property); + + set_config_file(config_file); + + return true; + } + + if (name.begins_with("dependency/")) { + String key = name.substr(11, name.length() - 11); + + config_file->set_value("dependencies", key, p_property); + + set_config_file(config_file); + + return true; + } + + return false; +} + +bool GDNativeLibrary::_get(const StringName &p_name, Variant &r_property) const { + String name = p_name; + + if (name.begins_with("entry/")) { + String key = name.substr(6, name.length() - 6); + + r_property = config_file->get_value("entry", key); + + return true; + } + + if (name.begins_with("dependency/")) { + String key = name.substr(11, name.length() - 11); + + r_property = config_file->get_value("dependencies", key); + + return true; + } + + return false; +} + +void GDNativeLibrary::_get_property_list(List<PropertyInfo> *p_list) const { + // set entries + List<String> entry_key_list; + + if (config_file->has_section("entry")) + config_file->get_section_keys("entry", &entry_key_list); + + for (List<String>::Element *E = entry_key_list.front(); E; E = E->next()) { + String key = E->get(); + + PropertyInfo prop; + + prop.type = Variant::STRING; + prop.name = "entry/" + key; + + p_list->push_back(prop); + } + + // set dependencies + List<String> dependency_key_list; + + if (config_file->has_section("dependencies")) + config_file->get_section_keys("dependencies", &dependency_key_list); + + for (List<String>::Element *E = dependency_key_list.front(); E; E = E->next()) { + String key = E->get(); + + PropertyInfo prop; + + prop.type = Variant::STRING; + prop.name = "dependency/" + key; + + p_list->push_back(prop); + } +} + void GDNativeLibrary::set_config_file(Ref<ConfigFile> p_config_file) { - + set_singleton(p_config_file->get_value("general", "singleton", default_singleton)); set_load_once(p_config_file->get_value("general", "load_once", default_load_once)); set_symbol_prefix(p_config_file->get_value("general", "symbol_prefix", default_symbol_prefix)); @@ -77,7 +162,9 @@ void GDNativeLibrary::set_config_file(Ref<ConfigFile> p_config_file) { { List<String> entry_keys; - p_config_file->get_section_keys("entry", &entry_keys); + + if (p_config_file->has_section("entry")) + p_config_file->get_section_keys("entry", &entry_keys); for (List<String>::Element *E = entry_keys.front(); E; E = E->next()) { String key = E->get(); @@ -107,7 +194,9 @@ void GDNativeLibrary::set_config_file(Ref<ConfigFile> p_config_file) { { List<String> dependency_keys; - p_config_file->get_section_keys("dependencies", &dependency_keys); + + if (p_config_file->has_section("dependencies")) + p_config_file->get_section_keys("dependencies", &dependency_keys); for (List<String>::Element *E = dependency_keys.front(); E; E = E->next()) { String key = E->get(); diff --git a/modules/gdnative/gdnative.h b/modules/gdnative/gdnative.h index 2ba19362fb..b17bb94f1c 100644 --- a/modules/gdnative/gdnative.h +++ b/modules/gdnative/gdnative.h @@ -66,6 +66,10 @@ public: GDNativeLibrary(); ~GDNativeLibrary(); + virtual bool _set(const StringName &p_name, const Variant &p_property); + virtual bool _get(const StringName &p_name, Variant &r_property) const; + virtual void _get_property_list(List<PropertyInfo> *p_list) const; + _FORCE_INLINE_ Ref<ConfigFile> get_config_file() { return config_file; } void set_config_file(Ref<ConfigFile> p_config_file); |