void EditorFileDialog::_item_selected(int p_item) { int current = p_item; if (current<0 || current>=item_list->get_item_count()) return; Dictionary d=item_list->get_item_metadata(current); if (!d["dir"]) { file->set_text(d["name"]); _request_single_thumbnail(get_current_dir().plus_file(get_current_file())); } }
void EditorFileDialog::set_current_file(const String &p_file) { file->set_text(p_file); update_dir(); invalidate(); int lp = p_file.find_last("."); if (lp != -1) { file->select(0, lp); file->grab_focus(); } if (is_visible_in_tree()) _request_single_thumbnail(get_current_dir().plus_file(get_current_file())); }
void EditorFileDialog::_post_popup() { ConfirmationDialog::_post_popup(); if (invalidated) { update_file_list(); invalidated=false; } if (mode==MODE_SAVE_FILE) file->grab_focus(); else item_list->grab_focus(); if (is_visible() && get_current_file()!="") _request_single_thumbnail(get_current_dir().plus_file(get_current_file())); if (is_visible()) { Ref<Texture> folder = get_icon("folder","FileDialog"); recent->clear(); bool res = access==ACCESS_RESOURCES; Vector<String> recentd = EditorSettings::get_singleton()->get_recent_dirs(); for(int i=0;i<recentd.size();i++) { bool cres = recentd[i].begins_with("res://"); if (cres!=res) continue; String name = recentd[i]; if (res && name=="res://") { name="/"; } else { name=name.get_file()+"/"; } //print_line("file: "+name); recent->add_item(name,folder); recent->set_item_metadata( recent->get_item_count()-1,recentd[i]); } local_history.clear(); local_history_pos=-1; _push_history(); _update_favorites(); } set_process_unhandled_input(true); }
void EditorFileDialog::_action_pressed() { if (mode==MODE_OPEN_FILES) { String fbase=dir_access->get_current_dir(); DVector<String> files; for(int i=0;i<item_list->get_item_count();i++) { if (item_list->is_selected(i)) files.push_back( fbase.plus_file(item_list->get_item_text(i) )); } if (files.size()) { _save_to_recent(); emit_signal("files_selected",files); hide(); } return; } String f=dir_access->get_current_dir().plus_file(file->get_text()); if ((mode==MODE_OPEN_ANY || mode==MODE_OPEN_FILE) && dir_access->file_exists(f)) { _save_to_recent(); emit_signal("file_selected",f); hide(); }else if (mode==MODE_OPEN_ANY || mode==MODE_OPEN_DIR) { String path=dir_access->get_current_dir(); /*if (tree->get_selected()) { Dictionary d = tree->get_selected()->get_metadata(0); if (d["dir"]) { path=path+"/"+String(d["name"]); } }*/ path=path.replace("\\","/"); _save_to_recent(); emit_signal("dir_selected",path); hide(); } if (mode==MODE_SAVE_FILE) { bool valid=false; if (filter->get_selected()==filter->get_item_count()-1) { valid=true; //match none } else if (filters.size()>1 && filter->get_selected()==0) { // match all filters for (int i=0;i<filters.size();i++) { String flt=filters[i].get_slice(";",0); for (int j=0;j<flt.get_slice_count(",");j++) { String str = flt.get_slice(",",j).strip_edges(); if (f.match(str)) { valid=true; break; } } if (valid) break; } } else { int idx=filter->get_selected(); if (filters.size()>1) idx--; if (idx>=0 && idx<filters.size()) { String flt=filters[idx].get_slice(";",0); int filterSliceCount=flt.get_slice_count(","); for (int j=0;j<filterSliceCount;j++) { String str = (flt.get_slice(",",j).strip_edges()); if (f.match(str)) { valid=true; break; } } if (!valid && filterSliceCount>0) { String str = (flt.get_slice(",",0).strip_edges()); f+=str.substr(1, str.length()-1); _request_single_thumbnail(get_current_dir().plus_file(f.get_file())); file->set_text(f.get_file()); valid=true; } } else { valid=true; } } if (!valid) { exterr->popup_centered_minsize(Size2(250,80)); return; } if (dir_access->file_exists(f)) { confirm_save->set_text(TTR("File Exists, Overwrite?")); confirm_save->popup_centered(Size2(200,80)); } else { _save_to_recent(); emit_signal("file_selected",f); hide(); } } }