filedlg.h

Clase wxFileDialog

Esta clase representa el cuadro de diálogo del selector de archivos.

Jerarquía:

Jerarquía de la clase wxFileDialog

La ruta y el nombre de fichero son elementos distintos de una ruta de fichero completa. Si path es wxEmptyString, se utilizará el directorio actual. Si filename es wxEmptyString, no se proporcionará ningún nombre de archivo por defecto. El comodín determina qué archivos se muestran en el selector de archivos, y la extensión de archivo proporciona una extensión de tipo para el nombre de archivo requerido.

El uso típico para el diálogo de abrir fichero es:

void MyFrame::OnOpen(wxCommandEvent& WXUNUSED(event))
{
    if (...current content has not been saved...)
    {
        if (wxMessageBox(_("Current content has not been saved! Proceed?"), _("Please confirm"),
                         wxICON_QUESTION | wxYES_NO, this) == wxNO )
            return;
        //else: proceed asking to the user the new file to open
    }
 
    wxFileDialog
        openFileDialog(this, _("Open XYZ file"), "", "",
                       "XYZ files (*.xyz)|*.xyz", wxFD_OPEN|wxFD_FILE_MUST_EXIST);
 
    if (openFileDialog.ShowModal() == wxID_CANCEL)
        return;     // the user changed idea...
 
    // proceed loading the file chosen by the user;
    // this can be done with e.g. wxWidgets input streams:
    wxFileInputStream input_stream(openFileDialog.GetPath());
    if (!input_stream.IsOk())
    {
        wxLogError("Cannot open file '%s'.", openFileDialog.GetPath());
        return;
    }
 
    ...
}

En cambio, el uso típico del cuadro de diálogo de guardar archivo es algo más sencillo:

void MyFrame::OnSaveAs(wxCommandEvent& WXUNUSED(event))
{
    wxFileDialog
        saveFileDialog(this, _("Save XYZ file"), "", "",
                       "XYZ files (*.xyz)|*.xyz", wxFD_SAVE|wxFD_OVERWRITE_PROMPT);
 
    if (saveFileDialog.ShowModal() == wxID_CANCEL)
        return;     // the user changed idea...
 
    // save the current contents in the file;
    // this can be done with e.g. wxWidgets output streams:
    wxFileOutputStream output_stream(saveFileDialog.GetPath());
    if (!output_stream.IsOk())
    {
        wxLogError("Cannot save current contents in file '%s'.", saveFileDialog.GetPath());
        return;
    }
 
    ...
}

Filtros comodín

Todas las implementaciones de wxFileDialog proporcionan un filtro comodín. Si se escribe un nombre de archivo que contenga comodines (*, ?) en el elemento de texto del nombre de archivo y se pulsa Aceptar, solo se mostrarán los archivos que coincidan con el patrón. El comodín puede ser una especificación para múltiples tipos de archivo con una descripción para cada uno, como por ejemplo:

"BMP and GIF files (*.bmp;*.gif)|*.bmp;*.gif|PNG files (*.png)|*.png"

En Mac macOS en el diálogo de abrir archivo la caja de elección de filtro no se muestra por defecto. En su lugar, todos los comodines dados se aplican al mismo tiempo: Así, en el ejemplo anterior se muestran todos los archivos bmp, gif y png. Para forzar la visualización de la opción de filtro, configurar las wxSystemOptions correspondientes antes de llamar al diálogo de apertura de archivos:

wxSystemOptions::SetOption(wxOSX_FILEDIALOG_ALWAYS_SHOW_TYPES, 1)

Pero a diferencia de Windows y Unix, donde la elección del tipo de archivo filtra solo los archivos seleccionados, en Mac macOS incluso en este caso el diálogo muestra todos los archivos que coinciden con todos los tipos de archivo. Los archivos que no coinciden con el tipo de archivo seleccionado actualmente aparecen en gris y no se pueden seleccionar.

Personalización de diálogos

De forma única entre los otros diálogos estándar, wxFileDialog puede personalizarse añadiéndole controles extra. Además, hay dos formas de hacerlo: la primera es definir una función callback y usar para decirle al diálogo que la llame, mientras que la segunda requiere definir una clase que herede de wxFileDialogCustomizeHook e implementar sus funciones virtuales, en particular wxFileDialogCustomizeHook::AddCustomControls() donde se tienen que crear los controles extra, y finalmente llamar aSetCustomizeHook() con este objeto hook personalizado.

