summaryrefslogtreecommitdiffstats
path: root/libkdepim/completionordereditor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libkdepim/completionordereditor.cpp')
-rw-r--r--libkdepim/completionordereditor.cpp307
1 files changed, 0 insertions, 307 deletions
diff --git a/libkdepim/completionordereditor.cpp b/libkdepim/completionordereditor.cpp
deleted file mode 100644
index 2687188d..00000000
--- a/libkdepim/completionordereditor.cpp
+++ /dev/null
@@ -1,307 +0,0 @@
-/** -*- c++ -*-
- * completionordereditor.cpp
- *
- * Copyright (c) 2004 David Faure <faure@kde.org>
- *
- * 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; version 2 of the License
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * 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, USA.
- *
- * In addition, as a special exception, the copyright holders give
- * permission to link the code of this program with any edition of
- * the TQt library by Trolltech AS, Norway (or with modified versions
- * of TQt that use the same license as TQt), and distribute linked
- * combinations including the two. You must obey the GNU General
- * Public License in all respects for all of the code used other than
- * TQt. If you modify this file, you may extend this exception to
- * your version of the file, but you are not obligated to do so. If
- * you do not wish to do so, delete this exception statement from
- * your version.
- */
-#include <config.h> // FOR KDEPIM_NEW_DISTRLISTS
-
-#include "completionordereditor.h"
-#include "ldapclient.h"
-#include "resourceabc.h"
-
-#include <kabc/stdaddressbook.h>
-#include <kabc/resource.h>
-
-#include <kdebug.h>
-#include <klocale.h>
-#include <kiconloader.h>
-#include <klistview.h>
-#include <kpushbutton.h>
-
-#include <tqhbox.h>
-#include <tqvbox.h>
-#include <tqheader.h>
-#include <tqtoolbutton.h>
-#include <kapplication.h>
-#include <dcopclient.h>
-
-/*
-
-Several items are used in addresseelineedit's completion object:
- LDAP servers, KABC resources (imap and non-imap), Recent addresses (in kmail only).
-
-The default completion weights are as follow:
- Recent addresses (kmail) : 10 (see kmail/kmlineeditspell.cpp)
- LDAP: 50, 49, 48 etc. (see ldapclient.cpp)
- KABC non-imap resources: 60 (see addresseelineedit.cpp and SimpleCompletionItem here)
- Distribution lists: 60 (see addresseelineedit.cpp and SimpleCompletionItem here)
- KABC imap resources: 80 (see kresources/imap/kabc/resourceimap.cpp)
-
-This dialog allows to change those weights, by showing one item per:
- - LDAP server
- - KABC non-imap resource
- - KABC imap subresource
- plus one item for Distribution Lists.
-
- Maybe 'recent addresses' should be configurable too, but first it might
- be better to add support for them in korganizer too.
-
-*/
-
-using namespace KPIM;
-
-namespace KPIM {
-
-int CompletionItemList::compareItems( TQPtrCollection::Item s1, TQPtrCollection::Item s2 )
-{
- int w1 = ( (CompletionItem*)s1 )->completionWeight();
- int w2 = ( (CompletionItem*)s2 )->completionWeight();
- // s1 < s2 if it has a higher completion value, i.e. w1 > w2.
- return w2 - w1;
-}
-
-class LDAPCompletionItem : public CompletionItem
-{
-public:
- LDAPCompletionItem( LdapClient* ldapClient ) : mLdapClient( ldapClient ) {}
- virtual TQString label() const { return i18n( "LDAP server %1" ).tqarg( mLdapClient->server().host() ); }
- virtual int completionWeight() const { return mLdapClient->completionWeight(); }
- virtual void save( CompletionOrderEditor* );
-protected:
- virtual void setCompletionWeight( int weight ) { mWeight = weight; }
-private:
- LdapClient* mLdapClient;
- int mWeight;
-};
-
-void LDAPCompletionItem::save( CompletionOrderEditor* )
-{
- KConfig * config = LdapSearch::config();
- config->setGroup( "LDAP" );
- config->writeEntry( TQString( "SelectedCompletionWeight%1" ).tqarg( mLdapClient->clientNumber() ),
- mWeight );
- config->sync();
-}
-
-// A simple item saved into kpimcompletionorder (no subresources, just name/identifier/weight)
-class SimpleCompletionItem : public CompletionItem
-{
-public:
- SimpleCompletionItem( CompletionOrderEditor* editor, const TQString& label, const TQString& identifier, int weight )
- : mLabel( label ), mIdentifier( identifier ) {
- KConfigGroup group( editor->configFile(), "CompletionWeights" );
- mWeight = group.readNumEntry( mIdentifier, weight );
- }
- virtual TQString label() const { return mLabel; }
- virtual int completionWeight() const { return mWeight; }
- virtual void save( CompletionOrderEditor* );
-protected:
- virtual void setCompletionWeight( int weight ) { mWeight = weight; }
-private:
- TQString mLabel, mIdentifier;
- int mWeight;
-};
-
-void SimpleCompletionItem::save( CompletionOrderEditor* editor )
-{
- // Maybe KABC::Resource could have a completionWeight setting (for readConfig/writeConfig)
- // But for kdelibs-3.2 compat purposes I can't do that.
- KConfigGroup group( editor->configFile(), "CompletionWeights" );
- group.writeEntry( mIdentifier, mWeight );
-}
-
-// An imap subresource for kabc
-class KABCImapSubResCompletionItem : public CompletionItem
-{
-public:
- KABCImapSubResCompletionItem( ResourceABC* resource, const TQString& subResource )
- : mResource( resource ), mSubResource( subResource ), mWeight( completionWeight() ) {}
- virtual TQString label() const {
- return TQString( "%1 %2" ).tqarg( mResource->resourceName() ).tqarg( mResource->subresourceLabel( mSubResource ) );
- }
- virtual int completionWeight() const {
- return mResource->subresourceCompletionWeight( mSubResource );
- }
- virtual void setCompletionWeight( int weight ) {
- mWeight = weight;
- }
- virtual void save( CompletionOrderEditor* ) {
- mResource->setSubresourceCompletionWeight( mSubResource, mWeight );
- }
-private:
- ResourceABC* mResource;
- TQString mSubResource;
- int mWeight;
-};
-
-/////////
-
-class CompletionViewItem : public TQListViewItem
-{
-public:
- CompletionViewItem( TQListView* lv, CompletionItem* item )
- : TQListViewItem( lv, lv->lastItem(), item->label() ), mItem( item ) {}
- CompletionItem* item() const { return mItem; }
- void setItem( CompletionItem* i ) { mItem = i; setText( 0, mItem->label() ); }
-
-private:
- CompletionItem* mItem;
-};
-
-CompletionOrderEditor::CompletionOrderEditor( KPIM::LdapSearch* ldapSearch,
- TQWidget* parent, const char* name )
- : KDialogBase( parent, name, true, i18n("Edit Completion Order"), Ok|Cancel, Ok, true ),
- mConfig( "kpimcompletionorder" ), mDirty( false )
-{
- mItems.setAutoDelete( true );
- // The first step is to gather all the data, creating CompletionItem objects
- TQValueList< LdapClient* > ldapClients = ldapSearch->clients();
- for( TQValueList<LdapClient*>::const_iterator it = ldapClients.begin(); it != ldapClients.end(); ++it ) {
- //kdDebug(5300) << "LDAP: host " << (*it)->host() << " weight " << (*it)->completionWeight() << endl;
- mItems.append( new LDAPCompletionItem( *it ) );
- }
- KABC::AddressBook *addressBook = KABC::StdAddressBook::self( true );
- TQPtrList<KABC::Resource> resources = addressBook->resources();
- for( TQPtrListIterator<KABC::Resource> resit( resources ); *resit; ++resit ) {
- //kdDebug(5300) << "KABC Resource: " << (*resit)->className() << endl;
- ResourceABC* res = dynamic_cast<ResourceABC *>( *resit );
- if ( res ) { // IMAP KABC resource
- const TQStringList subresources = res->subresources();
- for( TQStringList::const_iterator it = subresources.begin(); it != subresources.end(); ++it ) {
- mItems.append( new KABCImapSubResCompletionItem( res, *it ) );
- }
- } else { // non-IMAP KABC resource
- mItems.append( new SimpleCompletionItem( this, (*resit)->resourceName(),
- (*resit)->identifier(), 60 ) );
- }
- }
-
-#ifndef KDEPIM_NEW_DISTRLISTS // new distr lists are normal contact, so no separate item if using them
- // Add an item for distribution lists
- mItems.append( new SimpleCompletionItem( this, i18n( "Distribution Lists" ), "DistributionLists" ), 60 );
-#endif
-
- mItems.append( new SimpleCompletionItem( this, i18n( "Recent Addresses" ), "Recent Addresses", 10 ) );
-
- // Now sort the items, then create the GUI
- mItems.sort();
-
- TQHBox* page = makeHBoxMainWidget();
- mListView = new KListView( page );
- mListView->setSorting( -1 );
- mListView->addColumn( TQString() );
- mListView->header()->hide();
-
- for( TQPtrListIterator<CompletionItem> compit( mItems ); *compit; ++compit ) {
- new CompletionViewItem( mListView, *compit );
- kdDebug(5300) << " " << (*compit)->label() << " " << (*compit)->completionWeight() << endl;
- }
-
- TQVBox* upDownBox = new TQVBox( page );
- mUpButton = new KPushButton( upDownBox, "mUpButton" );
- mUpButton->setIconSet( BarIconSet( "up", KIcon::SizeSmall ) );
- mUpButton->setEnabled( false ); // b/c no item is selected yet
- mUpButton->setFocusPolicy( TQ_StrongFocus );
-
- mDownButton = new KPushButton( upDownBox, "mDownButton" );
- mDownButton->setIconSet( BarIconSet( "down", KIcon::SizeSmall ) );
- mDownButton->setEnabled( false ); // b/c no item is selected yet
- mDownButton->setFocusPolicy( TQ_StrongFocus );
-
- TQWidget* spacer = new TQWidget( upDownBox );
- upDownBox->setStretchFactor( spacer, 100 );
-
- connect( mListView, TQT_SIGNAL( selectionChanged( TQListViewItem* ) ),
- TQT_SLOT( slotSelectionChanged( TQListViewItem* ) ) );
- connect( mUpButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotMoveUp() ) );
- connect( mDownButton, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotMoveDown() ) );
-}
-
-CompletionOrderEditor::~CompletionOrderEditor()
-{
-}
-
-void CompletionOrderEditor::slotSelectionChanged( TQListViewItem *item )
-{
- mDownButton->setEnabled( item && item->itemBelow() );
- mUpButton->setEnabled( item && item->itemAbove() );
-}
-
-static void swapItems( CompletionViewItem *one, CompletionViewItem *other )
-{
- CompletionItem* i = one->item();
- one->setItem( other->item() );
- other->setItem( i );
-}
-
-void CompletionOrderEditor::slotMoveUp()
-{
- CompletionViewItem *item = static_cast<CompletionViewItem *>( mListView->selectedItem() );
- if ( !item ) return;
- CompletionViewItem *above = static_cast<CompletionViewItem *>( item->itemAbove() );
- if ( !above ) return;
- swapItems( item, above );
- mListView->setCurrentItem( above );
- mListView->setSelected( above, true );
- mDirty = true;
-}
-
-void CompletionOrderEditor::slotMoveDown()
-{
- CompletionViewItem *item = static_cast<CompletionViewItem *>( mListView->selectedItem() );
- if ( !item ) return;
- CompletionViewItem *below = static_cast<CompletionViewItem *>( item->itemBelow() );
- if ( !below ) return;
- swapItems( item, below );
- mListView->setCurrentItem( below );
- mListView->setSelected( below, true );
- mDirty = true;
-}
-
-void CompletionOrderEditor::slotOk()
-{
- if ( mDirty ) {
- int w = 100;
- for ( TQListViewItem* it = mListView->firstChild(); it; it = it->nextSibling() ) {
- CompletionViewItem *item = static_cast<CompletionViewItem *>( it );
- item->item()->setCompletionWeight( w );
- item->item()->save( this );
- kdDebug(5300) << "slotOk: " << item->item()->label() << " " << w << endl;
- --w;
- }
-
- // Emit DCOP signal
- // The emitter is always set to KPIM::IMAPCompletionOrder, so that the connect works
- // This is why we can't use k_dcop_signals here, but need to use emitDCOPSignal
- kapp->dcopClient()->emitDCOPSignal( "KPIM::IMAPCompletionOrder", "orderChanged()", TQByteArray() );
- }
- KDialogBase::slotOk();
-}
-
-} // namespace KPIM
-
-#include "completionordereditor.moc"