more fixes to handling the paths with trailing slashes in wxDirDlg

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14946 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2002-04-05 10:11:37 +00:00
parent 2e99f81532
commit f3558accb0
2 changed files with 39 additions and 18 deletions

View File

@@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// Name: dirdlg.h // Name: wx/msw/dirdlg.h
// Purpose: wxDirDialog class // Purpose: wxDirDialog class
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by:
@@ -20,29 +20,32 @@
WXDLLEXPORT_DATA(extern const wxChar*) wxFileSelectorPromptStr; WXDLLEXPORT_DATA(extern const wxChar*) wxFileSelectorPromptStr;
class WXDLLEXPORT wxDirDialog: public wxDialog class WXDLLEXPORT wxDirDialog : public wxDialog
{ {
DECLARE_DYNAMIC_CLASS(wxDirDialog)
public: public:
wxDirDialog(wxWindow *parent, const wxString& message = wxFileSelectorPromptStr, wxDirDialog(wxWindow *parent,
const wxString& defaultPath = wxEmptyString, const wxString& message = wxFileSelectorPromptStr,
long style = 0, const wxPoint& pos = wxDefaultPosition); const wxString& defaultPath = wxEmptyString,
long style = 0,
const wxPoint& pos = wxDefaultPosition);
inline void SetMessage(const wxString& message) { m_message = message; } void SetMessage(const wxString& message) { m_message = message; }
inline void SetPath(const wxString& path) { m_path = path; } void SetPath(const wxString& path) { m_path = path; }
inline void SetStyle(long style) { m_dialogStyle = style; } void SetStyle(long style) { m_dialogStyle = style; }
inline wxString GetMessage(void) const { return m_message; } wxString GetMessage() const { return m_message; }
inline wxString GetPath(void) const { return m_path; } wxString GetPath() const { return m_path; }
inline long GetStyle(void) const { return m_dialogStyle; } long GetStyle() const { return m_dialogStyle; }
int ShowModal(void); virtual int ShowModal();
protected: protected:
wxString m_message; wxString m_message;
long m_dialogStyle; long m_dialogStyle;
wxWindow * m_parent;
wxString m_path; wxString m_path;
private:
DECLARE_DYNAMIC_CLASS(wxDirDialog)
}; };
#endif #endif

View File

@@ -85,20 +85,38 @@ wxDirDialog::wxDirDialog(wxWindow *parent,
{ {
m_message = message; m_message = message;
m_parent = parent; m_parent = parent;
m_path = defaultPath;
SetPath(defaultPath);
}
void wxDirDialog::SetPath(const wxString& path)
{
m_path = path;
// SHBrowseForFolder doesn't like '/'s nor the trailing backslashes // SHBrowseForFolder doesn't like '/'s nor the trailing backslashes
m_path.Replace(_T("/"), _T("\\")); m_path.Replace(_T("/"), _T("\\"));
if ( *m_path.end() == _T('\\') ) if ( !m_path.empty() )
{ {
m_path.erase(m_path.length() - 1); while ( *(m_path.end() - 1) == _T('\\') )
{
size_t len = m_path.length();
if ( len == 1 )
{
// leave '/' alone
break;
}
m_path.erase(len - 1);
}
} }
} }
int wxDirDialog::ShowModal() int wxDirDialog::ShowModal()
{ {
wxWindow *parent = GetParent();
BROWSEINFO bi; BROWSEINFO bi;
bi.hwndOwner = m_parent ? GetHwndOf(m_parent) : NULL; bi.hwndOwner = parent ? GetHwndOf(parent) : NULL;
bi.pidlRoot = NULL; bi.pidlRoot = NULL;
bi.pszDisplayName = NULL; bi.pszDisplayName = NULL;
bi.lpszTitle = m_message.c_str(); bi.lpszTitle = m_message.c_str();