void FileDialog::ParseFilter(int index) { m_Filters.Empty(); wxStringTokenizer tokenWild(m_FilterGroups[index - 1], wxT(";")); while (tokenWild.HasMoreTokens()) { wxString token = tokenWild.GetNextToken(); if (m_Filters.Index(token, false) == wxNOT_FOUND) { m_Filters.Add(token); } } }
void wxFileCtrl::UpdateFiles() { // don't do anything before ShowModal() call which sets m_dirName if ( m_dirName == wxT("*") ) return; wxBusyCursor bcur; // this may take a while... DeleteAllItems(); wxListItem item; item.m_itemId = 0; item.m_col = 0; #if (defined(__WINDOWS__) || defined(__DOS__) || defined(__WXMAC__) || defined(__OS2__)) && !defined(__WXWINCE__) if ( IsTopMostDir(m_dirName) ) { wxArrayString names, paths; wxArrayInt icons; size_t n, count = wxGetAvailableDrives(paths, names, icons); for (n=0; n<count; n++) { wxFileData *fd = new wxFileData(paths[n], names[n], wxFileData::is_drive, icons[n]); if (Add(fd, item) != -1) item.m_itemId++; else delete fd; } } else #endif // defined(__DOS__) || defined(__WINDOWS__) { // Real directory... if ( !IsTopMostDir(m_dirName) && !m_dirName.empty() ) { wxString p(wxPathOnly(m_dirName)); #if (defined(__UNIX__) || defined(__WXWINCE__)) && !defined(__OS2__) if (p.empty()) p = wxT("/"); #endif // __UNIX__ wxFileData *fd = new wxFileData(p, wxT(".."), wxFileData::is_dir, wxFileIconsTable::folder); if (Add(fd, item) != -1) item.m_itemId++; else delete fd; } wxString dirname(m_dirName); #if defined(__DOS__) || defined(__WINDOWS__) || defined(__OS2__) if (dirname.length() == 2 && dirname[1u] == wxT(':')) dirname << wxT('\\'); #endif // defined(__DOS__) || defined(__WINDOWS__) || defined(__OS2__) if (dirname.empty()) dirname = wxFILE_SEP_PATH; wxLogNull logNull; wxDir dir(dirname); if ( dir.IsOpened() ) { wxString dirPrefix(dirname); if (dirPrefix.Last() != wxFILE_SEP_PATH) dirPrefix += wxFILE_SEP_PATH; int hiddenFlag = m_showHidden ? wxDIR_HIDDEN : 0; bool cont; wxString f; // Get the directories first (not matched against wildcards): cont = dir.GetFirst(&f, wxEmptyString, wxDIR_DIRS | hiddenFlag); while (cont) { wxFileData *fd = new wxFileData(dirPrefix + f, f, wxFileData::is_dir, wxFileIconsTable::folder); if (Add(fd, item) != -1) item.m_itemId++; else delete fd; cont = dir.GetNext(&f); } // Tokenize the wildcard string, so we can handle more than 1 // search pattern in a wildcard. wxStringTokenizer tokenWild(m_wild, wxT(";")); while ( tokenWild.HasMoreTokens() ) { cont = dir.GetFirst(&f, tokenWild.GetNextToken(), wxDIR_FILES | hiddenFlag); while (cont) { wxFileData *fd = new wxFileData(dirPrefix + f, f, wxFileData::is_file, wxFileIconsTable::file); if (Add(fd, item) != -1) item.m_itemId++; else delete fd; cont = dir.GetNext(&f); } } } } SortItems(m_sort_field, m_sort_foward); }
void wxFileListCtrl::UpdateFiles() { // don't do anything before ShowModal() call which sets m_dirName if ( m_dirName == wxT("*") ) return; wxBusyCursor bcur; // this may take a while... DeleteAllItems(); wxListItem item; item.m_itemId = 0; item.m_col = 0; #if (defined(__WINDOWS__) || defined(__DOS__) || defined(__WXMAC__) || defined(__OS2__)) && !defined(__WXWINCE__) if ( IsTopMostDir(m_dirName) ) { wxArrayString names, paths; wxArrayInt icons; const size_t count = wxGetAvailableDrives(paths, names, icons); for ( size_t n = 0; n < count; n++ ) { // use paths[n] as the drive name too as our HandleAction() can't // deal with the drive names (of the form "System (C:)") currently // as it mistakenly treats them as file names // // it would be preferable to show names, and not paths, in the // dialog just as the native dialog does but for this we must: // a) store the item type as item data and modify HandleAction() // to use it instead of wxDirExists() to check whether the item // is a directory // b) store the drives by their drive letters and not their // descriptions as otherwise it's pretty confusing to the user wxFileData *fd = new wxFileData(paths[n], paths[n], wxFileData::is_drive, icons[n]); if (Add(fd, item) != -1) item.m_itemId++; else delete fd; } } else #endif // defined(__DOS__) || defined(__WINDOWS__) { // Real directory... if ( !IsTopMostDir(m_dirName) && !m_dirName.empty() ) { wxString p(wxPathOnly(m_dirName)); #if (defined(__UNIX__) || defined(__WXWINCE__)) && !defined(__OS2__) if (p.empty()) p = wxT("/"); #endif // __UNIX__ wxFileData *fd = new wxFileData(p, wxT(".."), wxFileData::is_dir, wxFileIconsTable::folder); if (Add(fd, item) != -1) item.m_itemId++; else delete fd; } wxString dirname(m_dirName); #if defined(__DOS__) || defined(__WINDOWS__) || defined(__OS2__) if (dirname.length() == 2 && dirname[1u] == wxT(':')) dirname << wxT('\\'); #endif // defined(__DOS__) || defined(__WINDOWS__) || defined(__OS2__) if (dirname.empty()) dirname = wxFILE_SEP_PATH; wxLogNull logNull; wxDir dir(dirname); if ( dir.IsOpened() ) { wxString dirPrefix(dirname); if (dirPrefix.Last() != wxFILE_SEP_PATH) dirPrefix += wxFILE_SEP_PATH; int hiddenFlag = m_showHidden ? wxDIR_HIDDEN : 0; bool cont; wxString f; // Get the directories first (not matched against wildcards): cont = dir.GetFirst(&f, wxEmptyString, wxDIR_DIRS | hiddenFlag); while (cont) { wxFileData *fd = new wxFileData(dirPrefix + f, f, wxFileData::is_dir, wxFileIconsTable::folder); if (Add(fd, item) != -1) item.m_itemId++; else delete fd; cont = dir.GetNext(&f); } // Tokenize the wildcard string, so we can handle more than 1 // search pattern in a wildcard. wxStringTokenizer tokenWild(m_wild, wxT(";")); while ( tokenWild.HasMoreTokens() ) { cont = dir.GetFirst(&f, tokenWild.GetNextToken(), wxDIR_FILES | hiddenFlag); while (cont) { wxFileData *fd = new wxFileData(dirPrefix + f, f, wxFileData::is_file, wxFileIconsTable::file); if (Add(fd, item) != -1) item.m_itemId++; else delete fd; cont = dir.GetNext(&f); } } } } SortItems(m_sort_field, m_sort_forward); }