NS_IMETHODIMP nsFileView::SetShowOnlyDirectories(bool aOnlyDirs) { if (aOnlyDirs == mDirectoryFilter) return NS_OK; mDirectoryFilter = aOnlyDirs; PRUint32 dirCount; mDirList->Count(&dirCount); if (mDirectoryFilter) { PRInt32 rowDiff = mTotalRows - dirCount; mFilteredFiles->Clear(); mTotalRows = dirCount; if (mTree) mTree->RowCountChanged(mTotalRows, -rowDiff); } else { // Run the filter again to get the file list back FilterFiles(); SortArray(mFilteredFiles); if (mReverseSort) ReverseArray(mFilteredFiles); if (mTree) mTree->RowCountChanged(dirCount, mTotalRows - dirCount); } return NS_OK; }
void changeDir(const char *path) { ReadDirectory(path, &dirs, &files); if(dirs.size() == 0) dirs.push_back(".."); FilterFiles(&files, filefilter); }
void SearchThread::GetFiles(const SearchData* data, wxArrayString& files) { std::set<wxString> scannedFiles; const wxArrayString& rootDirs = data->GetRootDirs(); files = data->GetFiles(); // Remove files that do not match our search criteria FilterFiles(files, data); // Populate "scannedFiles" with list of files to scan scannedFiles.insert(files.begin(), files.end()); for(size_t i = 0; i < rootDirs.size(); ++i) { // make sure it's really a dir (not a fifo, etc.) DirTraverser traverser(data->GetExtensions()); wxDir dir(rootDirs.Item(i)); dir.Traverse(traverser); wxArrayString& someFiles = traverser.GetFiles(); for(size_t j = 0; j < someFiles.Count(); ++j) { if(scannedFiles.count(someFiles.Item(j)) == 0) { files.Add(someFiles.Item(j)); scannedFiles.insert(someFiles.Item(j)); } } } files.clear(); std::for_each(scannedFiles.begin(), scannedFiles.end(), [&](const wxString& file) { files.Add(file); }); }
void SearchThread::GetFiles(const SearchData* data, wxArrayString& files) { wxStringSet_t scannedFiles; const wxArrayString& rootDirs = data->GetRootDirs(); files = data->GetFiles(); // Populate "scannedFiles" with list of files to scan scannedFiles.insert(files.begin(), files.end()); for(size_t i = 0; i < rootDirs.size(); ++i) { // make sure it's really a dir (not a fifo, etc.) clFilesScanner scanner; std::vector<wxString> filesV; if(scanner.Scan(rootDirs.Item(i), filesV, data->GetExtensions())) { std::for_each(filesV.begin(), filesV.end(), [&](const wxString& file) { scannedFiles.insert(file); }); } } files.clear(); files.Alloc(scannedFiles.size()); std::for_each(scannedFiles.begin(), scannedFiles.end(), [&](const wxString& file) { files.Add(file); }); // Filter all non matching files FilterFiles(files, data); }
NS_IMETHODIMP nsFileView::SetDirectory(nsIFile* aDirectory) { NS_ENSURE_ARG_POINTER(aDirectory); nsCOMPtr<nsISimpleEnumerator> dirEntries; aDirectory->GetDirectoryEntries(getter_AddRefs(dirEntries)); if (!dirEntries) { // Couldn't read in the directory, this can happen if the user does not // have permission to list it. return NS_ERROR_FAILURE; } mDirectoryPath = aDirectory; mFileList->Clear(); mDirList->Clear(); bool hasMore = false; while (NS_SUCCEEDED(dirEntries->HasMoreElements(&hasMore)) && hasMore) { nsCOMPtr<nsISupports> nextItem; dirEntries->GetNext(getter_AddRefs(nextItem)); nsCOMPtr<nsIFile> theFile = do_QueryInterface(nextItem); bool isDirectory = false; if (theFile) { theFile->IsDirectory(&isDirectory); if (isDirectory) { bool isHidden; theFile->IsHidden(&isHidden); if (mShowHiddenFiles || !isHidden) { mDirList->AppendElement(theFile); } } else { mFileList->AppendElement(theFile); } } } if (mTree) { mTree->BeginUpdateBatch(); mTree->RowCountChanged(0, -mTotalRows); } FilterFiles(); SortInternal(); if (mTree) { mTree->EndUpdateBatch(); mTree->ScrollToRow(0); } return NS_OK; }
void SearchThread::GetFiles(const SearchData *data, wxArrayString &files) { std::set<wxString> scannedFiles; const wxArrayString& rootDirs = data->GetRootDirs(); for (size_t i = 0; i < rootDirs.Count(); ++i) { wxArrayString someFiles; const wxString& rootDir = rootDirs.Item(i); // Check both translations and otherwise: the history may have contained either if (rootDir == wxGetTranslation(SEARCH_IN_WORKSPACE) || rootDir == wxGetTranslation(SEARCH_IN_CURR_FILE_PROJECT) || rootDir == wxGetTranslation(SEARCH_IN_PROJECT) || rootDir == wxGetTranslation(SEARCH_IN_CURRENT_FILE) || rootDir == wxGetTranslation(SEARCH_IN_OPEN_FILES) || rootDir == SEARCH_IN_WORKSPACE || rootDir == SEARCH_IN_CURR_FILE_PROJECT || rootDir == SEARCH_IN_PROJECT || rootDir == SEARCH_IN_CURRENT_FILE || rootDir == SEARCH_IN_OPEN_FILES) { someFiles = data->GetFiles(); // filter files which does not match the criteria FilterFiles(someFiles, data); } else if (wxFile::Exists(rootDir)) { // search root is actually a file... someFiles.push_back(rootDir); } else if (wxDir::Exists(rootDir)) { // make sure it's really a dir (not a fifo, etc.) DirTraverser traverser(data->GetExtensions()); wxDir dir(rootDir); dir.Traverse(traverser); someFiles = traverser.GetFiles(); } for (size_t j = 0; j < someFiles.Count(); ++j) { if(scannedFiles.find(someFiles.Item(j)) == scannedFiles.end()) { files.Add(someFiles.Item(j)); scannedFiles.insert(someFiles.Item(j)); } } } }
NS_IMETHODIMP nsFileView::SetFilter(const nsAString& aFilterString) { PRUint32 filterCount = mCurrentFilters.Length(); for (PRUint32 i = 0; i < filterCount; ++i) NS_Free(mCurrentFilters[i]); mCurrentFilters.Clear(); nsAString::const_iterator start, iter, end; aFilterString.BeginReading(iter); aFilterString.EndReading(end); while (true) { // skip over delimiters while (iter != end && (*iter == ';' || *iter == ' ')) ++iter; if (iter == end) break; start = iter; // start of a filter // we know this is neither ';' nor ' ', skip to next char ++iter; // find next delimiter or end of string while (iter != end && (*iter != ';' && *iter != ' ')) ++iter; PRUnichar* filter = ToNewUnicode(Substring(start, iter)); if (!filter) return NS_ERROR_OUT_OF_MEMORY; if (!mCurrentFilters.AppendElement(filter)) { NS_Free(filter); return NS_ERROR_OUT_OF_MEMORY; } if (iter == end) break; ++iter; // we know this is either ';' or ' ', skip to next char } if (mTree) { mTree->BeginUpdateBatch(); PRUint32 count; mDirList->Count(&count); mTree->RowCountChanged(count, count - mTotalRows); } mFilteredFiles->Clear(); FilterFiles(); SortArray(mFilteredFiles); if (mReverseSort) ReverseArray(mFilteredFiles); if (mTree) mTree->EndUpdateBatch(); return NS_OK; }