summaryrefslogtreecommitdiffstats
path: root/libkdepim/addresseeselector.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libkdepim/addresseeselector.cpp')
-rw-r--r--libkdepim/addresseeselector.cpp581
1 files changed, 0 insertions, 581 deletions
diff --git a/libkdepim/addresseeselector.cpp b/libkdepim/addresseeselector.cpp
deleted file mode 100644
index 792d5762..00000000
--- a/libkdepim/addresseeselector.cpp
+++ /dev/null
@@ -1,581 +0,0 @@
-/*
- This file is part of libtdepim.
-
- Copyright (c) 2004 Tobias Koenig <tokoe@kde.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include <tqheader.h>
-#include <tqlabel.h>
-#include <tqlayout.h>
-#include <tqsignalmapper.h>
-#include <tqtoolbutton.h>
-
-#include <kabc/stdaddressbook.h>
-#include <kcombobox.h>
-#include <kdialog.h>
-#include <kglobal.h>
-#include <kiconloader.h>
-#include <klineedit.h>
-#include <klistview.h>
-#include <klocale.h>
-
-#include "addresseeselector.h"
-
-using namespace KPIM;
-
-class AddresseeSelector::AddressBookManager
-{
- public:
- TQStringList titles() const;
-
- void addResource( KABC::Resource* );
- void addAddressBook( const TQString &title, SelectionItem::List &list );
-
- void clear();
- bool contains( uint index, const SelectionItem& );
-
- private:
- struct AddressBookEntry {
- TQString title;
- SelectionItem::List list;
- };
-
- TQValueList<KABC::Resource*> mResources;
- TQValueList<AddressBookEntry> mAddressBooks;
-};
-
-TQStringList AddresseeSelector::AddressBookManager::titles() const
-{
- TQStringList titles;
-
- // we've always an 'all' entry
- titles.append( i18n( "All" ) );
-
- TQValueList<KABC::Resource*>::ConstIterator resIt;
- for ( resIt = mResources.begin(); resIt != mResources.end(); ++resIt )
- titles.append( (*resIt)->resourceName() );
-
- TQValueList<AddressBookEntry>::ConstIterator abIt;
- for ( abIt = mAddressBooks.begin(); abIt != mAddressBooks.end(); ++abIt )
- titles.append( (*abIt).title );
-
- return titles;
-}
-
-void AddresseeSelector::AddressBookManager::addResource( KABC::Resource *resource )
-{
- if ( mResources.find( resource ) == mResources.end() )
- mResources.append( resource );
-}
-
-void AddresseeSelector::AddressBookManager::addAddressBook( const TQString &title,
- SelectionItem::List &list )
-{
- AddressBookEntry entry;
- entry.title = title;
- entry.list = list;
-
-
- // TODO: check for duplicates
- mAddressBooks.append( entry );
-}
-
-void AddresseeSelector::AddressBookManager::clear()
-{
- mResources.clear();
- mAddressBooks.clear();
-}
-
-bool AddresseeSelector::AddressBookManager::contains( uint index, const SelectionItem &item )
-{
- if ( index == 0 ) // the 'all' entry
- return true;
-
- if ( mResources.count() > 0 ) {
- if ( index <= mResources.count() ) {
- index--;
- if ( item.addressee().resource() == mResources[ index ] )
- return true;
- else
- return false;
- }
- }
-
- index = index - mResources.count();
-
- if ( mAddressBooks.count() > 0 ) {
- if ( index <= mAddressBooks.count() ) {
- index--;
- AddressBookEntry entry = mAddressBooks[ index ];
- SelectionItem::List::ConstIterator it;
- for ( it = entry.list.begin(); it != entry.list.end(); ++it )
- if ( (*it).addressee() == item.addressee() )
- return true;
-
- return false;
- }
- }
-
- return false;
-}
-
-
-SelectionItem::SelectionItem( const KABC::Addressee &addressee, uint index )
- : mAddressee( addressee ), mDistributionList( 0 ), mIndex( index )
-{
- mField.fill( false, 10 );
-}
-
-SelectionItem::SelectionItem( KABC::DistributionList *list, uint index )
- : mDistributionList( list ), mIndex( index )
-{
- mField.fill( false, 10 );
-}
-
-SelectionItem::SelectionItem()
- : mDistributionList( 0 ), mIndex( 0 )
-{
- mField.fill( false, 10 );
-}
-
-void SelectionItem::addToField( int index )
-{
- mField.setBit( index );
-}
-
-void SelectionItem::removeFromField( int index )
-{
- mField.clearBit( index );
-}
-
-bool SelectionItem::isInField( int index )
-{
- return mField.testBit( index );
-}
-
-KABC::Addressee SelectionItem::addressee() const
-{
- return mAddressee;
-}
-
-KABC::DistributionList* SelectionItem::distributionList() const
-{
- return mDistributionList;
-}
-
-uint SelectionItem::index() const
-{
- return mIndex;
-}
-
-
-class SelectionViewItem : public TQListViewItem
-{
- public:
- SelectionViewItem( TQListView *parent, Selection *selection,
- SelectionItem *item )
- : TQListViewItem( parent, "" ), mSelection( selection ), mItem( item )
- {
- if ( mItem->distributionList() == 0 )
- mIcon = mSelection->itemIcon( mItem->addressee(), mItem->index() );
- else
- mIcon = mSelection->distributionListIcon( mItem->distributionList() );
- }
-
- TQString text( int column ) const
- {
- if ( column == 0 ) {
- if ( mItem->distributionList() == 0 )
- return mSelection->itemText( mItem->addressee(), mItem->index() );
- else
- return mSelection->distributionListText( mItem->distributionList() );
- } else
- return TQString();
- }
-
- const TQPixmap* pixmap( int column ) const
- {
- if ( column == 0 ) {
- return &mIcon;
- } else
- return 0;
- }
-
- SelectionItem* item() const { return mItem; }
-
- private:
- Selection *mSelection;
- SelectionItem *mItem;
- TQPixmap mIcon;
-};
-
-AddresseeSelector::AddresseeSelector( Selection *selection, TQWidget *parent, const char *name )
- : TQWidget( parent, name ), mSelection( selection ), mManager( 0 )
-{
- mMoveMapper = new TQSignalMapper( TQT_TQOBJECT(this) );
- mRemoveMapper = new TQSignalMapper( TQT_TQOBJECT(this) );
-
- mAddressBookManager = new AddressBookManager();
-
- initGUI();
-
- init();
-
- mSelection->setSelector( this );
-}
-
-AddresseeSelector::~AddresseeSelector()
-{
- delete mManager;
- mManager = 0;
-
- delete mAddressBookManager;
- mAddressBookManager = 0;
-}
-
-void AddresseeSelector::init()
-{
- connect( KABC::StdAddressBook::self( true ), TQT_SIGNAL( addressBookChanged( AddressBook* ) ),
- this, TQT_SLOT( reloadAddressBook() ) );
- connect( mAddresseeFilter, TQT_SIGNAL( textChanged( const TQString& ) ),
- this, TQT_SLOT( updateAddresseeView() ) );
- connect( mAddressBookCombo, TQT_SIGNAL( activated( int ) ),
- this, TQT_SLOT( updateAddresseeView() ) );
-
- connect( mMoveMapper, TQT_SIGNAL( mapped( int ) ),
- this, TQT_SLOT( move( int ) ) );
- connect( mRemoveMapper, TQT_SIGNAL( mapped( int ) ),
- this, TQT_SLOT( remove( int ) ) );
-
- reloadAddressBook();
-}
-
-void AddresseeSelector::initGUI()
-{
- TQGridLayout *tqlayout = new TQGridLayout( this, 2, 3, KDialog::marginHint(), KDialog::spacingHint() );
- TQGridLayout *topLayout = new TQGridLayout( this, 2, 2, KDialog::marginHint() );
-
- TQLabel *label = new TQLabel( i18n( "Address book:" ), this );
- mAddressBookCombo = new KComboBox( false, this );
-
- topLayout->addWidget( label, 0, 0 );
- topLayout->addWidget( mAddressBookCombo, 0, 1 );
-
- label = new TQLabel( i18n( "Search:" ), this );
- mAddresseeFilter = new KLineEdit( this );
-
- topLayout->addWidget( label, 1, 0 );
- topLayout->addWidget( mAddresseeFilter, 1, 1 );
-
- topLayout->setColStretch( 1, 1 );
-
- tqlayout->addMultiCellLayout( topLayout, 0, 0, 0, 2 );
-
- int row = 1;
-
- TQIconSet moveSet = KGlobal::iconLoader()->loadIconSet( "next", KIcon::Small );
- TQIconSet removeSet = KGlobal::iconLoader()->loadIconSet( "previous", KIcon::Small );
-
- uint count = mSelection->fieldCount();
- for ( uint i = 0; i < count; ++i, ++row ) {
- KListView *listView = new KListView( this );
- listView->addColumn( mSelection->fieldTitle( i ) );
- listView->setFullWidth( true );
- mSelectionViews.append( listView );
-
- connect( listView, TQT_SIGNAL( doubleClicked( TQListViewItem*, const TQPoint&, int ) ),
- mRemoveMapper, TQT_SLOT( map() ) );
- mRemoveMapper->setMapping( TQT_TQOBJECT(listView), i );
-
- TQVBoxLayout *buttonLayout = new TQVBoxLayout( this );
- buttonLayout->tqsetAlignment( TQt::AlignBottom );
- tqlayout->addLayout( buttonLayout, row, 1 );
-
- // move button
- TQToolButton *moveButton = new TQToolButton( this );
- moveButton->setIconSet( moveSet );
- moveButton->setFixedSize( 30, 30 );
-
- connect( moveButton, TQT_SIGNAL( clicked() ),
- mMoveMapper, TQT_SLOT( map() ) );
- mMoveMapper->setMapping( TQT_TQOBJECT(moveButton), i );
-
- // remove button
- TQToolButton *removeButton = new TQToolButton( this );
- removeButton->setIconSet( removeSet );
- removeButton->setFixedSize( 30, 30 );
-
- connect( removeButton, TQT_SIGNAL( clicked() ),
- mRemoveMapper, TQT_SLOT( map() ) );
- mRemoveMapper->setMapping( TQT_TQOBJECT(removeButton), i );
-
- buttonLayout->addWidget( moveButton );
- buttonLayout->addWidget( removeButton );
-
- tqlayout->addWidget( listView, row, 2 );
- }
-
- mAddresseeView = new KListView( this );
- mAddresseeView->addColumn( "" );
- mAddresseeView->header()->hide();
- mAddresseeView->setFullWidth( true );
-
- tqlayout->addMultiCellWidget( mAddresseeView, 1, row, 0, 0 );
-}
-
-void AddresseeSelector::finish()
-{
- SelectionItem::List::Iterator it;
-
- for ( uint field = 0; field < mSelection->fieldCount(); ++field ) {
- for ( it = mSelectionItems.begin(); it != mSelectionItems.end(); ++it ) {
- if ( (*it).isInField( field ) ) {
- if ( (*it).distributionList() == 0 )
- mSelection->addSelectedAddressees( field, (*it).addressee(), (*it).index() );
- else
- mSelection->addSelectedDistributionList( field, (*it).distributionList() );
- }
- }
- }
-}
-
-void AddresseeSelector::updateAddresseeView()
-{
- mAddresseeView->clear();
-
- int addressBookIndex = mAddressBookCombo->currentItem();
-
- SelectionItem::List::Iterator it;
- for ( it = mSelectionItems.begin(); it != mSelectionItems.end(); ++it ) {
- if ( mAddressBookManager->contains( addressBookIndex, *it ) ) {
- if ( (*it).distributionList() == 0 ) {
- if ( mAddresseeFilter->text().isEmpty() ||
- mSelection->itemMatches( (*it).addressee(), (*it).index(),
- mAddresseeFilter->text() ) )
- new SelectionViewItem( mAddresseeView, mSelection, &(*it) );
- } else {
- if ( mAddresseeFilter->text().isEmpty() ||
- mSelection->distributionListMatches( (*it).distributionList(),
- mAddresseeFilter->text() ) )
- new SelectionViewItem( mAddresseeView, mSelection, &(*it) );
- }
- }
- }
-
- updateSelectionViews();
-}
-
-void AddresseeSelector::move( int index )
-{
- SelectionViewItem *item = dynamic_cast<SelectionViewItem*>( mAddresseeView->selectedItem() );
- if ( item ) {
- item->item()->addToField( index );
- updateSelectionView( index );
- }
-}
-
-void AddresseeSelector::remove( int index )
-{
- KListView *view = mSelectionViews[ index ];
-
- SelectionViewItem *item = dynamic_cast<SelectionViewItem*>( view->selectedItem() );
- if ( item ) {
- item->item()->removeFromField( index );
- updateSelectionView( index );
- }
-}
-
-void AddresseeSelector::setItemSelected( uint fieldIndex, const KABC::Addressee &addr, uint itemIndex )
-{
- bool found = false;
-
- SelectionItem::List::Iterator it;
- for ( it = mSelectionItems.begin(); it != mSelectionItems.end(); ++it ) {
- if ( (*it).addressee() == addr && (*it).index() == itemIndex ) {
- (*it).addToField( fieldIndex );
- found = true;
- }
- }
-
- if ( !found ) {
- SelectionItem item( addr, itemIndex );
- item.addToField( fieldIndex );
-
- mSelectionItems.append( item );
- }
-
- updateSelectionView( fieldIndex );
-}
-
-void AddresseeSelector::setItemSelected( uint fieldIndex, const KABC::Addressee &addr,
- uint itemIndex, const TQString &text )
-{
- bool found = false;
-
- SelectionItem::List::Iterator it;
- for ( it = mSelectionItems.begin(); it != mSelectionItems.end(); ++it ) {
- if ( mSelection->itemEquals( (*it).addressee(), (*it).index(), text ) ) {
- (*it).addToField( fieldIndex );
- found = true;
- }
- }
-
- if ( !found ) {
- SelectionItem item( addr, itemIndex );
- item.addToField( fieldIndex );
-
- mSelectionItems.append( item );
- }
-
- updateSelectionView( fieldIndex );
-}
-
-void AddresseeSelector::updateSelectionView( int index )
-{
- KListView *view = mSelectionViews[ index ];
- view->clear();
-
- SelectionItem::List::Iterator it;
- for ( it = mSelectionItems.begin(); it != mSelectionItems.end(); ++it ) {
- if ( (*it).isInField( index ) )
- new SelectionViewItem( view, mSelection, &(*it) );
- }
-}
-
-void AddresseeSelector::updateSelectionViews()
-{
- for ( uint i = 0; i < mSelection->fieldCount(); ++i )
- updateSelectionView( i );
-}
-
-void AddresseeSelector::reloadAddressBook()
-{
- // load contacts
- KABC::Addressee::List list = KABC::StdAddressBook::self( true )->allAddressees();
- KABC::Addressee::List::Iterator it;
-
- SelectionItem::List selectedItems;
-
- SelectionItem::List::Iterator itemIt;
- for ( itemIt = mSelectionItems.begin(); itemIt != mSelectionItems.end(); ++itemIt ) {
- bool isSelected = false;
- for ( uint i = 0; i < mSelection->fieldCount(); ++i ) {
- if ( (*itemIt).isInField( i ) ) {
- isSelected = true;
- break;
- }
- }
-
- // we don't save distribution lists, since this leads to crashes
- if ( isSelected && (*itemIt).distributionList() == 0 ) {
- selectedItems.append( *itemIt );
- }
- }
-
- mSelectionItems.clear();
- mSelectionItems = selectedItems;
-
- for ( it = list.begin(); it != list.end(); ++it ) {
- uint itemCount = mSelection->itemCount( *it );
- for ( uint index = 0; index < itemCount; ++index ) {
- bool available = false;
- for ( itemIt = mSelectionItems.begin(); itemIt != mSelectionItems.end(); ++itemIt ) {
- if ( (*itemIt).addressee() == (*it) && (*itemIt).index() == index ) {
- available = true;
- break;
- }
- }
-
- if ( !available ) {
- SelectionItem item( *it, index );
- mSelectionItems.append( item );
- }
- }
- }
-
- // load distribution lists
- delete mManager;
- mManager = new KABC::DistributionListManager( KABC::StdAddressBook::self( true ) );
-
- mManager->load();
-
- TQStringList lists = mManager->listNames();
-
- TQStringList::Iterator listIt;
- for ( listIt = lists.begin(); listIt != lists.end(); ++listIt ) {
- KABC::DistributionList *list = mManager->list( *listIt );
- SelectionItem item( list, 0 );
- mSelectionItems.append( item );
- }
-
- mAddressBookManager->clear();
-
- // update address book combo
- mAddressBookCombo->clear();
-
- TQPtrList<KABC::Resource> resources = KABC::StdAddressBook::self( true )->resources();
- TQPtrListIterator<KABC::Resource> resIt( resources );
- while ( resIt.current() ) {
- if ( resIt.current()->isActive() )
- mAddressBookManager->addResource( resIt );
-
- ++resIt;
- }
-
- for ( uint i = 0; i < mSelection->addressBookCount(); ++i ) {
- SelectionItem::List itemList;
-
- KABC::Addressee::List addrList = mSelection->addressBookContent( i );
- for ( it = addrList.begin(); it != addrList.end(); ++it ) {
- uint itemCount = mSelection->itemCount( *it );
- for ( uint index = 0; index < itemCount; ++index ) {
- SelectionItem item( *it, index );
- mSelectionItems.append( item );
- itemList.append( item );
- }
- }
-
- mAddressBookManager->addAddressBook( mSelection->addressBookTitle( i ),
- itemList );
- }
-
- mAddressBookCombo->insertStringList( mAddressBookManager->titles() );
-
- updateAddresseeView();
-}
-
-
-AddresseeSelectorDialog::AddresseeSelectorDialog( Selection *selection,
- TQWidget *parent, const char *name )
- : KDialogBase( Plain, "", Ok | Cancel, Ok, parent, name, true )
-{
- TQFrame *frame = plainPage();
- TQVBoxLayout *tqlayout = new TQVBoxLayout( frame );
- mSelector = new KPIM::AddresseeSelector( selection, frame );
- tqlayout->addWidget( mSelector );
-
- resize( 500, 490 );
-}
-
-void AddresseeSelectorDialog::accept()
-{
- mSelector->finish();
- TQDialog::accept();
-}
-
-#include "addresseeselector.moc"