kabc Library API Documentation

addresseedialog.cpp

00001 /*
00002     This file is part of libkabc.
00003     Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
00004 
00005     This library is free software; you can redistribute it and/or
00006     modify it under the terms of the GNU Library General Public
00007     License as published by the Free Software Foundation; either
00008     version 2 of the License, or (at your option) any later version.
00009 
00010     This library is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013     Library General Public License for more details.
00014 
00015     You should have received a copy of the GNU Library General Public License
00016     along with this library; see the file COPYING.LIB.  If not, write to
00017     the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
00018     Boston, MA 02111-1307, USA.
00019 */
00020 
00021 #include <qlayout.h>
00022 #include <qpushbutton.h>
00023 #include <qgroupbox.h>
00024 #include <qregexp.h>
00025 
00026 #include <klocale.h>
00027 #include <kdebug.h>
00028 
00029 #include "stdaddressbook.h"
00030 
00031 #include "addresseedialog.h"
00032 #include "addresseedialog.moc"
00033 
00034 using namespace KABC;
00035 
00036 AddresseeItem::AddresseeItem( QListView *parent, const Addressee &addressee ) :
00037   QListViewItem( parent ),
00038   mAddressee( addressee )
00039 {
00040   setText( Name, addressee.realName() );
00041   setText( Email, addressee.preferredEmail() );
00042 }
00043 
00044 QString AddresseeItem::key( int column, bool ) const
00045 {
00046   if (column == Email) {
00047     QString value = text(Email);
00048     QRegExp emailRe("<\\S*>");
00049     int match = emailRe.search(value);
00050     if (match > -1)
00051       value = value.mid(match + 1, emailRe.matchedLength() - 2);
00052 
00053     return value.lower();
00054   }
00055 
00056   return text(column).lower();
00057 }
00058 
00059 AddresseeDialog::AddresseeDialog( QWidget *parent, bool multiple ) :
00060   KDialogBase( KDialogBase::Plain, i18n("Select Addressee"),
00061                Ok|Cancel, Ok, parent ), mMultiple( multiple )
00062 {
00063   QWidget *topWidget = plainPage();
00064 
00065   QBoxLayout *topLayout = new QHBoxLayout( topWidget );
00066   QBoxLayout *listLayout = new QVBoxLayout;
00067   topLayout->addLayout( listLayout );
00068 
00069   mAddresseeList = new KListView( topWidget );
00070   mAddresseeList->addColumn( i18n("Name") );
00071   mAddresseeList->addColumn( i18n("Email") );
00072   mAddresseeList->setAllColumnsShowFocus( true );
00073   listLayout->addWidget( mAddresseeList );
00074   connect( mAddresseeList, SIGNAL( doubleClicked( QListViewItem * ) ),
00075            SLOT( slotOk() ) );
00076   connect( mAddresseeList, SIGNAL( selectionChanged( QListViewItem * ) ),
00077            SLOT( updateEdit( QListViewItem * ) ) );
00078 
00079   mAddresseeEdit = new KLineEdit( topWidget );
00080   mAddresseeEdit->setCompletionMode( KGlobalSettings::CompletionAuto );
00081   connect( mAddresseeEdit->completionObject(), SIGNAL( match( const QString & ) ),
00082            SLOT( selectItem( const QString & ) ) );
00083   mAddresseeEdit->setFocus();
00084   listLayout->addWidget( mAddresseeEdit );
00085 
00086   if ( mMultiple ) {
00087     QBoxLayout *selectedLayout = new QVBoxLayout;
00088     topLayout->addLayout( selectedLayout );
00089     topLayout->setSpacing( spacingHint() );
00090 //    selectedLayout->addSpacing( spacingHint() );
00091 
00092     QGroupBox *selectedGroup = new QGroupBox( 1, Horizontal, i18n("Selected: "),
00093                                               topWidget );
00094     selectedLayout->addWidget( selectedGroup );
00095 
00096     mSelectedList = new KListView( selectedGroup );
00097     mSelectedList->addColumn( i18n("Name") );
00098     mSelectedList->addColumn( i18n("Email") );
00099     connect( mSelectedList, SIGNAL( doubleClicked( QListViewItem * ) ),
00100              SLOT( removeSelected() ) );
00101 
00102     QPushButton *unselectButton = new QPushButton( i18n("Unselect"), selectedGroup );
00103     connect ( unselectButton, SIGNAL( clicked() ), SLOT( removeSelected() ) );
00104 
00105     connect( mAddresseeList, SIGNAL( clicked( QListViewItem * ) ),
00106              SLOT( addSelected( QListViewItem * ) ) );
00107   }
00108 
00109   mAddressBook = StdAddressBook::self();
00110   connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook* ) ), SLOT( addressBookChanged() ) );
00111 
00112   loadAddressBook();
00113 }
00114 
00115 AddresseeDialog::~AddresseeDialog()
00116 {
00117 }
00118 
00119 void AddresseeDialog::loadAddressBook()
00120 {
00121   mAddresseeList->clear();
00122   mItemDict.clear();
00123   mAddresseeEdit->completionObject()->clear();
00124 
00125   AddressBook::Iterator it;
00126   for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) {
00127     AddresseeItem *item = new AddresseeItem( mAddresseeList, (*it) );
00128     addCompletionItem( (*it).realName(), item );
00129     addCompletionItem( (*it).preferredEmail(), item );
00130   }
00131 }
00132 
00133 void AddresseeDialog::addCompletionItem( const QString &str, QListViewItem *item )
00134 {
00135   if ( str.isEmpty() ) return;
00136 
00137   QString s = str.lower();
00138   mItemDict.insert( s, item );
00139   mAddresseeEdit->completionObject()->addItem( s );
00140 }
00141 
00142 void AddresseeDialog::selectItem( const QString &str )
00143 {
00144   if ( str.isEmpty() ) return;
00145 
00146   QListViewItem *item = mItemDict.find( str );
00147   if ( item ) {
00148     mAddresseeList->blockSignals( true );
00149     mAddresseeList->setSelected( item, true );
00150     mAddresseeList->blockSignals( false );
00151   }
00152 }
00153 
00154 void AddresseeDialog::updateEdit( QListViewItem *item )
00155 {
00156   mAddresseeEdit->setText( item->text( 0 ) );
00157   mAddresseeEdit->setSelection( 0, item->text( 0 ).length() );
00158 }
00159 
00160 void AddresseeDialog::addSelected( QListViewItem *item )
00161 {
00162   AddresseeItem *addrItem = dynamic_cast<AddresseeItem *>( item );
00163   if ( !addrItem ) return;
00164 
00165   Addressee a = addrItem->addressee();
00166 
00167   QListViewItem *selectedItem = mSelectedDict.find( a.uid() );
00168   if ( !selectedItem ) {
00169     selectedItem = new AddresseeItem( mSelectedList, a );
00170     mSelectedDict.insert( a.uid(), selectedItem );
00171   }
00172 }
00173 
00174 void AddresseeDialog::removeSelected()
00175 {
00176   QListViewItem *item = mSelectedList->selectedItem();
00177   AddresseeItem *addrItem = dynamic_cast<AddresseeItem *>( item );
00178   if ( !addrItem ) return;
00179 
00180   mSelectedDict.remove( addrItem->addressee().uid() );
00181   delete addrItem;
00182 }
00183 
00184 Addressee AddresseeDialog::addressee()
00185 {
00186   AddresseeItem *aItem = 0;
00187 
00188   if ( mMultiple )
00189     aItem = dynamic_cast<AddresseeItem *>( mSelectedList->firstChild() );
00190   else
00191     aItem = dynamic_cast<AddresseeItem *>( mAddresseeList->selectedItem() );
00192 
00193   if (aItem) return aItem->addressee();
00194   return Addressee();
00195 }
00196 
00197 Addressee::List AddresseeDialog::addressees()
00198 {
00199   Addressee::List al;
00200   AddresseeItem *aItem = 0;
00201 
00202   if ( mMultiple ) {
00203     QListViewItem *item = mSelectedList->firstChild();
00204     while( item ) {
00205       aItem = dynamic_cast<AddresseeItem *>( item );
00206       if ( aItem ) al.append( aItem->addressee() );
00207       item = item->nextSibling();
00208     }
00209   }
00210   else
00211   {
00212     aItem = dynamic_cast<AddresseeItem *>( mAddresseeList->selectedItem() );
00213     if (aItem) al.append( aItem->addressee() );
00214   }
00215 
00216   return al;
00217 }
00218 
00219 Addressee AddresseeDialog::getAddressee( QWidget *parent )
00220 {
00221   AddresseeDialog *dlg = new AddresseeDialog( parent );
00222   Addressee addressee;
00223   int result = dlg->exec();
00224 
00225   if ( result == QDialog::Accepted ) {
00226     addressee =  dlg->addressee();
00227   }
00228 
00229   delete dlg;
00230   return addressee;
00231 }
00232 
00233 Addressee::List AddresseeDialog::getAddressees( QWidget *parent )
00234 {
00235   AddresseeDialog *dlg = new AddresseeDialog( parent, true );
00236   Addressee::List addressees;
00237   int result = dlg->exec();
00238   if ( result == QDialog::Accepted ) {
00239     addressees =  dlg->addressees();
00240   }
00241 
00242   delete dlg;
00243   return addressees;
00244 }
00245 
00246 void AddresseeDialog::addressBookChanged()
00247 {
00248   loadAddressBook();
00249 }
KDE Logo
This file is part of the documentation for kdelibs Version 3.1.0.
Documentation copyright © 1996-2002 the KDE developers.
Generated on Wed Oct 8 12:22:07 2003 by doxygen 1.2.18 written by Dimitri van Heesch, © 1997-2001