X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/77902671753529da1345efb71ff6017cb882bedc..01cf2f9512e90d1c70e9423f5b099fe5624bcc1b:/src/msw/dirdlg.cpp?ds=sidebyside diff --git a/src/msw/dirdlg.cpp b/src/msw/dirdlg.cpp index 156dfaa4d4..7e0994ed74 100644 --- a/src/msw/dirdlg.cpp +++ b/src/msw/dirdlg.cpp @@ -16,6 +16,7 @@ // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- + #ifdef __GNUG__ #pragma implementation "dirdlg.h" #endif @@ -27,6 +28,10 @@ #pragma hdrstop #endif +#if wxUSE_DIRDLG + +#if defined(__WIN95__) && !defined(__GNUWIN32_OLD__) && wxUSE_OLE + #ifndef WX_PRECOMP #include "wx/utils.h" #include "wx/dialog.h" @@ -36,31 +41,21 @@ #include "wx/msw/private.h" -#if defined(__WIN95__) && \ - (!defined(__GNUWIN32__) || defined(wxUSE_NORLANDER_HEADERS)) - #define CAN_COMPILE_DIRDLG -//#else: we provide a stub version which doesn't do anything -#endif - -#ifdef CAN_COMPILE_DIRDLG - #include "shlobj.h" // Win95 shell -#endif +#include // Win95 shell // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- #ifndef MAX_PATH - #define MAX_PATH 4096 // be generuous + #define MAX_PATH 4096 // be generous #endif // ---------------------------------------------------------------------------- // wxWindows macros // ---------------------------------------------------------------------------- -#if !USE_SHARED_LIBRARY - IMPLEMENT_CLASS(wxDirDialog, wxDialog) -#endif +IMPLEMENT_CLASS(wxDirDialog, wxDialog) // ---------------------------------------------------------------------------- // private functions prototypes @@ -73,6 +68,7 @@ static void ItemListFree(LPITEMIDLIST pidl); static int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lp, LPARAM pData); + // ============================================================================ // implementation // ============================================================================ @@ -90,11 +86,17 @@ wxDirDialog::wxDirDialog(wxWindow *parent, m_message = message; m_parent = parent; m_path = defaultPath; + + // SHBrowseForFolder doesn't like '/'s nor the trailing backslashes + m_path.Replace(_T("/"), _T("\\")); + if ( *m_path.end() == _T('\\') ) + { + m_path.erase(m_path.length() - 1); + } } int wxDirDialog::ShowModal() { -#ifdef CAN_COMPILE_DIRDLG BROWSEINFO bi; bi.hwndOwner = m_parent ? GetHwndOf(m_parent) : NULL; bi.pidlRoot = NULL; @@ -124,15 +126,12 @@ int wxDirDialog::ShowModal() if ( !ok ) { - wxLogLastError("SHGetPathFromIDList"); + wxLogLastError(wxT("SHGetPathFromIDList")); return wxID_CANCEL; } return wxID_OK; -#else // !CAN_COMPILE_DIRDLG - return wxID_CANCEL; -#endif // CAN_COMPILE_DIRDLG/!CAN_COMPILE_DIRDLG } // ---------------------------------------------------------------------------- @@ -158,7 +157,14 @@ BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lp, LPARAM pData) TCHAR szDir[MAX_PATH]; if ( SHGetPathFromIDList((LPITEMIDLIST)lp, szDir) ) { - SendMessage(hwnd, BFFM_SETSTATUSTEXT, 0, (LPARAM)szDir); + wxString strDir(szDir); + int maxChars = 40; // Have to truncate string else it displays incorrectly + if (strDir.Len() > (size_t) (maxChars - 3)) + { + strDir = strDir.Right(maxChars - 3); + strDir = wxString(wxT("...")) + strDir; + } + SendMessage(hwnd, BFFM_SETSTATUSTEXT, 0, (LPARAM) (const wxChar*) strDir); } } break; @@ -184,8 +190,13 @@ static void ItemListFree(LPITEMIDLIST pidl) } else { - wxLogLastError("SHGetMalloc"); + wxLogLastError(wxT("SHGetMalloc")); } } } +#else + #include "../generic/dirdlgg.cpp" +#endif // compiler/platform on which the code here compiles + +#endif // wxUSE_DIRDLG