Documented wxMotif filedialog limitations WRT wildcard syntax.
Modified filedialog to either extract the wildcard (if only one wildcard is present) or assert (if more than one is present). git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18681 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -38,6 +38,13 @@ types of file with a description for each, such as:
|
||||
"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}
|
||||
@@ -58,7 +65,10 @@ Constructor. Use \helpref{wxFileDialog::ShowModal}{wxfiledialogshowmodal} to sho
|
||||
|
||||
\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:
|
||||
|
||||
@@ -192,6 +202,9 @@ Sets the wildcard, which can contain multiple file types, for example:
|
||||
|
||||
``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}
|
||||
|
@@ -457,7 +457,11 @@ void MyFrame::FileOpen(wxCommandEvent& WXUNUSED(event) )
|
||||
_T("Testing open file dialog"),
|
||||
_T(""),
|
||||
_T(""),
|
||||
#ifdef __WXMOTIF__
|
||||
_T("C++ files (*.cpp)|*.cpp")
|
||||
#else
|
||||
_T("C++ files (*.h;*.cpp)|*.h;*.cpp")
|
||||
#endif
|
||||
);
|
||||
|
||||
dialog.SetDirectory(wxGetHomeDir());
|
||||
|
@@ -26,6 +26,7 @@
|
||||
#include "wx/intl.h"
|
||||
#include "wx/app.h"
|
||||
#include "wx/settings.h"
|
||||
#include "wx/tokenzr.h"
|
||||
|
||||
#ifdef __VMS__
|
||||
#pragma message disable nosimpint
|
||||
@@ -118,6 +119,14 @@ wxString wxFileSelectorEx(const char *title,
|
||||
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) )
|
||||
{
|
||||
@@ -140,6 +149,26 @@ void wxFileSelOk(Widget WXUNUSED(fs), XtPointer WXUNUSED(client_data), XmFileSel
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
@@ -255,13 +284,15 @@ int wxFileDialog::ShowModal()
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -281,6 +312,8 @@ int wxFileDialog::ShowModal()
|
||||
|
||||
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.
|
||||
|
Reference in New Issue
Block a user