Class FileChooser

All Implemented Interfaces:
PointerInterface

public class FileChooser extends Interface
`GtkFileChooser` is an interface that can be implemented by file
selection widgets.

In GTK, the main objects that implement this interface are
[class@Gtk.FileChooserWidget] and [class@Gtk.FileChooserDialog].

You do not need to write an object that implements the `GtkFileChooser`
interface unless you are trying to adapt an existing file selector to
expose a standard programming interface.

`GtkFileChooser` allows for shortcuts to various places in the filesystem.
In the default implementation these are displayed in the left pane. It
may be a bit confusing at first that these shortcuts come from various
sources and in various flavours, so lets explain the terminology here:

- Bookmarks: are created by the user, by dragging folders from the
right pane to the left pane, or by using the “Add”. Bookmarks
can be renamed and deleted by the user.

- Shortcuts: can be provided by the application. For example, a Paint
program may want to add a shortcut for a Clipart folder. Shortcuts
cannot be modified by the user.

- Volumes: are provided by the underlying filesystem abstraction. They are
the “roots” of the filesystem.

# File Names and Encodings

When the user is finished selecting files in a `GtkFileChooser`, your
program can get the selected filenames as `GFile`s.

# Adding options

You can add extra widgets to a file chooser to provide options
that are not present in the default design, by using
[method@Gtk.FileChooser.add_choice]. Each choice has an identifier and
a user visible label; additionally, each choice can have multiple
options. If a choice has no option, it will be rendered as a
check button with the given label; if a choice has options, it will
be rendered as a combo box.

