wxTreeItemId CLocalTreeView::MakeSubdirs(wxTreeItemId parent, wxString dirname, wxString subDir) { const wxString& separator = wxFileName::GetPathSeparator(); while (subDir != _T("")) { int pos = subDir.Find(separator); wxString segment; if (pos == -1) { segment = subDir; subDir = _T(""); } else { segment = subDir.Left(pos); subDir = subDir.Mid(pos + 1); } DisplayDir(parent, dirname, segment); wxTreeItemId item = GetSubdir(parent, segment); if (!item) return wxTreeItemId(); parent = item; dirname += segment + separator; } // Not needed, stays unexpanded by default // DisplayDir(parent, dirname); return parent; }
wxTreeItemId CLocalTreeView::GetNearestParent(wxString& localDir) { const wxString separator = wxFileName::GetPathSeparator(); #ifdef __WXMSW__ int pos = localDir.Find(separator); if (pos == -1) return wxTreeItemId(); wxString drive = localDir.Left(pos); localDir = localDir.Mid(pos + 1); wxTreeItemIdValue value; wxTreeItemId root = GetFirstChild(m_drives, value); while (root) { if (!GetItemText(root).Left(drive.Length()).CmpNoCase(drive)) break; root = GetNextSibling(root); } if (!root) { if (drive[1] == ':') return AddDrive(drive[0]); return wxTreeItemId(); } #else if (localDir[0] == '/') localDir = localDir.Mid(1); wxTreeItemId root = GetRootItem(); #endif while (localDir != _T("")) { wxString subDir; int pos = localDir.Find(separator); if (pos == -1) subDir = localDir; else subDir = localDir.Left(pos); wxTreeItemId child = GetSubdir(root, subDir); if (!child) return root; if (!pos) return child; root = child; localDir = localDir.Mid(pos + 1); } return root; }
void CLocalTreeView::DisplayDir(wxTreeItemId parent, const wxString& dirname, const wxString& knownSubdir /*=_T("")*/) { CLocalFileSystem local_filesystem; { wxLogNull log; if (!local_filesystem.BeginFindFiles(dirname, true)) { if (knownSubdir != _T("")) { wxTreeItemId item = GetSubdir(parent, knownSubdir); if (item != wxTreeItemId()) return; const wxString fullName = dirname + knownSubdir; item = AppendItem(parent, knownSubdir, GetIconIndex(::dir, fullName), #ifdef __WXMSW__ -1 #else GetIconIndex(opened_dir, fullName) #endif ); CheckSubdirStatus(item, fullName); } else { m_setSelection = true; DeleteChildren(parent); m_setSelection = false; } return; } } wxASSERT(parent); m_setSelection = true; DeleteChildren(parent); m_setSelection = false; CFilterManager filter; bool matchedKnown = false; wxString file; bool wasLink; int attributes; bool is_dir; const wxLongLong size(-1); wxDateTime date; while (local_filesystem.GetNextFile(file, wasLink, is_dir, 0, &date, &attributes)) { wxASSERT(is_dir); if (file == _T("")) { wxGetApp().DisplayEncodingWarning(); continue; } wxString fullName = dirname + file; #ifdef __WXMSW__ if (file.CmpNoCase(knownSubdir)) #else if (file != knownSubdir) #endif { if (filter.FilenameFiltered(file, dirname, true, size, true, attributes, date.IsValid() ? &date : 0)) continue; } else matchedKnown = true; wxTreeItemId item = AppendItem(parent, file, GetIconIndex(::dir, fullName), #ifdef __WXMSW__ -1 #else GetIconIndex(opened_dir, fullName) #endif ); CheckSubdirStatus(item, fullName); } if (!matchedKnown && knownSubdir != _T("")) { const wxString fullName = dirname + knownSubdir; wxTreeItemId item = AppendItem(parent, knownSubdir, GetIconIndex(::dir, fullName), #ifdef __WXMSW__ -1 #else GetIconIndex(opened_dir, fullName) #endif ); CheckSubdirStatus(item, fullName); } SortChildren(parent); }
void CLocalTreeView::DisplayDir(wxTreeItemId parent, const wxString& dirname, const wxString& knownSubdir /*=_T("")*/) { fz::local_filesys local_filesys; { wxLogNull log; if (!local_filesys.begin_find_files(fz::to_native(dirname), true)) { if (!knownSubdir.empty()) { wxTreeItemId item = GetSubdir(parent, knownSubdir); if (item != wxTreeItemId()) return; const wxString fullName = dirname + knownSubdir; item = AppendItem(parent, knownSubdir, GetIconIndex(iconType::dir, fullName), #ifdef __WXMSW__ -1 #else GetIconIndex(iconType::opened_dir, fullName) #endif ); CheckSubdirStatus(item, fullName); } else { m_setSelection = true; DeleteChildren(parent); m_setSelection = false; } return; } } wxASSERT(parent); m_setSelection = true; DeleteChildren(parent); m_setSelection = false; CFilterManager filter; bool matchedKnown = false; fz::native_string file; bool wasLink; int attributes; bool is_dir; static int64_t const size(-1); fz::datetime date; while (local_filesys.get_next_file(file, wasLink, is_dir, 0, &date, &attributes)) { wxASSERT(is_dir); if (file.empty()) { wxGetApp().DisplayEncodingWarning(); continue; } wxString file_wx = file; wxString fullName = dirname + file_wx; #ifdef __WXMSW__ if (file_wx.CmpNoCase(knownSubdir)) #else if (file_wx != knownSubdir) #endif { if (filter.FilenameFiltered(file_wx, dirname, true, size, true, attributes, date)) continue; } else matchedKnown = true; wxTreeItemId item = AppendItem(parent, file_wx, GetIconIndex(iconType::dir, fullName), #ifdef __WXMSW__ -1 #else GetIconIndex(iconType::opened_dir, fullName) #endif ); CheckSubdirStatus(item, fullName); } if (!matchedKnown && !knownSubdir.empty()) { const wxString fullName = dirname + knownSubdir; wxTreeItemId item = AppendItem(parent, knownSubdir, GetIconIndex(iconType::dir, fullName), #ifdef __WXMSW__ -1 #else GetIconIndex(iconType::opened_dir, fullName) #endif ); CheckSubdirStatus(item, fullName); } SortChildren(parent); }
void CLocalTreeView::DisplayDir(wxTreeItemId parent, const wxString& dirname, const wxString& knownSubdir /*=_T("")*/) { wxDir dir; { wxLogNull log; if (!dir.Open(dirname)) { if (knownSubdir != _T("")) { wxTreeItemId item = GetSubdir(parent, knownSubdir); if (item != wxTreeItemId()) return; const wxString fullName = dirname + knownSubdir; item = AppendItem(parent, knownSubdir, GetIconIndex(::dir, fullName), GetIconIndex(opened_dir, fullName)); if (HasSubdir(fullName)) AppendItem(item, _T("")); } else { m_setSelection = true; DeleteChildren(parent); m_setSelection = false; } return; } } wxASSERT(parent); m_setSelection = true; DeleteChildren(parent); m_setSelection = false; wxString file; CFilterDialog filter; bool matchedKnown = false; for (bool found = dir.GetFirst(&file, _T(""), wxDIR_DIRS | wxDIR_HIDDEN); found; found = dir.GetNext(&file)) { if (file == _T("")) { wxGetApp().DisplayEncodingWarning(); continue; } wxString fullName = dirname + file; #ifdef __WXMSW__ if (file.CmpNoCase(knownSubdir)) #else if (file != knownSubdir) #endif { wxFileName fn(fullName); const bool isDir = fn.DirExists(); wxLongLong size; const wxString& fullName = fn.GetFullPath(); wxStructStat buf; int result = wxStat(fullName, &buf); if (!isDir && !result) size = buf.st_size; else size = -1; int attributes; #ifdef __WXMSW__ DWORD tmp = GetFileAttributes(fullName); if (tmp == INVALID_FILE_ATTRIBUTES) attributes = 0; else attributes = tmp; #else if (!result) attributes = buf.st_mode & 0x777; else attributes = -1; #endif //__WXMSW__ if (filter.FilenameFiltered(file, isDir, size, true, attributes)) continue; } else matchedKnown = true; wxTreeItemId item = AppendItem(parent, file, GetIconIndex(::dir, fullName), GetIconIndex(opened_dir, fullName)); if (HasSubdir(fullName)) AppendItem(item, _T("")); } if (!matchedKnown && knownSubdir != _T("")) { const wxString fullName = dirname + knownSubdir; wxTreeItemId item = AppendItem(parent, knownSubdir, GetIconIndex(::dir, fullName), GetIconIndex(opened_dir, fullName)); if (HasSubdir(fullName)) AppendItem(item, _T("")); } SortChildren(parent); }