summaryrefslogtreecommitdiffstats
path: root/libkdepim/ksubscription.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libkdepim/ksubscription.cpp')
-rw-r--r--libkdepim/ksubscription.cpp793
1 files changed, 0 insertions, 793 deletions
diff --git a/libkdepim/ksubscription.cpp b/libkdepim/ksubscription.cpp
deleted file mode 100644
index b611e126..00000000
--- a/libkdepim/ksubscription.cpp
+++ /dev/null
@@ -1,793 +0,0 @@
-/*
- 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"