libtdepim

ksubscription.cpp
1/*
2 ksubscription.cpp
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
8 You should have received a copy of the GNU General Public License
9 along with this program; if not, write to the Free Software Foundation,
10 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, US
11*/
12
13#include "ksubscription.h"
14#include "kaccount.h"
15
16#include <tqlayout.h>
17#include <tqtimer.h>
18#include <tqlabel.h>
19#include <tqpushbutton.h>
20#include <tqheader.h>
21#include <tqtoolbutton.h>
22
23#include <kseparator.h>
24#include <tdeapplication.h>
25#include <kiconloader.h>
26#include <tdelocale.h>
27#include <kdebug.h>
28#include <klineedit.h>
29
30
31//=============================================================================
32
33KGroupInfo::KGroupInfo(const TQString &name, const TQString &description,
34 bool newGroup, bool subscribed,
35 Status status, TQString path)
36 : name(name), description(description),
37 newGroup(newGroup), subscribed(subscribed),
38 status(status), path(path)
39{
40}
41
42//-----------------------------------------------------------------------------
43bool KGroupInfo::operator== (const KGroupInfo &gi2)
44{
45 return (name == gi2.name);
46}
47
48//-----------------------------------------------------------------------------
49bool KGroupInfo::operator< (const KGroupInfo &gi2)
50{
51 return (name < gi2.name);
52}
53
54//=============================================================================
55
56GroupItem::GroupItem( TQListView *v, const KGroupInfo &gi, KSubscription* browser,
57 bool isCheckItem )
58 : TQCheckListItem( v, gi.name, isCheckItem ? CheckBox : CheckBoxController ),
59 mInfo( gi ), mBrowser( browser ), mIsCheckItem( isCheckItem ),
60 mIgnoreStateChange( false )
61{
62 if (listView()->columns() > 1)
63 setDescription();
64}
65
66//-----------------------------------------------------------------------------
67GroupItem::GroupItem( TQListViewItem *i, const KGroupInfo &gi, KSubscription* browser,
68 bool isCheckItem )
69 : TQCheckListItem( i, gi.name, isCheckItem ? CheckBox : CheckBoxController ),
70 mInfo( gi ), mBrowser( browser ), mIsCheckItem( isCheckItem ),
71 mIgnoreStateChange( false )
72{
73 if (listView()->columns() > 1)
74 setDescription();
75}
76
77//-----------------------------------------------------------------------------
78void GroupItem::setInfo( KGroupInfo info )
79{
80 mInfo = info;
81 setText(0, mInfo.name);
82 if (listView()->columns() > 1)
84}
85
86//-----------------------------------------------------------------------------
88{
89 setText(1, mInfo.description);
90}
91
92//-----------------------------------------------------------------------------
93void GroupItem::setOn( bool on )
94{
95 if (mBrowser->isLoading())
96 {
97 // set this only if we're loading/creating items
98 // otherwise changes are only permanent when the dialog is saved
99 mInfo.subscribed = on;
100 }
101 if (isCheckItem())
102 TQCheckListItem::setOn(on);
103}
104
105//------------------------------------------------------------------------------
107{
108 // delegate to parent
109 if ( !mIgnoreStateChange )
110 mBrowser->changeItemState(this, on);
111}
112
113//------------------------------------------------------------------------------
115{
116 if (b)
117 {
118 TQListViewItem::setVisible(b);
119 setEnabled(true);
120 }
121 else
122 {
123 if (isCheckItem())
124 {
125 bool setInvisible = true;
126 for (TQListViewItem * lvchild = firstChild(); lvchild != 0;
127 lvchild = lvchild->nextSibling())
128 {
129 if (lvchild->isVisible()) // item has a visible child
130 setInvisible = false;
131 }
132 if (setInvisible)
133 TQListViewItem::setVisible(b);
134 else
135 {
136 // leave it visible so that children remain visible
137 setOpen(true);
138 setEnabled(false);
139 }
140 }
141 else
142 {
143 // non-checkable item
144 TQPtrList<TQListViewItem> moveItems;
145
146 for (TQListViewItem * lvchild = firstChild(); lvchild != 0;
147 lvchild = lvchild->nextSibling())
148 {
149 if (static_cast<GroupItem*>(lvchild)->isCheckItem())
150 {
151 // remember the items
152 moveItems.append(lvchild);
153 }
154 }
155 TQPtrListIterator<TQListViewItem> it( moveItems );
156 for ( ; it.current(); ++it)
157 {
158 // move the checkitem to top
159 TQListViewItem* parent = it.current()->parent();
160 if (parent) parent->takeItem(it.current());
161 listView()->insertItem(it.current());
162 }
163 TQListViewItem::setVisible(false);
164 }
165 }
166}
167
168//-----------------------------------------------------------------------------
169void GroupItem::paintCell( TQPainter * p, const TQColorGroup & cg,
170 int column, int width, int align )
171{
172 if (mIsCheckItem)
173 return TQCheckListItem::paintCell( p, cg, column, width, align );
174 else
175 return TQListViewItem::paintCell( p, cg, column, width, align );
176}
177
178//-----------------------------------------------------------------------------
179void GroupItem::paintFocus( TQPainter * p, const TQColorGroup & cg,
180 const TQRect & r )
181{
182 if (mIsCheckItem)
183 TQCheckListItem::paintFocus(p, cg, r);
184 else
185 TQListViewItem::paintFocus(p, cg, r);
186}
187
188//-----------------------------------------------------------------------------
189int GroupItem::width( const TQFontMetrics& fm, const TQListView* lv, int column) const
190{
191 if (mIsCheckItem)
192 return TQCheckListItem::width(fm, lv, column);
193 else
194 return TQListViewItem::width(fm, lv, column);
195}
196
197//-----------------------------------------------------------------------------
199{
200 if (mIsCheckItem)
201 TQCheckListItem::setup();
202 else
203 TQListViewItem::setup();
204}
205
206
207//=============================================================================
208
209KSubscription::KSubscription( TQWidget *parent, const TQString &caption,
210 KAccount * acct, int buttons, const TQString &user1, bool descriptionColumn )
211 : KDialogBase( parent, 0, true, caption, buttons | Help | Ok | Cancel, Ok,
212 true, i18n("Reload &List"), user1 ),
213 mAcct( acct )
214{
215 mLoading = true;
216 setWFlags( getWFlags() | WDestructiveClose );
217
218 // create Widgets
219 page = new TQWidget(this);
220 setMainWidget(page);
221
222 TQLabel *comment = new TQLabel("<p>"+
223 i18n("Manage which mail folders you want to see in your folder view") + "</p>", page);
224
225 TQToolButton *clearButton = new TQToolButton( page );
226 clearButton->setIconSet( TDEGlobal::iconLoader()->loadIconSet(
227 TDEApplication::reverseLayout() ? "clear_left":"locationbar_erase", TDEIcon::Small, 0 ) );
228 filterEdit = new KLineEdit(page);
229 TQLabel *l = new TQLabel(filterEdit,i18n("S&earch:"), page);
230 connect( clearButton, TQ_SIGNAL( clicked() ), filterEdit, TQ_SLOT( clear() ) );
231
232 // checkboxes
233 noTreeCB = new TQCheckBox(i18n("Disable &tree view"), page);
234 noTreeCB->setChecked(false);
235 subCB = new TQCheckBox(i18n("&Subscribed only"), page);
236 subCB->setChecked(false);
237 newCB = new TQCheckBox(i18n("&New only"), page);
238 newCB->setChecked(false);
239
240
241 KSeparator *sep = new KSeparator(KSeparator::HLine, page);
242
243 // init the labels
244 TQFont fnt = font();
245 fnt.setBold(true);
246 leftLabel = new TQLabel(i18n("Loading..."), page);
247 rightLabel = new TQLabel(i18n("Current changes:"), page);
248 leftLabel->setFont(fnt);
249 rightLabel->setFont(fnt);
250
251 // icons
252 pmRight = BarIconSet("forward");
253 pmLeft = BarIconSet("back");
254
255 arrowBtn1 = new TQPushButton(page);
256 arrowBtn1->setEnabled(false);
257 arrowBtn2 = new TQPushButton(page);
258 arrowBtn2->setEnabled(false);
259 arrowBtn1->setIconSet(pmRight);
260 arrowBtn2->setIconSet(pmRight);
261 arrowBtn1->setFixedSize(35,30);
262 arrowBtn2->setFixedSize(35,30);
263
264 // the main listview
265 groupView = new TQListView(page);
266 groupView->setRootIsDecorated(true);
267 groupView->addColumn(i18n("Name"));
268 groupView->setAllColumnsShowFocus(true);
269 if (descriptionColumn)
270 mDescrColumn = groupView->addColumn(i18n("Description"));
271 else
272 groupView->header()->setStretchEnabled(true, 0);
273
274 // layout
275 TQGridLayout *topL = new TQGridLayout(page,4,1,0, KDialog::spacingHint());
276 TQHBoxLayout *filterL = new TQHBoxLayout(KDialog::spacingHint());
277 TQVBoxLayout *arrL = new TQVBoxLayout(KDialog::spacingHint());
278 listL = new TQGridLayout(2, 3, KDialog::spacingHint());
279
280 topL->addWidget(comment, 0,0);
281 topL->addLayout(filterL, 1,0);
282 topL->addWidget(sep,2,0);
283 topL->addLayout(listL, 3,0);
284
285 filterL->addWidget(clearButton);
286 filterL->addWidget(l);
287 filterL->addWidget(filterEdit, 1);
288 filterL->addWidget(noTreeCB);
289 filterL->addWidget(subCB);
290 filterL->addWidget(newCB);
291
292 listL->addWidget(leftLabel, 0,0);
293 listL->addWidget(rightLabel, 0,2);
294 listL->addWidget(groupView, 1,0);
295 listL->addLayout(arrL, 1,1);
296 listL->setRowStretch(1,1);
297 listL->setColStretch(0,5);
298 listL->setColStretch(2,2);
299
300 arrL->addWidget(arrowBtn1, AlignCenter);
301 arrL->addWidget(arrowBtn2, AlignCenter);
302
303 // listviews
304 subView = new TQListView(page);
305 subView->addColumn(i18n("Subscribe To"));
306 subView->header()->setStretchEnabled(true, 0);
307 unsubView = new TQListView(page);
308 unsubView->addColumn(i18n("Unsubscribe From"));
309 unsubView->header()->setStretchEnabled(true, 0);
310
311 TQVBoxLayout *protL = new TQVBoxLayout(3);
312 listL->addLayout(protL, 1,2);
313 protL->addWidget(subView);
314 protL->addWidget(unsubView);
315
316 // disable some widgets as long we're loading
317 enableButton(User1, false);
318 enableButton(User2, false);
319 newCB->setEnabled(false);
320 noTreeCB->setEnabled(false);
321 subCB->setEnabled(false);
322
323 filterEdit->setFocus();
324
325 // items clicked
326 connect(groupView, TQ_SIGNAL(clicked(TQListViewItem *)),
327 this, TQ_SLOT(slotChangeButtonState(TQListViewItem*)));
328 connect(subView, TQ_SIGNAL(clicked(TQListViewItem *)),
329 this, TQ_SLOT(slotChangeButtonState(TQListViewItem*)));
330 connect(unsubView, TQ_SIGNAL(clicked(TQListViewItem *)),
331 this, TQ_SLOT(slotChangeButtonState(TQListViewItem*)));
332
333 // connect buttons
334 connect(arrowBtn1, TQ_SIGNAL(clicked()), TQ_SLOT(slotButton1()));
335 connect(arrowBtn2, TQ_SIGNAL(clicked()), TQ_SLOT(slotButton2()));
336 connect(this, TQ_SIGNAL(user1Clicked()), TQ_SLOT(slotLoadFolders()));
337
338 // connect checkboxes
339 connect(subCB, TQ_SIGNAL(clicked()), TQ_SLOT(slotCBToggled()));
340 connect(newCB, TQ_SIGNAL(clicked()), TQ_SLOT(slotCBToggled()));
341 connect(noTreeCB, TQ_SIGNAL(clicked()), TQ_SLOT(slotCBToggled()));
342
343 // connect textfield
344 connect(filterEdit, TQ_SIGNAL(textChanged(const TQString&)),
345 TQ_SLOT(slotFilterTextChanged(const TQString&)));
346
347 // update status
348 connect(this, TQ_SIGNAL(listChanged()), TQ_SLOT(slotUpdateStatusLabel()));
349}
350
351//-----------------------------------------------------------------------------
352KSubscription::~KSubscription()
353{
354}
355
356//-----------------------------------------------------------------------------
357void KSubscription::setStartItem( const KGroupInfo &info )
358{
359 TQListViewItemIterator it(groupView);
360
361 for ( ; it.current(); ++it)
362 {
363 if (static_cast<GroupItem*>(it.current())->info() == info)
364 {
365 it.current()->setSelected(true);
366 it.current()->setOpen(true);
367 }
368 }
369}
370
371//-----------------------------------------------------------------------------
372void KSubscription::removeListItem( TQListView *view, const KGroupInfo &gi )
373{
374 if(!view) return;
375 TQListViewItemIterator it(view);
376
377 for ( ; it.current(); ++it)
378 {
379 if (static_cast<GroupItem*>(it.current())->info() == gi)
380 {
381 delete it.current();
382 break;
383 }
384 }
385 if (view == groupView)
386 emit listChanged();
387}
388
389//-----------------------------------------------------------------------------
390TQListViewItem* KSubscription::getListItem( TQListView *view, const KGroupInfo &gi )
391{
392 if(!view) return 0;
393 TQListViewItemIterator it(view);
394
395 for ( ; it.current(); ++it)
396 {
397 if (static_cast<GroupItem*>(it.current())->info() == gi)
398 return (it.current());
399 }
400 return 0;
401}
402
403//-----------------------------------------------------------------------------
404bool KSubscription::itemInListView( TQListView *view, const KGroupInfo &gi )
405{
406 if(!view) return false;
407 TQListViewItemIterator it(view);
408
409 for ( ; it.current(); ++it)
410 if (static_cast<GroupItem*>(it.current())->info() == gi)
411 return true;
412
413 return false;
414}
415
416//------------------------------------------------------------------------------
417void KSubscription::setDirectionButton1( Direction dir )
418{
419 mDirButton1 = dir;
420 if (dir == Left)
421 arrowBtn1->setIconSet(pmLeft);
422 else
423 arrowBtn1->setIconSet(pmRight);
424}
425
426//------------------------------------------------------------------------------
427void KSubscription::setDirectionButton2( Direction dir )
428{
429 mDirButton2 = dir;
430 if (dir == Left)
431 arrowBtn2->setIconSet(pmLeft);
432 else
433 arrowBtn2->setIconSet(pmRight);
434}
435
436//------------------------------------------------------------------------------
438{
439 // is this a checkable item
440 if (!item->isCheckItem()) return;
441
442 // if we're currently loading the items ignore changes
443 if (mLoading) return;
444 if (on)
445 {
446 if (!itemInListView(unsubView, item->info()))
447 {
448 TQListViewItem *p = item->parent();
449 while (p)
450 {
451 // make sure all parents are subscribed
452 GroupItem* pi = static_cast<GroupItem*>(p);
453 if (pi->isCheckItem() && !pi->isOn())
454 {
455 pi->setIgnoreStateChange(true);
456 pi->setOn(true);
457 pi->setIgnoreStateChange(false);
458 new GroupItem(subView, pi->info(), this);
459 }
460 p = p->parent();
461 }
462 new GroupItem(subView, item->info(), this);
463 }
464 // eventually remove it from the other listview
465 removeListItem(unsubView, item->info());
466 }
467 else {
468 if (!itemInListView(subView, item->info()))
469 {
470 new GroupItem(unsubView, item->info(), this);
471 }
472 // eventually remove it from the other listview
473 removeListItem(subView, item->info());
474 }
475 // update the buttons
477}
478
479//------------------------------------------------------------------------------
480void KSubscription::filterChanged( TQListViewItem* item, const TQString & text )
481{
482 if ( !item && groupView )
483 item = groupView->firstChild();
484 if ( !item )
485 return;
486
487 do
488 {
489 if ( item->firstChild() ) // recursive descend
490 filterChanged(item->firstChild(), text);
491
492 GroupItem* gr = static_cast<GroupItem*>(item);
493 if (subCB->isChecked() || newCB->isChecked() || !text.isEmpty() ||
494 noTreeCB->isChecked())
495 {
496 // set it invisible
497 if ( subCB->isChecked() &&
498 (!gr->isCheckItem() ||
499 (gr->isCheckItem() && !gr->info().subscribed)) )
500 {
501 // only subscribed
502 gr->setVisible(false);
503 continue;
504 }
505 if ( newCB->isChecked() &&
506 (!gr->isCheckItem() ||
507 (gr->isCheckItem() && !gr->info().newGroup)) )
508 {
509 // only new
510 gr->setVisible(false);
511 continue;
512 }
513 if ( !text.isEmpty() &&
514 gr->text(0).find(text, 0, false) == -1)
515 {
516 // searchfield
517 gr->setVisible(false);
518 continue;
519 }
520 if ( noTreeCB->isChecked() &&
521 !gr->isCheckItem() )
522 {
523 // disable treeview
524 gr->setVisible(false);
525 continue;
526 }
527
528 gr->setVisible(true);
529
530 } else {
531 gr->setVisible(true);
532 }
533
534 } while ((item = item->nextSibling()));
535
536}
537
538//------------------------------------------------------------------------------
540{
541 TQListViewItemIterator it(groupView);
542
543 uint count = 0;
544 for ( ; it.current(); ++it)
545 {
546 if (static_cast<GroupItem*>(it.current())->isCheckItem() &&
547 it.current()->isVisible() && it.current()->isEnabled())
548 count++;
549 }
550
551 return count;
552}
553
554//------------------------------------------------------------------------------
556{
557 TQPtrList<TQListViewItem> move;
558 TQListViewItemIterator it(groupView);
559 for ( ; it.current(); ++it)
560 {
561 TQListViewItem* origParent = static_cast<GroupItem*>(it.current())->
562 originalParent();
563 if (origParent && origParent != it.current()->parent())
564 {
565 // remember this to avoid messing up the iterator
566 move.append(it.current());
567 }
568 }
569 TQPtrListIterator<TQListViewItem> it2( move );
570 for ( ; it2.current(); ++it2)
571 {
572 // restore the original parent
573 TQListViewItem* origParent = static_cast<GroupItem*>(it2.current())->
574 originalParent();
575 groupView->takeItem(it2.current());
576 origParent->insertItem(it2.current());
577 }
578}
579
580//-----------------------------------------------------------------------------
582{
583 TQListViewItemIterator it(groupView);
584
585 for ( ; it.current(); ++it)
586 {
587 static_cast<GroupItem*>(it.current())->setLastOpenState(
588 it.current()->isOpen() );
589 }
590}
591
592//-----------------------------------------------------------------------------
594{
595 TQListViewItemIterator it(groupView);
596
597 for ( ; it.current(); ++it)
598 {
599 it.current()->setOpen(
600 static_cast<GroupItem*>(it.current())->lastOpenState() );
601 }
602}
603
604//-----------------------------------------------------------------------------
606{
607 mLoading = false;
608
609 enableButton(User1, true);
610 enableButton(User2, true);
611 newCB->setEnabled(true);
612 noTreeCB->setEnabled(true);
613 subCB->setEnabled(true);
614
615 // remember the correct parent
616 TQListViewItemIterator it(groupView);
617 for ( ; it.current(); ++it)
618 {
619 static_cast<GroupItem*>(it.current())->
620 setOriginalParent( it.current()->parent() );
621 }
622
623 emit listChanged();
624}
625
626//------------------------------------------------------------------------------
627void KSubscription::slotChangeButtonState( TQListViewItem *item )
628{
629 if (!item ||
630 (item->listView() == groupView &&
631 !static_cast<GroupItem*>(item)->isCheckItem()))
632 {
633 // disable and return
634 arrowBtn1->setEnabled(false);
635 arrowBtn2->setEnabled(false);
636 return;
637 }
638 // set the direction of the buttons and enable/disable them
639 TQListView* currentView = item->listView();
640 if (currentView == groupView)
641 {
642 setDirectionButton1(Right);
643 setDirectionButton2(Right);
644 if (static_cast<GroupItem*>(item)->isOn())
645 {
646 // already subscribed
647 arrowBtn1->setEnabled(false);
648 arrowBtn2->setEnabled(true);
649 } else {
650 // unsubscribed
651 arrowBtn1->setEnabled(true);
652 arrowBtn2->setEnabled(false);
653 }
654 } else if (currentView == subView)
655 {
656 // undo possible
657 setDirectionButton1(Left);
658
659 arrowBtn1->setEnabled(true);
660 arrowBtn2->setEnabled(false);
661 } else if (currentView == unsubView)
662 {
663 // undo possible
664 setDirectionButton2(Left);
665
666 arrowBtn1->setEnabled(false);
667 arrowBtn2->setEnabled(true);
668 }
669}
670
671//------------------------------------------------------------------------------
673{
674 if (mDirButton1 == Right)
675 {
676 if (groupView->currentItem() &&
677 static_cast<GroupItem*>(groupView->currentItem())->isCheckItem())
678 {
679 // activate
680 GroupItem* item = static_cast<GroupItem*>(groupView->currentItem());
681 item->setOn(true);
682 }
683 }
684 else {
685 if (subView->currentItem())
686 {
687 GroupItem* item = static_cast<GroupItem*>(subView->currentItem());
688 // get the corresponding item from the groupView
689 TQListViewItem* listitem = getListItem(groupView, item->info());
690 if (listitem)
691 {
692 // deactivate
693 GroupItem* chk = static_cast<GroupItem*>(listitem);
694 chk->setOn(false);
695 }
696 }
697 }
698}
699
700//------------------------------------------------------------------------------
701void KSubscription::slotButton2()
702{
703 if (mDirButton2 == Right)
704 {
705 if (groupView->currentItem() &&
706 static_cast<GroupItem*>(groupView->currentItem())->isCheckItem())
707 {
708 // deactivate
709 GroupItem* item = static_cast<GroupItem*>(groupView->currentItem());
710 item->setOn(false);
711 }
712 }
713 else {
714 if (unsubView->currentItem())
715 {
716 GroupItem* item = static_cast<GroupItem*>(unsubView->currentItem());
717 // get the corresponding item from the groupView
718 TQListViewItem* listitem = getListItem(groupView, item->info());
719 if (listitem)
720 {
721 // activate
722 GroupItem* chk = static_cast<GroupItem*>(listitem);
723 chk->setOn(true);
724 }
725 }
726 }
727}
728
729//------------------------------------------------------------------------------
731{
732 if (!noTreeCB->isChecked() && !newCB->isChecked() && !subCB->isChecked())
733 {
735 }
736 // set items {in}visible
737 filterChanged(groupView->firstChild());
738 emit listChanged();
739}
740
741//------------------------------------------------------------------------------
742void KSubscription::slotFilterTextChanged( const TQString & text )
743{
744 // remember is the items are open
745 if (mLastText.isEmpty())
747
748 if (!mLastText.isEmpty() && text.length() < mLastText.length())
749 {
750 // reset
752 TQListViewItemIterator it(groupView);
753 for ( ; it.current(); ++it)
754 {
755 it.current()->setVisible(true);
756 it.current()->setEnabled(true);
757 }
758 }
759 // set items {in}visible
760 filterChanged(groupView->firstChild(), text);
761 // restore the open-states
762 if (text.isEmpty())
764
765 emit listChanged();
766 mLastText = text;
767}
768
769//------------------------------------------------------------------------------
771{
772 TQString text;
773 if (mLoading)
774 text = i18n("Loading... (1 matching)", "Loading... (%n matching)",
776 else
777 text = i18n("%1: (1 matching)", "%1: (%n matching)", activeItemCount())
778 .arg(account()->name());
779
780 leftLabel->setText(text);
781}
782
783//------------------------------------------------------------------------------
785{
786 enableButton(User1, false);
787 mLoading = true;
788 subView->clear();
789 unsubView->clear();
790 groupView->clear();
791}
792
793#include "ksubscription.moc"
A class representing a single group item (what's that?)
Definition: ksubscription.h:73
bool isCheckItem() const
Get if this is a checkable item.
virtual void setDescription()
Sets the description from the KGroupInfo Reimplement this for special cases.
virtual void setOn(bool on)
Reimplemented Sets the subscribed property (only while items are loaded)
virtual void stateChange(bool on)
Reimlemented Calls KSubscription::changeItemState if mIgnoreStateChange == false.
virtual int width(const TQFontMetrics &, const TQListView *, int column) const
Reimplemented Calls TQListViewItem or TQCheckListItem.
virtual void paintCell(TQPainter *p, const TQColorGroup &cg, int column, int width, int align)
Reimplemented Calls TQListViewItem or TQCheckListItem.
KGroupInfo info()
Get/Set the KGroupInfo.
Definition: ksubscription.h:83
void setVisible(bool b)
Reimplemented Sets items invisible or disabled or even moves them.
virtual void setup()
Reimplemented Calls TQListViewItem or TQCheckListItem.
bool lastOpenState()
Get/Set the last open state.
Definition: ksubscription.h:95
virtual void paintFocus(TQPainter *, const TQColorGroup &cg, const TQRect &r)
Reimplemented Calls TQListViewItem or TQCheckListItem.
This class provides a generic subscription widget The dialog itself has a main listview that holds al...
TQListViewItem * getListItem(TQListView *view, const KGroupInfo &gi)
Gets the item from the listview Returns 0 if the item can't be found.
void restoreOriginalParent()
Moves all items from toplevel back to their original position.
void slotLoadFolders()
The reload-button is pressed.
bool isLoading()
Returns true if items are being constructed Call 'slotLoadingComplete' to switch this.
void slotLoadingComplete()
Call this slot when you have created all items.
void slotUpdateStatusLabel()
Updates the status-label.
void slotCBToggled()
Slot for the checkboxes.
void slotChangeButtonState(TQListViewItem *)
Changes the current state of the buttons.
void slotButton1()
Buttons are clicked.
void removeListItem(TQListView *view, const KGroupInfo &gi)
Removes the item from the listview.
void changeItemState(GroupItem *item, bool on)
Makes all changes after an item is toggled called by the item's stateChange-method.
void filterChanged(TQListViewItem *item=0, const TQString &text=TQString())
Update the item-states (visible, enabled) when a filter criteria changed.
void saveOpenStates()
Saves the open states.
void setStartItem(const KGroupInfo &info)
The item that should be selected on startup.
void listChanged()
Emitted when the amount of items in the groupView changes (e.g.
void slotFilterTextChanged(const TQString &text)
Filter text changed.
KAccount * account()
Get/Set the account.
bool itemInListView(TQListView *view, const KGroupInfo &gi)
Is the item in the given listview.
uint activeItemCount()
The amount of items that are visible and enabled.
void restoreOpenStates()
Restores the saved open state.
This file defines a generic subscription widget and some support classes.