summaryrefslogtreecommitdiffstats
path: root/libkdepim/addressesdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libkdepim/addressesdialog.cpp')
-rw-r--r--libkdepim/addressesdialog.cpp1197
1 files changed, 0 insertions, 1197 deletions
diff --git a/libkdepim/addressesdialog.cpp b/libkdepim/addressesdialog.cpp
deleted file mode 100644
index 27f601833..000000000
--- a/libkdepim/addressesdialog.cpp
+++ /dev/null
@@ -1,1197 +0,0 @@
-/* -*- mode: C++; c-file-style: "gnu" -*-
- *
- * This file is part of libtdepim.
- *
- * Copyright (c) 2003 Zack Rusin <zack@kde.org>
- * Copyright (c) 2003 Aaron J. Seigo <aseigo@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 "addressesdialog.h"
-#include "addresspicker.h"
-#include "ldapsearchdialog.h"
-
-#include <config.h>
-
-#include <libemailfunctions/email.h>
-
-#ifdef KDEPIM_NEW_DISTRLISTS
-#include "distributionlist.h"
-#include <kresources/selectdialog.h>
-#include <kabc/resource.h>
-#else
-#include <kabc/distributionlist.h>
-#endif
-
-#include <kabc/stdaddressbook.h>
-#include <kapplication.h>
-#include <kdebug.h>
-#include <kglobal.h>
-#include <kiconloader.h>
-#include <kinputdialog.h>
-#include <klineedit.h>
-#include <klocale.h>
-#include <kmessagebox.h>
-#include <kprocess.h>
-#include <kpushbutton.h>
-#include <krun.h>
-#include <kstandarddirs.h>
-
-#include <tqdict.h>
-#include <tqlayout.h>
-#include <tqvbox.h>
-#include <tqwidget.h>
-
-namespace KPIM {
-
-// private start :
-struct AddresseeViewItem::AddresseeViewItemPrivate {
- KABC::Addressee address;
- AddresseeViewItem::Category category;
- KABC::Addressee::List addresses;
-};
-
-struct AddressesDialog::AddressesDialogPrivate {
- AddressesDialogPrivate() :
- ui(0), personal(0), recent(0),
- toItem(0), ccItem(0), bccItem(0),
- ldapSearchDialog(0)
- {}
-
- AddressPickerUI *ui;
-
- AddresseeViewItem *personal;
- AddresseeViewItem *recent;
- AddresseeViewItem *topdist;
- TQPtrList<AddresseeViewItem> dists;
-
- AddresseeViewItem *toItem;
- AddresseeViewItem *ccItem;
- AddresseeViewItem *bccItem;
-
- TQDict<AddresseeViewItem> groupDict;
-
- KABC::Addressee::List recentAddresses;
- LDAPSearchDialog *ldapSearchDialog;
-};
-// privates end
-
-AddresseeViewItem::AddresseeViewItem( AddresseeViewItem *parent, const KABC::Addressee& addr,
- int emailIndex )
- : TQObject( 0 ), KListViewItem( parent, addr.realName(),
- ( emailIndex == 0 ? addr.preferredEmail() : addr.emails()[ emailIndex ] ) )
-{
- d = new AddresseeViewItemPrivate;
- d->address = addr;
- d->category = Entry;
-
- if ( text( 0 ).stripWhiteSpace().isEmpty() )
- setText( 0, addr.preferredEmail() );
-
- if ( addr.photo().url().isEmpty() ) {
- if ( addr.photo().data().isNull() )
- setPixmap( 0, KGlobal::iconLoader()->loadIcon( "personal", KIcon::Small ) );
- else
- setPixmap( 0, addr.photo().data().smoothScale( 16, 16 ) );
- } else {
- setPixmap( 0, KGlobal::iconLoader()->loadIcon( addr.photo().url(), KIcon::Small ) );
- }
-}
-
-AddresseeViewItem::AddresseeViewItem( KListView *lv, const TQString& name, Category cat )
- : TQObject(0), KListViewItem( lv, name )
-{
- d = new AddresseeViewItemPrivate;
- d->category = cat;
-}
-
-AddresseeViewItem::AddresseeViewItem( AddresseeViewItem *parent, const TQString& name,
- const KABC::Addressee::List &lst )
- : TQObject(0), KListViewItem( parent, name, i18n("<group>") )
-{
- d = new AddresseeViewItemPrivate;
- d->category = FilledGroup;
- d->addresses = lst;
-}
-
-AddresseeViewItem::AddresseeViewItem( AddresseeViewItem *parent, const TQString& name )
- : TQObject(0), KListViewItem( parent, name, i18n("<group>") )
-{
- d = new AddresseeViewItemPrivate;
- d->category = DistList;
-
- setPixmap( 0, KGlobal::iconLoader()->loadIcon( "kdmconfig", KIcon::Small ) );
-}
-
-AddresseeViewItem::~AddresseeViewItem()
-{
- delete d;
- d = 0;
-}
-
-KABC::Addressee
-AddresseeViewItem::addressee() const
-{
- return d->address;
-}
-
-KABC::Addressee::List
-AddresseeViewItem::addresses() const
-{
- return d->addresses;
-}
-
-AddresseeViewItem::Category
-AddresseeViewItem::category() const
-{
- return d->category;
-}
-
-TQString
-AddresseeViewItem::name() const
-{
- return text(0);
-}
-
-TQString
-AddresseeViewItem::email() const
-{
- return text(1);
-}
-
-bool AddresseeViewItem::matches(const TQString& txt) const
-{
- return d->address.realName().contains(txt, false) || d->address.preferredEmail().contains(txt, false);
-}
-
-void AddresseeViewItem::setSelected(bool selected)
-{
- if (selected == isSelected())
- {
- return;
- }
-
- emit addressSelected( this, selected );
- TQListViewItem::setSelected(selected);
-}
-
-int
-AddresseeViewItem::compare( TQListViewItem * i, int col, bool ascending ) const
-{
- if ( category() == Group || category() == Entry )
- return KListViewItem::compare( i , col, ascending );
-
- AddresseeViewItem *item = static_cast<AddresseeViewItem*>( i );
- int a = static_cast<int>( category() );
- int b = static_cast<int>( item->category() );
-
- if ( ascending )
- if ( a < b )
- return -1;
- else
- return 1;
- else
- if ( a < b )
- return 1;
- else
- return -1;
-}
-
-AddressesDialog::AddressesDialog( TQWidget *widget, const char *name )
- : KDialogBase( widget, name, true, i18n("Address Selection"),
- Ok|Cancel, Ok, true )
-{
- TQVBox *page = makeVBoxMainWidget();
- d = new AddressesDialogPrivate;
- d->ui = new AddressPickerUI( page );
-
- KABC::StdAddressBook::self( true );
- updateAvailableAddressees();
- initConnections();
-
- d->ui->mAvailableView->setFocus();
-
- setMainWidget( page );
- page->setMinimumSize( 750, 400 );
-}
-
-AddressesDialog::~AddressesDialog()
-{
- delete d;
- d = 0;
-}
-
-AddresseeViewItem* AddressesDialog::selectedToItem()
-{
- if ( !d->toItem )
- {
- d->toItem = new AddresseeViewItem( d->ui->mSelectedView, i18n("To"), AddresseeViewItem::To );
- connect(d->toItem, TQT_SIGNAL(addressSelected(AddresseeViewItem*, bool)),
- this, TQT_SLOT(selectedAddressSelected(AddresseeViewItem*, bool)));
- }
- return d->toItem;
-}
-
-AddresseeViewItem* AddressesDialog::selectedCcItem()
-{
- if ( !d->ccItem )
- {
- d->ccItem = new AddresseeViewItem( d->ui->mSelectedView, i18n("CC"), AddresseeViewItem::CC );
- connect(d->ccItem, TQT_SIGNAL(addressSelected(AddresseeViewItem*, bool)),
- this, TQT_SLOT(selectedAddressSelected(AddresseeViewItem*, bool)));
- }
- return d->ccItem;
-}
-
-AddresseeViewItem* AddressesDialog::selectedBccItem()
-{
- if ( !d->bccItem )
- {
- d->bccItem = new AddresseeViewItem( d->ui->mSelectedView, i18n("BCC"), AddresseeViewItem::BCC );
- connect(d->bccItem, TQT_SIGNAL(addressSelected(AddresseeViewItem*, bool)),
- this, TQT_SLOT(selectedAddressSelected(AddresseeViewItem*, bool)));
- }
- return d->bccItem;
-}
-
-void
-AddressesDialog::setSelectedTo( const TQStringList& l )
-{
- TQString name, email;
- for ( TQStringList::ConstIterator it = l.begin(); it != l.end(); ++it ) {
- KABC::Addressee addr;
- KABC::Addressee::parseEmailAddress( *it, name, email );
- addr.setNameFromString( name );
- addr.insertEmail( email );
- addAddresseeToSelected( addr, selectedToItem() );
- }
-}
-
-void
-AddressesDialog::setSelectedCC( const TQStringList& l )
-{
- TQString name, email;
- for ( TQStringList::ConstIterator it = l.begin(); it != l.end(); ++it ) {
- KABC::Addressee addr;
- KABC::Addressee::parseEmailAddress( *it, name, email );
- addr.setNameFromString( name );
- addr.insertEmail( email );
- addAddresseeToSelected( addr, selectedCcItem() );
- }
-}
-
-void
-AddressesDialog::setSelectedBCC( const TQStringList& l )
-{
- TQString name, email;
- for ( TQStringList::ConstIterator it = l.begin(); it != l.end(); ++it ) {
- KABC::Addressee addr;
- KABC::Addressee::parseEmailAddress( *it, name, email );
- addr.setNameFromString( name );
- addr.insertEmail( email );
- addAddresseeToSelected( addr, selectedBccItem() );
- }
-}
-
-void
-AddressesDialog::setRecentAddresses( const KABC::Addressee::List& list )
-{
- d->recentAddresses = list;
-
- updateRecentAddresses();
-
- checkForSingleAvailableGroup();
-}
-
-void
-AddressesDialog::updateRecentAddresses()
-{
- static const TQString &recentGroup = KGlobal::staticQString( i18n( "Recent Addresses" ) );
-
- if ( !d->recent ) {
- d->recent = new AddresseeViewItem( d->ui->mAvailableView, recentGroup );
- connect(d->recent, TQT_SIGNAL(addressSelected(AddresseeViewItem*, bool)),
- this, TQT_SLOT(availableAddressSelected(AddresseeViewItem*, bool)));
- d->recent->setVisible( false );
- d->groupDict.insert( recentGroup, d->recent );
- }
-
- KABC::Addressee::List::ConstIterator it;
- for ( it = d->recentAddresses.begin(); it != d->recentAddresses.end(); ++it )
- addAddresseeToAvailable( *it, d->recent );
-
- if ( d->recent->childCount() > 0 ) {
- d->recent->setOpen( true );
- d->recent->setVisible( true );
- }
-}
-
-void
-AddressesDialog::setShowCC( bool b )
-{
- d->ui->mCCButton->setShown( b );
-}
-
-void
-AddressesDialog::setShowBCC( bool b )
-{
- d->ui->mBCCButton->setShown( b );
-}
-
-TQStringList
-AddressesDialog::to() const
-{
- TQStringList emails = allDistributionLists( d->toItem );
- KABC::Addressee::List l = toAddresses();
- emails += entryToString( l );
-
- return emails;
-}
-
-TQStringList
-AddressesDialog::cc() const
-{
- TQStringList emails = allDistributionLists( d->ccItem );
- KABC::Addressee::List l = ccAddresses();
- emails += entryToString( l );
-
- return emails;
-}
-
-TQStringList
-AddressesDialog::bcc() const
-{
- TQStringList emails = allDistributionLists( d->bccItem );
-
- KABC::Addressee::List l = bccAddresses();
- emails += entryToString( l );
-
- return emails;
-}
-
-KABC::Addressee::List
-AddressesDialog::toAddresses() const
-{
- return allAddressee( d->toItem );
-}
-KABC::Addressee::List
-AddressesDialog::allToAddressesNoDuplicates() const
-{
- KABC::Addressee::List aList = allAddressee( d->toItem );
- const TQStringList dList = toDistributionLists();
- KABC::AddressBook* abook = KABC::StdAddressBook::self( true );
-#ifdef KDEPIM_NEW_DISTRLISTS
- for ( TQStringList::ConstIterator it = dList.begin(); it != dList.end(); ++it ) {
- const TQValueList<KPIM::DistributionList::Entry> eList
- = KPIM::DistributionList::findByName(abook, *it).entries(abook);
- TQValueList<KPIM::DistributionList::Entry>::ConstIterator eit;
- for( eit = eList.begin(); eit != eList.end(); ++eit ) {
- KABC::Addressee a = (*eit).addressee;
- if ( !a.preferredEmail().isEmpty() && aList.find( a ) == aList.end() ) {
- aList.append( a ) ;
- }
- }
- }
-#else
- KABC::DistributionListManager manager( abook );
- manager.load();
- for ( TQStringList::ConstIterator it = dList.begin(); it != dList.end(); ++it ) {
- const TQValueList<KABC::DistributionList::Entry> eList = manager.list( *it )->entries();
- TQValueList<KABC::DistributionList::Entry>::ConstIterator eit;
- for( eit = eList.begin(); eit != eList.end(); ++eit ) {
- KABC::Addressee a = (*eit).addressee;
- if ( !a.preferredEmail().isEmpty() && aList.find( a ) == aList.end() ) {
- aList.append( a ) ;
- }
- }
- }
-#endif
- return aList;
-}
-
-KABC::Addressee::List
-AddressesDialog::ccAddresses() const
-{
- return allAddressee( d->ccItem );
-}
-
-KABC::Addressee::List
-AddressesDialog::bccAddresses() const
-{
- return allAddressee( d->bccItem );
-}
-
-
-TQStringList
-AddressesDialog::toDistributionLists() const
-{
- return allDistributionLists( d->toItem );
-}
-
-TQStringList
-AddressesDialog::ccDistributionLists() const
-{
- return allDistributionLists( d->ccItem );
-}
-
-TQStringList
-AddressesDialog::bccDistributionLists() const
-{
- return allDistributionLists( d->bccItem );
-}
-
-void
-AddressesDialog::updateAvailableAddressees()
-{
- d->ui->mAvailableView->clear();
- d->groupDict.clear();
-
- static const TQString &personalGroup = KGlobal::staticQString( i18n( "Other Addresses" ) );
- d->ui->mAvailableView->setRootIsDecorated( true );
- d->personal = new AddresseeViewItem( d->ui->mAvailableView, personalGroup );
- //connect(d->personal, TQT_SIGNAL(addressSelected(AddresseeViewItem*, bool)),
- // this, TQT_SLOT(selectedAddressSelected(AddresseeViewItem*, bool)));
- d->personal->setVisible( false );
- d->groupDict.insert( personalGroup, d->personal );
-
- KABC::AddressBook *addressBook = KABC::StdAddressBook::self( true );
- for( KABC::AddressBook::Iterator it = addressBook->begin();
- it != addressBook->end(); ++it ) {
- addAddresseeToAvailable( *it, d->personal );
- }
-
- d->recent = 0;
- updateRecentAddresses();
-
- d->topdist = 0;
- addDistributionLists();
- if ( d->personal->childCount() > 0 ) {
- d->personal->setOpen( true );
- d->personal->setVisible( true );
- }
-
- checkForSingleAvailableGroup();
-}
-
-void AddressesDialog::checkForSingleAvailableGroup()
-{
- TQListViewItem* item = d->ui->mAvailableView->firstChild();
- TQListViewItem* firstGroup = 0;
- int found = 0;
- while (item)
- {
- if (item->isVisible())
- {
- if (!firstGroup && static_cast<AddresseeViewItem*>(item)->category() != AddresseeViewItem::Entry)
- {
- firstGroup = item;
- }
- ++found;
- }
- item = item->nextSibling();
- }
-
- if (found == 1 && firstGroup)
- {
- firstGroup->setOpen(true);
- }
-}
-
-void
-AddressesDialog::availableSelectionChanged()
-{
- bool selection = !selectedAvailableAddresses.isEmpty();
- d->ui->mToButton->setEnabled(selection);
- d->ui->mCCButton->setEnabled(selection);
- d->ui->mBCCButton->setEnabled(selection);
-}
-
-void
-AddressesDialog::selectedSelectionChanged()
-{
- bool selection = !selectedSelectedAddresses.isEmpty();
- d->ui->mRemoveButton->setEnabled(selection);
-}
-
-void
-AddressesDialog::availableAddressSelected( AddresseeViewItem* item, bool selected )
-{
- if (selected)
- {
- selectedAvailableAddresses.append(item);
- }
- else
- {
- selectedAvailableAddresses.remove(item);
- }
-}
-
-void
-AddressesDialog::selectedAddressSelected( AddresseeViewItem* item, bool selected )
-{
- // we have to avoid that a parent and a child is selected together
- // because in this case we get a double object deletion ( program crashes )
- // when removing the selected items from list
- AddresseeViewItem* parent = static_cast<AddresseeViewItem*>(((TQListViewItem*)item)->parent());
- if ( parent && selected )
- parent->setSelected( false );
- if (selected)
- {
- selectedSelectedAddresses.append(item);
- }
- else
- {
- selectedSelectedAddresses.remove(item);
- }
- if ( selected ) {
- AddresseeViewItem* child = static_cast<AddresseeViewItem*>(item->firstChild());
- while (child) {
- child->setSelected( false );
- child = static_cast<AddresseeViewItem*>(child->nextSibling());
- }
- }
-}
-
-void
-AddressesDialog::initConnections()
-{
- connect( d->ui->mFilterEdit, TQT_SIGNAL(textChanged(const TQString &)),
- TQT_SLOT(filterChanged(const TQString &)) );
- connect( d->ui->mToButton, TQT_SIGNAL(clicked()),
- TQT_SLOT(addSelectedTo()) );
- connect( d->ui->mCCButton, TQT_SIGNAL(clicked()),
- TQT_SLOT(addSelectedCC()) );
- connect( d->ui->mBCCButton, TQT_SIGNAL(clicked()),
- TQT_SLOT(addSelectedBCC()) );
- connect( d->ui->mSaveAs, TQT_SIGNAL(clicked()),
- TQT_SLOT(saveAs()) );
- connect( d->ui->mLdapSearch, TQT_SIGNAL(clicked()),
- TQT_SLOT(searchLdap()) );
- connect( d->ui->mRemoveButton, TQT_SIGNAL(clicked()),
- TQT_SLOT(removeEntry()) );
- connect( d->ui->mAvailableView, TQT_SIGNAL(selectionChanged()),
- TQT_SLOT(availableSelectionChanged()) );
- connect( d->ui->mAvailableView, TQT_SIGNAL(doubleClicked(TQListViewItem*)),
- TQT_SLOT(addSelectedTo()) );
- connect( d->ui->mSelectedView, TQT_SIGNAL(selectionChanged()),
- TQT_SLOT(selectedSelectionChanged()) );
- connect( d->ui->mSelectedView, TQT_SIGNAL(doubleClicked(TQListViewItem*)),
- TQT_SLOT(removeEntry()) );
-
-#ifndef KDEPIM_NEW_DISTRLISTS
- connect( KABC::DistributionListWatcher::self(), TQT_SIGNAL( changed() ),
- this, TQT_SLOT( updateAvailableAddressees() ) );
-#endif
-
- connect( KABC::StdAddressBook::self( true ), TQT_SIGNAL( addressBookChanged(AddressBook*) ),
- this, TQT_SLOT( updateAvailableAddressees() ) );
-}
-
-void
-AddressesDialog::addAddresseeToAvailable( const KABC::Addressee& addr, AddresseeViewItem* defaultParent, bool useCategory )
-{
- if ( addr.preferredEmail().isEmpty() )
- return;
-
- if ( useCategory ) {
- TQStringList categories = addr.categories();
-
- for ( TQStringList::Iterator it = categories.begin(); it != categories.end(); ++it ) {
- if ( !d->groupDict[ *it ] ) { //we don't have the category yet
- AddresseeViewItem* category = new AddresseeViewItem( d->ui->mAvailableView, *it );
- d->groupDict.insert( *it, category );
- }
-
- for ( uint i = 0; i < addr.emails().count(); ++i ) {
- AddresseeViewItem* addressee = new AddresseeViewItem( d->groupDict[ *it ], addr, i );
- connect(addressee, TQT_SIGNAL(addressSelected(AddresseeViewItem*, bool)),
- this, TQT_SLOT(availableAddressSelected(AddresseeViewItem*, bool)));
- }
- }
- }
-
- bool noCategory = false;
- if ( useCategory ) {
- if ( addr.categories().isEmpty() )
- noCategory = true;
- } else
- noCategory = true;
-
- if ( defaultParent && noCategory ) { // only non-categorized items here
- AddresseeViewItem* addressee = new AddresseeViewItem( defaultParent, addr );
- connect(addressee, TQT_SIGNAL(addressSelected(AddresseeViewItem*, bool)),
- this, TQT_SLOT(availableAddressSelected(AddresseeViewItem*, bool)));
- }
-}
-
-void
-AddressesDialog::addAddresseeToSelected( const KABC::Addressee& addr, AddresseeViewItem* defaultParent )
-{
- if ( addr.preferredEmail().isEmpty() )
- return;
-
- if ( defaultParent ) {
- AddresseeViewItem *myChild = static_cast<AddresseeViewItem*>( defaultParent->firstChild() );
- while( myChild ) {
- if ( myChild->addressee().preferredEmail() == addr.preferredEmail() )
- return;//already got it
- myChild = static_cast<AddresseeViewItem*>( myChild->nextSibling() );
- }
- AddresseeViewItem* addressee = new AddresseeViewItem( defaultParent, addr );
- connect(addressee, TQT_SIGNAL(addressSelected(AddresseeViewItem*, bool)),
- this, TQT_SLOT(selectedAddressSelected(AddresseeViewItem*, bool)));
- defaultParent->setOpen( true );
- }
-
- d->ui->mSaveAs->setEnabled(true);
-}
-
-void
-AddressesDialog::addAddresseesToSelected( AddresseeViewItem *parent,
- const TQPtrList<AddresseeViewItem>& addresses )
-{
- Q_ASSERT( parent );
-
- TQPtrListIterator<AddresseeViewItem> itr( addresses );
-
- if (itr.current())
- {
- d->ui->mSaveAs->setEnabled(true);
- }
-
- while ( itr.current() ) {
- AddresseeViewItem* address = itr.current();
- ++itr;
-
- if (selectedToAvailableMapping.find(address) != 0)
- {
- continue;
- }
-
- AddresseeViewItem* newItem = 0;
- if (address->category() == AddresseeViewItem::Entry)
- {
- newItem = new AddresseeViewItem( parent, address->addressee() );
- }
- else if (address->category() == AddresseeViewItem::DistList)
- {
- newItem = new AddresseeViewItem( parent, address->name() );
- }
- else
- {
- newItem = new AddresseeViewItem( parent, address->name(), allAddressee( address ) );
- }
-
- address->setSelected( false );
- address->setVisible( false );
- selectedToAvailableMapping.insert(address, newItem);
- selectedToAvailableMapping.insert(newItem, address);
- connect(newItem, TQT_SIGNAL(addressSelected(AddresseeViewItem*, bool)),
- this, TQT_SLOT(selectedAddressSelected(AddresseeViewItem*, bool)));
- }
-
- parent->setOpen( true );
-}
-
-TQStringList
-AddressesDialog::entryToString( const KABC::Addressee::List& l ) const
-{
- TQStringList entries;
-
- for( KABC::Addressee::List::ConstIterator it = l.begin(); it != l.end(); ++it ) {
- entries += (*it).fullEmail();
- }
- return entries;
-}
-
-void
-AddressesDialog::addSelectedTo()
-{
- if ( !d->toItem )
- {
- d->toItem = new AddresseeViewItem( d->ui->mSelectedView, i18n("To"), AddresseeViewItem::To );
- connect(d->toItem, TQT_SIGNAL(addressSelected(AddresseeViewItem*, bool)),
- this, TQT_SLOT(selectedAddressSelected(AddresseeViewItem*, bool)));
- }
-
- addAddresseesToSelected( d->toItem, selectedAvailableAddresses );
- selectedAvailableAddresses.clear();
-
- if ( d->toItem->childCount() > 0 ) {
- d->toItem->setVisible( true );
- } else {
- delete d->toItem;
- d->toItem = 0;
- }
-}
-
-void
-AddressesDialog::addSelectedCC()
-{
- if ( !d->ccItem )
- {
- d->ccItem = new AddresseeViewItem( d->ui->mSelectedView, i18n("CC"), AddresseeViewItem::CC );
- connect(d->ccItem , TQT_SIGNAL(addressSelected(AddresseeViewItem*, bool)),
- this, TQT_SLOT(selectedAddressSelected(AddresseeViewItem*, bool)));
- }
-
- addAddresseesToSelected( d->ccItem, selectedAvailableAddresses );
- selectedAvailableAddresses.clear();
-
- if ( d->ccItem->childCount() > 0 ) {
- d->ccItem->setVisible( true );
- } else {
- delete d->ccItem;
- d->ccItem = 0;
- }
-}
-
-void
-AddressesDialog::addSelectedBCC()
-{
- if ( !d->bccItem )
- {
- d->bccItem = new AddresseeViewItem( d->ui->mSelectedView, i18n("BCC"), AddresseeViewItem::BCC );
- connect(d->bccItem , TQT_SIGNAL(addressSelected(AddresseeViewItem*, bool)),
- this, TQT_SLOT(selectedAddressSelected(AddresseeViewItem*, bool)));
- }
-
- addAddresseesToSelected( d->bccItem, selectedAvailableAddresses );
- selectedAvailableAddresses.clear();
-
- if ( d->bccItem->childCount() > 0 ) {
- d->bccItem->setVisible( true );
- } else {
- delete d->bccItem;
- d->bccItem = 0;
- }
-}
-
-void AddressesDialog::unmapSelectedAddress(AddresseeViewItem* item)
-{
- AddresseeViewItem* correspondingItem = selectedToAvailableMapping[item];
- if (correspondingItem)
- {
- correspondingItem->setVisible( true );
- selectedToAvailableMapping.remove( item );
- selectedToAvailableMapping.remove( correspondingItem );
- }
-
- AddresseeViewItem* child = static_cast<AddresseeViewItem*>(item->firstChild());
- while (child)
- {
- unmapSelectedAddress(child);
- child = static_cast<AddresseeViewItem*>(child->nextSibling());
- }
-}
-
-void
-AddressesDialog::removeEntry()
-{
- TQPtrList<AddresseeViewItem> lst;
- bool resetTo = false;
- bool resetCC = false;
- bool resetBCC = false;
-
- lst.setAutoDelete( false );
- TQPtrListIterator<AddresseeViewItem> it( selectedSelectedAddresses );
- while ( it.current() ) {
- AddresseeViewItem* item = it.current();
- ++it;
- if ( d->toItem == item )
- resetTo = true;
- else if ( d->ccItem == item )
- resetCC = true;
- else if( d->bccItem == item )
- resetBCC = true;
- // we may only append parent items
- unmapSelectedAddress(item);
- lst.append( item );
- }
- selectedSelectedAddresses.clear();
- lst.setAutoDelete( true );
- lst.clear();
- if ( resetTo )
- d->toItem = 0;
- else if ( d->toItem && d->toItem->childCount() == 0 )
- {
- delete d->toItem;
- d->toItem = 0;
- }
- if ( resetCC )
- d->ccItem = 0;
- else if ( d->ccItem && d->ccItem->childCount() == 0 )
- {
- delete d->ccItem;
- d->ccItem = 0;
- }
- if ( resetBCC )
- d->bccItem = 0;
- else if ( d->bccItem && d->bccItem->childCount() == 0 )
- {
- delete d->bccItem;
- d->bccItem = 0;
- }
- d->ui->mSaveAs->setEnabled(d->ui->mSelectedView->firstChild() != 0);
-}
-
-#ifdef KDEPIM_NEW_DISTRLISTS
-
-// copied from kabcore.cpp :(
-// KDE4: should be in libkabc I think
-static KABC::Resource *requestResource( KABC::AddressBook* abook, TQWidget *parent )
-{
- TQPtrList<KABC::Resource> kabcResources = abook->resources();
-
- TQPtrList<KRES::Resource> kresResources;
- TQPtrListIterator<KABC::Resource> resIt( kabcResources );
- KABC::Resource *resource;
- while ( ( resource = resIt.current() ) != 0 ) {
- ++resIt;
- if ( !resource->readOnly() ) {
- KRES::Resource *res = static_cast<KRES::Resource*>( resource );
- if ( res )
- kresResources.append( res );
- }
- }
-
- KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent );
- return static_cast<KABC::Resource*>( res );
-}
-#endif
-
-void
-AddressesDialog::saveAs()
-{
-#ifndef KDEPIM_NEW_DISTRLISTS
- KABC::DistributionListManager manager( KABC::StdAddressBook::self( true ) );
- manager.load();
-#endif
-
- if ( !d->ui->mSelectedView->firstChild() ) {
- KMessageBox::information( 0,
- i18n("There are no addresses in your list. "
- "First add some addresses from your address book, "
- "then try again.") );
- return;
- }
-
- bool ok = false;
- TQString name = KInputDialog::getText( i18n("New Distribution List"),
- i18n("Please enter name:"),
- TQString(), &ok,
- this );
- if ( !ok || name.isEmpty() )
- return;
-
- bool alreadyExists = false;
-#ifdef KDEPIM_NEW_DISTRLISTS
- KABC::AddressBook* abook = KABC::StdAddressBook::self( true );
- KPIM::DistributionList dlist = KPIM::DistributionList::findByName( abook, name );
- alreadyExists = !dlist.isEmpty();
-#else
- alreadyExists = manager.list( name );
-#endif
-
- if ( alreadyExists ) {
- KMessageBox::information( 0,
- i18n( "<qt>Distribution list with the given name <b>%1</b> "
- "already exists. Please select a different name.</qt>" )
- .tqarg( name ) );
- return;
- }
-
-#ifdef KDEPIM_NEW_DISTRLISTS
- KABC::Resource* resource = requestResource( abook, this );
- if ( !resource )
- return;
-
- dlist.setResource( resource );
- dlist.setName( name );
- KABC::Addressee::List addrl = allAddressee( d->ui->mSelectedView, false );
- for ( KABC::Addressee::List::iterator itr = addrl.begin();
- itr != addrl.end(); ++itr ) {
- dlist.insertEntry( *itr );
- }
- abook->insertAddressee( dlist );
-#else
- KABC::DistributionList *dlist = new KABC::DistributionList( &manager, name );
- KABC::Addressee::List addrl = allAddressee( d->ui->mSelectedView, false );
- for ( KABC::Addressee::List::iterator itr = addrl.begin();
- itr != addrl.end(); ++itr ) {
- dlist->insertEntry( *itr );
- }
-
- manager.save();
-#endif
-}
-
-void
-AddressesDialog::searchLdap()
-{
- if ( !d->ldapSearchDialog ) {
- d->ldapSearchDialog = new LDAPSearchDialog( this );
- connect( d->ldapSearchDialog, TQT_SIGNAL( addresseesAdded() ),
- TQT_SLOT(ldapSearchResult() ) );
- }
- d->ldapSearchDialog->show();
-}
-
-void
-AddressesDialog::ldapSearchResult()
-{
- TQStringList emails = KPIM::splitEmailAddrList( d->ldapSearchDialog->selectedEMails() );
- TQStringList::iterator it( emails.begin() );
- TQStringList::iterator end( emails.end() );
- for ( ; it != end; ++it ){
- TQString name;
- TQString email;
- KPIM::getNameAndMail( (*it), name, email );
- KABC::Addressee ad;
- ad.setNameFromString( name );
- ad.insertEmail( email );
- addAddresseeToSelected( ad, selectedToItem() );
- }
-}
-
-void
-AddressesDialog::launchAddressBook()
-{
- kapp->startServiceByDesktopName( "kaddressbook", TQString() );
-}
-
-void
-AddressesDialog::filterChanged( const TQString& txt )
-{
- TQListViewItemIterator it( d->ui->mAvailableView );
- bool showAll = false;
-
- if ( txt.isEmpty() )
- showAll = true;
-
- int personalVisible = 0;
- int recentVisible = 0;
- while ( it.current() ) {
- AddresseeViewItem* item = static_cast<AddresseeViewItem*>( it.current() );
- ++it;
-
- if ( showAll ) {
- item->setOpen( true );
- item->setVisible( true );
- // allen: I do not like the following behavior. comment out and see if anyone screams
- //if ( item->category() == AddresseeViewItem::Group )
- // item->setOpen( false );//close to not have too many entries
- continue;
- }
-
- if ( item->category() == AddresseeViewItem::Entry ) {
- bool matches = item->matches( txt );
- item->setVisible( matches );
- TQListViewItem *parent = static_cast<TQListViewItem*>( item )->parent();
- if ( matches && parent ) {
- if ( parent == d->personal ) {
- personalVisible++;
- } else if ( parent == d->recent ) {
- recentVisible++;
- }
- }
- }
- if ( item->category() == AddresseeViewItem::Group ) {
- item->setOpen( true );
- item->setVisible( true );
- }
- }
-
- if ( !showAll && personalVisible == 0 ) {
- d->personal->setOpen( false );
- d->personal->setVisible( false );
- }
- if ( !showAll && recentVisible == 0 ) {
- d->recent->setOpen( false );
- d->recent->setVisible( false );
- }
-
- int distlistgroupVisible = 0;
- if ( !showAll ) {
- TQPtrListIterator<AddresseeViewItem> it( d->dists );
- for ( ; it.current(); ++it ) {
- TQListViewItem *p = *it;
- p->setVisible( true );
- AddresseeViewItem *p2 = static_cast<AddresseeViewItem*>( p->firstChild() );
- int pcount = 0;
- while ( p2 ) {
- if ( p2->matches( txt ) ) {
- p2->setVisible( true );
- pcount++;
- } else {
- p2->setVisible( false );
- }
- p2 = static_cast<AddresseeViewItem*>( p2->nextSibling() );
- }
- if ( !pcount && !p->text( 0 ).contains( txt, false ) ) {
- p->setVisible( false );
- }
- distlistgroupVisible += pcount;
- if ( p->text( 0 ).contains( txt, false ) ) {
- distlistgroupVisible++;
- }
- }
- }
- if ( d->topdist ) {
- if ( showAll || distlistgroupVisible > 0 ) {
- d->topdist->setOpen( true );
- } else {
- d->topdist->setOpen( false );
- d->topdist->setVisible( false );
- }
- }
-}
-
-KABC::Addressee::List
-AddressesDialog::allAddressee( KListView* view, bool onlySelected ) const
-{
- KABC::Addressee::List lst;
- TQListViewItemIterator it( view );
- while ( it.current() ) {
- AddresseeViewItem* item = static_cast<AddresseeViewItem*>( it.current() );
- if ( !onlySelected || item->isSelected() ) {
- if ( item->category() != AddresseeViewItem::Entry ) {
- AddresseeViewItem *myChild = static_cast<AddresseeViewItem*>( item->firstChild() );
- while( myChild ) {
- lst.append( myChild->addressee() );
- myChild = static_cast<AddresseeViewItem*>( myChild->nextSibling() );
- }
- } else {
- lst.append( item->addressee() );
- }
- }
- ++it;
- }
-
- return lst;
-}
-
-KABC::Addressee::List
-AddressesDialog::allAddressee( AddresseeViewItem* parent ) const
-{
- KABC::Addressee::List lst;
-
- if ( !parent ) return lst;
-
- if ( parent->category() == AddresseeViewItem::Entry )
- {
- lst.append( parent->addressee() );
- return lst;
- }
-
- AddresseeViewItem *myChild = static_cast<AddresseeViewItem*>( parent->firstChild() );
- while( myChild ) {
- if ( myChild->category() == AddresseeViewItem::FilledGroup )
- lst += myChild->addresses();
- else if ( !myChild->addressee().isEmpty() )
- lst.append( myChild->addressee() );
- myChild = static_cast<AddresseeViewItem*>( myChild->nextSibling() );
- }
-
- return lst;
-}
-
-TQStringList
-AddressesDialog::allDistributionLists( AddresseeViewItem* parent ) const
-{
- TQStringList lists;
-
- if ( !parent )
- return TQStringList();
-
- AddresseeViewItem *item = static_cast<AddresseeViewItem*>( parent->firstChild() );
- while ( item ) {
- if ( item->category() == AddresseeViewItem::DistList && !item->name().isEmpty() )
- lists.append( item->name() );
-
- item = static_cast<AddresseeViewItem*>( item->nextSibling() );
- }
-
- return lists;
-}
-
-void
-AddressesDialog::addDistributionLists()
-{
- KABC::AddressBook* abook = KABC::StdAddressBook::self( true );
-
-#ifdef KDEPIM_NEW_DISTRLISTS
- const TQValueList<KPIM::DistributionList> distLists =
- KPIM::DistributionList::allDistributionLists( abook );
-#else
- KABC::DistributionListManager manager( abook );
- manager.load();
-
- TQStringList distLists = manager.listNames();
-#endif
-
- if ( distLists.isEmpty() )
- return;
-
- if ( !d->topdist ) {
- d->topdist = new AddresseeViewItem( d->ui->mAvailableView, i18n( "Distribution Lists" ) );
- }
-
-#ifdef KDEPIM_NEW_DISTRLISTS
- TQValueList<KPIM::DistributionList>::ConstIterator listIt;
-#else
- TQStringList::Iterator listIt;
-#endif
- int total = 0;
- for ( listIt = distLists.begin(); listIt != distLists.end(); ++listIt ) {
-#ifdef KDEPIM_NEW_DISTRLISTS
- KPIM::DistributionList dlist = *listIt;
- KPIM::DistributionList::Entry::List entries = dlist.entries(abook);
-#else
- KABC::DistributionList& dlist = *manager.list( *listIt );
- KABC::DistributionList::Entry::List entries = dlist.entries();
-#endif
-
- AddresseeViewItem *item = new AddresseeViewItem( d->topdist, dlist.name() );
- d->dists.append( item );
- connect( item, TQT_SIGNAL( addressSelected( AddresseeViewItem*, bool ) ),
- this, TQT_SLOT( availableAddressSelected( AddresseeViewItem*, bool ) ) );
-
-#ifdef KDEPIM_NEW_DISTRLISTS
- KPIM::DistributionList::Entry::List::Iterator itemIt;
-#else
- KABC::DistributionList::Entry::List::Iterator itemIt;
-#endif
- for ( itemIt = entries.begin(); itemIt != entries.end(); ++itemIt ) {
- addAddresseeToAvailable( (*itemIt).addressee, item, false );
- }
- if ( item->childCount() > 0 ) {
- item->setOpen( true );
- item->setVisible( true );
- }
- total += item->childCount();
- }
- if ( total > 0 ) {
- d->topdist->setOpen( true );
- d->topdist->setVisible( true );
- }
-}
-
-} // namespace
-
-#include "addressesdialog.moc"