// Process(): bool ObjectShadowOptions_Interface::Process() { int total = 0; if( limit_to == 0 ) { for( LWItemID item = (*iteminfo->first)( LWI_OBJECT, NULL ); item != NULL; item = (*iteminfo->next)( item ) ) total++; } else { for( total=0; ui->selItems[total] != NULL; total++ ) { ; } } LWProgressPanel progress( global, total ); progress.SetAbortMessage( "ObjectShadowOptions Abort", "Abort Processing? Note that some object may have already been affected", NULL ); char buffer[ 1024 ]; progress.Open( "Object Shadow Options Processing..." ); int processed = 0; bool aborted = false; if( limit_to == 0 ) { int i = 0; for( LWItemID item = (*iteminfo->first)( LWI_OBJECT, NULL ); item != NULL; item = (*iteminfo->next)( item ) ) { sprintf( buffer, "Processing \"%s\"...", (*iteminfo->name)( item ) ); if( !progress.Handle( ++i, buffer ) ) { (*message->info)( "Object Shadow Options: Processing aborted by user.", NULL ); aborted = true; break; } if( ProcessObject( item ) ) processed++; } } else { for( int i=0; ui->selItems[i] != NULL; i++ ) { sprintf( buffer, "Processing \"%s\"...", (*iteminfo->name)( ui->selItems[i] ) ); if( !progress.Handle( i, buffer ) ) { (*message->info)( "Object Shadow Options: Processing aborted by user.", NULL ); aborted = true; break; } if( ProcessObject( ui->selItems[i] ) ) processed++; } } if( progress.IsOpen() ) progress.Close(); // Reselect Items ReselectItems(); if( !aborted ) { sprintf( buffer, "ObjectShadowOptions: Successfully processed %d of %d objects", processed, total ); (*message->info)( buffer , NULL ); } return true; }
// Process(): bool Nullify_Interface::Process() { // Build Item List BuildItemList(); // Build Hierarchy LWItemHierarchy base( LWITEM_NULL ); base.BuildChildList( iteminfo ); base.ReadLayoutSelection( iteminfo, ui ); #ifdef _DEBUG ofstream out( "i:\\Nullify_Hierarchy.txt" ); base.OutputToStream( out, iteminfo ); out.close(); #endif // Select decendants, if applicable if( nullify_decendants ) base.SelectSelectedsChildren( true ); // Set up the progress bar char title_string[256]; sprintf( title_string, "Nullify -- %c2000-2001 Joe Angell, TM Productions", 169 ); progress.SetTotal( items.NumElements() - 1 ); progress.SetCurrent( 1 ); progress.SetAbortMessage( "Confirm Nullify Abort", "Do you really want to abort nullification?", "Note that some objects may have already been converted to nulls." ); progress.Open( title_string ); // Process each object (*generic->evaluate)( generic->data, "AutoConfirm 1" ); ProcessObject( &base ); (*generic->evaluate)( generic->data, "AutoConfirm 0" ); // Reselect Items ReselectItems(); return true; }
void CLocalListView::ApplyCurrentFilter() { unsigned int min = m_hasParent ? 1 : 0; if (m_fileData.size() <= min) return; wxString focused; const std::list<wxString>& selectedNames = RememberSelectedItems(focused); CFilterDialog filter; m_indexMapping.clear(); m_indexMapping.push_back(0); for (unsigned int i = min; i < m_fileData.size(); i++) { const t_fileData& data = m_fileData[i]; if (!filter.FilenameFiltered(data.name, data.dir, data.size, true)) m_indexMapping.push_back(i); } SetItemCount(m_indexMapping.size()); SortList(); ReselectItems(selectedNames, focused); }
bool CLocalListView::DisplayDir(wxString dirname) { wxString focused; std::list<wxString> selectedNames; if (m_dir != dirname) { // Clear selection int item = -1; while (true) { item = GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED); if (item == -1) break; SetItemState(item, 0, wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED); } focused = _T(".."); if (GetItemCount()) EnsureVisible(0); m_dir = dirname; } else { // Remember which items were selected selectedNames = RememberSelectedItems(focused); } const int oldItemCount = m_indexMapping.size(); m_fileData.clear(); m_indexMapping.clear(); m_hasParent = CState::LocalDirHasParent(dirname); if (m_hasParent) { t_fileData data; data.dir = true; data.icon = -2; data.name = _T(".."); data.size = -1; data.hasTime = 0; m_fileData.push_back(data); m_indexMapping.push_back(0); } #ifdef __WXMSW__ if (dirname == _T("\\")) { DisplayDrives(); } else if (dirname.Left(2) == _T("\\\\")) { int pos = dirname.Mid(2).Find('\\'); if (pos != -1 && pos + 3 != (int)dirname.Len()) goto regular_dir; // UNC path without shares DisplayShares(dirname); } else #endif { #ifdef __WXMSW__ regular_dir: #endif CFilterDialog filter; wxDir dir(dirname); if (!dir.IsOpened()) { SetItemCount(1); return false; } wxString file; bool found = dir.GetFirst(&file); int num = m_fileData.size(); while (found) { if (file == _T("")) { wxGetApp().DisplayEncodingWarning(); found = dir.GetNext(&file); continue; } t_fileData data; data.dir = wxFileName::DirExists(dirname + file); data.icon = -2; data.name = file; wxStructStat buf; int result; result = wxStat(dirname + file, &buf); if (!result) { data.hasTime = true; data.lastModified = wxDateTime(buf.st_mtime); } else data.hasTime = false; if (data.dir) data.size = -1; else data.size = result ? -1 : buf.st_size; m_fileData.push_back(data); if (!filter.FilenameFiltered(data.name, data.dir, data.size, true)) m_indexMapping.push_back(num); num++; found = dir.GetNext(&file); } } if (m_dropTarget != -1) { t_fileData* data = GetData(m_dropTarget); if (!data || !data->dir) { SetItemState(m_dropTarget, 0, wxLIST_STATE_DROPHILITED); m_dropTarget = -1; } } const int count = m_indexMapping.size(); if (oldItemCount != count) SetItemCount(count); SortList(); ReselectItems(selectedNames, focused); Refresh(); return true; }
bool CLocalListView::DisplayDir(wxString dirname) { CancelLabelEdit(); wxString focused; std::list<wxString> selectedNames; bool ensureVisible = false; if (m_dir != dirname) { ResetSearchPrefix(); if (IsComparing()) ExitComparisonMode(); ClearSelection(); focused = m_pState->GetPreviouslyVisitedLocalSubdir(); ensureVisible = !focused.IsEmpty(); if (focused.IsEmpty()) focused = _T(".."); if (GetItemCount()) EnsureVisible(0); m_dir = dirname; } else { // Remember which items were selected selectedNames = RememberSelectedItems(focused); } if (m_pFilelistStatusBar) m_pFilelistStatusBar->UnselectAll(); const int oldItemCount = m_indexMapping.size(); m_fileData.clear(); m_indexMapping.clear(); m_hasParent = CLocalPath(dirname).HasLogicalParent(); if (m_hasParent) { CLocalFileData data; data.flags = normal; data.dir = true; data.icon = -2; data.name = _T(".."); #ifdef __WXMSW__ data.label = _T(".."); #endif data.size = -1; m_fileData.push_back(data); m_indexMapping.push_back(0); } #ifdef __WXMSW__ if (dirname == _T("\\")) { DisplayDrives(); } else if (dirname.Left(2) == _T("\\\\")) { int pos = dirname.Mid(2).Find('\\'); if (pos != -1 && pos + 3 != (int)dirname.Len()) goto regular_dir; // UNC path without shares DisplayShares(dirname); } else #endif { #ifdef __WXMSW__ regular_dir: #endif CFilterManager filter; CLocalFileSystem local_filesystem; if (!local_filesystem.BeginFindFiles(dirname, false)) { SetItemCount(1); return false; } wxLongLong totalSize; int unknown_sizes = 0; int totalFileCount = 0; int totalDirCount = 0; int hidden = 0; int num = m_fileData.size(); CLocalFileData data; data.flags = normal; data.icon = -2; bool wasLink; while (local_filesystem.GetNextFile(data.name, wasLink, data.dir, &data.size, &data.lastModified, &data.attributes)) { if (data.name.IsEmpty()) { wxGetApp().DisplayEncodingWarning(); continue; } #ifdef __WXMSW__ data.label = data.name; #endif m_fileData.push_back(data); if (!filter.FilenameFiltered(data.name, dirname, data.dir, data.size, true, data.attributes, data.lastModified)) { if (data.dir) totalDirCount++; else { if (data.size != -1) totalSize += data.size; else unknown_sizes++; totalFileCount++; } m_indexMapping.push_back(num); } else hidden++; num++; } if (m_pFilelistStatusBar) m_pFilelistStatusBar->SetDirectoryContents(totalFileCount, totalDirCount, totalSize, unknown_sizes, hidden); } if (m_dropTarget != -1) { CLocalFileData* data = GetData(m_dropTarget); if (!data || !data->dir) { SetItemState(m_dropTarget, 0, wxLIST_STATE_DROPHILITED); m_dropTarget = -1; } } const int count = m_indexMapping.size(); if (oldItemCount != count) SetItemCount(count); SortList(-1, -1, false); if (IsComparing()) { m_originalIndexMapping.clear(); RefreshComparison(); } ReselectItems(selectedNames, focused, ensureVisible); RefreshListOnly(); return true; }
void CLocalListView::RefreshFile(const wxString& file) { CLocalFileData data; bool wasLink; enum CLocalFileSystem::local_fileType type = CLocalFileSystem::GetFileInfo(m_dir + file, wasLink, &data.size, &data.lastModified, &data.attributes); if (type == CLocalFileSystem::unknown) return; data.flags = normal; data.icon = -2; data.name = file; #ifdef __WXMSW__ data.label = file; #endif data.dir = type == CLocalFileSystem::dir; CFilterManager filter; if (filter.FilenameFiltered(data.name, m_dir, data.dir, data.size, true, data.attributes, data.lastModified)) return; CancelLabelEdit(); // Look if file data already exists unsigned int i = 0; for (std::vector<CLocalFileData>::iterator iter = m_fileData.begin(); iter != m_fileData.end(); ++iter, ++i) { const CLocalFileData& oldData = *iter; if (oldData.name != file) continue; // Update file list status bar if (m_pFilelistStatusBar) { #ifndef __WXMSW__ // GetNextItem is O(n) if nothing is selected, GetSelectedItemCount() is O(1) if (GetSelectedItemCount()) #endif { int item = -1; for (;;) { item = GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); if (item == -1) break; if (m_indexMapping[item] != i) continue; if (oldData.dir) m_pFilelistStatusBar->UnselectDirectory(); else m_pFilelistStatusBar->UnselectFile(oldData.size); if (data.dir) m_pFilelistStatusBar->SelectDirectory(); else m_pFilelistStatusBar->SelectFile(data.size); break; } } if (oldData.dir) m_pFilelistStatusBar->RemoveDirectory(); else m_pFilelistStatusBar->RemoveFile(oldData.size); if (data.dir) m_pFilelistStatusBar->AddDirectory(); else m_pFilelistStatusBar->AddFile(data.size); } // Update the data data.fileType = oldData.fileType; *iter = data; if (IsComparing()) { // Sort order doesn't change RefreshComparison(); } else { if (m_sortColumn) SortList(); RefreshListOnly(false); } return; } if (data.dir) m_pFilelistStatusBar->AddDirectory(); else m_pFilelistStatusBar->AddFile(data.size); wxString focused; std::list<wxString> selectedNames; if (IsComparing()) { wxASSERT(!m_originalIndexMapping.empty()); selectedNames = RememberSelectedItems(focused); m_indexMapping.clear(); m_originalIndexMapping.swap(m_indexMapping); } // Insert new entry int index = m_fileData.size(); m_fileData.push_back(data); // Find correct position in index mapping std::vector<unsigned int>::iterator start = m_indexMapping.begin(); if (m_hasParent) ++start; CFileListCtrl<CLocalFileData>::CSortComparisonObject compare = GetSortComparisonObject(); std::vector<unsigned int>::iterator insertPos = std::lower_bound(start, m_indexMapping.end(), index, compare); compare.Destroy(); const int item = insertPos - m_indexMapping.begin(); m_indexMapping.insert(insertPos, index); if (!IsComparing()) { SetItemCount(m_indexMapping.size()); // Move selections int prevState = 0; for (unsigned int i = item; i < m_indexMapping.size(); i++) { int state = GetItemState(i, wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED); if (state != prevState) { SetItemState(i, prevState, wxLIST_STATE_FOCUSED); SetSelection(i, (prevState & wxLIST_STATE_SELECTED) != 0); prevState = state; } } RefreshListOnly(); } else { RefreshComparison(); if (m_pFilelistStatusBar) m_pFilelistStatusBar->UnselectAll(); ReselectItems(selectedNames, focused); } }
void CLocalListView::ApplyCurrentFilter() { CFilterManager filter; if (!filter.HasSameLocalAndRemoteFilters() && IsComparing()) ExitComparisonMode(); unsigned int min = m_hasParent ? 1 : 0; if (m_fileData.size() <= min) return; wxString focused; const std::list<wxString>& selectedNames = RememberSelectedItems(focused); if (m_pFilelistStatusBar) m_pFilelistStatusBar->UnselectAll(); wxLongLong totalSize; int unknown_sizes = 0; int totalFileCount = 0; int totalDirCount = 0; int hidden = 0; m_indexMapping.clear(); if (m_hasParent) m_indexMapping.push_back(0); for (unsigned int i = min; i < m_fileData.size(); i++) { const CLocalFileData& data = m_fileData[i]; if (data.flags == fill) continue; if (filter.FilenameFiltered(data.name, m_dir, data.dir, data.size, true, data.attributes, data.lastModified)) { hidden++; continue; } if (data.dir) totalDirCount++; else { if (data.size != -1) totalSize += data.size; else unknown_sizes++; totalFileCount++; } m_indexMapping.push_back(i); } SetItemCount(m_indexMapping.size()); if (m_pFilelistStatusBar) m_pFilelistStatusBar->SetDirectoryContents(totalFileCount, totalDirCount, totalSize, unknown_sizes, hidden); SortList(-1, -1, false); if (IsComparing()) { m_originalIndexMapping.clear(); RefreshComparison(); } ReselectItems(selectedNames, focused); if (!IsComparing()) RefreshListOnly(); }