Browse Source

Merge pull request #7563 from RayKoopa/extended_list_dir_begin

Add parameters to Directory.list_dir_begin() to skip navigational or hidden entries
Rémi Verschelde 8 years ago
parent
commit
831d9b925a
2 changed files with 19 additions and 4 deletions
  1. 15 3
      core/bind/core_bind.cpp
  2. 4 1
      core/bind/core_bind.h

+ 15 - 3
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);

+ 4 - 1
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 {