From f3558accb076d310af4590fdd8382892d5c3c653 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 5 Apr 2002 10:11:37 +0000 Subject: [PATCH] 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 --- include/wx/msw/dirdlg.h | 31 +++++++++++++++++-------------- src/msw/dirdlg.cpp | 26 ++++++++++++++++++++++---- 2 files changed, 39 insertions(+), 18 deletions(-) diff --git a/include/wx/msw/dirdlg.h b/include/wx/msw/dirdlg.h index d49268d87f..7d78c2494f 100644 --- a/include/wx/msw/dirdlg.h +++ b/include/wx/msw/dirdlg.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: dirdlg.h +// Name: wx/msw/dirdlg.h // Purpose: wxDirDialog class // Author: Julian Smart // Modified by: @@ -20,29 +20,32 @@ WXDLLEXPORT_DATA(extern const wxChar*) wxFileSelectorPromptStr; -class WXDLLEXPORT wxDirDialog: public wxDialog +class WXDLLEXPORT wxDirDialog : public wxDialog { -DECLARE_DYNAMIC_CLASS(wxDirDialog) public: - wxDirDialog(wxWindow *parent, const wxString& message = wxFileSelectorPromptStr, - const wxString& defaultPath = wxEmptyString, - long style = 0, const wxPoint& pos = wxDefaultPosition); + wxDirDialog(wxWindow *parent, + const wxString& message = wxFileSelectorPromptStr, + const wxString& defaultPath = wxEmptyString, + long style = 0, + const wxPoint& pos = wxDefaultPosition); - inline void SetMessage(const wxString& message) { m_message = message; } - inline void SetPath(const wxString& path) { m_path = path; } - inline void SetStyle(long style) { m_dialogStyle = style; } + void SetMessage(const wxString& message) { m_message = message; } + void SetPath(const wxString& path) { m_path = path; } + void SetStyle(long style) { m_dialogStyle = style; } - inline wxString GetMessage(void) const { return m_message; } - inline wxString GetPath(void) const { return m_path; } - inline long GetStyle(void) const { return m_dialogStyle; } + wxString GetMessage() const { return m_message; } + wxString GetPath() const { return m_path; } + long GetStyle() const { return m_dialogStyle; } - int ShowModal(void); + virtual int ShowModal(); protected: wxString m_message; long m_dialogStyle; - wxWindow * m_parent; wxString m_path; + +private: + DECLARE_DYNAMIC_CLASS(wxDirDialog) }; #endif diff --git a/src/msw/dirdlg.cpp b/src/msw/dirdlg.cpp index 7e0994ed74..0b8885ffd9 100644 --- a/src/msw/dirdlg.cpp +++ b/src/msw/dirdlg.cpp @@ -85,20 +85,38 @@ wxDirDialog::wxDirDialog(wxWindow *parent, { m_message = message; 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 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() { + wxWindow *parent = GetParent(); + BROWSEINFO bi; - bi.hwndOwner = m_parent ? GetHwndOf(m_parent) : NULL; + bi.hwndOwner = parent ? GetHwndOf(parent) : NULL; bi.pidlRoot = NULL; bi.pszDisplayName = NULL; bi.lpszTitle = m_message.c_str(); -- 2.47.2