summaryrefslogtreecommitdiffstats
path: root/libtdepim/ksubscription.cpp
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2011-11-06 15:57:02 -0600
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2011-11-06 15:57:02 -0600
commit2c2fbd828ca474671bb9e03681b30b115d8d6035 (patch)
tree526a9da418f8d3d7ccf515c37048d3dfc80f2843 /libtdepim/ksubscription.cpp
parentf0610eece3676b6fe99f42cf4ef2b19a39a5c4e8 (diff)
downloadtdepim-2c2fbd828ca474671bb9e03681b30b115d8d6035.tar.gz
tdepim-2c2fbd828ca474671bb9e03681b30b115d8d6035.zip
Actually move the kde files that were renamed in the last commit
Diffstat (limited to 'libtdepim/ksubscription.cpp')
-rw-r--r--libtdepim/ksubscription.cpp793
1 files changed, 793 insertions, 0 deletions
diff --git a/libtdepim/ksubscription.cpp b/libtdepim/ksubscription.cpp
new file mode 100644
index 000000000..b611e1260
--- /dev/null
+++ b/libtdepim/ksubscription.cpp
@@ -0,0 +1,793 @@
+/*
+ ksubscription.cpp
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, US
+*/
+
+#include "ksubscription.h"
+#include "kaccount.h"
+
+#include <tqlayout.h>
+#include <tqtimer.h>
+#include <tqlabel.h>
+#include <tqpushbutton.h>
+#include <tqheader.h>
+#include <tqtoolbutton.h>
+
+#include <kseparator.h>
+#include <kapplication.h>
+#include <kiconloader.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <klineedit.h>
+
+
+//=============================================================================
+
+KGroupInfo::KGroupInfo(const TQString &name, const TQString &description,
+ bool newGroup, bool subscribed,
+ tqStatus status, TQString path)
+ : name(name), description(description),
+ newGroup(newGroup), subscribed(subscribed),
+ status(status), path(path)
+{
+}
+
+//-----------------------------------------------------------------------------
+bool KGroupInfo::operator== (const KGroupInfo &gi2)
+{
+ return (name == gi2.name);
+}
+
+//-----------------------------------------------------------------------------
+bool KGroupInfo::operator< (const KGroupInfo &gi2)
+{
+ return (name < gi2.name);
+}
+
+//=============================================================================
+
+GroupItem::GroupItem( TQListView *v, const KGroupInfo &gi, KSubscription* browser,
+ bool isCheckItem )
+ : TQCheckListItem( v, gi.name, isCheckItem ? CheckBox : CheckBoxController ),
+ mInfo( gi ), mBrowser( browser ), mIsCheckItem( isCheckItem ),
+ mIgnoreStateChange( false )
+{
+ if (listView()->columns() > 1)
+ setDescription();
+}
+
+//-----------------------------------------------------------------------------
+GroupItem::GroupItem( TQListViewItem *i, const KGroupInfo &gi, KSubscription* browser,
+ bool isCheckItem )
+ : TQCheckListItem( i, gi.name, isCheckItem ? CheckBox : CheckBoxController ),
+ mInfo( gi ), mBrowser( browser ), mIsCheckItem( isCheckItem ),
+ mIgnoreStateChange( false )
+{
+ if (listView()->columns() > 1)
+ setDescription();
+}
+
+//-----------------------------------------------------------------------------
+void GroupItem::setInfo( KGroupInfo info )
+{
+ mInfo = info;
+ setText(0, mInfo.name);
+ if (listView()->columns() > 1)
+ setDescription();
+}
+
+//-----------------------------------------------------------------------------
+void GroupItem::setDescription()
+{
+ setText(1, mInfo.description);
+}
+
+//-----------------------------------------------------------------------------
+void GroupItem::setOn( bool on )
+{
+ if (mBrowser->isLoading())
+ {
+ // set this only if we're loading/creating items
+ // otherwise changes are only permanent when the dialog is saved
+ mInfo.subscribed = on;
+ }
+ if (isCheckItem())
+ TQCheckListItem::setOn(on);
+}
+
+//------------------------------------------------------------------------------
+void GroupItem::stateChange( bool on )
+{
+ // delegate to parent
+ if ( !mIgnoreStateChange )
+ mBrowser->changeItemState(this, on);
+}
+
+//------------------------------------------------------------------------------
+void GroupItem::setVisible( bool b )
+{
+ if (b)
+ {
+ TQListViewItem::setVisible(b);
+ setEnabled(true);
+ }
+ else
+ {
+ if (isCheckItem())
+ {
+ bool setInvisible = true;
+ for (TQListViewItem * lvchild = firstChild(); lvchild != 0;
+ lvchild = lvchild->nextSibling())
+ {
+ if (lvchild->isVisible()) // item has a visible child
+ setInvisible = false;
+ }
+ if (setInvisible)
+ TQListViewItem::setVisible(b);
+ else
+ {
+ // leave it visible so that tqchildren remain visible
+ setOpen(true);
+ setEnabled(false);
+ }
+ }
+ else
+ {
+ // non-checkable item
+ TQPtrList<TQListViewItem> moveItems;
+
+ for (TQListViewItem * lvchild = firstChild(); lvchild != 0;
+ lvchild = lvchild->nextSibling())
+ {
+ if (static_cast<GroupItem*>(lvchild)->isCheckItem())
+ {
+ // remember the items
+ moveItems.append(lvchild);
+ }
+ }
+ TQPtrListIterator<TQListViewItem> it( moveItems );
+ for ( ; it.current(); ++it)
+ {
+ // move the checkitem to top
+ TQListViewItem* parent = it.current()->parent();
+ if (parent) parent->takeItem(it.current());
+ listView()->insertItem(it.current());
+ }
+ TQListViewItem::setVisible(false);
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+void GroupItem::paintCell( TQPainter * p, const TQColorGroup & cg,
+ int column, int width, int align )
+{
+ if (mIsCheckItem)
+ return TQCheckListItem::paintCell( p, cg, column, width, align );
+ else
+ return TQListViewItem::paintCell( p, cg, column, width, align );
+}
+
+//-----------------------------------------------------------------------------
+void GroupItem::paintFocus( TQPainter * p, const TQColorGroup & cg,
+ const TQRect & r )
+{
+ if (mIsCheckItem)
+ TQCheckListItem::paintFocus(p, cg, r);
+ else
+ TQListViewItem::paintFocus(p, cg, r);
+}
+
+//-----------------------------------------------------------------------------
+int GroupItem::width( const TQFontMetrics& fm, const TQListView* lv, int column) const
+{
+ if (mIsCheckItem)
+ return TQCheckListItem::width(fm, lv, column);
+ else
+ return TQListViewItem::width(fm, lv, column);
+}
+
+//-----------------------------------------------------------------------------
+void GroupItem::setup()
+{
+ if (mIsCheckItem)
+ TQCheckListItem::setup();
+ else
+ TQListViewItem::setup();
+}
+
+
+//=============================================================================
+
+KSubscription::KSubscription( TQWidget *parent, const TQString &caption,
+ KAccount * acct, int buttons, const TQString &user1, bool descriptionColumn )
+ : KDialogBase( parent, 0, true, caption, buttons | Help | Ok | Cancel, Ok,
+ true, i18n("Reload &List"), user1 ),
+ mAcct( acct )
+{
+ mLoading = true;
+ setWFlags( getWFlags() | WDestructiveClose );
+
+ // create Widgets
+ page = new TQWidget(this);
+ setMainWidget(page);
+
+ TQLabel *comment = new TQLabel("<p>"+
+ i18n("Manage which mail folders you want to see in your folder view") + "</p>", page);
+
+ TQToolButton *clearButton = new TQToolButton( page );
+ clearButton->setIconSet( KGlobal::iconLoader()->loadIconSet(
+ KApplication::reverseLayout() ? "clear_left":"locationbar_erase", KIcon::Small, 0 ) );
+ filterEdit = new KLineEdit(page);
+ TQLabel *l = new TQLabel(filterEdit,i18n("S&earch:"), page);
+ connect( clearButton, TQT_SIGNAL( clicked() ), filterEdit, TQT_SLOT( clear() ) );
+
+ // checkboxes
+ noTreeCB = new TQCheckBox(i18n("Disable &tree view"), page);
+ noTreeCB->setChecked(false);
+ subCB = new TQCheckBox(i18n("&Subscribed only"), page);
+ subCB->setChecked(false);
+ newCB = new TQCheckBox(i18n("&New only"), page);
+ newCB->setChecked(false);
+
+
+ KSeparator *sep = new KSeparator(KSeparator::HLine, page);
+
+ // init the labels
+ TQFont fnt = font();
+ fnt.setBold(true);
+ leftLabel = new TQLabel(i18n("Loading..."), page);
+ rightLabel = new TQLabel(i18n("Current changes:"), page);
+ leftLabel->setFont(fnt);
+ rightLabel->setFont(fnt);
+
+ // icons
+ pmRight = BarIconSet("forward");
+ pmLeft = BarIconSet("back");
+
+ arrowBtn1 = new TQPushButton(page);
+ arrowBtn1->setEnabled(false);
+ arrowBtn2 = new TQPushButton(page);
+ arrowBtn2->setEnabled(false);
+ arrowBtn1->setIconSet(pmRight);
+ arrowBtn2->setIconSet(pmRight);
+ arrowBtn1->setFixedSize(35,30);
+ arrowBtn2->setFixedSize(35,30);
+
+ // the main listview
+ groupView = new TQListView(page);
+ groupView->setRootIsDecorated(true);
+ groupView->addColumn(i18n("Name"));
+ groupView->setAllColumnsShowFocus(true);
+ if (descriptionColumn)
+ mDescrColumn = groupView->addColumn(i18n("Description"));
+ else
+ groupView->header()->setStretchEnabled(true, 0);
+
+ // tqlayout
+ TQGridLayout *topL = new TQGridLayout(page,4,1,0, KDialog::spacingHint());
+ TQHBoxLayout *filterL = new TQHBoxLayout(KDialog::spacingHint());
+ TQVBoxLayout *arrL = new TQVBoxLayout(KDialog::spacingHint());
+ listL = new TQGridLayout(2, 3, KDialog::spacingHint());
+
+ topL->addWidget(comment, 0,0);
+ topL->addLayout(filterL, 1,0);
+ topL->addWidget(sep,2,0);
+ topL->addLayout(listL, 3,0);
+
+ filterL->addWidget(clearButton);
+ filterL->addWidget(l);
+ filterL->addWidget(filterEdit, 1);
+ filterL->addWidget(noTreeCB);
+ filterL->addWidget(subCB);
+ filterL->addWidget(newCB);
+
+ listL->addWidget(leftLabel, 0,0);
+ listL->addWidget(rightLabel, 0,2);
+ listL->addWidget(groupView, 1,0);
+ listL->addLayout(arrL, 1,1);
+ listL->setRowStretch(1,1);
+ listL->setColStretch(0,5);
+ listL->setColStretch(2,2);
+
+ arrL->addWidget(arrowBtn1, AlignCenter);
+ arrL->addWidget(arrowBtn2, AlignCenter);
+
+ // listviews
+ subView = new TQListView(page);
+ subView->addColumn(i18n("Subscribe To"));
+ subView->header()->setStretchEnabled(true, 0);
+ unsubView = new TQListView(page);
+ unsubView->addColumn(i18n("Unsubscribe From"));
+ unsubView->header()->setStretchEnabled(true, 0);
+
+ TQVBoxLayout *protL = new TQVBoxLayout(3);
+ listL->addLayout(protL, 1,2);
+ protL->addWidget(subView);
+ protL->addWidget(unsubView);
+
+ // disable some widgets as long we're loading
+ enableButton(User1, false);
+ enableButton(User2, false);
+ newCB->setEnabled(false);
+ noTreeCB->setEnabled(false);
+ subCB->setEnabled(false);
+
+ filterEdit->setFocus();
+
+ // items clicked
+ connect(groupView, TQT_SIGNAL(clicked(TQListViewItem *)),
+ this, TQT_SLOT(slotChangeButtonState(TQListViewItem*)));
+ connect(subView, TQT_SIGNAL(clicked(TQListViewItem *)),
+ this, TQT_SLOT(slotChangeButtonState(TQListViewItem*)));
+ connect(unsubView, TQT_SIGNAL(clicked(TQListViewItem *)),
+ this, TQT_SLOT(slotChangeButtonState(TQListViewItem*)));
+
+ // connect buttons
+ connect(arrowBtn1, TQT_SIGNAL(clicked()), TQT_SLOT(slotButton1()));
+ connect(arrowBtn2, TQT_SIGNAL(clicked()), TQT_SLOT(slotButton2()));
+ connect(this, TQT_SIGNAL(user1Clicked()), TQT_SLOT(slotLoadFolders()));
+
+ // connect checkboxes
+ connect(subCB, TQT_SIGNAL(clicked()), TQT_SLOT(slotCBToggled()));
+ connect(newCB, TQT_SIGNAL(clicked()), TQT_SLOT(slotCBToggled()));
+ connect(noTreeCB, TQT_SIGNAL(clicked()), TQT_SLOT(slotCBToggled()));
+
+ // connect textfield
+ connect(filterEdit, TQT_SIGNAL(textChanged(const TQString&)),
+ TQT_SLOT(slotFilterTextChanged(const TQString&)));
+
+ // update status
+ connect(this, TQT_SIGNAL(listChanged()), TQT_SLOT(slotUpdateStatusLabel()));
+}
+
+//-----------------------------------------------------------------------------
+KSubscription::~KSubscription()
+{
+}
+
+//-----------------------------------------------------------------------------
+void KSubscription::setStartItem( const KGroupInfo &info )
+{
+ TQListViewItemIterator it(groupView);
+
+ for ( ; it.current(); ++it)
+ {
+ if (static_cast<GroupItem*>(it.current())->info() == info)
+ {
+ it.current()->setSelected(true);
+ it.current()->setOpen(true);
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+void KSubscription::removeListItem( TQListView *view, const KGroupInfo &gi )
+{
+ if(!view) return;
+ TQListViewItemIterator it(view);
+
+ for ( ; it.current(); ++it)
+ {
+ if (static_cast<GroupItem*>(it.current())->info() == gi)
+ {
+ delete it.current();
+ break;
+ }
+ }
+ if (view == groupView)
+ emit listChanged();
+}
+
+//-----------------------------------------------------------------------------
+TQListViewItem* KSubscription::getListItem( TQListView *view, const KGroupInfo &gi )
+{
+ if(!view) return 0;
+ TQListViewItemIterator it(view);
+
+ for ( ; it.current(); ++it)
+ {
+ if (static_cast<GroupItem*>(it.current())->info() == gi)
+ return (it.current());
+ }
+ return 0;
+}
+
+//-----------------------------------------------------------------------------
+bool KSubscription::itemInListView( TQListView *view, const KGroupInfo &gi )
+{
+ if(!view) return false;
+ TQListViewItemIterator it(view);
+
+ for ( ; it.current(); ++it)
+ if (static_cast<GroupItem*>(it.current())->info() == gi)
+ return true;
+
+ return false;
+}
+
+//------------------------------------------------------------------------------
+void KSubscription::setDirectionButton1( Direction dir )
+{
+ mDirButton1 = dir;
+ if (dir == Left)
+ arrowBtn1->setIconSet(pmLeft);
+ else
+ arrowBtn1->setIconSet(pmRight);
+}
+
+//------------------------------------------------------------------------------
+void KSubscription::setDirectionButton2( Direction dir )
+{
+ mDirButton2 = dir;
+ if (dir == Left)
+ arrowBtn2->setIconSet(pmLeft);
+ else
+ arrowBtn2->setIconSet(pmRight);
+}
+
+//------------------------------------------------------------------------------
+void KSubscription::changeItemState( GroupItem* item, bool on )
+{
+ // is this a checkable item
+ if (!item->isCheckItem()) return;
+
+ // if we're currently loading the items ignore changes
+ if (mLoading) return;
+ if (on)
+ {
+ if (!itemInListView(unsubView, item->info()))
+ {
+ TQListViewItem *p = item->parent();
+ while (p)
+ {
+ // make sure all parents are subscribed
+ GroupItem* pi = static_cast<GroupItem*>(p);
+ if (pi->isCheckItem() && !pi->isOn())
+ {
+ pi->setIgnoreStateChange(true);
+ pi->setOn(true);
+ pi->setIgnoreStateChange(false);
+ new GroupItem(subView, pi->info(), this);
+ }
+ p = p->parent();
+ }
+ new GroupItem(subView, item->info(), this);
+ }
+ // eventually remove it from the other listview
+ removeListItem(unsubView, item->info());
+ }
+ else {
+ if (!itemInListView(subView, item->info()))
+ {
+ new GroupItem(unsubView, item->info(), this);
+ }
+ // eventually remove it from the other listview
+ removeListItem(subView, item->info());
+ }
+ // update the buttons
+ slotChangeButtonState(item);
+}
+
+//------------------------------------------------------------------------------
+void KSubscription::filterChanged( TQListViewItem* item, const TQString & text )
+{
+ if ( !item && groupView )
+ item = groupView->firstChild();
+ if ( !item )
+ return;
+
+ do
+ {
+ if ( item->firstChild() ) // recursive descend
+ filterChanged(item->firstChild(), text);
+
+ GroupItem* gr = static_cast<GroupItem*>(item);
+ if (subCB->isChecked() || newCB->isChecked() || !text.isEmpty() ||
+ noTreeCB->isChecked())
+ {
+ // set it invisible
+ if ( subCB->isChecked() &&
+ (!gr->isCheckItem() ||
+ (gr->isCheckItem() && !gr->info().subscribed)) )
+ {
+ // only subscribed
+ gr->setVisible(false);
+ continue;
+ }
+ if ( newCB->isChecked() &&
+ (!gr->isCheckItem() ||
+ (gr->isCheckItem() && !gr->info().newGroup)) )
+ {
+ // only new
+ gr->setVisible(false);
+ continue;
+ }
+ if ( !text.isEmpty() &&
+ gr->text(0).find(text, 0, false) == -1)
+ {
+ // searchfield
+ gr->setVisible(false);
+ continue;
+ }
+ if ( noTreeCB->isChecked() &&
+ !gr->isCheckItem() )
+ {
+ // disable treeview
+ gr->setVisible(false);
+ continue;
+ }
+
+ gr->setVisible(true);
+
+ } else {
+ gr->setVisible(true);
+ }
+
+ } while ((item = item->nextSibling()));
+
+}
+
+//------------------------------------------------------------------------------
+uint KSubscription::activeItemCount()
+{
+ TQListViewItemIterator it(groupView);
+
+ uint count = 0;
+ for ( ; it.current(); ++it)
+ {
+ if (static_cast<GroupItem*>(it.current())->isCheckItem() &&
+ it.current()->isVisible() && it.current()->isEnabled())
+ count++;
+ }
+
+ return count;
+}
+
+//------------------------------------------------------------------------------
+void KSubscription::restoreOriginalParent()
+{
+ TQPtrList<TQListViewItem> move;
+ TQListViewItemIterator it(groupView);
+ for ( ; it.current(); ++it)
+ {
+ TQListViewItem* origParent = static_cast<GroupItem*>(it.current())->
+ originalParent();
+ if (origParent && origParent != it.current()->parent())
+ {
+ // remember this to avoid messing up the iterator
+ move.append(it.current());
+ }
+ }
+ TQPtrListIterator<TQListViewItem> it2( move );
+ for ( ; it2.current(); ++it2)
+ {
+ // restore the original parent
+ TQListViewItem* origParent = static_cast<GroupItem*>(it2.current())->
+ originalParent();
+ groupView->takeItem(it2.current());
+ origParent->insertItem(it2.current());
+ }
+}
+
+//-----------------------------------------------------------------------------
+void KSubscription::saveOpenStates()
+{
+ TQListViewItemIterator it(groupView);
+
+ for ( ; it.current(); ++it)
+ {
+ static_cast<GroupItem*>(it.current())->setLastOpenState(
+ it.current()->isOpen() );
+ }
+}
+
+//-----------------------------------------------------------------------------
+void KSubscription::restoreOpenStates()
+{
+ TQListViewItemIterator it(groupView);
+
+ for ( ; it.current(); ++it)
+ {
+ it.current()->setOpen(
+ static_cast<GroupItem*>(it.current())->lastOpenState() );
+ }
+}
+
+//-----------------------------------------------------------------------------
+void KSubscription::slotLoadingComplete()
+{
+ mLoading = false;
+
+ enableButton(User1, true);
+ enableButton(User2, true);
+ newCB->setEnabled(true);
+ noTreeCB->setEnabled(true);
+ subCB->setEnabled(true);
+
+ // remember the correct parent
+ TQListViewItemIterator it(groupView);
+ for ( ; it.current(); ++it)
+ {
+ static_cast<GroupItem*>(it.current())->
+ setOriginalParent( it.current()->parent() );
+ }
+
+ emit listChanged();
+}
+
+//------------------------------------------------------------------------------
+void KSubscription::slotChangeButtonState( TQListViewItem *item )
+{
+ if (!item ||
+ (item->listView() == groupView &&
+ !static_cast<GroupItem*>(item)->isCheckItem()))
+ {
+ // disable and return
+ arrowBtn1->setEnabled(false);
+ arrowBtn2->setEnabled(false);
+ return;
+ }
+ // set the direction of the buttons and enable/disable them
+ TQListView* currentView = item->listView();
+ if (currentView == groupView)
+ {
+ setDirectionButton1(Right);
+ setDirectionButton2(Right);
+ if (static_cast<GroupItem*>(item)->isOn())
+ {
+ // already subscribed
+ arrowBtn1->setEnabled(false);
+ arrowBtn2->setEnabled(true);
+ } else {
+ // unsubscribed
+ arrowBtn1->setEnabled(true);
+ arrowBtn2->setEnabled(false);
+ }
+ } else if (currentView == subView)
+ {
+ // undo possible
+ setDirectionButton1(Left);
+
+ arrowBtn1->setEnabled(true);
+ arrowBtn2->setEnabled(false);
+ } else if (currentView == unsubView)
+ {
+ // undo possible
+ setDirectionButton2(Left);
+
+ arrowBtn1->setEnabled(false);
+ arrowBtn2->setEnabled(true);
+ }
+}
+
+//------------------------------------------------------------------------------
+void KSubscription::slotButton1()
+{
+ if (mDirButton1 == Right)
+ {
+ if (groupView->currentItem() &&
+ static_cast<GroupItem*>(groupView->currentItem())->isCheckItem())
+ {
+ // activate
+ GroupItem* item = static_cast<GroupItem*>(groupView->currentItem());
+ item->setOn(true);
+ }
+ }
+ else {
+ if (subView->currentItem())
+ {
+ GroupItem* item = static_cast<GroupItem*>(subView->currentItem());
+ // get the corresponding item from the groupView
+ TQListViewItem* listitem = getListItem(groupView, item->info());
+ if (listitem)
+ {
+ // deactivate
+ GroupItem* chk = static_cast<GroupItem*>(listitem);
+ chk->setOn(false);
+ }
+ }
+ }
+}
+
+//------------------------------------------------------------------------------
+void KSubscription::slotButton2()
+{
+ if (mDirButton2 == Right)
+ {
+ if (groupView->currentItem() &&
+ static_cast<GroupItem*>(groupView->currentItem())->isCheckItem())
+ {
+ // deactivate
+ GroupItem* item = static_cast<GroupItem*>(groupView->currentItem());
+ item->setOn(false);
+ }
+ }
+ else {
+ if (unsubView->currentItem())
+ {
+ GroupItem* item = static_cast<GroupItem*>(unsubView->currentItem());
+ // get the corresponding item from the groupView
+ TQListViewItem* listitem = getListItem(groupView, item->info());
+ if (listitem)
+ {
+ // activate
+ GroupItem* chk = static_cast<GroupItem*>(listitem);
+ chk->setOn(true);
+ }
+ }
+ }
+}
+
+//------------------------------------------------------------------------------
+void KSubscription::slotCBToggled()
+{
+ if (!noTreeCB->isChecked() && !newCB->isChecked() && !subCB->isChecked())
+ {
+ restoreOriginalParent();
+ }
+ // set items {in}visible
+ filterChanged(groupView->firstChild());
+ emit listChanged();
+}
+
+//------------------------------------------------------------------------------
+void KSubscription::slotFilterTextChanged( const TQString & text )
+{
+ // remember is the items are open
+ if (mLastText.isEmpty())
+ saveOpenStates();
+
+ if (!mLastText.isEmpty() && text.length() < mLastText.length())
+ {
+ // reset
+ restoreOriginalParent();
+ TQListViewItemIterator it(groupView);
+ for ( ; it.current(); ++it)
+ {
+ it.current()->setVisible(true);
+ it.current()->setEnabled(true);
+ }
+ }
+ // set items {in}visible
+ filterChanged(groupView->firstChild(), text);
+ // restore the open-states
+ if (text.isEmpty())
+ restoreOpenStates();
+
+ emit listChanged();
+ mLastText = text;
+}
+
+//------------------------------------------------------------------------------
+void KSubscription::slotUpdateStatusLabel()
+{
+ TQString text;
+ if (mLoading)
+ text = i18n("Loading... (1 matching)", "Loading... (%n matching)",
+ activeItemCount());
+ else
+ text = i18n("%1: (1 matching)", "%1: (%n matching)", activeItemCount())
+ .tqarg(account()->name());
+
+ leftLabel->setText(text);
+}
+
+//------------------------------------------------------------------------------
+void KSubscription::slotLoadFolders()
+{
+ enableButton(User1, false);
+ mLoading = true;
+ subView->clear();
+ unsubView->clear();
+ groupView->clear();
+}
+
+#include "ksubscription.moc"