Simplify and correct setting of initial directory for wxFilePickerCtrl.
Create wxFileDialog with correct initial directory and default file name from the very beginning instead of updating it later. This makes the code simpler and also actually makes it work as the initial directory setting was overwritten by setting the default path later even if it didn't contain any directory component. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72451 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -156,10 +156,6 @@ protected:
|
|||||||
void UpdatePathFromDialog(wxDialog *p)
|
void UpdatePathFromDialog(wxDialog *p)
|
||||||
{ m_path = wxStaticCast(p, wxFileDialog)->GetPath(); }
|
{ m_path = wxStaticCast(p, wxFileDialog)->GetPath(); }
|
||||||
|
|
||||||
// Set the initial directory for the dialog but without overriding the
|
|
||||||
// directory of the currently selected file, if any.
|
|
||||||
void DoSetInitialDirectory(wxFileDialog* dialog, const wxString& dir);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DECLARE_DYNAMIC_CLASS(wxGenericFileButton)
|
DECLARE_DYNAMIC_CLASS(wxGenericFileButton)
|
||||||
};
|
};
|
||||||
|
@@ -113,46 +113,28 @@ void wxGenericFileDirButton::SetInitialDirectory(const wxString& dir)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxGenericFileutton
|
// wxGenericFileButton
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
void
|
|
||||||
wxGenericFileButton::DoSetInitialDirectory(wxFileDialog* dialog,
|
|
||||||
const wxString& dir)
|
|
||||||
{
|
|
||||||
if ( m_path.find_first_of(wxFileName::GetPathSeparators()) ==
|
|
||||||
wxString::npos )
|
|
||||||
{
|
|
||||||
dialog->SetDirectory(dir);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
wxDialog *wxGenericFileButton::CreateDialog()
|
wxDialog *wxGenericFileButton::CreateDialog()
|
||||||
{
|
{
|
||||||
wxFileDialog* const dialog = new wxFileDialog
|
// Determine the initial directory for the dialog: it comes either from the
|
||||||
(
|
// default path, if it has it, or from the separately specified initial
|
||||||
GetDialogParent(),
|
// directory that can be set even if the path is e.g. empty.
|
||||||
m_message,
|
wxFileName fn(m_path);
|
||||||
wxEmptyString,
|
wxString initialDir = fn.GetPath();
|
||||||
wxEmptyString,
|
if ( initialDir.empty() )
|
||||||
m_wildcard,
|
initialDir = m_initialDir;
|
||||||
GetDialogStyle()
|
|
||||||
);
|
|
||||||
|
|
||||||
// If there is no default file or if it doesn't have any path, use the
|
return new wxFileDialog
|
||||||
// explicitly set initial directory.
|
(
|
||||||
//
|
GetDialogParent(),
|
||||||
// Notice that it is important to call this before SetPath() below as if we
|
m_message,
|
||||||
// do have m_initialDir and no directory in m_path, we need to interpret
|
initialDir,
|
||||||
// the path as being relative with respect to m_initialDir.
|
fn.GetFullName(),
|
||||||
if ( !m_initialDir.empty() )
|
m_wildcard,
|
||||||
DoSetInitialDirectory(dialog, m_initialDir);
|
GetDialogStyle()
|
||||||
|
);
|
||||||
// This sets both the default file name and the default directory of the
|
|
||||||
// dialog if m_path contains directory part.
|
|
||||||
dialog->SetPath(m_path);
|
|
||||||
|
|
||||||
return dialog;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -131,7 +131,15 @@ void wxFileButton::SetPath(const wxString &str)
|
|||||||
void wxFileButton::SetInitialDirectory(const wxString& dir)
|
void wxFileButton::SetInitialDirectory(const wxString& dir)
|
||||||
{
|
{
|
||||||
if (m_dialog)
|
if (m_dialog)
|
||||||
DoSetInitialDirectory(static_cast<wxFileDialog*>(m_dialog), dir);
|
{
|
||||||
|
// Only change the directory if the default file name doesn't have any
|
||||||
|
// directory in it, otherwise it takes precedence.
|
||||||
|
if ( m_path.find_first_of(wxFileName::GetPathSeparators()) ==
|
||||||
|
wxString::npos )
|
||||||
|
{
|
||||||
|
static_cast<wxFileDialog*>(m_dialog)->SetDirectory(dir);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
wxGenericFileButton::SetInitialDirectory(dir);
|
wxGenericFileButton::SetInitialDirectory(dir);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user