"BMP files (*.bmp)|*.bmp|GIF files (*.gif)|*.gif"
\end{verbatim}
+It must be noted that wildcard support in the native Motif file
+dialog is quite limited: only one alternative is supported,
+and it is displayed without the descriptive test; ``BMP files (*.bmp)|*.bmp''
+is displayed as ``*.bmp'', and both
+``BMP files (*.bmp)|*.bmp|GIF files (*.gif)|*.gif'' and
+``Image files|*.bmp;*.gif'' are errors.
+
\latexignore{\rtfignore{\wxheading{Members}}}
\membersection{wxFileDialog::wxFileDialog}\label{wxfiledialogconstr}
\docparam{defaultFile}{The default filename, or the empty string.}
-\docparam{wildcard}{A wildcard, such as ``*.*" or ``BMP files (*.bmp)|*.bmp|GIF files (*.gif)|*.gif".}
+\docparam{wildcard}{A wildcard, such as ``*.*" or ``BMP files (*.bmp)|*.bmp|GIF files (*.gif)|*.gif".
+
+Note that the native Motif dialog has some limitations with respect to
+wildcards; see the Remarks section above.}
\docparam{style}{A dialog style. A bitlist of:
``BMP files (*.bmp)|*.bmp|GIF files (*.gif)|*.gif"
+Note that the native Motif dialog has some limitations with respect to
+wildcards; see the Remarks section above.
+
\membersection{wxFileDialog::ShowModal}\label{wxfiledialogshowmodal}
\func{int}{ShowModal}{\void}
#include "wx/intl.h"
#include "wx/app.h"
#include "wx/settings.h"
+#include "wx/tokenzr.h"
#ifdef __VMS__
#pragma message disable nosimpint
wxString wxFileDialog::m_fileSelectorAnswer = "";
bool wxFileDialog::m_fileSelectorReturned = FALSE;
+static void wxFileSelClose(Widget WXUNUSED(w),
+ void* WXUNUSED(client_data),
+ XmAnyCallbackStruct *WXUNUSED(call_data))
+{
+ wxFileDialog::m_fileSelectorAnswer = "";
+ wxFileDialog::m_fileSelectorReturned = TRUE;
+}
+
void wxFileSelCancel( Widget WXUNUSED(fs), XtPointer WXUNUSED(client_data),
XmFileSelectionBoxCallbackStruct *WXUNUSED(cbs) )
{
}
}
+static wxString ParseWildCard( const wxString& wild )
+{
+ static const wxChar* msg =
+ _T("Motif file dialog does not understand this ")
+ _T("wildcard syntax");
+
+ wxStringTokenizer tok( wild, _T("|") );
+
+ wxCHECK_MSG( tok.CountTokens() <= 2, _T("*.*"), msg );
+
+ if( tok.CountTokens() == 1 ) return wild;
+
+ // CountTokens == 2
+ tok.GetNextToken();
+ wxStringTokenizer tok2( tok.GetNextToken(), _T(";") );
+
+ wxCHECK_MSG( tok2.CountTokens() == 1, tok2.GetNextToken(), msg );
+ return tok2.GetNextToken();
+}
+
wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message,
const wxString& defaultDir, const wxString& defaultFileName, const wxString& wildCard,
long style, const wxPoint& pos)
if (m_wildCard != "")
{
- wxString filter("");
+ // return something understandable by Motif
+ wxString wildCard = ParseWildCard( m_wildCard );
+ wxString filter;
if (m_dir != "")
- filter = m_dir + wxString("/") + m_wildCard;
+ filter = m_dir + wxString("/") + wildCard;
else
- filter = m_wildCard;
+ filter = wildCard;
- XmTextSetString(filterWidget, (char*) (const char*) filter);
+ XmTextSetString(filterWidget, (char*)filter.c_str());
XmFileSelectionDoSearch(fileSel, NULL);
}
XtAddCallback(fileSel, XmNcancelCallback, (XtCallbackProc)wxFileSelCancel, (XtPointer)NULL);
XtAddCallback(fileSel, XmNokCallback, (XtCallbackProc)wxFileSelOk, (XtPointer)NULL);
+ XtAddCallback(fileSel, XmNunmapCallback,
+ (XtCallbackProc)wxFileSelClose, (XtPointer)this);
//#if XmVersion > 1000
// I'm not sure about what you mean with XmVersion.