void UpdatePathFromDialog(wxDialog *p)
{ 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:
DECLARE_DYNAMIC_CLASS(wxGenericFileButton)
};
}
// ----------------------------------------------------------------------------
-// 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()
{
- wxFileDialog* const dialog = new wxFileDialog
- (
- GetDialogParent(),
- m_message,
- wxEmptyString,
- wxEmptyString,
- m_wildcard,
- GetDialogStyle()
- );
-
- // If there is no default file or if it doesn't have any path, use the
- // explicitly set initial directory.
- //
- // Notice that it is important to call this before SetPath() below as if we
- // do have m_initialDir and no directory in m_path, we need to interpret
- // the path as being relative with respect to m_initialDir.
- if ( !m_initialDir.empty() )
- DoSetInitialDirectory(dialog, m_initialDir);
-
- // 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;
+ // Determine the initial directory for the dialog: it comes either from the
+ // default path, if it has it, or from the separately specified initial
+ // directory that can be set even if the path is e.g. empty.
+ wxFileName fn(m_path);
+ wxString initialDir = fn.GetPath();
+ if ( initialDir.empty() )
+ initialDir = m_initialDir;
+
+ return new wxFileDialog
+ (
+ GetDialogParent(),
+ m_message,
+ initialDir,
+ fn.GetFullName(),
+ m_wildcard,
+ GetDialogStyle()
+ );
}
// ----------------------------------------------------------------------------
void wxFileButton::SetInitialDirectory(const wxString& dir)
{
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
wxGenericFileButton::SetInitialDirectory(dir);
}