void KNFolder::removeArticles( KNLocalArticle::List &l, bool del ) { if( !isLoaded() || l.isEmpty() ) return; int idx = 0, delCnt = 0, *positions; positions = new int[l.count()]; KNLocalArticle *a = 0; for ( KNLocalArticle::List::Iterator it = l.begin(); it != l.end(); ++it, ++idx ) { if ( (*it)->isLocked() ) positions[idx] = -1; else positions[idx] = a_rticles.indexForId( (*it)->id() ); } for ( idx = 0; idx < (int)(l.count()); ++idx ) { if(positions[idx]==-1) continue; a=at(positions[idx]); //update knGlobals.artFactory->deleteComposerForArticle(a); ArticleWindow::closeAllWindowsForArticle( a ); ArticleWidget::articleRemoved( a ); delete a->listItem(); //delete article a_rticles.remove( positions[idx], del ); delCnt++; if(!del) a->setId(-1); } if(delCnt>0) { compact(); c_ount-=delCnt; updateListItem(); i_ndexDirty=true; } delete[] positions; }
void KNArticleManager::updateListViewItems() { if(!g_roup && !f_older) return; if(g_roup) { KNRemoteArticle *art; for(int i=0; i<g_roup->length(); i++) { art=g_roup->at(i); if(art->listItem()) art->updateListItem(); } } else { //folder KNLocalArticle *art; for(int idx=0; idx<f_older->length(); idx++) { art=f_older->at(idx); if(art->listItem()) art->updateListItem(); } } }
void KNArticleManager::showHdrs(bool clear) { if(!g_roup && !f_older) return; bool setFirstChild=true; bool showThreads=knGlobals.settings()->showThreads(); bool expandThreads=knGlobals.settings()->defaultToExpandedThreads(); if(clear) v_iew->clear(); knGlobals.top->setCursorBusy(true); knGlobals.setStatusMsg(i18n(" Creating list...")); knGlobals.top->secureProcessEvents(); if(g_roup) { KNRemoteArticle *art, *ref, *current; current = static_cast<KNRemoteArticle*>( knGlobals.top->articleViewer()->article() ); if(current && (current->collection() != g_roup)) { current=0; knGlobals.top->articleViewer()->setArticle( 0 ); } if(g_roup->isLocked()) knGlobals.scheduler()->nntpMutex().lock(); if(f_ilter) f_ilter->doFilter(g_roup); else for(int i=0; i<g_roup->length(); i++) { art=g_roup->at(i); art->setFilterResult(true); art->setFiltered(true); ref=(art->idRef()!=0) ? g_roup->byId(art->idRef()) : 0; art->setDisplayedReference(ref); if(ref) ref->setVisibleFollowUps(true); } d_isableExpander=true; for(int i=0; i<g_roup->length(); i++) { art=g_roup->at(i); art->setThreadMode(showThreads); if(showThreads) { art->propagateThreadChangedDate(); if( !art->listItem() && art->filterResult() ) { // ### disable delayed header view item creation for now, it breaks // the quick search // since it doesn't seem to improve performance at all, it probably // could be removed entirely (see also slotItemExpanded(), etc.) /*if (!expandThreads) { if( (ref=art->displayedReference()) ) { if( ref->listItem() && ( ref->listItem()->isOpen() || ref->listItem()->childCount()>0 ) ) { art->setListItem(new KNHdrViewItem(ref->listItem())); art->initListItem(); } } else { art->setListItem(new KNHdrViewItem(v_iew)); art->initListItem(); } } else { // expandThreads == true */ createThread(art); if ( expandThreads ) art->listItem()->setOpen(true); // } } else if(art->listItem()) { art->updateListItem(); if (expandThreads) art->listItem()->setOpen(true); } } else { if(!art->listItem() && art->filterResult()) { art->setListItem(new KNHdrViewItem(v_iew)); art->initListItem(); } else if(art->listItem()) art->updateListItem(); } } if (current && !current->filterResult()) { // try to find a parent that is visible int idRef; while (current && !current->filterResult()) { idRef=current->idRef(); if (idRef == -1) break; current = g_roup->byId(idRef); } } if(current && current->filterResult()) { if(!current->listItem()) createCompleteThread(current); v_iew->setActive( current->listItem() ); setFirstChild=false; } d_isableExpander=false; if (g_roup->isLocked()) knGlobals.scheduler()->nntpMutex().unlock(); } else { //folder KNLocalArticle *art; if(f_ilter) { f_ilter->doFilter(f_older); } else { for(int i=0; i<f_older->length(); i++) { art=f_older->at(i); art->setFilterResult(true); } } for(int idx=0; idx<f_older->length(); idx++) { art=f_older->at(idx); if(!art->listItem() && art->filterResult()) { art->setListItem( new KNHdrViewItem(v_iew, art) ); art->updateListItem(); } else if(art->listItem()) art->updateListItem(); } } if(setFirstChild && v_iew->firstChild()) { v_iew->setCurrentItem(v_iew->firstChild()); knGlobals.top->articleViewer()->setArticle( 0 ); } knGlobals.setStatusMsg( QString() ); updateStatusString(); knGlobals.top->setCursorBusy(false); }