From f8bcb37d996a475f39de36230770a808827e2a0f Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Mon, 4 Jun 2007 09:53:17 +0000 Subject: [PATCH] changed wxFileSelector() etc. functions to use wxString (so that any forms of strings can be used with it, not just wxChar*), while still preserving compatibility with passing NULL to them) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46317 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/filedlg.h | 185 +++++++++++++++++++++++++++++++++++----- src/common/fldlgcmn.cpp | 100 ++++++++++------------ 2 files changed, 209 insertions(+), 76 deletions(-) diff --git a/include/wx/filedlg.h b/include/wx/filedlg.h index 74cebe52c4..eebb5c93a6 100644 --- a/include/wx/filedlg.h +++ b/include/wx/filedlg.h @@ -148,41 +148,180 @@ private: // wxFileDialog convenience functions //---------------------------------------------------------------------------- -// File selector - backward compatibility +// NB: wxFileSelector() etc. used to take const wxChar* arguments in wx-2.8 +// and their default value was NULL. The official way to use these +// functions is to use wxString, with wxEmptyString as the default value. +// The templates below exist only to maintain compatibility with wx-2.8. + +#if WXWIN_COMPATIBILITY_2_8 +// return wxString created from the argument, return empty string if the +// argument is NULL: +inline wxString wxPtrOrStringToString(const wxString& s) { return s; } +inline wxString wxPtrOrStringToString(const char *s) { return s; } +inline wxString wxPtrOrStringToString(const wchar_t *s) { return s; } +inline wxString wxPtrOrStringToString(const wxCStrData& s) { return s; } +inline wxString wxPtrOrStringToString(const wxCharBuffer& s) { return s; } +inline wxString wxPtrOrStringToString(const wxWCharBuffer& s) { return s; } +// this one is for NULL: +inline wxString wxPtrOrStringToString(int s) +{ + wxASSERT_MSG( s == 0, _T("passing non-NULL int as string?") ); + return wxEmptyString; +} +#endif // WXWIN_COMPATIBILITY_2_8 + +WXDLLEXPORT wxString +wxDoFileSelector(const wxString& message = wxFileSelectorPromptStr, + const wxString& default_path = wxEmptyString, + const wxString& default_filename = wxEmptyString, + const wxString& default_extension = wxEmptyString, + const wxString& wildcard = wxFileSelectorDefaultWildcardStr, + int flags = 0, + wxWindow *parent = NULL, + int x = wxDefaultCoord, int y = wxDefaultCoord); + +WXDLLEXPORT wxString +wxDoFileSelectorEx(const wxString& message = wxFileSelectorPromptStr, + const wxString& default_path = wxEmptyString, + const wxString& default_filename = wxEmptyString, + int *indexDefaultExtension = NULL, + const wxString& wildcard = wxFileSelectorDefaultWildcardStr, + int flags = 0, + wxWindow *parent = NULL, + int x = wxDefaultCoord, int y = wxDefaultCoord); + WXDLLEXPORT wxString -wxFileSelector(const wxChar *message = wxFileSelectorPromptStr, - const wxChar *default_path = NULL, - const wxChar *default_filename = NULL, - const wxChar *default_extension = NULL, - const wxChar *wildcard = wxFileSelectorDefaultWildcardStr, +wxDoLoadFileSelector(const wxString& what, + const wxString& extension, + const wxString& default_name = wxEmptyString, + wxWindow *parent = NULL); + +WXDLLEXPORT wxString +wxDoSaveFileSelector(const wxString& what, + const wxString& extension, + const wxString& default_name = wxEmptyString, + wxWindow *parent = NULL); + +#if WXWIN_COMPATIBILITY_2_8 + +// File selector - backward compatibility +inline wxString wxFileSelector() +{ + return wxDoFileSelector(); +} + +inline wxString wxFileSelector(const wxString& message) +{ + return wxDoFileSelector(message); +} + +template +inline wxString wxFileSelector(const wxString& message, const T& default_path) +{ + return wxDoFileSelector(message, wxPtrOrStringToString(default_path)); +} + +template +inline wxString wxFileSelector(const wxString& message, + const T1& default_path, + const T2& default_filename) +{ + return wxDoFileSelector(message, + wxPtrOrStringToString(default_path), + wxPtrOrStringToString(default_filename)); +} + +template +inline wxString +wxFileSelector(const wxString& message, + const T1& default_path, + const T2& default_filename, + const T3& default_extension, + const wxString& wildcard = wxFileSelectorDefaultWildcardStr, int flags = 0, wxWindow *parent = NULL, - int x = wxDefaultCoord, int y = wxDefaultCoord); + int x = wxDefaultCoord, int y = wxDefaultCoord) +{ + return wxDoFileSelector(message, + wxPtrOrStringToString(default_path), + wxPtrOrStringToString(default_filename), + wxPtrOrStringToString(default_extension), + wildcard, + flags, + parent, + x, y); +} // An extended version of wxFileSelector -WXDLLEXPORT wxString -wxFileSelectorEx(const wxChar *message = wxFileSelectorPromptStr, - const wxChar *default_path = NULL, - const wxChar *default_filename = NULL, +inline wxString wxFileSelectorEx() +{ + return wxDoFileSelectorEx(); +} + +inline wxString wxFileSelectorEx(const wxString& message) +{ + return wxDoFileSelectorEx(message); +} + +template +inline wxString wxFileSelectorEx(const wxString& message, const T& default_path) +{ + return wxDoFileSelectorEx(message, wxPtrOrStringToString(default_path)); +} + +template +inline wxString +wxFileSelectorEx(const wxString& message, + const T1& default_path, + const T2& default_filename, int *indexDefaultExtension = NULL, - const wxChar *wildcard = wxFileSelectorDefaultWildcardStr, + const wxString& wildcard = wxFileSelectorDefaultWildcardStr, int flags = 0, wxWindow *parent = NULL, - int x = wxDefaultCoord, int y = wxDefaultCoord); + int x = wxDefaultCoord, int y = wxDefaultCoord) +{ + return wxDoFileSelectorEx(message, + wxPtrOrStringToString(default_path), + wxPtrOrStringToString(default_filename), + indexDefaultExtension, + wildcard, + flags, + parent, + x, y); +} // Ask for filename to load -WXDLLEXPORT wxString -wxLoadFileSelector(const wxChar *what, - const wxChar *extension, - const wxChar *default_name = (const wxChar *)NULL, - wxWindow *parent = (wxWindow *) NULL); +template +inline wxString wxLoadFileSelector(const wxString& what, + const wxString& extension, + const T& default_name = T(), + wxWindow *parent = NULL) +{ + return wxDoLoadFileSelector(what, extension, + wxPtrOrStringToString(default_name), + parent); +} // Ask for filename to save -WXDLLEXPORT wxString -wxSaveFileSelector(const wxChar *what, - const wxChar *extension, - const wxChar *default_name = (const wxChar *) NULL, - wxWindow *parent = (wxWindow *) NULL); +template +inline wxString wxSaveFileSelector(const wxString& what, + const wxString& extension, + const T& default_name = T(), + wxWindow *parent = NULL) +{ + return wxDoSaveFileSelector(what, extension, + wxPtrOrStringToString(default_name), + parent); +} + +#else // !WXWIN_COMPATIBILITY_2_8 + +#define wxFileSelector wxDoFileSelector +#define wxFileSelectorEx wxDoFileSelectorEx +#define wxLoadFileSelector wxDoLoadFileSelector +#define wxSaveFileSelector wxDoSaveFileSelector + +#endif // WXWIN_COMPATIBILITY_2_8/!WXWIN_COMPATIBILITY_2_8 #if defined (__WXUNIVERSAL__) diff --git a/src/common/fldlgcmn.cpp b/src/common/fldlgcmn.cpp index 7607a2a3ed..d6528d8a99 100644 --- a/src/common/fldlgcmn.cpp +++ b/src/common/fldlgcmn.cpp @@ -153,16 +153,16 @@ wxString wxFileDialogBase::AppendExtension(const wxString &filePath, // wxFileDialog convenience functions //---------------------------------------------------------------------------- -wxString wxFileSelector(const wxChar *title, - const wxChar *defaultDir, - const wxChar *defaultFileName, - const wxChar *defaultExtension, - const wxChar *filter, - int flags, - wxWindow *parent, - int x, int y) +wxString wxDoFileSelector(const wxString& title, + const wxString& defaultDir, + const wxString& defaultFileName, + const wxString& defaultExtension, + const wxString& filter, + int flags, + wxWindow *parent, + int x, int y) { - // The defaultExtension, if non-NULL, is + // The defaultExtension, if non-empty, is // appended to the filename if the user fails to type an extension. The new // implementation (taken from wxFileSelectorEx) appends the extension // automatically, by looking at the filter specification. In fact this @@ -174,25 +174,17 @@ wxString wxFileSelector(const wxChar *title, // suitable filter. wxString filter2; - if ( defaultExtension && !filter ) + if ( !defaultExtension.empty() && filter.empty() ) filter2 = wxString(wxT("*.")) + defaultExtension; - else if ( filter ) + else if ( !filter.empty() ) filter2 = filter; - wxString defaultDirString; - if (defaultDir) - defaultDirString = defaultDir; - - wxString defaultFilenameString; - if (defaultFileName) - defaultFilenameString = defaultFileName; - - wxFileDialog fileDialog(parent, title, defaultDirString, - defaultFilenameString, filter2, + wxFileDialog fileDialog(parent, title, defaultDir, + defaultFileName, filter2, flags, wxPoint(x, y)); - // if filter is of form "All files (*)|*|..." set correct filter index - if((wxStrlen(defaultExtension) != 0) && (filter2.Find(wxT('|')) != wxNOT_FOUND)) + // if filter is of form "All files (*)|*|..." set correct filter index + if ( !defaultExtension.empty() && filter2.find(wxT('|')) != wxString::npos ) { int filterIndex = 0; @@ -204,7 +196,7 @@ wxString wxFileSelector(const wxChar *title, if (filters[n].Contains(defaultExtension)) { filterIndex = n; - break; + break; } } @@ -225,22 +217,22 @@ wxString wxFileSelector(const wxChar *title, // wxFileSelectorEx //---------------------------------------------------------------------------- -wxString wxFileSelectorEx(const wxChar *title, - const wxChar *defaultDir, - const wxChar *defaultFileName, - int* defaultFilterIndex, - const wxChar *filter, - int flags, - wxWindow* parent, - int x, - int y) +wxString wxDoFileSelectorEx(const wxString& title, + const wxString& defaultDir, + const wxString& defaultFileName, + int* defaultFilterIndex, + const wxString& filter, + int flags, + wxWindow* parent, + int x, + int y) { wxFileDialog fileDialog(parent, - title ? title : wxEmptyString, - defaultDir ? defaultDir : wxEmptyString, - defaultFileName ? defaultFileName : wxEmptyString, - filter ? filter : wxEmptyString, + title, + defaultDir, + defaultFileName, + filter, flags, wxPoint(x, y)); wxString filename; @@ -260,9 +252,9 @@ wxString wxFileSelectorEx(const wxChar *title, //---------------------------------------------------------------------------- static wxString wxDefaultFileSelector(bool load, - const wxChar *what, - const wxChar *extension, - const wxChar *default_name, + const wxString& what, + const wxString& extension, + const wxString& default_name, wxWindow *parent) { wxString prompt; @@ -274,11 +266,13 @@ static wxString wxDefaultFileSelector(bool load, prompt.Printf(str, what); wxString wild; - const wxChar *ext = extension; - if ( ext ) + wxString ext; + if ( !extension.empty() ) { - if ( *ext == wxT('.') ) - ext++; + if ( extension[0u] == _T('.') ) + ext = extension.substr(1); + else + ext = extension; wild.Printf(wxT("*.%s"), ext); } @@ -287,7 +281,7 @@ static wxString wxDefaultFileSelector(bool load, wild = wxFileSelectorDefaultWildcardStr; } - return wxFileSelector(prompt, NULL, default_name, ext, wild, + return wxFileSelector(prompt, wxEmptyString, default_name, ext, wild, load ? wxFD_OPEN : wxFD_SAVE, parent); } @@ -295,10 +289,10 @@ static wxString wxDefaultFileSelector(bool load, // wxLoadFileSelector //---------------------------------------------------------------------------- -WXDLLEXPORT wxString wxLoadFileSelector(const wxChar *what, - const wxChar *extension, - const wxChar *default_name, - wxWindow *parent) +WXDLLEXPORT wxString wxDoLoadFileSelector(const wxString& what, + const wxString& extension, + const wxString& default_name, + wxWindow *parent) { return wxDefaultFileSelector(true, what, extension, default_name, parent); } @@ -307,10 +301,10 @@ WXDLLEXPORT wxString wxLoadFileSelector(const wxChar *what, // wxSaveFileSelector //---------------------------------------------------------------------------- -WXDLLEXPORT wxString wxSaveFileSelector(const wxChar *what, - const wxChar *extension, - const wxChar *default_name, - wxWindow *parent) +WXDLLEXPORT wxString wxDoSaveFileSelector(const wxString& what, + const wxString& extension, + const wxString& default_name, + wxWindow *parent) { return wxDefaultFileSelector(false, what, extension, default_name, parent); } -- 2.45.2