summaryrefslogtreecommitdiff
path: root/scene/gui/file_dialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scene/gui/file_dialog.cpp')
-rw-r--r--scene/gui/file_dialog.cpp170
1 files changed, 85 insertions, 85 deletions
diff --git a/scene/gui/file_dialog.cpp b/scene/gui/file_dialog.cpp
index 56b9260837..b8b8c99c39 100644
--- a/scene/gui/file_dialog.cpp
+++ b/scene/gui/file_dialog.cpp
@@ -51,7 +51,7 @@ void FileDialog::_notification(int p_what) {
refresh->set_icon(get_icon("reload"));
}
-
+
if (p_what==NOTIFICATION_DRAW) {
//RID ci = get_canvas_item();
@@ -117,13 +117,13 @@ Vector<String> FileDialog::get_selected_files() const {
};
void FileDialog::update_dir() {
-
+
dir->set_text(dir_access->get_current_dir());
}
void FileDialog::_dir_entered(String p_dir) {
-
-
+
+
dir_access->change_dir(p_dir);
file->set_text("");
invalidate();
@@ -132,13 +132,13 @@ void FileDialog::_dir_entered(String p_dir) {
void FileDialog::_file_entered(const String& p_file) {
- _action_pressed();
+ _action_pressed();
}
void FileDialog::_save_confirm_pressed() {
String f=dir_access->get_current_dir().plus_file(file->get_text());
emit_signal("file_selected",f);
- hide();
+ hide();
}
void FileDialog::_post_popup() {
@@ -158,7 +158,7 @@ void FileDialog::_post_popup() {
}
void FileDialog::_action_pressed() {
-
+
if (mode==MODE_OPEN_FILES) {
TreeItem *ti=tree->get_next_selected(NULL);
@@ -180,7 +180,7 @@ void FileDialog::_action_pressed() {
}
String f=dir_access->get_current_dir().plus_file(file->get_text());
-
+
if (mode==MODE_OPEN_FILE && dir_access->file_exists(f)) {
emit_signal("file_selected",f);
hide();
@@ -202,7 +202,7 @@ void FileDialog::_action_pressed() {
}
if (mode==MODE_SAVE_FILE) {
-
+
bool valid=false;
if (filter->get_selected()==filter->get_item_count()-1) {
@@ -263,7 +263,7 @@ void FileDialog::_action_pressed() {
confirm_save->set_text("File Exists, Overwrite?");
confirm_save->popup_centered(Size2(200,80));
} else {
-
+
emit_signal("file_selected",f);
hide();
@@ -279,51 +279,51 @@ void FileDialog::_cancel_pressed() {
}
void FileDialog::_tree_selected() {
-
+
TreeItem *ti=tree->get_selected();
if (!ti)
return;
Dictionary d=ti->get_metadata(0);
-
+
if (!d["dir"]) {
-
+
file->set_text(d["name"]);
}
-
+
}
void FileDialog::_tree_dc_selected() {
-
+
TreeItem *ti=tree->get_selected();
if (!ti)
return;
-
+
Dictionary d=ti->get_metadata(0);
if (d["dir"]) {
-
+
dir_access->change_dir(d["name"]);
if (mode==MODE_OPEN_FILE || mode==MODE_OPEN_FILES || mode==MODE_OPEN_DIR)
file->set_text("");
call_deferred("_update_file_list");
call_deferred("_update_dir");
} else {
-
+
_action_pressed();
}
}
void FileDialog::update_file_list() {
-
+
tree->clear();
dir_access->list_dir_begin();
-
+
TreeItem *root = tree->create_item();
Ref<Texture> folder = get_icon("folder");
List<String> files;
List<String> dirs;
-
+
bool isdir;
bool ishidden;
bool show_hidden = show_hidden_files;
@@ -340,12 +340,12 @@ void FileDialog::update_file_list() {
dirs.push_back(item);
}
}
-
+
dirs.sort_custom<NoCaseComparator>();
files.sort_custom<NoCaseComparator>();
-
+
while(!dirs.empty()) {
-
+
if (dirs.front()->get()!=".") {
TreeItem *ti=tree->create_item(root);
ti->set_text(0,dirs.front()->get()+"/");
@@ -356,23 +356,23 @@ void FileDialog::update_file_list() {
ti->set_metadata(0,d);
}
dirs.pop_front();
-
+
}
-
+
dirs.clear();
-
+
List<String> patterns;
// build filter
if (filter->get_selected()==filter->get_item_count()-1) {
-
- // match all
+
+ // match all
} else if (filters.size()>1 && filter->get_selected()==0) {
// match all filters
for (int i=0;i<filters.size();i++) {
-
+
String f=filters[i].get_slice(";",0);
for (int j=0;j<f.get_slice_count(",");j++) {
-
+
patterns.push_back(f.get_slice(",",j).strip_edges());
}
}
@@ -380,34 +380,34 @@ void FileDialog::update_file_list() {
int idx=filter->get_selected();
if (filters.size()>1)
idx--;
-
+
if (idx>=0 && idx<filters.size()) {
-
+
String f=filters[idx].get_slice(";",0);
for (int j=0;j<f.get_slice_count(",");j++) {
-
+
patterns.push_back(f.get_slice(",",j).strip_edges());
- }
+ }
}
}
String base_dir = dir_access->get_current_dir();
-
-
+
+
while(!files.empty()) {
-
+
bool match=patterns.empty();
-
+
for(List<String>::Element *E=patterns.front();E;E=E->next()) {
-
+
if (files.front()->get().matchn(E->get())) {
-
+
match=true;
break;
}
}
-
+
if (match) {
TreeItem *ti=tree->create_item(root);
ti->set_text(0,files.front()->get());
@@ -426,35 +426,35 @@ void FileDialog::update_file_list() {
d["name"]=files.front()->get();
d["dir"]=false;
ti->set_metadata(0,d);
-
+
if (file->get_text()==files.front()->get())
ti->select(0);
}
-
+
files.pop_front();
}
-
+
if (tree->get_root() && tree->get_root()->get_children())
tree->get_root()->get_children()->select(0);
-
+
files.clear();
-
+
}
void FileDialog::_filter_selected(int) {
-
+
update_file_list();
}
void FileDialog::update_filters() {
-
+
filter->clear();
-
+
if (filters.size()>1) {
String all_filters;
const int max_filters=5;
-
+
for(int i=0;i<MIN( max_filters, filters.size()) ;i++) {
String flt=filters[i].get_slice(";",0);
if (i>0)
@@ -464,11 +464,11 @@ void FileDialog::update_filters() {
if (max_filters<filters.size())
all_filters+=", ...";
-
+
filter->add_item("All Recognized ( "+all_filters+" )");
}
for(int i=0;i<filters.size();i++) {
-
+
String flt=filters[i].get_slice(";",0).strip_edges();
String desc=filters[i].get_slice(";",1).strip_edges();
if (desc.length())
@@ -476,46 +476,46 @@ void FileDialog::update_filters() {
else
filter->add_item("( "+flt+" )");
}
-
+
filter->add_item("All Files (*)");
-
+
}
void FileDialog::clear_filters() {
-
+
filters.clear();
update_filters();
invalidate();
}
void FileDialog::add_filter(const String& p_filter) {
-
+
filters.push_back(p_filter);
update_filters();
invalidate();
-
+
}
String FileDialog::get_current_dir() const {
-
- return dir->get_text();
+
+ return dir->get_text();
}
String FileDialog::get_current_file() const {
-
+
return file->get_text();
}
String FileDialog::get_current_path() const {
-
+
return dir->get_text().plus_file(file->get_text());
}
void FileDialog::set_current_dir(const String& p_dir) {
-
+
dir_access->change_dir(p_dir);
update_dir();
invalidate();
-
+
}
void FileDialog::set_current_file(const String& p_file) {
-
+
file->set_text(p_file);
update_dir();
invalidate();
@@ -525,18 +525,18 @@ void FileDialog::set_current_file(const String& p_file) {
file->grab_focus();
}
-
+
}
void FileDialog::set_current_path(const String& p_path) {
-
+
if (!p_path.size())
return;
int pos=MAX( p_path.find_last("/"), p_path.find_last("\\") );
if (pos==-1) {
-
+
set_current_file(p_path);
} else {
-
+
String dir=p_path.substr(0,pos);
String file=p_path.substr(pos+1,p_path.length());
set_current_dir(dir);
@@ -546,10 +546,10 @@ void FileDialog::set_current_path(const String& p_path) {
void FileDialog::set_mode(Mode p_mode) {
-
+
mode=p_mode;
switch(mode) {
-
+
case MODE_OPEN_FILE: get_ok()->set_text("Open"); set_title("Open a File"); makedir->hide(); break;
case MODE_OPEN_FILES: get_ok()->set_text("Open"); set_title("Open File(s)"); makedir->hide(); break;
case MODE_SAVE_FILE: get_ok()->set_text("Save"); set_title("Save a File"); makedir->show(); break;
@@ -565,7 +565,7 @@ void FileDialog::set_mode(Mode p_mode) {
}
FileDialog::Mode FileDialog::get_mode() const {
-
+
return mode;
}
@@ -655,7 +655,7 @@ void FileDialog::_update_drives() {
drives->show();
for(int i=0;i<dir_access->get_drive_count();i++) {
- String d = dir_access->get_drive(i);
+ String d = dir_access->get_drive(i);
drives->add_item(dir_access->get_drive(i));
}
@@ -668,7 +668,7 @@ bool FileDialog::default_show_hidden_files=false;
void FileDialog::_bind_methods() {
-
+
ObjectTypeDB::bind_method(_MD("_unhandled_input"),&FileDialog::_unhandled_input);
ObjectTypeDB::bind_method(_MD("_tree_selected"),&FileDialog::_tree_selected);
@@ -679,7 +679,7 @@ void FileDialog::_bind_methods() {
ObjectTypeDB::bind_method(_MD("_cancel_pressed"),&FileDialog::_cancel_pressed);
ObjectTypeDB::bind_method(_MD("_filter_selected"),&FileDialog::_filter_selected);
ObjectTypeDB::bind_method(_MD("_save_confirm_pressed"),&FileDialog::_save_confirm_pressed);
-
+
ObjectTypeDB::bind_method(_MD("clear_filters"),&FileDialog::clear_filters);
ObjectTypeDB::bind_method(_MD("add_filter","filter"),&FileDialog::add_filter);
ObjectTypeDB::bind_method(_MD("get_current_dir"),&FileDialog::get_current_dir);
@@ -742,7 +742,7 @@ FileDialog::FileDialog() {
mode=MODE_SAVE_FILE;
set_title("Save a File");
-
+
dir = memnew(LineEdit);
HBoxContainer *pathhb = memnew( HBoxContainer );
pathhb->add_child(dir);
@@ -760,17 +760,17 @@ FileDialog::FileDialog() {
makedir->set_text("Create Folder");
makedir->connect("pressed",this,"_make_dir");
pathhb->add_child(makedir);
-
+
vbc->add_margin_child("Path:",pathhb);
-
+
tree = memnew(Tree);
tree->set_hide_root(true);
vbc->add_margin_child("Directories & Files:",tree,true);
-
+
file = memnew(LineEdit);
//add_child(file);
vbc->add_margin_child("File:",file);
-
+
filter = memnew( OptionButton );
//add_child(filter);
@@ -781,7 +781,7 @@ FileDialog::FileDialog() {
access=ACCESS_RESOURCES;
_update_drives();
-
+
connect("confirmed", this,"_action_pressed");
//cancel->connect("pressed", this,"_cancel_pressed");
tree->connect("cell_selected", this,"_tree_selected",varray(),CONNECT_DEFERRED);
@@ -790,12 +790,12 @@ FileDialog::FileDialog() {
file->connect("text_entered", this,"_file_entered");
filter->connect("item_selected", this,"_filter_selected");
-
+
confirm_save = memnew( ConfirmationDialog );
confirm_save->set_as_toplevel(true);
add_child(confirm_save);
-
+
confirm_save->connect("confirmed", this,"_save_confirm_pressed");
makedialog = memnew( ConfirmationDialog );
@@ -828,12 +828,12 @@ FileDialog::FileDialog() {
invalidated=true;
if (register_func)
register_func(this);
-
+
}
FileDialog::~FileDialog() {
-
+
if (unregister_func)
unregister_func(this);
memdelete(dir_access);