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
This commit is contained in:
@@ -148,41 +148,180 @@ private:
|
|||||||
// wxFileDialog convenience functions
|
// 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
|
WXDLLEXPORT wxString
|
||||||
wxFileSelector(const wxChar *message = wxFileSelectorPromptStr,
|
wxDoFileSelector(const wxString& message = wxFileSelectorPromptStr,
|
||||||
const wxChar *default_path = NULL,
|
const wxString& default_path = wxEmptyString,
|
||||||
const wxChar *default_filename = NULL,
|
const wxString& default_filename = wxEmptyString,
|
||||||
const wxChar *default_extension = NULL,
|
const wxString& default_extension = wxEmptyString,
|
||||||
const wxChar *wildcard = wxFileSelectorDefaultWildcardStr,
|
const wxString& wildcard = wxFileSelectorDefaultWildcardStr,
|
||||||
int flags = 0,
|
int flags = 0,
|
||||||
wxWindow *parent = NULL,
|
wxWindow *parent = NULL,
|
||||||
int x = wxDefaultCoord, int y = wxDefaultCoord);
|
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
|
||||||
|
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<typename T>
|
||||||
|
inline wxString wxFileSelector(const wxString& message, const T& default_path)
|
||||||
|
{
|
||||||
|
return wxDoFileSelector(message, wxPtrOrStringToString(default_path));
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T1, typename T2>
|
||||||
|
inline wxString wxFileSelector(const wxString& message,
|
||||||
|
const T1& default_path,
|
||||||
|
const T2& default_filename)
|
||||||
|
{
|
||||||
|
return wxDoFileSelector(message,
|
||||||
|
wxPtrOrStringToString(default_path),
|
||||||
|
wxPtrOrStringToString(default_filename));
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T1, typename T2, typename T3>
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
return wxDoFileSelector(message,
|
||||||
|
wxPtrOrStringToString(default_path),
|
||||||
|
wxPtrOrStringToString(default_filename),
|
||||||
|
wxPtrOrStringToString(default_extension),
|
||||||
|
wildcard,
|
||||||
|
flags,
|
||||||
|
parent,
|
||||||
|
x, y);
|
||||||
|
}
|
||||||
|
|
||||||
// An extended version of wxFileSelector
|
// An extended version of wxFileSelector
|
||||||
WXDLLEXPORT wxString
|
inline wxString wxFileSelectorEx()
|
||||||
wxFileSelectorEx(const wxChar *message = wxFileSelectorPromptStr,
|
{
|
||||||
const wxChar *default_path = NULL,
|
return wxDoFileSelectorEx();
|
||||||
const wxChar *default_filename = NULL,
|
}
|
||||||
|
|
||||||
|
inline wxString wxFileSelectorEx(const wxString& message)
|
||||||
|
{
|
||||||
|
return wxDoFileSelectorEx(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
inline wxString wxFileSelectorEx(const wxString& message, const T& default_path)
|
||||||
|
{
|
||||||
|
return wxDoFileSelectorEx(message, wxPtrOrStringToString(default_path));
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T1, typename T2>
|
||||||
|
inline wxString
|
||||||
|
wxFileSelectorEx(const wxString& message,
|
||||||
|
const T1& default_path,
|
||||||
|
const T2& default_filename,
|
||||||
int *indexDefaultExtension = NULL,
|
int *indexDefaultExtension = NULL,
|
||||||
const wxChar *wildcard = wxFileSelectorDefaultWildcardStr,
|
const wxString& wildcard = wxFileSelectorDefaultWildcardStr,
|
||||||
int flags = 0,
|
int flags = 0,
|
||||||
wxWindow *parent = NULL,
|
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
|
// Ask for filename to load
|
||||||
WXDLLEXPORT wxString
|
template<typename T>
|
||||||
wxLoadFileSelector(const wxChar *what,
|
inline wxString wxLoadFileSelector(const wxString& what,
|
||||||
const wxChar *extension,
|
const wxString& extension,
|
||||||
const wxChar *default_name = (const wxChar *)NULL,
|
const T& default_name = T(),
|
||||||
wxWindow *parent = (wxWindow *) NULL);
|
wxWindow *parent = NULL)
|
||||||
|
{
|
||||||
|
return wxDoLoadFileSelector(what, extension,
|
||||||
|
wxPtrOrStringToString(default_name),
|
||||||
|
parent);
|
||||||
|
}
|
||||||
|
|
||||||
// Ask for filename to save
|
// Ask for filename to save
|
||||||
WXDLLEXPORT wxString
|
template<typename T>
|
||||||
wxSaveFileSelector(const wxChar *what,
|
inline wxString wxSaveFileSelector(const wxString& what,
|
||||||
const wxChar *extension,
|
const wxString& extension,
|
||||||
const wxChar *default_name = (const wxChar *) NULL,
|
const T& default_name = T(),
|
||||||
wxWindow *parent = (wxWindow *) NULL);
|
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__)
|
#if defined (__WXUNIVERSAL__)
|
||||||
|
@@ -153,16 +153,16 @@ wxString wxFileDialogBase::AppendExtension(const wxString &filePath,
|
|||||||
// wxFileDialog convenience functions
|
// wxFileDialog convenience functions
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
wxString wxFileSelector(const wxChar *title,
|
wxString wxDoFileSelector(const wxString& title,
|
||||||
const wxChar *defaultDir,
|
const wxString& defaultDir,
|
||||||
const wxChar *defaultFileName,
|
const wxString& defaultFileName,
|
||||||
const wxChar *defaultExtension,
|
const wxString& defaultExtension,
|
||||||
const wxChar *filter,
|
const wxString& filter,
|
||||||
int flags,
|
int flags,
|
||||||
wxWindow *parent,
|
wxWindow *parent,
|
||||||
int x, int y)
|
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
|
// appended to the filename if the user fails to type an extension. The new
|
||||||
// implementation (taken from wxFileSelectorEx) appends the extension
|
// implementation (taken from wxFileSelectorEx) appends the extension
|
||||||
// automatically, by looking at the filter specification. In fact this
|
// automatically, by looking at the filter specification. In fact this
|
||||||
@@ -174,25 +174,17 @@ wxString wxFileSelector(const wxChar *title,
|
|||||||
// suitable filter.
|
// suitable filter.
|
||||||
|
|
||||||
wxString filter2;
|
wxString filter2;
|
||||||
if ( defaultExtension && !filter )
|
if ( !defaultExtension.empty() && filter.empty() )
|
||||||
filter2 = wxString(wxT("*.")) + defaultExtension;
|
filter2 = wxString(wxT("*.")) + defaultExtension;
|
||||||
else if ( filter )
|
else if ( !filter.empty() )
|
||||||
filter2 = filter;
|
filter2 = filter;
|
||||||
|
|
||||||
wxString defaultDirString;
|
wxFileDialog fileDialog(parent, title, defaultDir,
|
||||||
if (defaultDir)
|
defaultFileName, filter2,
|
||||||
defaultDirString = defaultDir;
|
|
||||||
|
|
||||||
wxString defaultFilenameString;
|
|
||||||
if (defaultFileName)
|
|
||||||
defaultFilenameString = defaultFileName;
|
|
||||||
|
|
||||||
wxFileDialog fileDialog(parent, title, defaultDirString,
|
|
||||||
defaultFilenameString, filter2,
|
|
||||||
flags, wxPoint(x, y));
|
flags, wxPoint(x, y));
|
||||||
|
|
||||||
// if filter is of form "All files (*)|*|..." set correct filter index
|
// if filter is of form "All files (*)|*|..." set correct filter index
|
||||||
if((wxStrlen(defaultExtension) != 0) && (filter2.Find(wxT('|')) != wxNOT_FOUND))
|
if ( !defaultExtension.empty() && filter2.find(wxT('|')) != wxString::npos )
|
||||||
{
|
{
|
||||||
int filterIndex = 0;
|
int filterIndex = 0;
|
||||||
|
|
||||||
@@ -225,11 +217,11 @@ wxString wxFileSelector(const wxChar *title,
|
|||||||
// wxFileSelectorEx
|
// wxFileSelectorEx
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
wxString wxFileSelectorEx(const wxChar *title,
|
wxString wxDoFileSelectorEx(const wxString& title,
|
||||||
const wxChar *defaultDir,
|
const wxString& defaultDir,
|
||||||
const wxChar *defaultFileName,
|
const wxString& defaultFileName,
|
||||||
int* defaultFilterIndex,
|
int* defaultFilterIndex,
|
||||||
const wxChar *filter,
|
const wxString& filter,
|
||||||
int flags,
|
int flags,
|
||||||
wxWindow* parent,
|
wxWindow* parent,
|
||||||
int x,
|
int x,
|
||||||
@@ -237,10 +229,10 @@ wxString wxFileSelectorEx(const wxChar *title,
|
|||||||
|
|
||||||
{
|
{
|
||||||
wxFileDialog fileDialog(parent,
|
wxFileDialog fileDialog(parent,
|
||||||
title ? title : wxEmptyString,
|
title,
|
||||||
defaultDir ? defaultDir : wxEmptyString,
|
defaultDir,
|
||||||
defaultFileName ? defaultFileName : wxEmptyString,
|
defaultFileName,
|
||||||
filter ? filter : wxEmptyString,
|
filter,
|
||||||
flags, wxPoint(x, y));
|
flags, wxPoint(x, y));
|
||||||
|
|
||||||
wxString filename;
|
wxString filename;
|
||||||
@@ -260,9 +252,9 @@ wxString wxFileSelectorEx(const wxChar *title,
|
|||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
static wxString wxDefaultFileSelector(bool load,
|
static wxString wxDefaultFileSelector(bool load,
|
||||||
const wxChar *what,
|
const wxString& what,
|
||||||
const wxChar *extension,
|
const wxString& extension,
|
||||||
const wxChar *default_name,
|
const wxString& default_name,
|
||||||
wxWindow *parent)
|
wxWindow *parent)
|
||||||
{
|
{
|
||||||
wxString prompt;
|
wxString prompt;
|
||||||
@@ -274,11 +266,13 @@ static wxString wxDefaultFileSelector(bool load,
|
|||||||
prompt.Printf(str, what);
|
prompt.Printf(str, what);
|
||||||
|
|
||||||
wxString wild;
|
wxString wild;
|
||||||
const wxChar *ext = extension;
|
wxString ext;
|
||||||
if ( ext )
|
if ( !extension.empty() )
|
||||||
{
|
{
|
||||||
if ( *ext == wxT('.') )
|
if ( extension[0u] == _T('.') )
|
||||||
ext++;
|
ext = extension.substr(1);
|
||||||
|
else
|
||||||
|
ext = extension;
|
||||||
|
|
||||||
wild.Printf(wxT("*.%s"), ext);
|
wild.Printf(wxT("*.%s"), ext);
|
||||||
}
|
}
|
||||||
@@ -287,7 +281,7 @@ static wxString wxDefaultFileSelector(bool load,
|
|||||||
wild = wxFileSelectorDefaultWildcardStr;
|
wild = wxFileSelectorDefaultWildcardStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return wxFileSelector(prompt, NULL, default_name, ext, wild,
|
return wxFileSelector(prompt, wxEmptyString, default_name, ext, wild,
|
||||||
load ? wxFD_OPEN : wxFD_SAVE, parent);
|
load ? wxFD_OPEN : wxFD_SAVE, parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -295,9 +289,9 @@ static wxString wxDefaultFileSelector(bool load,
|
|||||||
// wxLoadFileSelector
|
// wxLoadFileSelector
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
WXDLLEXPORT wxString wxLoadFileSelector(const wxChar *what,
|
WXDLLEXPORT wxString wxDoLoadFileSelector(const wxString& what,
|
||||||
const wxChar *extension,
|
const wxString& extension,
|
||||||
const wxChar *default_name,
|
const wxString& default_name,
|
||||||
wxWindow *parent)
|
wxWindow *parent)
|
||||||
{
|
{
|
||||||
return wxDefaultFileSelector(true, what, extension, default_name, parent);
|
return wxDefaultFileSelector(true, what, extension, default_name, parent);
|
||||||
@@ -307,9 +301,9 @@ WXDLLEXPORT wxString wxLoadFileSelector(const wxChar *what,
|
|||||||
// wxSaveFileSelector
|
// wxSaveFileSelector
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
WXDLLEXPORT wxString wxSaveFileSelector(const wxChar *what,
|
WXDLLEXPORT wxString wxDoSaveFileSelector(const wxString& what,
|
||||||
const wxChar *extension,
|
const wxString& extension,
|
||||||
const wxChar *default_name,
|
const wxString& default_name,
|
||||||
wxWindow *parent)
|
wxWindow *parent)
|
||||||
{
|
{
|
||||||
return wxDefaultFileSelector(false, what, extension, default_name, parent);
|
return wxDefaultFileSelector(false, what, extension, default_name, parent);
|
||||||
|
Reference in New Issue
Block a user