X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/588be5ae1c00887b3d95f0dee5d980033c8e814a..7bd236e6da74203ba429941d3f9643291494b420:/src/generic/dirctrlg.cpp diff --git a/src/generic/dirctrlg.cpp b/src/generic/dirctrlg.cpp index 7ed847cb70..06deb834d5 100644 --- a/src/generic/dirctrlg.cpp +++ b/src/generic/dirctrlg.cpp @@ -13,32 +13,36 @@ #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif #if wxUSE_DIRDLG || wxUSE_FILEDLG #include "wx/generic/dirctrlg.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" +#endif + #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" #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" @@ -48,7 +52,7 @@ #endif #if defined(__WXMAC__) - #include "wx/mac/private.h" // includes mac headers + #include "wx/mac/private.h" // includes mac headers #endif #ifdef __WXMSW__ @@ -60,10 +64,10 @@ // accordingly. #if !defined(__GNUWIN32__) || (defined(__MINGW32_MAJOR_VERSION) && __MINGW32_MAJOR_VERSION >= 1) #if !defined(__WXWINCE__) - #include + #include #endif - #include - #include + #include + #include #endif #endif @@ -82,11 +86,11 @@ #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 @@ -118,12 +122,13 @@ size_t wxGetAvailableDrives(wxArrayString &paths, wxArrayString &names, wxArrayI name.Printf(wxT("%c:"), driveBuffer[i]); #if !defined(__WXWINCE__) - wxChar pname[52]; - if (GetVolumeInformation( path.c_str(), pname, 52, NULL, NULL, NULL, NULL, 0 )) + wxChar pname[52]; // FIXME: why 52 and not MAX_PATH or whatever? + if ( GetVolumeInformation(path, pname, WXSIZEOF(pname), + NULL, NULL, NULL, NULL, 0) ) { - name.Printf(wxT("%s %s"), (const wxChar*) name, pname ); + name << _T(' ') << pname; } -#endif +#endif // __WXWINCE__ int imageId; int driveType = ::GetDriveType(path); @@ -695,6 +700,9 @@ void wxGenericDirCtrl::OnBeginEditItem(wxTreeEvent &event) void wxGenericDirCtrl::OnEndEditItem(wxTreeEvent &event) { + if (event.IsEditCancelled()) + return; + if ((event.GetLabel().empty()) || (event.GetLabel() == _(".")) || (event.GetLabel() == _("..")) || @@ -1057,6 +1065,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();