X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/127eab18f80e5b298b8c0326609ed811035e6829..f1d6804f7c1a398dd0616ccf15cb0f96ea07f5e0:/src/generic/dirctrlg.cpp diff --git a/src/generic/dirctrlg.cpp b/src/generic/dirctrlg.cpp index 7eb65be47a..5e1a3ffbfe 100644 --- a/src/generic/dirctrlg.cpp +++ b/src/generic/dirctrlg.cpp @@ -13,42 +13,46 @@ #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif #if wxUSE_DIRDLG || wxUSE_FILEDLG #include "wx/generic/dirctrlg.h" -#include "wx/module.h" -#include "wx/utils.h" -#include "wx/button.h" -#include "wx/layout.h" -#include "wx/msgdlg.h" -#include "wx/textctrl.h" -#include "wx/textdlg.h" + +#ifndef WX_PRECOMP + #include "wx/hash.h" + #include "wx/intl.h" + #include "wx/log.h" + #include "wx/utils.h" + #include "wx/button.h" + #include "wx/icon.h" + #include "wx/settings.h" + #include "wx/msgdlg.h" + #include "wx/cmndata.h" + #include "wx/choice.h" + #include "wx/textctrl.h" + #include "wx/layout.h" + #include "wx/sizer.h" + #include "wx/textdlg.h" + #include "wx/gdicmn.h" + #include "wx/image.h" + #include "wx/module.h" +#endif + #include "wx/filefn.h" -#include "wx/cmndata.h" -#include "wx/gdicmn.h" -#include "wx/intl.h" #include "wx/imaglist.h" -#include "wx/icon.h" -#include "wx/log.h" -#include "wx/sizer.h" #include "wx/tokenzr.h" #include "wx/dir.h" -#include "wx/settings.h" #include "wx/artprov.h" -#include "wx/hash.h" #include "wx/mimetype.h" -#include "wx/image.h" -#include "wx/choice.h" #if wxUSE_STATLINE #include "wx/statline.h" #endif #if defined(__WXMAC__) - #include "wx/mac/private.h" // includes mac headers + #include "wx/mac/private.h" // includes mac headers #endif #ifdef __WXMSW__ @@ -60,33 +64,33 @@ // accordingly. #if !defined(__GNUWIN32__) || (defined(__MINGW32_MAJOR_VERSION) && __MINGW32_MAJOR_VERSION >= 1) #if !defined(__WXWINCE__) - #include + #include #endif - #include - #include + #include + #include #endif #endif #if defined(__OS2__) || defined(__DOS__) - #ifdef __OS2__ - #define INCL_BASE - #include - #ifndef __EMX__ - #include + #ifdef __OS2__ + #define INCL_BASE + #include + #ifndef __EMX__ + #include + #endif + #include + #include #endif - #include - #include - #endif - extern bool wxIsDriveAvailable(const wxString& dirName); + extern bool wxIsDriveAvailable(const wxString& dirName); #endif // __OS2__ #if defined(__WXMAC__) -# include "MoreFilesX.h" + #include "MoreFilesX.h" #endif #ifdef __BORLANDC__ -#include "dos.h" + #include "dos.h" #endif // If compiled under Windows, this macro can cause problems @@ -117,6 +121,9 @@ size_t wxGetAvailableDrives(wxArrayString &paths, wxArrayString &names, wxArrayI path.Printf(wxT("%c:\\"), driveBuffer[i]); name.Printf(wxT("%c:"), driveBuffer[i]); + // Do not use GetVolumeInformation to further decorate the + // name, since it can cause severe delays on network drives. + int imageId; int driveType = ::GetDriveType(path); switch (driveType) @@ -270,7 +277,7 @@ bool wxIsDriveAvailable(const wxString& dirName) #ifdef __WATCOMC__ wxUnusedVar(dirName); #else - if ( dirName.Len() == 3 && dirName[1u] == wxT(':') ) + if ( dirName.length() == 3 && dirName[1u] == wxT(':') ) { wxString dirNameLower(dirName.Lower()); // VS: always return true for removable media, since Win95 doesn't @@ -330,7 +337,7 @@ bool wxIsDriveAvailable(const wxString& WXUNUSED_IN_WINCE(dirName)) // Check if this is a root directory and if so, // whether the drive is available. - if (dirName.Len() == 3 && dirName[(size_t)1] == wxT(':')) + if (dirName.length() == 3 && dirName[(size_t)1] == wxT(':')) { wxString dirNameLower(dirName.Lower()); #if defined(__GNUWIN32__) && !(defined(__MINGW32_MAJOR_VERSION) && __MINGW32_MAJOR_VERSION >= 1) @@ -537,6 +544,7 @@ bool wxGenericDirCtrl::Create(wxWindow *parent, return false; SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE)); + SetForegroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)); Init(); @@ -687,9 +695,12 @@ void wxGenericDirCtrl::OnBeginEditItem(wxTreeEvent &event) void wxGenericDirCtrl::OnEndEditItem(wxTreeEvent &event) { + if (event.IsEditCancelled()) + return; + if ((event.GetLabel().empty()) || - (event.GetLabel() == _(".")) || - (event.GetLabel() == _("..")) || + (event.GetLabel() == wxT(".")) || + (event.GetLabel() == wxT("..")) || (event.GetLabel().Find(wxT('/')) != wxNOT_FOUND) || (event.GetLabel().Find(wxT('\\')) != wxNOT_FOUND) || (event.GetLabel().Find(wxT('|')) != wxNOT_FOUND)) @@ -972,12 +983,12 @@ wxTreeItemId wxGenericDirCtrl::FindChild(wxTreeItemId parentId, const wxString& childPath.MakeLower(); #endif - if (childPath.Len() <= path2.Len()) + if (childPath.length() <= path2.length()) { - wxString path3 = path2.Mid(0, childPath.Len()); + wxString path3 = path2.Mid(0, childPath.length()); if (childPath == path3) { - if (path3.Len() == path2.Len()) + if (path3.length() == path2.length()) done = true; else done = false; @@ -1049,6 +1060,33 @@ bool wxGenericDirCtrl::ExpandPath(const wxString& path) return true; } + +bool wxGenericDirCtrl::CollapsePath(const wxString& path) +{ + bool done = false; + wxTreeItemId id = FindChild(m_rootId, path, done); + wxTreeItemId lastId = id; // The last non-zero id + + while ( id.IsOk() && !done ) + { + CollapseDir(id); + + id = FindChild(id, path, done); + + if ( id.IsOk() ) + lastId = id; + } + + if ( !lastId.IsOk() ) + return false; + + m_treeCtrl->SelectItem(lastId); + m_treeCtrl->EnsureVisible(lastId); + + return true; +} + + wxString wxGenericDirCtrl::GetPath() const { wxTreeItemId id = m_treeCtrl->GetSelection(); @@ -1190,22 +1228,6 @@ void wxGenericDirCtrl::DoResize() wxSize filterSz ; if (m_filterListCtrl) { -#ifdef __WXMSW__ - // For some reason, this is required in order for the - // correct control height to always be returned, rather - // than the drop-down list height which is sometimes returned. - wxSize oldSize = m_filterListCtrl->GetSize(); - m_filterListCtrl->SetSize(wxDefaultCoord, - wxDefaultCoord, - oldSize.x+10, - wxDefaultCoord, - wxSIZE_USE_EXISTING); - m_filterListCtrl->SetSize(wxDefaultCoord, - wxDefaultCoord, - oldSize.x, - wxDefaultCoord, - wxSIZE_USE_EXISTING); -#endif filterSz = m_filterListCtrl->GetSize(); sz.y -= (filterSz.y + verticalSpacing); } @@ -1491,7 +1513,7 @@ wxImageList *wxFileIconsTable::GetSmallImageList() return m_smallImageList; } -#if wxUSE_MIMETYPE && wxUSE_IMAGE +#if wxUSE_MIMETYPE && wxUSE_IMAGE && (!defined(__WXMSW__) || wxUSE_WXDIB) // VS: we don't need this function w/o wxMimeTypesManager because we'll only have // one icon and we won't resize it @@ -1651,7 +1673,7 @@ int wxFileIconsTable::GetIconID(const wxString& extension, const wxString& mime) { m_smallImageList->Add(bmp); } -#if wxUSE_IMAGE +#if wxUSE_IMAGE && (!defined(__WXMSW__) || wxUSE_WXDIB) else { wxImage img = bmp.ConvertToImage();