X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8907154c1a8a6882c6797d1f16393ddfb23e7f3a..7ea1c917764fb2588fe1aadc75c49ba300f8cb2f:/src/generic/dirctrlg.cpp diff --git a/src/generic/dirctrlg.cpp b/src/generic/dirctrlg.cpp index f3cd6416d4..b631aa69cd 100644 --- a/src/generic/dirctrlg.cpp +++ b/src/generic/dirctrlg.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: dirctrlg.cpp +// Name: src/generic/dirctrlg.cpp // Purpose: wxGenericDirCtrl // Author: Harm van der Heijden, Robert Roebling, Julian Smart // Modified by: @@ -117,6 +117,15 @@ size_t wxGetAvailableDrives(wxArrayString &paths, wxArrayString &names, wxArrayI path.Printf(wxT("%c:\\"), driveBuffer[i]); name.Printf(wxT("%c:"), driveBuffer[i]); +#if !defined(__WXWINCE__) + wxChar pname[52]; // FIXME: why 52 and not MAX_PATH or whatever? + if ( GetVolumeInformation(path, pname, WXSIZEOF(pname), + NULL, NULL, NULL, NULL, 0) ) + { + name << _T(' ') << pname; + } +#endif // __WXWINCE__ + int imageId; int driveType = ::GetDriveType(path); switch (driveType) @@ -166,7 +175,17 @@ size_t wxGetAvailableDrives(wxArrayString &paths, wxArrayString &names, wxArrayI // Note: If _filesys is unsupported by some compilers, // we can always replace it by DosQueryFSAttach char filesysname[20]; +#ifdef __WATCOMC__ + ULONG cbBuffer = sizeof(filesysname); + PFSQBUFFER2 pfsqBuffer = (PFSQBUFFER2)filesysname; + APIRET rc = ::DosQueryFSAttach(name.fn_str(),0,FSAIL_QUERYNAME,pfsqBuffer,&cbBuffer); + if (rc != NO_ERROR) + { + filesysname[0] = '\0'; + } +#else _filesys(name.fn_str(), filesysname, sizeof(filesysname)); +#endif /* FAT, LAN, HPFS, CDFS, NFS */ int imageId; if (path == wxT("A:\\") || path == wxT("B:\\")) @@ -257,7 +276,9 @@ size_t wxGetAvailableDrives(wxArrayString &paths, wxArrayString &names, wxArrayI bool wxIsDriveAvailable(const wxString& dirName) { // FIXME_MGL - this method leads to hang up under Watcom for some reason -#ifndef __WATCOMC__ +#ifdef __WATCOMC__ + wxUnusedVar(dirName); +#else if ( dirName.Len() == 3 && dirName[1u] == wxT(':') ) { wxString dirNameLower(dirName.Lower()); @@ -830,8 +851,6 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId) // Now do the filenames -- but only if we're allowed to if ((GetWindowStyle() & wxDIRCTRL_DIR_ONLY) == 0) { - wxLogNull log; - d.Open(dirName); if (d.IsOpened()) @@ -865,7 +884,7 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId) size_t i; for (i = 0; i < dirs.Count(); i++) { - wxString eachFilename(dirs[i]); + eachFilename = dirs[i]; path = dirName; if (!wxEndsWithPathSeparator(path)) path += wxString(wxFILE_SEP_PATH); @@ -894,7 +913,7 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId) { for (i = 0; i < filenames.Count(); i++) { - wxString eachFilename(filenames[i]); + eachFilename = filenames[i]; path = dirName; if (!wxEndsWithPathSeparator(path)) path += wxString(wxFILE_SEP_PATH); @@ -997,48 +1016,46 @@ bool wxGenericDirCtrl::ExpandPath(const wxString& path) if (id.IsOk()) lastId = id; } - if (lastId.IsOk()) + if (!lastId.IsOk()) + return false; + + wxDirItemData *data = (wxDirItemData *) m_treeCtrl->GetItemData(lastId); + if (data->m_isDir) { - wxDirItemData *data = (wxDirItemData *) m_treeCtrl->GetItemData(lastId); - if (data->m_isDir) - { - m_treeCtrl->Expand(lastId); - } - if ((GetWindowStyle() & wxDIRCTRL_SELECT_FIRST) && data->m_isDir) + m_treeCtrl->Expand(lastId); + } + if ((GetWindowStyle() & wxDIRCTRL_SELECT_FIRST) && data->m_isDir) + { + // Find the first file in this directory + wxTreeItemIdValue cookie; + wxTreeItemId childId = m_treeCtrl->GetFirstChild(lastId, cookie); + bool selectedChild = false; + while (childId.IsOk()) { - // Find the first file in this directory - wxTreeItemIdValue cookie; - wxTreeItemId childId = m_treeCtrl->GetFirstChild(lastId, cookie); - bool selectedChild = false; - while (childId.IsOk()) - { - wxDirItemData* data = (wxDirItemData*) m_treeCtrl->GetItemData(childId); + data = (wxDirItemData*) m_treeCtrl->GetItemData(childId); - if (data && data->m_path != wxEmptyString && !data->m_isDir) - { - m_treeCtrl->SelectItem(childId); - m_treeCtrl->EnsureVisible(childId); - selectedChild = true; - break; - } - childId = m_treeCtrl->GetNextChild(lastId, cookie); - } - if (!selectedChild) + if (data && data->m_path != wxEmptyString && !data->m_isDir) { - m_treeCtrl->SelectItem(lastId); - m_treeCtrl->EnsureVisible(lastId); + m_treeCtrl->SelectItem(childId); + m_treeCtrl->EnsureVisible(childId); + selectedChild = true; + break; } + childId = m_treeCtrl->GetNextChild(lastId, cookie); } - else + if (!selectedChild) { m_treeCtrl->SelectItem(lastId); m_treeCtrl->EnsureVisible(lastId); } - - return true; } else - return false; + { + m_treeCtrl->SelectItem(lastId); + m_treeCtrl->EnsureVisible(lastId); + } + + return true; } wxString wxGenericDirCtrl::GetPath() const @@ -1182,22 +1199,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); } @@ -1483,7 +1484,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 @@ -1643,7 +1644,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();