X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/949c9f74c3ec1b3fba78079a5690034d1facfdb8..6eb872ea536238192da0112926bc94e948703718:/src/common/fldlgcmn.cpp diff --git a/src/common/fldlgcmn.cpp b/src/common/fldlgcmn.cpp index adb37ede67..e57a244cb3 100644 --- a/src/common/fldlgcmn.cpp +++ b/src/common/fldlgcmn.cpp @@ -19,6 +19,7 @@ #if wxUSE_FILEDLG #include "wx/filedlg.h" +#include "wx/dirdlg.h" #ifndef WX_PRECOMP #include "wx/string.h" @@ -34,8 +35,10 @@ IMPLEMENT_DYNAMIC_CLASS(wxFileDialogBase, wxDialog) void wxFileDialogBase::Init() { - m_filterIndex = + m_filterIndex = 0; m_windowStyle = 0; + m_extraControl = NULL; + m_extraControlCreator = NULL; } bool wxFileDialogBase::Create(wxWindow *parent, @@ -57,18 +60,18 @@ bool wxFileDialogBase::Create(wxWindow *parent, m_windowStyle = style; m_filterIndex = 0; - if (!HasFlag(wxFD_OPEN) && !HasFlag(wxFD_SAVE)) + if (!HasFdFlag(wxFD_OPEN) && !HasFdFlag(wxFD_SAVE)) m_windowStyle |= wxFD_OPEN; // wxFD_OPEN is the default // check that the styles are not contradictory - wxASSERT_MSG( !(HasFlag(wxFD_SAVE) && HasFlag(wxFD_OPEN)), + wxASSERT_MSG( !(HasFdFlag(wxFD_SAVE) && HasFdFlag(wxFD_OPEN)), _T("can't specify both wxFD_SAVE and wxFD_OPEN at once") ); - wxASSERT_MSG( !HasFlag(wxFD_SAVE) || - (!HasFlag(wxFD_MULTIPLE) && !HasFlag(wxFD_FILE_MUST_EXIST)), + wxASSERT_MSG( !HasFdFlag(wxFD_SAVE) || + (!HasFdFlag(wxFD_MULTIPLE) && !HasFdFlag(wxFD_FILE_MUST_EXIST)), _T("wxFD_MULTIPLE or wxFD_FILE_MUST_EXIST can't be used with wxFD_SAVE" ) ); - wxASSERT_MSG( !HasFlag(wxFD_OPEN) || !HasFlag(wxFD_OVERWRITE_PROMPT), + wxASSERT_MSG( !HasFdFlag(wxFD_OPEN) || !HasFdFlag(wxFD_OVERWRITE_PROMPT), _T("wxFD_OVERWRITE_PROMPT can't be used with wxFD_OPEN") ); if ( wildCard.empty() || wildCard == wxFileSelectorDefaultWildcardStr ) @@ -101,17 +104,18 @@ bool wxFileDialogBase::Create(wxWindow *parent, return true; } -#if WXWIN_COMPATIBILITY_2_4 -// Parses the filterStr, returning the number of filters. -// Returns 0 if none or if there's a problem. -// filterStr is in the form: "All files (*.*)|*.*|JPEG Files (*.jpeg)|*.jpg" -int wxFileDialogBase::ParseWildcard(const wxString& filterStr, - wxArrayString& descriptions, - wxArrayString& filters) +#if WXWIN_COMPATIBILITY_2_6 +long wxFileDialogBase::GetStyle() const +{ + return GetWindowStyle(); +} + +void wxFileDialogBase::SetStyle(long style) { - return ::wxParseCommonDialogsFilter(filterStr, descriptions, filters); + SetWindowStyle(style); } -#endif // WXWIN_COMPATIBILITY_2_4 +#endif // WXWIN_COMPATIBILITY_2_6 + wxString wxFileDialogBase::AppendExtension(const wxString &filePath, const wxString &extensionList) @@ -147,20 +151,49 @@ wxString wxFileDialogBase::AppendExtension(const wxString &filePath, return filePath + ext; } +bool wxFileDialogBase::SetExtraControlCreator(ExtraControlCreatorFunction creator) +{ + wxCHECK_MSG( !m_extraControlCreator, false, + "wxFileDialog::SetExtraControl() called second time" ); + + m_extraControlCreator = creator; + return SupportsExtraControl(); +} + +bool wxFileDialogBase::CreateExtraControl() +{ + if (!m_extraControlCreator || m_extraControl) + return false; + m_extraControl = (*m_extraControlCreator)(this); + return true; +} + +wxSize wxFileDialogBase::GetExtraControlSize() +{ + if ( !m_extraControlCreator ) + return wxDefaultSize; + + // create the extra control in an empty dialog just to find its size: this + // is not terribly efficient but we do need to know the size before + // creating the native dialog and this seems to be the only way + wxDialog dlg(NULL, wxID_ANY, ""); + return (*m_extraControlCreator)(&dlg)->GetSize(); +} + //---------------------------------------------------------------------------- // 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 wxFileSelector(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 @@ -172,25 +205,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; @@ -202,7 +227,7 @@ wxString wxFileSelector(const wxChar *title, if (filters[n].Contains(defaultExtension)) { filterIndex = n; - break; + break; } } @@ -223,22 +248,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 wxFileSelectorEx(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; @@ -258,9 +283,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; @@ -272,11 +297,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); } @@ -285,7 +312,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); } @@ -293,9 +320,9 @@ static wxString wxDefaultFileSelector(bool load, // wxLoadFileSelector //---------------------------------------------------------------------------- -WXDLLEXPORT wxString wxLoadFileSelector(const wxChar *what, - const wxChar *extension, - const wxChar *default_name, +WXDLLEXPORT wxString wxLoadFileSelector(const wxString& what, + const wxString& extension, + const wxString& default_name, wxWindow *parent) { return wxDefaultFileSelector(true, what, extension, default_name, parent); @@ -305,12 +332,30 @@ WXDLLEXPORT wxString wxLoadFileSelector(const wxChar *what, // wxSaveFileSelector //---------------------------------------------------------------------------- -WXDLLEXPORT wxString wxSaveFileSelector(const wxChar *what, - const wxChar *extension, - const wxChar *default_name, +WXDLLEXPORT wxString wxSaveFileSelector(const wxString& what, + const wxString& extension, + const wxString& default_name, wxWindow *parent) { return wxDefaultFileSelector(false, what, extension, default_name, parent); } + +//---------------------------------------------------------------------------- +// wxDirDialogBase +//---------------------------------------------------------------------------- + +#if WXWIN_COMPATIBILITY_2_6 +long wxDirDialogBase::GetStyle() const +{ + return GetWindowStyle(); +} + +void wxDirDialogBase::SetStyle(long style) +{ + SetWindowStyle(style); +} +#endif // WXWIN_COMPATIBILITY_2_6 + + #endif // wxUSE_FILEDLG