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 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
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 }