diff options
Diffstat (limited to 'core/core_bind.cpp')
-rw-r--r-- | core/core_bind.cpp | 78 |
1 files changed, 65 insertions, 13 deletions
diff --git a/core/core_bind.cpp b/core/core_bind.cpp index 0bf6efc96d..5e3e4b3964 100644 --- a/core/core_bind.cpp +++ b/core/core_bind.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ /* */ /* Permission is hereby granted, free of charge, to any person obtaining */ /* a copy of this software and associated documentation files (the */ @@ -207,6 +207,10 @@ void OS::alert(const String &p_alert, const String &p_title) { ::OS::get_singleton()->alert(p_alert, p_title); } +void OS::crash(const String &p_message) { + CRASH_NOW_MSG(p_message); +} + String OS::get_executable_path() const { return ::OS::get_singleton()->get_executable_path(); } @@ -542,6 +546,7 @@ void OS::_bind_methods() { ClassDB::bind_method(D_METHOD("close_midi_inputs"), &OS::close_midi_inputs); ClassDB::bind_method(D_METHOD("alert", "text", "title"), &OS::alert, DEFVAL("Alert!")); + ClassDB::bind_method(D_METHOD("crash", "message"), &OS::crash); ClassDB::bind_method(D_METHOD("set_low_processor_usage_mode", "enable"), &OS::set_low_processor_usage_mode); ClassDB::bind_method(D_METHOD("is_in_low_processor_usage_mode"), &OS::is_in_low_processor_usage_mode); @@ -1465,12 +1470,8 @@ bool Directory::is_open() const { return d && dir_open; } -Error Directory::list_dir_begin(bool p_show_navigational, bool p_show_hidden) { +Error Directory::list_dir_begin() { ERR_FAIL_COND_V_MSG(!is_open(), ERR_UNCONFIGURED, "Directory must be opened before use."); - - _list_skip_navigational = !p_show_navigational; - _list_skip_hidden = !p_show_hidden; - return d->list_dir_begin(); } @@ -1478,7 +1479,7 @@ String Directory::get_next() { ERR_FAIL_COND_V_MSG(!is_open(), "", "Directory must be opened before use."); String next = d->get_next(); - while (next != "" && ((_list_skip_navigational && (next == "." || next == "..")) || (_list_skip_hidden && d->current_is_hidden()))) { + while (!next.is_empty() && ((!include_navigational && (next == "." || next == "..")) || (!include_hidden && d->current_is_hidden()))) { next = d->get_next(); } return next; @@ -1494,6 +1495,47 @@ void Directory::list_dir_end() { d->list_dir_end(); } +PackedStringArray Directory::get_files() { + return _get_contents(false); +} + +PackedStringArray Directory::get_directories() { + return _get_contents(true); +} + +PackedStringArray Directory::_get_contents(bool p_directories) { + PackedStringArray ret; + ERR_FAIL_COND_V_MSG(!is_open(), ret, "Directory must be opened before use."); + + list_dir_begin(); + String s = get_next(); + while (!s.is_empty()) { + if (current_is_dir() == p_directories) { + ret.append(s); + } + s = get_next(); + } + + ret.sort(); + return ret; +} + +void Directory::set_include_navigational(bool p_enable) { + include_navigational = p_enable; +} + +bool Directory::get_include_navigational() const { + return include_navigational; +} + +void Directory::set_include_hidden(bool p_enable) { + include_hidden = p_enable; +} + +bool Directory::get_include_hidden() const { + return include_hidden; +} + int Directory::get_drive_count() { ERR_FAIL_COND_V_MSG(!is_open(), 0, "Directory must be opened before use."); return d->get_drive_count(); @@ -1609,10 +1651,12 @@ Error Directory::remove(String p_name) { void Directory::_bind_methods() { ClassDB::bind_method(D_METHOD("open", "path"), &Directory::open); - ClassDB::bind_method(D_METHOD("list_dir_begin", "show_navigational", "show_hidden"), &Directory::list_dir_begin, DEFVAL(false), DEFVAL(false)); + ClassDB::bind_method(D_METHOD("list_dir_begin"), &Directory::list_dir_begin, DEFVAL(false), DEFVAL(false)); ClassDB::bind_method(D_METHOD("get_next"), &Directory::get_next); ClassDB::bind_method(D_METHOD("current_is_dir"), &Directory::current_is_dir); ClassDB::bind_method(D_METHOD("list_dir_end"), &Directory::list_dir_end); + ClassDB::bind_method(D_METHOD("get_files"), &Directory::get_files); + ClassDB::bind_method(D_METHOD("get_directories"), &Directory::get_directories); ClassDB::bind_method(D_METHOD("get_drive_count"), &Directory::get_drive_count); ClassDB::bind_method(D_METHOD("get_drive", "idx"), &Directory::get_drive); ClassDB::bind_method(D_METHOD("get_current_drive"), &Directory::get_current_drive); @@ -1627,6 +1671,14 @@ void Directory::_bind_methods() { ClassDB::bind_method(D_METHOD("copy", "from", "to"), &Directory::copy); ClassDB::bind_method(D_METHOD("rename", "from", "to"), &Directory::rename); ClassDB::bind_method(D_METHOD("remove", "path"), &Directory::remove); + + ClassDB::bind_method(D_METHOD("set_include_navigational"), &Directory::set_include_navigational); + ClassDB::bind_method(D_METHOD("get_include_navigational"), &Directory::get_include_navigational); + ClassDB::bind_method(D_METHOD("set_include_hidden"), &Directory::set_include_hidden); + ClassDB::bind_method(D_METHOD("get_include_hidden"), &Directory::get_include_hidden); + + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "include_navigational"), "set_include_navigational", "get_include_navigational"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "include_hidden"), "set_include_hidden", "get_include_hidden"); } Directory::Directory() { @@ -1660,7 +1712,7 @@ String Marshalls::variant_to_base64(const Variant &p_var, bool p_full_objects) { ERR_FAIL_COND_V_MSG(err != OK, "", "Error when trying to encode Variant."); String ret = CryptoCore::b64_encode_str(&w[0], len); - ERR_FAIL_COND_V(ret == "", ret); + ERR_FAIL_COND_V(ret.is_empty(), ret); return ret; } @@ -1685,7 +1737,7 @@ Variant Marshalls::base64_to_variant(const String &p_str, bool p_allow_objects) String Marshalls::raw_to_base64(const Vector<uint8_t> &p_arr) { String ret = CryptoCore::b64_encode_str(p_arr.ptr(), p_arr.size()); - ERR_FAIL_COND_V(ret == "", ret); + ERR_FAIL_COND_V(ret.is_empty(), ret); return ret; } @@ -1709,7 +1761,7 @@ Vector<uint8_t> Marshalls::base64_to_raw(const String &p_str) { String Marshalls::utf8_to_base64(const String &p_str) { CharString cstr = p_str.utf8(); String ret = CryptoCore::b64_encode_str((unsigned char *)cstr.get_data(), cstr.length()); - ERR_FAIL_COND_V(ret == "", ret); + ERR_FAIL_COND_V(ret.is_empty(), ret); return ret; } @@ -2245,7 +2297,7 @@ void Engine::register_singleton(const StringName &p_name, Object *p_object) { ; } void Engine::unregister_singleton(const StringName &p_name) { - ERR_FAIL_COND_MSG(!has_singleton(p_name), "Attempt to remove unregisteres singleton: " + String(p_name)); + ERR_FAIL_COND_MSG(!has_singleton(p_name), "Attempt to remove unregistered singleton: " + String(p_name)); ERR_FAIL_COND_MSG(!::Engine::get_singleton()->is_singleton_user_created(p_name), "Attempt to remove non-user created singleton: " + String(p_name)); ::Engine::get_singleton()->remove_singleton(p_name); } |