addresseedialog.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
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
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 }
This file is part of the documentation for kdelibs Version 3.1.5.