El primer enfoque es algo más simple y flexible, ya que permite crear cualquier tipo de controles personalizados, pero no está soportado por el "nuevo estilo" (donde "nuevo" significa usado desde Windows Vista, es decir, alrededor de 2007) de diálogos de archivo bajo MSW. Debido a esto, llamar a SetExtraControlCreator() en wxMSW fuerza el uso de diálogos de estilo antiguo (Windows XP), que pueden parecer fuera de lugar. El segundo enfoque es implementado por los diálogos MSW de forma nativa y no sufre esta limitación, por lo que se recomienda su uso, especialmente si los pocos tipos de control simples soportados por él (ver wxFileDialogCustomize para más información sobre los controles soportados) son suficientes para sus necesidades.

Ambas aproximaciones a la personalización de diálogos están demostradas en el Ejemplo de Diálogos, comprobarlo para más detalles.

Nota: Los diálogos de archivo del nuevo estilo sólo se pueden utilizar en wxMSW cuando se utiliza el modelo de subprocesamiento COM. Este es el caso por defecto, pero si la aplicación inicializa COM por sí misma utilizando el modelo multihilo, se utilizan los diálogos de estilo antiguo, al menos cuando deben tener un padre, ya que el nuevo estilo de diálogo no soporta este modelo de subprocesamiento.

Estilos

Esta clase admite los siguientes estilos:

wxFD_DEFAULT_STYLE
Equivalente a wxFD_OPEN.
wxFD_OPEN
Es un diálogo de apertura; normalmente esto significa que la etiqueta del botón por defecto del diálogo es "Abrir". No puede combinarse con wxFD_SAVE.
wxFD_SAVE
Este es un diálogo de guardar; normalmente significa que la etiqueta del botón por defecto del diálogo es "Guardar". No puede combinarse con wxFD_OPEN.
wxFD_OVERWRITE_PROMPT
Solo para diálogos de guardado: pide confirmación si se va a sobrescribir un fichero. Este estilo está siempre activado en wxOSX y no puede ser desactivado.
wxFD_NO_FOLLOW
Indica al diálogo que devuelva la ruta y el nombre del fichero de acceso directo seleccionado, no su destino como hace por defecto. Actualmente esta opción solo está implementada en wxMSW y wxOSX (donde impide que se resuelvan los alias). La ruta de enlace no desreferenciada siempre se devuelve, incluso sin esta bandera, en Unix, por lo que usarla allí no hace nada. Esta opción se añadió en wxWidgets 3.1.0.
wxFD_FILE_MUST_EXIST
Solo para el diálogo de apertura: el usuario solo puede seleccionar ficheros que existan realmente. Hay que tener en cuenta que en macOS el diálogo de archivo con estilo wxFD_OPEN siempre se comporta como si se hubiera especificado este estilo, porque es imposible elegir un archivo que no existe desde un diálogo de archivo estándar de macOS.
wxFD_MULTIPLE
Solo para el diálogo de apertura: permite seleccionar múltiples ficheros.
wxFD_CHANGE_DIR
Cambia el directorio de trabajo actual (cuando se cierra el diálogo) al directorio donde está el fichero o ficheros elegidos por el usuario.
wxFD_PREVIEW
Mostrar la vista previa de los archivos seleccionados (actualmente solo soportado por wxGTK).
wxFD_SHOW_HIDDEN
Muestra los ficheros ocultos. Esta bandera fue añadida en wxWidgets 3.1.3

Tipos

ExtraControlCreatorFunction()

typedef wxWindow*(* wxFileDialog::ExtraControlCreatorFunction) (wxWindow *)

El tipo de función utilizada como argumento para SetExtraControlCreator().

Funciones miembro públicas

wxFileDialog()

wxFileDialog::wxFileDialog( wxWindow * parent, const wxString & message = wxFileSelectorPromptStr, const wxString & defaultDir = wxEmptyString, const wxString & defaultFile = wxEmptyString, const wxString & wildcard = wxFileSelectorDefaultWildcardStr, long style = wxFD_DEFAULT_STYLE, const wxPoint & pos = wxDefaultPosition, const wxSize & size = wxDefaultSize, const wxString & name = wxFileDialogNameStr )

Constructor.

Utilizar ShowModal() para mostrar el diálogo.

Parámetros
parent
Ventana padre.
message
Mensaje a mostrar en el diálogo.
defaultDir
El directorio por defecto, o la cadena vacía.
defaultFile
El nombre de archivo por defecto, o la cadena vacía.
wildcard
Un comodín, como "*.*" o "Archivos BMP (*.bmp)|*.bmp|Archivos GIF (*.gif)|*.gif". Hay que tener en cuenta que el diálogo nativo de Motif tiene algunas limitaciones con respecto a los comodines; vea la sección Observaciones más arriba.
style
Un estilo de diálogo.
pos
Posición del diálogo. No implementado.
size
Tamaño del diálogo. No implementado.
name
Nombre del diálogo. No implementado.
~wxFileDialog()

