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:
@@ -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
|
||||||
|
@@ -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();
|
||||||
|
Reference in New Issue
Block a user