mirror of https://github.com/bsnes-emu/bsnes.git
70 lines
2.2 KiB
C++
Executable File
70 lines
2.2 KiB
C++
Executable File
static string FileDialog(bool save, Window &parent, const string &path, const lstring &filter) {
|
|
string name;
|
|
|
|
GtkWidget *dialog = gtk_file_chooser_dialog_new(
|
|
save == 0 ? "Load File" : "Save File",
|
|
&parent != &Window::none() ? GTK_WINDOW(parent.p.widget) : (GtkWindow*)nullptr,
|
|
save == 0 ? GTK_FILE_CHOOSER_ACTION_OPEN : GTK_FILE_CHOOSER_ACTION_SAVE,
|
|
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
|
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
|
|
(const gchar*)nullptr
|
|
);
|
|
|
|
if(path) gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), path);
|
|
|
|
for(auto &filterItem : filter) {
|
|
GtkFileFilter *gtkFilter = gtk_file_filter_new();
|
|
gtk_file_filter_set_name(gtkFilter, filterItem);
|
|
lstring part;
|
|
part.split("(", filterItem);
|
|
part[1].rtrim<1>(")");
|
|
lstring list;
|
|
list.split(",", part[1]);
|
|
for(auto &pattern : list) gtk_file_filter_add_pattern(gtkFilter, pattern);
|
|
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), gtkFilter);
|
|
}
|
|
|
|
if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
|
|
char *temp = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
|
|
name = temp;
|
|
g_free(temp);
|
|
}
|
|
|
|
gtk_widget_destroy(dialog);
|
|
return name;
|
|
}
|
|
|
|
string pDialogWindow::fileOpen(Window &parent, const string &path, const lstring &filter) {
|
|
return FileDialog(0, parent, path, filter);
|
|
}
|
|
|
|
string pDialogWindow::fileSave(Window &parent, const string &path, const lstring &filter) {
|
|
return FileDialog(1, parent, path, filter);
|
|
}
|
|
|
|
string pDialogWindow::folderSelect(Window &parent, const string &path) {
|
|
string name;
|
|
|
|
GtkWidget *dialog = gtk_file_chooser_dialog_new(
|
|
"Select Folder",
|
|
&parent != &Window::none() ? GTK_WINDOW(parent.p.widget) : (GtkWindow*)nullptr,
|
|
GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
|
|
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
|
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
|
|
(const gchar*)nullptr
|
|
);
|
|
|
|
if(path) gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), path);
|
|
|
|
if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
|
|
char *temp = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
|
|
name = temp;
|
|
g_free(temp);
|
|
}
|
|
|
|
gtk_widget_destroy(dialog);
|
|
if(name == "") return "";
|
|
if(name.endswith("/") == false) name.append("/");
|
|
return name;
|
|
}
|