virtual wxFileDialog::~~wxFileDialog()

Destructor.

AddShortcut()

bool wxFileDialog::AddShortcut( const wxString & directory, int flags = 0 )

Añade un directorio a la lista de accesos directos mostrada en el diálogo.

Los diálogos de archivos de muchas plataformas muestran una lista fija de directorios que el usuario puede seleccionar fácilmente. Esta función permite añadir un directorio definido por la aplicación a esta lista, lo que puede ser conveniente para los programas que utilizan directorios específicos para sus archivos en lugar del directorio por defecto del documento de usuario (ver wxStandardPaths).

Actualmente esta función solo está implementada en wxMSW y wxGTK y no hace nada en las otras plataformas. Además, en wxMSW esta función es incompatible con el uso de SetExtraControlCreator(), si necesita utilizar esta función y personalizar el contenido del diálogo, por favor utilice la más reciente SetCustomizeHook() en su lugar.

El ejemplo de diálogo muestra el uso de esta función añadiendo dos accesos directos personalizados correspondientes a los subdirectorios de la variable de entorno WXWIN si está definida.

Nota: En wxMSW, los accesos directos aparecen por defecto en una sección separada llamada "Application Links". Para cambiar el título de esta sección, la aplicación puede especificar un valor del campo FileDescription de la estructura de información de la versión en su archivo de recursos; si está presente, esta cadena se utilizará como título de la sección.

Parámetros
directory
La ruta completa al directorio, que debe existir.
flags
Puede establecerse a wxFD_SHORTCUT_BOTTOM (que es también el comportamiento por defecto) para añadir el acceso directo después de los ya existentes, o wxFD_SHORTCUT_TOP para añadirlo antes que ellos. Esta última opción solo está disponible en wxMSW, en wxGTK los accesos directos siempre se añaden al final de la lista.
Valor de retorno

true en caso de éxito o false si no se ha podido añadir el acceso directo, por ejemplo porque esta funcionalidad no está disponible en la plataforma actual.

GetCurrentlySelectedFilename()

virtual wxString wxFileDialog::GetCurrentlySelectedFilename() const

Devuelve la ruta del archivo actualmente seleccionado en el diálogo.

Hay que tener en cuenta que este archivo no necesariamente va a ser aceptado por el usuario, por lo que llamar a esta función sobre todo tiene sentido desde un controlador de eventos de UI de actualización de un control extra de diálogo de archivo personalizado para actualizar su estado dependiendo del archivo seleccionado actualmente.

Actualmente esta función está completamente implementada en GTK y MSW y siempre devuelve una cadena vacía en cualquier otro lugar.

Valor de retorno

La ruta del archivo actualmente seleccionado o una cadena vacía si no hay nada seleccionado.

GetCurrentlySelectedFilterIndex()

virtual int wxFileDialog::GetCurrentlySelectedFilterIndex() const

Devuelve el índice del filtro de tipo de archivo actualmente seleccionado en el diálogo.

Hay que tener en cuenta que este filtro de tipo de archivo no será necesariamente el que finalmente acepte el usuario, por lo que llamar a esta función tiene más sentido desde un controlador de eventos de actualización de interfaz de usuario de un control adicional de diálogo de archivo personalizado para actualizar su estado en función del filtro de tipo de archivo seleccionado actualmente.

Actualmente esta función está completamente implementada en macOS y MSW y siempre devuelve wxNOT_FOUND en cualquier otro lugar.

Valor de retorno

El índice basado en 0 del filtro de tipo de archivo seleccionado actualmente o wxNOT_FOUND si no hay nada seleccionado.

GetDirectory()

virtual wxString wxFileDialog::GetDirectory() const

Devuelve el directorio por defecto.

GetExtraControl()

wxWindow* wxFileDialog::GetExtraControl() const

Si las funciones SetExtraControlCreator() y ShowModal() fueron llamadas, devuelve la ventana extra.

En caso contrario devuelve NULL.

GetFilename()

virtual wxString wxFileDialog::GetFilename() const

Devuelve el nombre de archivo por defecto.

Nota: Esta función no puede utilizarse con diálogos que tengan el estilo wxFD_MULTIPLE, utilizar GetFilenames() en su lugar.

GetFilenames()

virtual void wxFileDialog::GetFilenames(wxArrayString & filenames) const

Rellena el array filenames con los nombres de los ficheros elegidos.

Esta función solo debe utilizarse con los diálogos que tengan el estilo wxFD_MULTIPLE, utilizar GetFilename() para los demás.

Hay que tener en cuenta que en Windows, si el usuario selecciona accesos directos, los nombres de fichero incluyen rutas, ya que la aplicación no puede determinar la ruta completa de cada fichero referenciado añadiendo al nombre de fichero el directorio que contiene los accesos directos.

