public DialogResponse FileOpen(string message, FileDialogOptions options) { var widget = IntPtr.Zero; var response = GtkInterop.ResponseType.GTK_RESPONSE_OK; var ok = GtkInterop.AllocGtkString("OK"); var cancel = GtkInterop.AllocGtkString("Cancel"); var fileName = ""; try { widget = GtkInterop.gtk_file_chooser_dialog_new(options.Title, IntPtr.Zero, GtkInterop.FileChooserAction.GTK_FILE_CHOOSER_ACTION_OPEN, ok, (int)GtkInterop.ResponseType.GTK_RESPONSE_OK, cancel, (int)GtkInterop.ResponseType.GTK_RESPONSE_CANCEL, IntPtr.Zero); if (!string.IsNullOrEmpty(options.Directory) && Directory.Exists(options.Directory)) { GtkInterop.gtk_file_chooser_set_current_folder(widget, options.Directory); } if (options.MustExist) { Log.Error("FileOpen option MustExist not supported."); } foreach (var fileFilter in options.Filters) { var filter = GtkInterop.gtk_file_filter_new(); GtkInterop.gtk_file_filter_set_name(filter, fileFilter.Name); GtkInterop.gtk_file_filter_add_pattern(filter, $"*.{fileFilter.Extension}"); GtkInterop.gtk_file_chooser_add_filter(widget, filter); } response = GtkInterop.gtk_dialog_run(widget); if (response == GtkInterop.ResponseType.GTK_RESPONSE_OK) { fileName = Uri.UnescapeDataString(GtkInterop.gtk_file_chooser_get_filename(widget)); } } catch (Exception ex) { Console.WriteLine(ex); } finally { GtkInterop.gtk_widget_destroy(widget); GtkInterop.g_free(ok); GtkInterop.g_free(cancel); } return(new DialogResponse { IsCanceled = response != GtkInterop.ResponseType.GTK_RESPONSE_OK, Value = fileName }); }
public DialogResponse SelectFolder(string message, FileDialogOptions options) { var widget = IntPtr.Zero; var response = GtkInterop.ResponseType.GTK_RESPONSE_OK; var ok = GtkInterop.AllocGtkString("OK"); var cancel = GtkInterop.AllocGtkString("Cancel"); var folder = ""; try { widget = GtkInterop.gtk_file_chooser_dialog_new(options.Title, IntPtr.Zero, GtkInterop.FileChooserAction.GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, ok, (int)GtkInterop.ResponseType.GTK_RESPONSE_OK, cancel, (int)GtkInterop.ResponseType.GTK_RESPONSE_CANCEL, IntPtr.Zero); response = GtkInterop.gtk_dialog_run(widget); if (response == GtkInterop.ResponseType.GTK_RESPONSE_OK) { var uri = new Uri(GtkInterop.gtk_file_chooser_get_uri(widget)); folder = Uri.UnescapeDataString(uri.AbsolutePath); } } catch (Exception ex) { Console.WriteLine(ex); } finally { GtkInterop.gtk_widget_destroy(widget); GtkInterop.g_free(ok); GtkInterop.g_free(cancel); } return(new DialogResponse { IsCanceled = response != GtkInterop.ResponseType.GTK_RESPONSE_OK, Value = folder }); }