https://docs.gtk.org/gtk4/iface.FileChooser.html

  • Constructor Details

  • Method Details

    • getClassHandler

      public static ClassHandler getClassHandler()
    • addChoice

      public void addChoice(@Nonnull Str id, @Nonnull Str label, @Nullable Strs options, @Nullable Strs option_labels)
      Adds a 'choice' to the file chooser.

      This is typically implemented as a combobox or, for boolean choices,
      as a checkbutton. You can select a value using
      [method@Gtk.FileChooser.set_choice] before the dialog is shown,
      and you can obtain the user-selected value in the
      [signal@Gtk.Dialog::response] signal handler using
      [method@Gtk.FileChooser.get_choice].
      Parameters:
      id - id for the added choice
      label - user-visible label for the added choice
      options - ids for the options of the choice, or %NULL for a boolean choice
      option_labels - user-visible labels for the options, must be the same length as @options
    • addChoice

      public void addChoice(String id, String label, @Nullable Strs options, @Nullable Strs option_labels)
      Adds a 'choice' to the file chooser.

      This is typically implemented as a combobox or, for boolean choices,
      as a checkbutton. You can select a value using
      [method@Gtk.FileChooser.set_choice] before the dialog is shown,
      and you can obtain the user-selected value in the
      [signal@Gtk.Dialog::response] signal handler using
      [method@Gtk.FileChooser.get_choice].
      Parameters:
      id - id for the added choice
      label - user-visible label for the added choice
      options - ids for the options of the choice, or %NULL for a boolean choice
      option_labels - user-visible labels for the options, must be the same length as @options
    • addFilter

      public void addFilter(@Nonnull FileFilter filter)
      Adds @filter to the list of filters that the user can select between.

      When a filter is selected, only files that are passed by that
      filter are displayed.

      Note that the @chooser takes ownership of the filter if it is floating,
      so you have to ref and sink it if you want to keep a reference.
      Parameters:
      filter - a `GtkFileFilter`
    • addShortcutFolder

      public boolean addShortcutFolder(@Nonnull File folder) throws AllocationError
      Adds a folder to be displayed with the shortcut folders
      in a file chooser.
      Parameters:
      folder - a `GFile` for the folder to add
      Returns:
      %TRUE if the folder could be added successfully, %FALSE otherwise.
      Throws:
      AllocationError
    • getAction

      public int getAction()
      Gets the type of operation that the file chooser is performing.
      Returns:
      the action that the file selector is performing
    • getChoice

      public Str getChoice(@Nonnull Str id)
      Gets the currently selected option in the 'choice' with the given ID.
      Parameters:
      id - the ID of the choice to get
      Returns:
      the ID of the currently selected option
    • getChoice

      public Str getChoice(String id)
      Gets the currently selected option in the 'choice' with the given ID.
      Parameters:
      id - the ID of the choice to get
      Returns:
      the ID of the currently selected option
    • getCreateFolders

      public boolean getCreateFolders()
      Gets whether file chooser will offer to create new folders.
      Returns:
      %TRUE if the Create Folder button should be displayed.
    • getCurrentFolder

      public File getCurrentFolder()
      Gets the current folder of @chooser as `GFile`.
      Returns:
      the `GFile` for the current folder.
    • getCurrentName

      public Str getCurrentName()
      Gets the current name in the file selector, as entered by the user.

      This is meant to be used in save dialogs, to get the currently typed
      filename when the file itself does not exist yet.
      Returns:
      The raw text from the file chooser’s “Name” entry. Free with g_free(). Note that this string is not a full pathname or URI; it is whatever the contents of the entry are. Note also that this string is in UTF-8 encoding, which is not necessarily the system’s encoding for filenames.
    • getFile

      public File getFile()
      Gets the `GFile` for the currently selected file in
      the file selector.

      If multiple files are selected, one of the files will be
      returned at random.

      If the file chooser is in folder mode, this function returns
      the selected folder.
      Returns:
      a selected `GFile`. You own the returned file; use g_object_unref() to release it.
    • getFiles

      public ListModel getFiles()
      Lists all the selected files and subfolders in the current folder
      of @chooser as `GFile`.
      Returns:
      a list model containing a `GFile` for each selected file and subfolder in the current folder. Free the returned list with g_object_unref().
    • getFilter

      public FileFilter getFilter()
      Gets the current filter.
      Returns:
      the current filter
    • getFilters

      public ListModel getFilters()
      Gets the current set of user-selectable filters, as a list model.

      See [method@Gtk.FileChooser.add_filter] and
      [method@Gtk.FileChooser.remove_filter] for changing individual filters.

      You should not modify the returned list model. Future changes to
      @chooser may or may not affect the returned model.
      Returns:
      a `GListModel` containing the current set of user-selectable filters.
    • getSelectMultiple

      public boolean getSelectMultiple()
      Gets whether multiple files can be selected in the file
      chooser.
      Returns:
      %TRUE if multiple files can be selected.
    • getShortcutFolders

      public ListModel getShortcutFolders()
      Queries the list of shortcut folders in the file chooser.

      You should not modify the returned list model. Future changes to
      @chooser may or may not affect the returned model.
      Returns:
      A list model of `GFile`s
    • removeChoice

      public void removeChoice(@Nonnull Str id)
      Removes a 'choice' that has been added with gtk_file_chooser_add_choice().
      Parameters:
      id - the ID of the choice to remove
    • removeChoice

      public void removeChoice(String id)
      Removes a 'choice' that has been added with gtk_file_chooser_add_choice().
      Parameters:
      id - the ID of the choice to remove
    • removeFilter

      public void removeFilter(@Nonnull FileFilter filter)
      Removes @filter from the list of filters that the user can select between.
      Parameters:
      filter - a `GtkFileFilter`
    • removeShortcutFolder

      public boolean removeShortcutFolder(@Nonnull File folder) throws AllocationError
      Removes a folder from the shortcut folders in a file chooser.
      Parameters:
      folder - a `GFile` for the folder to remove
      Returns:
      %TRUE if the folder could be removed successfully, %FALSE otherwise.
      Throws:
      AllocationError
    • setAction

      public void setAction(int action)
      Sets the type of operation that the chooser is performing.

      The user interface is adapted to suit the selected action.

      For example, an option to create a new folder might be shown
      if the action is %GTK_FILE_CHOOSER_ACTION_SAVE but not if the
      action is %GTK_FILE_CHOOSER_ACTION_OPEN.
      Parameters:
      action - the action that the file selector is performing
    • setChoice

      public void setChoice(@Nonnull Str id, @Nonnull Str option)
      Selects an option in a 'choice' that has been added with
      gtk_file_chooser_add_choice().

      For a boolean choice, the possible options are "true" and "false".
      Parameters:
      id - the ID of the choice to set
      option - the ID of the option to select
    • setChoice

      public void setChoice(String id, String option)
      Selects an option in a 'choice' that has been added with
      gtk_file_chooser_add_choice().

      For a boolean choice, the possible options are "true" and "false".
      Parameters:
      id - the ID of the choice to set
      option - the ID of the option to select
    • setCreateFolders

      public void setCreateFolders(boolean create_folders)
      Sets whether file chooser will offer to create new folders.

      This is only relevant if the action is not set to be
      %GTK_FILE_CHOOSER_ACTION_OPEN.
      Parameters:
      create_folders - %TRUE if the Create Folder button should be displayed
    • setCurrentFolder

      public boolean setCurrentFolder(@Nullable File file) throws AllocationError
      Sets the current folder for @chooser from a `GFile`.
      Parameters:
      file - the `GFile` for the new folder
      Returns:
      %TRUE if the folder could be changed successfully, %FALSE otherwise.
      Throws:
      AllocationError
    • setCurrentName

      public void setCurrentName(@Nonnull Str name)
      Sets the current name in the file selector, as if entered
      by the user.

      Note that the name passed in here is a UTF-8 string rather
      than a filename. This function is meant for such uses as a
      suggested name in a “Save As...” dialog. You can pass
      “Untitled.doc” or a similarly suitable suggestion for the @name.

      If you want to preselect a particular existing file, you should
      use [method@Gtk.FileChooser.set_file] instead.

      Please see the documentation for those functions for an example
      of using [method@Gtk.FileChooser.set_current_name] as well.
      Parameters:
      name - the filename to use, as a UTF-8 string
    • setCurrentName

      public void setCurrentName(String name)
      Sets the current name in the file selector, as if entered
      by the user.

      Note that the name passed in here is a UTF-8 string rather
      than a filename. This function is meant for such uses as a
      suggested name in a “Save As...” dialog. You can pass
      “Untitled.doc” or a similarly suitable suggestion for the @name.

      If you want to preselect a particular existing file, you should
      use [method@Gtk.FileChooser.set_file] instead.

      Please see the documentation for those functions for an example
      of using [method@Gtk.FileChooser.set_current_name] as well.
      Parameters:
      name - the filename to use, as a UTF-8 string
    • setFile

      public boolean setFile(@Nonnull File file) throws AllocationError
      Sets @file as the current filename for the file chooser.

      This includes changing to the file’s parent folder and actually selecting
      the file in list. If the @chooser is in %GTK_FILE_CHOOSER_ACTION_SAVE mode,
      the file’s base name will also appear in the dialog’s file name entry.

      If the file name isn’t in the current folder of @chooser, then the current
      folder of @chooser will be changed to the folder containing @file.

      Note that the file must exist, or nothing will be done except
      for the directory change.

      If you are implementing a save dialog, you should use this function if
      you already have a file name to which the user may save; for example,
      when the user opens an existing file and then does “Save As…”. If you
      don’t have a file name already — for example, if the user just created
      a new file and is saving it for the first time, do not call this function.

      Instead, use something similar to this:

      ```c
      static void
      prepare_file_chooser (GtkFileChooser *chooser,
      GFile *existing_file)
      {
      gboolean document_is_new = (existing_file == NULL);

      if (document_is_new)
      {
      GFile *default_file_for_saving = g_file_new_for_path ("./out.txt");
      // the user just created a new document
      gtk_file_chooser_set_current_folder (chooser, default_file_for_saving, NULL);
      gtk_file_chooser_set_current_name (chooser, "Untitled document");
      g_object_unref (default_file_for_saving);
      }
      else
      {
      // the user edited an existing document
      gtk_file_chooser_set_file (chooser, existing_file, NULL);
      }
      }
      ```
      Parameters:
      file - the `GFile` to set as current
      Returns:
      Not useful
      Throws:
      AllocationError
    • setFilter

      public void setFilter(@Nonnull FileFilter filter)
      Sets the current filter.

      Only the files that pass the filter will be displayed.
      If the user-selectable list of filters is non-empty, then
      the filter should be one of the filters in that list.

      Setting the current filter when the list of filters is
      empty is useful if you want to restrict the displayed
      set of files without letting the user change it.
      Parameters:
      filter - a `GtkFileFilter`
    • setSelectMultiple

      public void setSelectMultiple(boolean select_multiple)
      Sets whether multiple files can be selected in the file chooser.

      This is only relevant if the action is set to be
      %GTK_FILE_CHOOSER_ACTION_OPEN or
      %GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER.
      Parameters:
      select_multiple - %TRUE if multiple files can be selected.
    • getTypeID

      public static long getTypeID()
    • getParentTypeID

      public static long getParentTypeID()
    • getTypeSize

      public static TypeSystem.TypeSize getTypeSize()
    • getParentTypeSize

      public static TypeSystem.TypeSize getParentTypeSize()
    • getInstanceSize

      public static int getInstanceSize()