Don't allow using GetPath/GetFilename() with wxFD_MULTIPLE

GetPaths/GetFilenames() must be used instead when more than one file
could be selected: document this and assert if the wrong functions are
called.

Closes https://github.com/wxWidgets/wxWidgets/pull/1883
This commit is contained in:
Ian McInerney
2020-06-02 10:34:37 +01:00
committed by Vadim Zeitlin
parent 284cf9a872
commit 4ac648901d
6 changed files with 35 additions and 4 deletions

View File

@@ -99,6 +99,9 @@ Changes in behaviour not resulting in compilation errors
- wxSizer::RecalcSizes() shouldn't be called directly (note that it was never - wxSizer::RecalcSizes() shouldn't be called directly (note that it was never
supposed to be called, only implemented), call Layout() instead. supposed to be called, only implemented), call Layout() instead.
- wxFileDialog::GetPath() and wxFileDialog::GetFilename() now assert and return
an empty string if called on dialogs with the wxFD_MULTIPLE style.
Changes in behaviour which may result in build errors Changes in behaviour which may result in build errors
----------------------------------------------------- -----------------------------------------------------

View File

@@ -104,10 +104,19 @@ public:
virtual void SetFilterIndex(int filterIndex) { m_filterIndex = filterIndex; } virtual void SetFilterIndex(int filterIndex) { m_filterIndex = filterIndex; }
virtual wxString GetMessage() const { return m_message; } virtual wxString GetMessage() const { return m_message; }
virtual wxString GetPath() const { return m_path; } virtual wxString GetPath() const
{
wxCHECK_MSG( !HasFlag(wxFD_MULTIPLE), wxString(), "When using wxFD_MULTIPLE, must call GetPaths() instead" );
return m_path;
}
virtual void GetPaths(wxArrayString& paths) const { paths.Empty(); paths.Add(m_path); } virtual void GetPaths(wxArrayString& paths) const { paths.Empty(); paths.Add(m_path); }
virtual wxString GetDirectory() const { return m_dir; } virtual wxString GetDirectory() const { return m_dir; }
virtual wxString GetFilename() const { return m_fileName; } virtual wxString GetFilename() const
{
wxCHECK_MSG( !HasFlag(wxFD_MULTIPLE), wxString(), "When using wxFD_MULTIPLE, must call GetFilenames() instead" );
return m_fileName;
}
virtual void GetFilenames(wxArrayString& files) const { files.Empty(); files.Add(m_fileName); } virtual void GetFilenames(wxArrayString& files) const { files.Empty(); files.Add(m_fileName); }
virtual wxString GetWildcard() const { return m_wildCard; } virtual wxString GetWildcard() const { return m_wildCard; }
virtual int GetFilterIndex() const { return m_filterIndex; } virtual int GetFilterIndex() const { return m_filterIndex; }

View File

@@ -73,13 +73,19 @@ public:
{ m_filectrl->SetWildcard(wildCard); } { m_filectrl->SetWildcard(wildCard); }
virtual wxString GetPath() const wxOVERRIDE virtual wxString GetPath() const wxOVERRIDE
{ return m_filectrl->GetPath(); } {
wxCHECK_MSG( !HasFlag(wxFD_MULTIPLE), wxString(), "When using wxFD_MULTIPLE, must call GetPaths() instead" );
return m_filectrl->GetPath();
}
virtual void GetPaths(wxArrayString& paths) const wxOVERRIDE virtual void GetPaths(wxArrayString& paths) const wxOVERRIDE
{ m_filectrl->GetPaths(paths); } { m_filectrl->GetPaths(paths); }
virtual wxString GetDirectory() const wxOVERRIDE virtual wxString GetDirectory() const wxOVERRIDE
{ return m_filectrl->GetDirectory(); } { return m_filectrl->GetDirectory(); }
virtual wxString GetFilename() const wxOVERRIDE virtual wxString GetFilename() const wxOVERRIDE
{ return m_filectrl->GetFilename(); } {
wxCHECK_MSG( !HasFlag(wxFD_MULTIPLE), wxString(), "When using wxFD_MULTIPLE, must call GetFilenames() instead" );
return m_filectrl->GetFilename();
}
virtual void GetFilenames(wxArrayString& files) const wxOVERRIDE virtual void GetFilenames(wxArrayString& files) const wxOVERRIDE
{ m_filectrl->GetFilenames(files); } { m_filectrl->GetFilenames(files); }
virtual wxString GetWildcard() const wxOVERRIDE virtual wxString GetWildcard() const wxOVERRIDE

View File

@@ -264,6 +264,9 @@ public:
/** /**
Returns the default filename. Returns the default filename.
@note This function can't be used with dialogs which have the @c wxFD_MULTIPLE style,
use GetFilenames() instead.
*/ */
virtual wxString GetFilename() const; virtual wxString GetFilename() const;
@@ -298,6 +301,9 @@ public:
/** /**
Returns the full path (directory and filename) of the selected file. Returns the full path (directory and filename) of the selected file.
@note This function can't be used with dialogs which have the @c wxFD_MULTIPLE style,
use GetPaths() instead.
*/ */
virtual wxString GetPath() const; virtual wxString GetPath() const;

View File

@@ -396,6 +396,7 @@ void wxFileDialog::OnSize(wxSizeEvent&)
wxString wxFileDialog::GetPath() const wxString wxFileDialog::GetPath() const
{ {
wxCHECK_MSG( !HasFlag(wxFD_MULTIPLE), wxString(), "When using wxFD_MULTIPLE, must call GetPaths() instead" );
return m_fc.GetPath(); return m_fc.GetPath();
} }
@@ -463,6 +464,8 @@ void wxFileDialog::SetFilename(const wxString& name)
wxString wxFileDialog::GetFilename() const wxString wxFileDialog::GetFilename() const
{ {
wxCHECK_MSG( !HasFlag(wxFD_MULTIPLE), wxString(), "When using wxFD_MULTIPLE, must call GetFilenames() instead" );
wxString currentFilename( m_fc.GetFilename() ); wxString currentFilename( m_fc.GetFilename() );
if (currentFilename.empty()) if (currentFilename.empty())
{ {

View File

@@ -103,6 +103,8 @@ bool wxFileDialog::Create(wxWindow *parent,
wxString wxFileDialog::GetPath() const wxString wxFileDialog::GetPath() const
{ {
wxCHECK_MSG( !HasFlag(wxFD_MULTIPLE), wxString(), "When using wxFD_MULTIPLE, must call GetPaths() instead" );
wxArrayString paths; wxArrayString paths;
GetPaths(paths); GetPaths(paths);
if (paths.empty()) if (paths.empty())
@@ -120,6 +122,8 @@ void wxFileDialog::GetPaths(wxArrayString& paths) const
wxString wxFileDialog::GetFilename() const wxString wxFileDialog::GetFilename() const
{ {
wxCHECK_MSG( !HasFlag(wxFD_MULTIPLE), wxString(), "When using wxFD_MULTIPLE, must call GetFilenames() instead" );
wxArrayString filenames; wxArrayString filenames;
GetFilenames(filenames); GetFilenames(filenames);
if ( filenames.empty() ) if ( filenames.empty() )