void WadListBox::removeWads(const wxArrayInt& indices) { StringList newList; for (size_t i = 0; i < m_wadFiles.size(); i++) { if (std::find(indices.begin(), indices.end(), i) == indices.end()) newList.push_back(m_wadFiles[i]); } m_wadFiles = newList; SetItemCount(m_wadFiles.size()); Refresh(); }
// returns all new dirs/files present in the immediate level of the dir // pointed by watch.GetPath(). "new" means created between the last time // the state of watch was computed and now void FindChanges(wxFSWatchEntryKq& watch, wxArrayString& changedFiles, wxArrayInt& changedFlags) { wxFSWatchEntryKq::wxDirState old = watch.GetLastState(); watch.RefreshState(); wxFSWatchEntryKq::wxDirState curr = watch.GetLastState(); // iterate over old/curr file lists and compute changes wxArrayString::iterator oit = old.files.begin(); wxArrayString::iterator cit = curr.files.begin(); for ( ; oit != old.files.end() && cit != curr.files.end(); ) { if ( *cit == *oit ) { ++cit; ++oit; } else if ( *cit <= *oit ) { changedFiles.push_back(*cit); changedFlags.push_back(wxFSW_EVENT_CREATE); ++cit; } else // ( *cit > *oit ) { changedFiles.push_back(*oit); changedFlags.push_back(wxFSW_EVENT_DELETE); ++oit; } } // border conditions if ( oit == old.files.end() ) { for ( ; cit != curr.files.end(); ++cit ) { changedFiles.push_back( *cit ); changedFlags.push_back(wxFSW_EVENT_CREATE); } } else if ( cit == curr.files.end() ) { for ( ; oit != old.files.end(); ++oit ) { changedFiles.push_back( *oit ); changedFlags.push_back(wxFSW_EVENT_DELETE); } } wxASSERT( changedFiles.size() == changedFlags.size() ); #if 0 wxLogTrace(wxTRACE_FSWATCHER, "Changed files:"); wxArrayString::iterator it = changedFiles.begin(); wxArrayInt::iterator it2 = changedFlags.begin(); for ( ; it != changedFiles.end(); ++it, ++it2) { wxString action = (*it2 == wxFSW_EVENT_CREATE) ? "created" : "deleted"; wxLogTrace(wxTRACE_FSWATCHER, wxString::Format("File: '%s' %s", *it, action)); } #endif }