summaryrefslogtreecommitdiff
path: root/core/bind
diff options
context:
space:
mode:
authorRĂ©mi Verschelde <rverschelde@gmail.com>2017-01-25 20:22:34 +0100
committerGitHub <noreply@github.com>2017-01-25 20:22:34 +0100
commit831d9b925af2caaff8f7723723f46e1d98ef0c14 (patch)
tree257a34da937bcf8b8011e6cd10fafae9506b258b /core/bind
parent266fbd8c7624a0f4c41c5c6296f12059c69c77fb (diff)
parent1ce9bbc8ed8dd9746eadac82beaf5a6f4c22fdcf (diff)
Merge pull request #7563 from RayKoopa/extended_list_dir_begin
Add parameters to Directory.list_dir_begin() to skip navigational or hidden entries
Diffstat (limited to 'core/bind')
-rw-r--r--core/bind/core_bind.cpp18
-rw-r--r--core/bind/core_bind.h5
2 files changed, 19 insertions, 4 deletions
diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp
index 954ebbc30c..80adafe092 100644
--- a/core/bind/core_bind.cpp
+++ b/core/bind/core_bind.cpp
@@ -1825,16 +1825,28 @@ Error _Directory::open(const String& p_path) {
return OK;
}
-Error _Directory::list_dir_begin() {
+Error _Directory::list_dir_begin(bool p_skip_navigational, bool p_skip_hidden) {
ERR_FAIL_COND_V(!d,ERR_UNCONFIGURED);
+
+ _list_skip_navigational = p_skip_navigational;
+ _list_skip_hidden = p_skip_hidden;
+
return d->list_dir_begin();
}
String _Directory::get_next(){
ERR_FAIL_COND_V(!d,"");
- return d->get_next();
+
+ String next = d->get_next();
+ while (next != ""
+ && ((_list_skip_navigational && (next == "." || next == ".."))
+ || (_list_skip_hidden && d->current_is_hidden()))) {
+
+ next = d->get_next();
+ }
+ return next;
}
bool _Directory::current_is_dir() const{
@@ -1964,7 +1976,7 @@ void _Directory::_bind_methods() {
ClassDB::bind_method(_MD("open:Error","path"),&_Directory::open);
- ClassDB::bind_method(_MD("list_dir_begin"),&_Directory::list_dir_begin);
+ ClassDB::bind_method(_MD("list_dir_begin", "skip_navigational", "skip_hidden"), &_Directory::list_dir_begin, DEFVAL(false), DEFVAL(false));
ClassDB::bind_method(_MD("get_next"),&_Directory::get_next);
ClassDB::bind_method(_MD("current_is_dir"),&_Directory::current_is_dir);
ClassDB::bind_method(_MD("list_dir_end"),&_Directory::list_dir_end);
diff --git a/core/bind/core_bind.h b/core/bind/core_bind.h
index fe710704f2..13081fc867 100644
--- a/core/bind/core_bind.h
+++ b/core/bind/core_bind.h
@@ -458,7 +458,7 @@ public:
Error open(const String& p_path);
- Error list_dir_begin(); ///< This starts dir listing
+ Error list_dir_begin(bool p_skip_internal = false, bool p_skip_hidden = false); ///< This starts dir listing
String get_next();
bool current_is_dir() const;
@@ -487,6 +487,9 @@ public:
_Directory();
virtual ~_Directory();
+private:
+ bool _list_skip_navigational;
+ bool _list_skip_hidden;
};
class _Marshalls : public Reference {