diff options
Diffstat (limited to 'scene/gui/file_dialog.cpp')
| -rw-r--r-- | scene/gui/file_dialog.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/scene/gui/file_dialog.cpp b/scene/gui/file_dialog.cpp index c4226e0f2..a7ff1431b 100644 --- a/scene/gui/file_dialog.cpp +++ b/scene/gui/file_dialog.cpp @@ -156,11 +156,61 @@ void FileDialog::_action_pressed() { if (mode==MODE_SAVE_FILE) { + String ext = f.extension(); + 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); + 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; + } + } + } else { + valid=true; + } + } + + + if (!valid) { + + exterr->popup_centered_minsize(Size2(250,80)); + return; + + } + if (dir_access->file_exists(f)) { confirm_save->set_text("File Exists, Overwrite?"); confirm_save->popup_centered(Size2(200,80)); } else { + emit_signal("file_selected",f); hide(); } @@ -682,6 +732,10 @@ FileDialog::FileDialog() { mkdirerr->set_text("Could not create folder."); add_child(mkdirerr); + exterr = memnew( AcceptDialog ); + exterr->set_text("Must use a valid extension."); + add_child(exterr); + //update_file_list(); update_filters(); |
