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 mAddresseeEdit->completionObject()->setIgnoreCase( true ); 00085 listLayout->addWidget( mAddresseeEdit ); 00086 00087 if ( mMultiple ) { 00088 QBoxLayout *selectedLayout = new QVBoxLayout; 00089 topLayout->addLayout( selectedLayout ); 00090 topLayout->setSpacing( spacingHint() ); 00091 // selectedLayout->addSpacing( spacingHint() ); 00092 00093 QGroupBox *selectedGroup = new QGroupBox( 1, Horizontal, i18n("Selected"), 00094 topWidget ); 00095 selectedLayout->addWidget( selectedGroup ); 00096 00097 mSelectedList = new KListView( selectedGroup ); 00098 mSelectedList->addColumn( i18n("Name") ); 00099 mSelectedList->addColumn( i18n("Email") ); 00100 connect( mSelectedList, SIGNAL( doubleClicked( QListViewItem * ) ), 00101 SLOT( removeSelected() ) ); 00102 00103 QPushButton *unselectButton = new QPushButton( i18n("Unselect"), selectedGroup ); 00104 connect ( unselectButton, SIGNAL( clicked() ), SLOT( removeSelected() ) ); 00105 00106 connect( mAddresseeList, SIGNAL( clicked( QListViewItem * ) ), 00107 SLOT( addSelected( QListViewItem * ) ) ); 00108 } 00109 00110 mAddressBook = StdAddressBook::self(); 00111 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook* ) ), SLOT( addressBookChanged() ) ); 00112 00113 loadAddressBook(); 00114 } 00115 00116 AddresseeDialog::~AddresseeDialog() 00117 { 00118 } 00119 00120 void AddresseeDialog::loadAddressBook() 00121 { 00122 mAddresseeList->clear(); 00123 mItemDict.clear(); 00124 mAddresseeEdit->completionObject()->clear(); 00125 00126 AddressBook::Iterator it; 00127 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { 00128 AddresseeItem *item = new AddresseeItem( mAddresseeList, (*it) ); 00129 addCompletionItem( (*it).realName(), item ); 00130 addCompletionItem( (*it).preferredEmail(), item ); 00131 } 00132 } 00133 00134 void AddresseeDialog::addCompletionItem( const QString &str, QListViewItem *item ) 00135 { 00136 if ( str.isEmpty() ) return; 00137 00138 mItemDict.insert( str, item ); 00139 mAddresseeEdit->completionObject()->addItem( str ); 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 kabc Library Version 3.2.3.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Mon Aug 30 22:56:00 2004 by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2003