GetFilterIndex()

virtual int wxFileDialog::GetFilterIndex() const

Devuelve el índice en la lista de filtros suministrada, opcionalmente, en el parámetro comodín.

Antes de que se muestre el diálogo, este es el índice que se utilizará cuando se muestre el diálogo por primera vez.

Después de que se muestre el diálogo, este es el índice seleccionado por el usuario.

GetMessage()

virtual wxString wxFileDialog::GetMessage() const

Devuelve el mensaje que se mostrará en el diálogo.

GetPath()

virtual wxString wxFileDialog::GetPath() const

Devuelve la ruta completa (directorio y nombre de archivo) del archivo seleccionado.

Nota: Esta función no puede utilizarse con diálogos que tengan el estilo wxFD_MULTIPLE, utilizar GetPaths() en su lugar.

GetPaths()

virtual void wxFileDialog::GetPaths(wxArrayString & paths) const

Rellena el array paths con las rutas completas de los ficheros elegidos.

Esta función solo debe usarse con los diálogos que tienen el estilo wxFD_MULTIPLE, use GetPath() para los demás.

GetWildcard()

virtual wxString wxFileDialog::GetWildcard() const

Devuelve el comodín de diálogo de archivo.

SetCustomizeHook()

bool wxFileDialog::SetCustomizeHook(wxFileDialogCustomizeHook & customizeHook)

Establece el gancho que se utilizará para personalizar el contenido del diálogo.

Esta función puede invocarse antes de llamar a ShowModal() para especificar que el contenido del diálogo debe personalizarse utilizando el gancho proporcionado. Ver la documentación de wxFileDialogCustomizeHook y Dialogs Sample para los ejemplos de uso.

Nota: Para definir un objeto hook personalizado, debe incluirse wx/filedlgcustomize.h además de la cabecera habitual wx/filedlg.h.

Parámetros
customizeHook
El objeto hook que utilizará el diálogo. Este objeto debe permanecer válido al menos hasta que vuelva ShowModal().
Valor de retorno

true si el gancho se ha establecido correctamente o false si la personalización del diálogo de archivo no está soportada por la plataforma actual.

SetDirectory()

virtual void wxFileDialog::SetDirectory(const wxString & directory)

Establece el directorio por defecto.

SetExtraControlCreator()

bool wxFileDialog::SetExtraControlCreator(ExtraControlCreatorFunction creator)

Personaliza el diálogo de archivos añadiendo una ventana extra, que normalmente se coloca debajo de la lista de archivos y encima de los botones.

SetExtraControlCreator() solo puede invocarse una vez, antes de llamar a ShowModal().

La función creator debe tomar el puntero a la ventana padre (diálogo de archivo) y debe devolver una ventana asignada con el operador new.

Nota: El uso de SetExtraControlCreator() en wxMSW fuerza el uso de diálogos de archivo "estilo antiguo" (Windows XP), en lugar de los nuevos (Vista) y no se recomienda por esta razón. Es preferible usar SetCustomizeHook() en su lugar.

SetFilename()

virtual void wxFileDialog::SetFilename(const wxString & setfilename)

Establece el nombre de archivo por defecto.

En wxGTK esto tendrá poco efecto a menos que se haya establecido previamente un directorio por defecto.

SetFilterIndex()

virtual void wxFileDialog::SetFilterIndex(int filterIndex)

Establece el índice de filtro por defecto, empezando por cero.

SetMessage()

virtual void wxFileDialog::SetMessage(const wxString & message)

Establece el mensaje que se mostrará en el diálogo.

SetPath()

virtual void wxFileDialog::SetPath(const wxString & path)

Establece la ruta (la combinación de directorio y nombre de archivo que se devolverá cuando se cierre el diálogo).

SetWildcard()

virtual void wxFileDialog::SetWildcard(const wxString & wildCard)

Establece el comodín, que puede contener varios tipos de archivo, por ejemplo: "Archivos BMP (*.bmp)|*.bmp|Archivos GIF (*.gif)|*.gif".

Hay que tener en cuenta que el diálogo nativo de Motif tiene algunas limitaciones con respecto a los comodines; vea la sección Observaciones más arriba.

ShowModal()

virtual int wxFileDialog::ShowModal()

Muestra el diálogo, devolviendo wxID_OK si el usuario ha pulsado OK, y wxID_CANCEL en caso contrario.

Reimplementado a partir de wxDialog.

Métodos y datos heredados

Esta clase hereda los métodos y datos miembro públicos y protegidos de wxObject, wxEvtHandler, wxWindow, wxDialog, wxTopLevelWindow y wxNonOwnedWindow.