Copyright | Will Thompson Iñaki García Etxebarria and Jonas Platte |
---|---|
License | LGPL-2.1 |
Maintainer | Iñaki García Etxebarria (garetxe@gmail.com) |
Safe Haskell | None |
Language | Haskell2010 |
FileChooserDialog
is a dialog box suitable for use with
“File/Open” or “File/Save as” commands. This widget works by
putting a FileChooserWidget
inside a Dialog
. It exposes
the FileChooser
interface, so you can use all of the
FileChooser
functions on the file chooser dialog as well as
those for Dialog
.
Note that FileChooserDialog
does not have any methods of its
own. Instead, you should use the functions that work on a
FileChooser
.
If you want to integrate well with the platform you should use the
FileChooserNative
API, which will use a platform-specific
dialog if available and fall back to GtkFileChooserDialog
otherwise.
## {gtkfilechooser
-typical-usage}
In the simplest of cases, you can the following code to use
FileChooserDialog
to select a file for opening:
GtkWidget *dialog; GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN; gint res; dialog = gtk_file_chooser_dialog_new ("Open File", parent_window, action, _("_Cancel"), GTK_RESPONSE_CANCEL, _("_Open"), GTK_RESPONSE_ACCEPT, NULL); res = gtk_dialog_run (GTK_DIALOG (dialog)); if (res == GTK_RESPONSE_ACCEPT) { char *filename; GtkFileChooser *chooser = GTK_FILE_CHOOSER (dialog); filename = gtk_file_chooser_get_filename (chooser); open_file (filename); g_free (filename); } gtk_widget_destroy (dialog);
To use a dialog for saving, you can use this:
GtkWidget *dialog; GtkFileChooser *chooser; GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SAVE; gint res; dialog = gtk_file_chooser_dialog_new ("Save File", parent_window, action, _("_Cancel"), GTK_RESPONSE_CANCEL, _("_Save"), GTK_RESPONSE_ACCEPT, NULL); chooser = GTK_FILE_CHOOSER (dialog); gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); if (user_edited_a_new_document) gtk_file_chooser_set_current_name (chooser, _("Untitled document")); else gtk_file_chooser_set_filename (chooser, existing_filename); res = gtk_dialog_run (GTK_DIALOG (dialog)); if (res == GTK_RESPONSE_ACCEPT) { char *filename; filename = gtk_file_chooser_get_filename (chooser); save_to_file (filename); g_free (filename); } gtk_widget_destroy (dialog);
## {gtkfilechooserdialog
-setting-up}
There are various cases in which you may need to use a FileChooserDialog
:
- To select a file for opening. Use
GTK_FILE_CHOOSER_ACTION_OPEN
. - To save a file for the first time. Use
GTK_FILE_CHOOSER_ACTION_SAVE
, and suggest a name such as “Untitled” withfileChooserSetCurrentName
. - To save a file under a different name. Use
GTK_FILE_CHOOSER_ACTION_SAVE
, and set the existing filename withfileChooserSetFilename
. - To choose a folder instead of a file. Use
GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER
.
Note that old versions of the file chooser’s documentation suggested
using fileChooserSetCurrentFolder
in various
situations, with the intention of letting the application
suggest a reasonable default folder. This is no longer
considered to be a good policy, as now the file chooser is
able to make good suggestions on its own. In general, you
should only cause the file chooser to show a specific folder
when it is appropriate to use fileChooserSetFilename
,
i.e. when you are doing a Save As command and you already
have a file saved somewhere.
## {gtkfilechooserdialog
-responses}
FileChooserDialog
inherits from Dialog
, so buttons that
go in its action area have response codes such as
GTK_RESPONSE_ACCEPT
and GTK_RESPONSE_CANCEL
. For example, you
could call gtk_file_chooser_dialog_new()
as follows:
GtkWidget *dialog; GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN; dialog = gtk_file_chooser_dialog_new ("Open File", parent_window, action, _("_Cancel"), GTK_RESPONSE_CANCEL, _("_Open"), GTK_RESPONSE_ACCEPT, NULL);
This will create buttons for “Cancel” and “Open” that use stock
response identifiers from ResponseType
. For most dialog
boxes you can use your own custom response codes rather than the
ones in ResponseType
, but FileChooserDialog
assumes that
its “accept”-type action, e.g. an “Open” or “Save” button,
will have one of the following response codes:
GTK_RESPONSE_ACCEPT
GTK_RESPONSE_OK
GTK_RESPONSE_YES
GTK_RESPONSE_APPLY
This is because FileChooserDialog
must intercept responses
and switch to folders if appropriate, rather than letting the
dialog terminate — the implementation uses these known
response codes to know which responses can be blocked if
appropriate.
To summarize, make sure you use a
[stock response code][gtkfilechooserdialog-responses]
when you use FileChooserDialog
to ensure proper operation.
Synopsis
- newtype FileChooserDialog = FileChooserDialog (ManagedPtr FileChooserDialog)
- class GObject o => IsFileChooserDialog o
- toFileChooserDialog :: (MonadIO m, IsFileChooserDialog o) => o -> m FileChooserDialog
- noFileChooserDialog :: Maybe FileChooserDialog
Exported types
newtype FileChooserDialog Source #
Memory-managed wrapper type.
Instances
class GObject o => IsFileChooserDialog o Source #
Type class for types which can be safely cast to FileChooserDialog
, for instance with toFileChooserDialog
.
Instances
(GObject a, (UnknownAncestorError FileChooserDialog a :: Constraint)) => IsFileChooserDialog a Source # | |
Defined in GI.Gtk.Objects.FileChooserDialog | |
IsFileChooserDialog FileChooserDialog Source # | |
Defined in GI.Gtk.Objects.FileChooserDialog |
toFileChooserDialog :: (MonadIO m, IsFileChooserDialog o) => o -> m FileChooserDialog Source #
Cast to FileChooserDialog
, for types for which this is known to be safe. For general casts, use castTo
.
noFileChooserDialog :: Maybe FileChooserDialog Source #
A convenience alias for Nothing
:: Maybe
FileChooserDialog
.