diff options
Diffstat (limited to 'scene/gui/file_dialog.cpp')
-rw-r--r-- | scene/gui/file_dialog.cpp | 170 |
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); |