libkdenetwork Library API Documentation

ksubscription.cpp

00001 /* 00002 ksubscription.cpp 00003 00004 This program is free software; you can redistribute it and/or modify 00005 it under the terms of the GNU General Public License as published by 00006 the Free Software Foundation; either version 2 of the License, or 00007 (at your option) any later version. 00008 You should have received a copy of the GNU General Public License 00009 along with this program; if not, write to the Free Software Foundation, 00010 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, US 00011 */ 00012 00013 #include "ksubscription.h" 00014 #include "kaccount.h" 00015 00016 #include <qlayout.h> 00017 #include <qtimer.h> 00018 #include <qlabel.h> 00019 #include <qpushbutton.h> 00020 #include <qheader.h> 00021 00022 #include <kseparator.h> 00023 #include <kiconloader.h> 00024 #include <klocale.h> 00025 #include <kdebug.h> 00026 #include <klineedit.h> 00027 00028 00029 //============================================================================= 00030 00031 KGroupInfo::KGroupInfo(const QString &name, const QString &description, 00032 bool newGroup, bool subscribed, 00033 Status status, QString path) 00034 : name(name), description(description), 00035 newGroup(newGroup), subscribed(subscribed), 00036 status(status), path(path) 00037 { 00038 } 00039 00040 //----------------------------------------------------------------------------- 00041 bool KGroupInfo::operator== (const KGroupInfo &gi2) 00042 { 00043 return (name == gi2.name); 00044 } 00045 00046 //----------------------------------------------------------------------------- 00047 bool KGroupInfo::operator< (const KGroupInfo &gi2) 00048 { 00049 return (name < gi2.name); 00050 } 00051 00052 //============================================================================= 00053 00054 GroupItem::GroupItem( QListView *v, const KGroupInfo &gi, KSubscription* browser, 00055 bool isCheckItem ) 00056 : QCheckListItem( v, gi.name, isCheckItem ? CheckBox : CheckBoxController ), 00057 mInfo( gi ), mBrowser( browser ), mIsCheckItem( isCheckItem ), 00058 mIgnoreStateChange( false ) 00059 { 00060 if (listView()->columns() > 1) 00061 setDescription(); 00062 } 00063 00064 //----------------------------------------------------------------------------- 00065 GroupItem::GroupItem( QListViewItem *i, const KGroupInfo &gi, KSubscription* browser, 00066 bool isCheckItem ) 00067 : QCheckListItem( i, gi.name, isCheckItem ? CheckBox : CheckBoxController ), 00068 mInfo( gi ), mBrowser( browser ), mIsCheckItem( isCheckItem ), 00069 mIgnoreStateChange( false ) 00070 { 00071 if (listView()->columns() > 1) 00072 setDescription(); 00073 } 00074 00075 //----------------------------------------------------------------------------- 00076 void GroupItem::setInfo( KGroupInfo info ) 00077 { 00078 mInfo = info; 00079 setText(0, mInfo.name); 00080 if (listView()->columns() > 1) 00081 setDescription(); 00082 } 00083 00084 //----------------------------------------------------------------------------- 00085 void GroupItem::setDescription() 00086 { 00087 setText(1, mInfo.description); 00088 } 00089 00090 //----------------------------------------------------------------------------- 00091 void GroupItem::setOn( bool on ) 00092 { 00093 if (mBrowser->isLoading()) 00094 { 00095 // set this only if we're loading/creating items 00096 // otherwise changes are only permanent when the dialog is saved 00097 mInfo.subscribed = on; 00098 } 00099 if (isCheckItem()) 00100 QCheckListItem::setOn(on); 00101 } 00102 00103 //------------------------------------------------------------------------------ 00104 void GroupItem::stateChange( bool on ) 00105 { 00106 // delegate to parent 00107 if ( !mIgnoreStateChange ) 00108 mBrowser->changeItemState(this, on); 00109 } 00110 00111 //------------------------------------------------------------------------------ 00112 void GroupItem::setVisible( bool b ) 00113 { 00114 if (b) 00115 { 00116 QListViewItem::setVisible(b); 00117 setEnabled(true); 00118 } 00119 else 00120 { 00121 if (isCheckItem()) 00122 { 00123 bool setInvisible = true; 00124 for (QListViewItem * lvchild = firstChild(); lvchild != 0; 00125 lvchild = lvchild->nextSibling()) 00126 { 00127 if (lvchild->isVisible()) // item has a visible child 00128 setInvisible = false; 00129 } 00130 if (setInvisible) 00131 QListViewItem::setVisible(b); 00132 else 00133 { 00134 // leave it visible so that children remain visible 00135 setOpen(true); 00136 setEnabled(false); 00137 } 00138 } 00139 else 00140 { 00141 // non-checkable item 00142 QPtrList<QListViewItem> moveItems; 00143 00144 for (QListViewItem * lvchild = firstChild(); lvchild != 0; 00145 lvchild = lvchild->nextSibling()) 00146 { 00147 if (static_cast<GroupItem*>(lvchild)->isCheckItem()) 00148 { 00149 // remember the items 00150 moveItems.append(lvchild); 00151 } 00152 } 00153 QPtrListIterator<QListViewItem> it( moveItems ); 00154 for ( ; it.current(); ++it) 00155 { 00156 // move the checkitem to top 00157 QListViewItem* parent = it.current()->parent(); 00158 if (parent) parent->takeItem(it.current()); 00159 listView()->insertItem(it.current()); 00160 } 00161 QListViewItem::setVisible(false); 00162 } 00163 } 00164 } 00165 00166 //----------------------------------------------------------------------------- 00167 void GroupItem::paintCell( QPainter * p, const QColorGroup & cg, 00168 int column, int width, int align ) 00169 { 00170 if (mIsCheckItem) 00171 return QCheckListItem::paintCell( p, cg, column, width, align ); 00172 else 00173 return QListViewItem::paintCell( p, cg, column, width, align ); 00174 } 00175 00176 //----------------------------------------------------------------------------- 00177 void GroupItem::paintFocus( QPainter * p, const QColorGroup & cg, 00178 const QRect & r ) 00179 { 00180 if (mIsCheckItem) 00181 QCheckListItem::paintFocus(p, cg, r); 00182 else 00183 QListViewItem::paintFocus(p, cg, r); 00184 } 00185 00186 //----------------------------------------------------------------------------- 00187 int GroupItem::width( const QFontMetrics& fm, const QListView* lv, int column) const 00188 { 00189 if (mIsCheckItem) 00190 return QCheckListItem::width(fm, lv, column); 00191 else 00192 return QListViewItem::width(fm, lv, column); 00193 } 00194 00195 //----------------------------------------------------------------------------- 00196 void GroupItem::setup() 00197 { 00198 if (mIsCheckItem) 00199 QCheckListItem::setup(); 00200 else 00201 QListViewItem::setup(); 00202 } 00203 00204 00205 //============================================================================= 00206 00207 KSubscription::KSubscription( QWidget *parent, const QString &caption, 00208 KAccount * acct, int buttons, const QString &user1, bool descriptionColumn ) 00209 : KDialogBase( parent, 0, true, caption, buttons | Help | Ok | Cancel, Ok, 00210 true, i18n("Reload &List"), user1 ), 00211 mAcct( acct ) 00212 { 00213 mLoading = true; 00214 setWFlags( getWFlags() | WDestructiveClose ); 00215 00216 // create Widgets 00217 page = new QWidget(this); 00218 setMainWidget(page); 00219 00220 filterEdit = new KLineEdit(page); 00221 QLabel *l = new QLabel(filterEdit,i18n("S&earch:"), page); 00222 00223 // checkboxes 00224 noTreeCB = new QCheckBox(i18n("Disable &tree view"), page); 00225 noTreeCB->setChecked(false); 00226 subCB = new QCheckBox(i18n("&Subscribed only"), page); 00227 subCB->setChecked(false); 00228 newCB = new QCheckBox(i18n("&New only"), page); 00229 newCB->setChecked(false); 00230 00231 KSeparator *sep = new KSeparator(KSeparator::HLine, page); 00232 00233 // init the labels 00234 QFont fnt = font(); 00235 fnt.setBold(true); 00236 leftLabel = new QLabel(i18n("Loading..."), page); 00237 rightLabel = new QLabel(i18n("Current changes:"), page); 00238 leftLabel->setFont(fnt); 00239 rightLabel->setFont(fnt); 00240 00241 // icons 00242 pmRight = BarIcon("forward"); 00243 pmLeft = BarIcon("back"); 00244 00245 arrowBtn1 = new QPushButton(page); 00246 arrowBtn1->setEnabled(false); 00247 arrowBtn2 = new QPushButton(page); 00248 arrowBtn2->setEnabled(false); 00249 arrowBtn1->setPixmap(pmRight); 00250 arrowBtn2->setPixmap(pmRight); 00251 arrowBtn1->setFixedSize(35,30); 00252 arrowBtn2->setFixedSize(35,30); 00253 00254 // the main listview 00255 groupView = new QListView(page); 00256 groupView->setRootIsDecorated(true); 00257 groupView->addColumn(i18n("Name")); 00258 groupView->setAllColumnsShowFocus(true); 00259 if (descriptionColumn) 00260 mDescrColumn = groupView->addColumn(i18n("Description")); 00261 else 00262 groupView->header()->setStretchEnabled(true, 0); 00263 00264 // layout 00265 QGridLayout *topL = new QGridLayout(page,3,1,0,5); 00266 QHBoxLayout *filterL = new QHBoxLayout(10); 00267 QVBoxLayout *arrL = new QVBoxLayout(10); 00268 listL = new QGridLayout(2, 3, 5); 00269 00270 topL->addLayout(filterL, 0,0); 00271 topL->addWidget(sep,1,0); 00272 topL->addLayout(listL, 2,0); 00273 00274 filterL->addWidget(l); 00275 filterL->addWidget(filterEdit, 1); 00276 filterL->addWidget(noTreeCB); 00277 filterL->addWidget(subCB); 00278 filterL->addWidget(newCB); 00279 00280 listL->addWidget(leftLabel, 0,0); 00281 listL->addWidget(rightLabel, 0,2); 00282 listL->addWidget(groupView, 1,0); 00283 listL->addLayout(arrL, 1,1); 00284 listL->setRowStretch(1,1); 00285 listL->setColStretch(0,5); 00286 listL->setColStretch(2,2); 00287 00288 arrL->addWidget(arrowBtn1, AlignCenter); 00289 arrL->addWidget(arrowBtn2, AlignCenter); 00290 00291 // listviews 00292 subView = new QListView(page); 00293 subView->addColumn(i18n("Subscribe To")); 00294 subView->header()->setStretchEnabled(true, 0); 00295 unsubView = new QListView(page); 00296 unsubView->addColumn(i18n("Unsubscribe From")); 00297 unsubView->header()->setStretchEnabled(true, 0); 00298 00299 QVBoxLayout *protL = new QVBoxLayout(3); 00300 listL->addLayout(protL, 1,2); 00301 protL->addWidget(subView); 00302 protL->addWidget(unsubView); 00303 00304 // disable some widgets as long we're loading 00305 enableButton(User1, false); 00306 enableButton(User2, false); 00307 newCB->setEnabled(false); 00308 noTreeCB->setEnabled(false); 00309 subCB->setEnabled(false); 00310 00311 filterEdit->setFocus(); 00312 00313 // items clicked 00314 connect(groupView, SIGNAL(clicked(QListViewItem *)), 00315 this, SLOT(slotChangeButtonState(QListViewItem*))); 00316 connect(subView, SIGNAL(clicked(QListViewItem *)), 00317 this, SLOT(slotChangeButtonState(QListViewItem*))); 00318 connect(unsubView, SIGNAL(clicked(QListViewItem *)), 00319 this, SLOT(slotChangeButtonState(QListViewItem*))); 00320 00321 // connect buttons 00322 connect(arrowBtn1, SIGNAL(clicked()), SLOT(slotButton1())); 00323 connect(arrowBtn2, SIGNAL(clicked()), SLOT(slotButton2())); 00324 connect(this, SIGNAL(user1Clicked()), SLOT(slotLoadFolders())); 00325 00326 // connect checkboxes 00327 connect(subCB, SIGNAL(clicked()), SLOT(slotCBToggled())); 00328 connect(newCB, SIGNAL(clicked()), SLOT(slotCBToggled())); 00329 connect(noTreeCB, SIGNAL(clicked()), SLOT(slotCBToggled())); 00330 00331 // connect textfield 00332 connect(filterEdit, SIGNAL(textChanged(const QString&)), 00333 SLOT(slotFilterTextChanged(const QString&))); 00334 00335 // update status 00336 connect(this, SIGNAL(listChanged()), SLOT(slotUpdateStatusLabel())); 00337 } 00338 00339 //----------------------------------------------------------------------------- 00340 KSubscription::~KSubscription() 00341 { 00342 } 00343 00344 //----------------------------------------------------------------------------- 00345 void KSubscription::setStartItem( const KGroupInfo &info ) 00346 { 00347 QListViewItemIterator it(groupView); 00348 00349 for ( ; it.current(); ++it) 00350 { 00351 if (static_cast<GroupItem*>(it.current())->info() == info) 00352 { 00353 it.current()->setSelected(true); 00354 it.current()->setOpen(true); 00355 } 00356 } 00357 } 00358 00359 //----------------------------------------------------------------------------- 00360 void KSubscription::removeListItem( QListView *view, const KGroupInfo &gi ) 00361 { 00362 if(!view) return; 00363 QListViewItemIterator it(view); 00364 00365 for ( ; it.current(); ++it) 00366 { 00367 if (static_cast<GroupItem*>(it.current())->info() == gi) 00368 { 00369 delete it.current(); 00370 break; 00371 } 00372 } 00373 if (view == groupView) 00374 emit listChanged(); 00375 } 00376 00377 //----------------------------------------------------------------------------- 00378 QListViewItem* KSubscription::getListItem( QListView *view, const KGroupInfo &gi ) 00379 { 00380 if(!view) return 0; 00381 QListViewItemIterator it(view); 00382 00383 for ( ; it.current(); ++it) 00384 { 00385 if (static_cast<GroupItem*>(it.current())->info() == gi) 00386 return (it.current()); 00387 } 00388 return 0; 00389 } 00390 00391 //----------------------------------------------------------------------------- 00392 bool KSubscription::itemInListView( QListView *view, const KGroupInfo &gi ) 00393 { 00394 if(!view) return false; 00395 QListViewItemIterator it(view); 00396 00397 for ( ; it.current(); ++it) 00398 if (static_cast<GroupItem*>(it.current())->info() == gi) 00399 return true; 00400 00401 return false; 00402 } 00403 00404 //------------------------------------------------------------------------------ 00405 void KSubscription::setDirectionButton1( Direction dir ) 00406 { 00407 mDirButton1 = dir; 00408 if (dir == Left) 00409 arrowBtn1->setPixmap(pmLeft); 00410 else 00411 arrowBtn1->setPixmap(pmRight); 00412 } 00413 00414 //------------------------------------------------------------------------------ 00415 void KSubscription::setDirectionButton2( Direction dir ) 00416 { 00417 mDirButton2 = dir; 00418 if (dir == Left) 00419 arrowBtn2->setPixmap(pmLeft); 00420 else 00421 arrowBtn2->setPixmap(pmRight); 00422 } 00423 00424 //------------------------------------------------------------------------------ 00425 void KSubscription::changeItemState( GroupItem* item, bool on ) 00426 { 00427 // is this a checkable item 00428 if (!item->isCheckItem()) return; 00429 00430 // if we're currently loading the items ignore changes 00431 if (mLoading) return; 00432 if (on) 00433 { 00434 if (!itemInListView(unsubView, item->info())) 00435 { 00436 QListViewItem *p = item->parent(); 00437 while (p) 00438 { 00439 // make sure all parents are subscribed 00440 GroupItem* pi = static_cast<GroupItem*>(p); 00441 if (pi->isCheckItem() && !pi->isOn()) 00442 { 00443 pi->setIgnoreStateChange(true); 00444 pi->setOn(true); 00445 pi->setIgnoreStateChange(false); 00446 new GroupItem(subView, pi->info(), this); 00447 } 00448 p = p->parent(); 00449 } 00450 new GroupItem(subView, item->info(), this); 00451 } 00452 // eventually remove it from the other listview 00453 removeListItem(unsubView, item->info()); 00454 } 00455 else { 00456 if (!itemInListView(subView, item->info())) 00457 { 00458 new GroupItem(unsubView, item->info(), this); 00459 } 00460 // eventually remove it from the other listview 00461 removeListItem(subView, item->info()); 00462 } 00463 // update the buttons 00464 slotChangeButtonState(item); 00465 } 00466 00467 //------------------------------------------------------------------------------ 00468 void KSubscription::filterChanged( QListViewItem* item, const QString & text ) 00469 { 00470 if ( !item && groupView ) 00471 item = groupView->firstChild(); 00472 if ( !item ) 00473 return; 00474 00475 do 00476 { 00477 if ( item->firstChild() ) // recursive descend 00478 filterChanged(item->firstChild(), text); 00479 00480 GroupItem* gr = static_cast<GroupItem*>(item); 00481 if (subCB->isChecked() || newCB->isChecked() || !text.isEmpty() || 00482 noTreeCB->isChecked()) 00483 { 00484 // set it invisible 00485 if ( subCB->isChecked() && 00486 (!gr->isCheckItem() || 00487 (gr->isCheckItem() && !gr->info().subscribed)) ) 00488 { 00489 // only subscribed 00490 gr->setVisible(false); 00491 continue; 00492 } 00493 if ( newCB->isChecked() && 00494 (!gr->isCheckItem() || 00495 (gr->isCheckItem() && !gr->info().newGroup)) ) 00496 { 00497 // only new 00498 gr->setVisible(false); 00499 continue; 00500 } 00501 if ( !text.isEmpty() && 00502 gr->text(0).find(text, 0, false) == -1) 00503 { 00504 // searchfield 00505 gr->setVisible(false); 00506 continue; 00507 } 00508 if ( noTreeCB->isChecked() && 00509 !gr->isCheckItem() ) 00510 { 00511 // disable treeview 00512 gr->setVisible(false); 00513 continue; 00514 } 00515 00516 gr->setVisible(true); 00517 00518 } else { 00519 gr->setVisible(true); 00520 } 00521 00522 } while ((item = item->nextSibling())); 00523 00524 } 00525 00526 //------------------------------------------------------------------------------ 00527 uint KSubscription::activeItemCount() 00528 { 00529 QListViewItemIterator it(groupView); 00530 00531 uint count = 0; 00532 for ( ; it.current(); ++it) 00533 { 00534 if (static_cast<GroupItem*>(it.current())->isCheckItem() && 00535 it.current()->isVisible() && it.current()->isEnabled()) 00536 count++; 00537 } 00538 00539 return count; 00540 } 00541 00542 //------------------------------------------------------------------------------ 00543 void KSubscription::restoreOriginalParent() 00544 { 00545 QPtrList<QListViewItem> move; 00546 QListViewItemIterator it(groupView); 00547 for ( ; it.current(); ++it) 00548 { 00549 QListViewItem* origParent = static_cast<GroupItem*>(it.current())-> 00550 originalParent(); 00551 if (origParent && origParent != it.current()->parent()) 00552 { 00553 // remember this to avoid messing up the iterator 00554 move.append(it.current()); 00555 } 00556 } 00557 QPtrListIterator<QListViewItem> it2( move ); 00558 for ( ; it2.current(); ++it2) 00559 { 00560 // restore the original parent 00561 QListViewItem* origParent = static_cast<GroupItem*>(it2.current())-> 00562 originalParent(); 00563 groupView->takeItem(it2.current()); 00564 origParent->insertItem(it2.current()); 00565 } 00566 } 00567 00568 //----------------------------------------------------------------------------- 00569 void KSubscription::saveOpenStates() 00570 { 00571 QListViewItemIterator it(groupView); 00572 00573 for ( ; it.current(); ++it) 00574 { 00575 static_cast<GroupItem*>(it.current())->setLastOpenState( 00576 it.current()->isOpen() ); 00577 } 00578 } 00579 00580 //----------------------------------------------------------------------------- 00581 void KSubscription::restoreOpenStates() 00582 { 00583 QListViewItemIterator it(groupView); 00584 00585 for ( ; it.current(); ++it) 00586 { 00587 it.current()->setOpen( 00588 static_cast<GroupItem*>(it.current())->lastOpenState() ); 00589 } 00590 } 00591 00592 //----------------------------------------------------------------------------- 00593 void KSubscription::slotLoadingComplete() 00594 { 00595 mLoading = false; 00596 00597 enableButton(User1, true); 00598 enableButton(User2, true); 00599 newCB->setEnabled(true); 00600 noTreeCB->setEnabled(true); 00601 subCB->setEnabled(true); 00602 00603 // remember the correct parent 00604 QListViewItemIterator it(groupView); 00605 for ( ; it.current(); ++it) 00606 { 00607 static_cast<GroupItem*>(it.current())-> 00608 setOriginalParent( it.current()->parent() ); 00609 } 00610 00611 emit listChanged(); 00612 } 00613 00614 //------------------------------------------------------------------------------ 00615 void KSubscription::slotChangeButtonState( QListViewItem *item ) 00616 { 00617 if (!item || 00618 (item->listView() == groupView && 00619 !static_cast<GroupItem*>(item)->isCheckItem())) 00620 { 00621 // disable and return 00622 arrowBtn1->setEnabled(false); 00623 arrowBtn2->setEnabled(false); 00624 return; 00625 } 00626 // set the direction of the buttons and enable/disable them 00627 QListView* currentView = item->listView(); 00628 if (currentView == groupView) 00629 { 00630 setDirectionButton1(Right); 00631 setDirectionButton2(Right); 00632 if (static_cast<GroupItem*>(item)->isOn()) 00633 { 00634 // already subscribed 00635 arrowBtn1->setEnabled(false); 00636 arrowBtn2->setEnabled(true); 00637 } else { 00638 // unsubscribed 00639 arrowBtn1->setEnabled(true); 00640 arrowBtn2->setEnabled(false); 00641 } 00642 } else if (currentView == subView) 00643 { 00644 // undo possible 00645 setDirectionButton1(Left); 00646 00647 arrowBtn1->setEnabled(true); 00648 arrowBtn2->setEnabled(false); 00649 } else if (currentView == unsubView) 00650 { 00651 // undo possible 00652 setDirectionButton2(Left); 00653 00654 arrowBtn1->setEnabled(false); 00655 arrowBtn2->setEnabled(true); 00656 } 00657 } 00658 00659 //------------------------------------------------------------------------------ 00660 void KSubscription::slotButton1() 00661 { 00662 if (mDirButton1 == Right) 00663 { 00664 if (groupView->currentItem() && 00665 static_cast<GroupItem*>(groupView->currentItem())->isCheckItem()) 00666 { 00667 // activate 00668 GroupItem* item = static_cast<GroupItem*>(groupView->currentItem()); 00669 item->setOn(true); 00670 } 00671 } 00672 else { 00673 if (subView->currentItem()) 00674 { 00675 GroupItem* item = static_cast<GroupItem*>(subView->currentItem()); 00676 // get the corresponding item from the groupView 00677 QListViewItem* listitem = getListItem(groupView, item->info()); 00678 if (listitem) 00679 { 00680 // deactivate 00681 GroupItem* chk = static_cast<GroupItem*>(listitem); 00682 chk->setOn(false); 00683 } 00684 } 00685 } 00686 } 00687 00688 //------------------------------------------------------------------------------ 00689 void KSubscription::slotButton2() 00690 { 00691 if (mDirButton2 == Right) 00692 { 00693 if (groupView->currentItem() && 00694 static_cast<GroupItem*>(groupView->currentItem())->isCheckItem()) 00695 { 00696 // deactivate 00697 GroupItem* item = static_cast<GroupItem*>(groupView->currentItem()); 00698 item->setOn(false); 00699 } 00700 } 00701 else { 00702 if (unsubView->currentItem()) 00703 { 00704 GroupItem* item = static_cast<GroupItem*>(unsubView->currentItem()); 00705 // get the corresponding item from the groupView 00706 QListViewItem* listitem = getListItem(groupView, item->info()); 00707 if (listitem) 00708 { 00709 // activate 00710 GroupItem* chk = static_cast<GroupItem*>(listitem); 00711 chk->setOn(true); 00712 } 00713 } 00714 } 00715 } 00716 00717 //------------------------------------------------------------------------------ 00718 void KSubscription::slotCBToggled() 00719 { 00720 if (!noTreeCB->isChecked() && !newCB->isChecked() && !subCB->isChecked()) 00721 { 00722 restoreOriginalParent(); 00723 } 00724 // set items {in}visible 00725 filterChanged(groupView->firstChild()); 00726 emit listChanged(); 00727 } 00728 00729 //------------------------------------------------------------------------------ 00730 void KSubscription::slotFilterTextChanged( const QString & text ) 00731 { 00732 // remember is the items are open 00733 if (mLastText.isEmpty()) 00734 saveOpenStates(); 00735 00736 if (!mLastText.isEmpty() && text.length() < mLastText.length()) 00737 { 00738 // reset 00739 restoreOriginalParent(); 00740 QListViewItemIterator it(groupView); 00741 for ( ; it.current(); ++it) 00742 { 00743 it.current()->setVisible(true); 00744 it.current()->setEnabled(true); 00745 } 00746 } 00747 // set items {in}visible 00748 filterChanged(groupView->firstChild(), text); 00749 // restore the open-states 00750 if (text.isEmpty()) 00751 restoreOpenStates(); 00752 00753 emit listChanged(); 00754 mLastText = text; 00755 } 00756 00757 //------------------------------------------------------------------------------ 00758 void KSubscription::slotUpdateStatusLabel() 00759 { 00760 QString text; 00761 if (mLoading) 00762 text = i18n("Loading... (1 matching)", "Loading... (%n matching)", 00763 activeItemCount()); 00764 else 00765 text = i18n("%1: (1 matching)", "%1: (%n matching)", activeItemCount()) 00766 .arg(account()->name()); 00767 00768 leftLabel->setText(text); 00769 } 00770 00771 //------------------------------------------------------------------------------ 00772 void KSubscription::slotLoadFolders() 00773 { 00774 subView->clear(); 00775 unsubView->clear(); 00776 groupView->clear(); 00777 } 00778 00779 #include "ksubscription.moc"
KDE Logo
This file is part of the documentation for libkdenetwork Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Oct 1 15:18:39 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003