21#include "addresseedialog.h"
22#ifndef KDEPIM_NO_KRESOURCES
23#include "stdaddressbook.h"
27#include <klocalizedstring.h>
29#include <QtCore/QPointer>
30#include <QtCore/QRegExp>
37class AddresseeItem::Private
44 QTreeWidgetItem( parent ), d( new Private )
64 if ( column ==
Email ) {
65 QString value = text(
Email );
66 const QRegExp emailRe( QLatin1String(
"<\\S*>" ) );
67 int match = emailRe.indexIn( value );
69 value = value.mid( match + 1, emailRe.matchedLength() - 2 );
72 return value.toLower();
75 return text( column ).toLower();
78class AddresseeDialog::Private
81 Private(
bool multiple )
82 : mMultiple( multiple )
86 void addressBookChanged();
87 void selectItem(
const QString & );
89 void addSelected( QTreeWidgetItem *item );
90 void removeSelected();
92 void loadAddressBook();
93 void addCompletionItem(
const QString &str, QTreeWidgetItem *item );
97 QTreeWidget *mAddresseeList;
98 KLineEdit *mAddresseeEdit;
100 QTreeWidget *mSelectedList;
102#ifndef KDEPIM_NO_KRESOURCES
106 QHash<QString, QTreeWidgetItem*> mItemDict;
107 QHash<QString, QTreeWidgetItem*> mSelectedDict;
111 : KDialog( parent ), d( new Private( multiple ) )
113 setCaption( i18nc(
"@title:window",
"Select Addressee" ) );
114 setButtons( Ok | Cancel );
115 setDefaultButton( Ok );
117 QWidget *topWidget =
new QWidget(
this );
118 setMainWidget( topWidget );
120 QBoxLayout *topLayout =
new QHBoxLayout( topWidget );
121 QBoxLayout *listLayout =
new QVBoxLayout;
122 topLayout->addLayout( listLayout );
124 d->mAddresseeList =
new QTreeWidget( topWidget );
125 d->mAddresseeList->setColumnCount( 2 );
126 QStringList headerTitles;
127 headerTitles << i18nc(
"@title:column addressee name",
"Name" )
128 << i18nc(
"@title:column addressee email",
"Email" );
129 d->mAddresseeList->setHeaderItem(
new QTreeWidgetItem( headerTitles ) );
130 listLayout->addWidget( d->mAddresseeList );
131 connect( d->mAddresseeList, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,
int)),
133 connect( d->mAddresseeList, SIGNAL(itemSelectionChanged()),
134 SLOT(updateEdit()) );
136 d->mAddresseeEdit =
new KLineEdit( topWidget );
137 d->mAddresseeEdit->setCompletionMode( KGlobalSettings::CompletionAuto );
138 connect( d->mAddresseeEdit->completionObject(), SIGNAL(match(QString)),
139 SLOT(selectItem(QString)) );
140 d->mAddresseeEdit->setFocus();
141 d->mAddresseeEdit->completionObject()->setIgnoreCase(
true );
142 listLayout->addWidget( d->mAddresseeEdit );
144 setInitialSize( QSize( 450, 300 ) );
146 if ( d->mMultiple ) {
147 QBoxLayout *selectedLayout =
new QVBoxLayout;
148 topLayout->addLayout( selectedLayout );
150 QGroupBox *selectedGroup =
151 new QGroupBox( i18nc(
"@title:group selected addressees",
"Selected" ), topWidget );
152 QHBoxLayout *groupLayout =
new QHBoxLayout;
153 selectedGroup->setLayout( groupLayout );
154 selectedLayout->addWidget( selectedGroup );
156 d->mSelectedList =
new QTreeWidget( selectedGroup );
157 groupLayout->addWidget( d->mSelectedList );
158 d->mSelectedList->setColumnCount( 2 );
159 QStringList headerTitles;
160 headerTitles << i18nc(
"@title:column addressee name",
"Name" )
161 << i18nc(
"@title:column addressee email",
"Email" );
162 d->mSelectedList->setHeaderItem(
new QTreeWidgetItem( headerTitles ) );
164 connect( d->mSelectedList, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,
int)),
165 SLOT(removeSelected()) );
167 QPushButton *unselectButton =
168 new QPushButton( i18nc(
"@action:button unselect addressee",
"Unselect" ), selectedGroup );
169 selectedLayout->addWidget( unselectButton );
170 connect( unselectButton, SIGNAL(clicked()), SLOT(removeSelected()) );
172 connect( d->mAddresseeList, SIGNAL(itemClicked(QTreeWidgetItem*,
int)),
173 SLOT(addSelected(QTreeWidgetItem*)) );
175 setInitialSize( QSize( 650, 350 ) );
178#ifndef KDEPIM_NO_KRESOURCES
180 connect( d->mAddressBook, SIGNAL(addressBookChanged(
AddressBook*)),
181 SLOT(addressBookChanged()) );
182 connect( d->mAddressBook, SIGNAL(loadingFinished(
Resource*)),
183 SLOT(addressBookChanged()) );
186 d->loadAddressBook();
198 if ( d->mMultiple ) {
199 aItem =
dynamic_cast<AddresseeItem *
>( d->mSelectedList->topLevelItem( 0 ) );
201 QList<QTreeWidgetItem*> selected = d->mAddresseeList->selectedItems();
202 if ( !selected.isEmpty() ) {
218 if ( d->mMultiple ) {
219 const int numberOfTopItem( d->mSelectedList->topLevelItemCount() );
220 for (
int i = 0; i < numberOfTopItem; ++i ) {
221 aItem =
dynamic_cast<AddresseeItem *
>( d->mSelectedList->topLevelItem( i ) );
227 QList<QTreeWidgetItem*> selected = d->mAddresseeList->selectedItems();
228 if ( !selected.isEmpty() ) {
244 if ( dlg->exec() && dlg ) {
245 contact = dlg->addressee();
258 if ( dlg->exec() && dlg ) {
259 contacts = dlg->addressees();
267void AddresseeDialog::Private::loadAddressBook()
269 mAddresseeList->clear();
271 mAddresseeEdit->completionObject()->clear();
273#ifndef KDEPIM_NO_KRESOURCES
275 for ( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) {
277 addCompletionItem( ( *it ).realName(), item );
278 addCompletionItem( ( *it ).preferredEmail(), item );
283void AddresseeDialog::Private::addCompletionItem(
const QString &str, QTreeWidgetItem *item )
285 if ( str.isEmpty() ) {
289 mItemDict.insert( str, item );
290 mAddresseeEdit->completionObject()->addItem( str );
293void AddresseeDialog::Private::selectItem(
const QString &str )
295 if ( str.isEmpty() ) {
299 QTreeWidgetItem *item = mItemDict.value( str, 0 );
301 mAddresseeList->blockSignals(
true );
302 mAddresseeList->setItemSelected( item,
true );
303 mAddresseeList->scrollToItem( item );
304 mAddresseeList->blockSignals(
false );
308void AddresseeDialog::Private::updateEdit()
310 QList<QTreeWidgetItem*> selected = mAddresseeList->selectedItems();
311 if ( selected.isEmpty() ) {
314 QTreeWidgetItem *item = selected.at( 0 );
315 mAddresseeEdit->setText( item->text( 0 ) );
316 mAddresseeEdit->setSelection( 0, item->text( 0 ).length() );
319void AddresseeDialog::Private::addSelected( QTreeWidgetItem *item )
328 QTreeWidgetItem *selectedItem = mSelectedDict.value( a.
uid(), 0 );
329 if ( !selectedItem ) {
331 mSelectedDict.insert( a.
uid(), selectedItem );
335void AddresseeDialog::Private::removeSelected()
337 QList<QTreeWidgetItem*> selected = mSelectedList->selectedItems();
338 if ( selected.isEmpty() ) {
350void AddresseeDialog::Private::addressBookChanged()
355#include "moc_addresseedialog.cpp"
Dialog for selecting address book entries.
static Addressee getAddressee(QWidget *parent)
Select a single address book entry.
AddresseeDialog(QWidget *parent=0, bool multiple=false)
Construct addressbook entry select dialog.
virtual ~AddresseeDialog()
Destructor.
static Addressee::List getAddressees(QWidget *parent)
Select multiple address book entries.
Addressee::List addressees() const
Return the list of addresses chosen.
Addressee addressee() const
Return the address chosen.
Special ListViewItem, that is used by the AddresseeDialog.
virtual QString key(int column, bool ascending) const
Method used by QListView to sort the items.
~AddresseeItem()
Destroys the item.
Addressee addressee() const
Returns the addressee.
AddresseeItem(QTreeWidget *parent, const Addressee &addressee)
Constructor.
a QValueList of Addressee, with sorting functionality
QString preferredEmail() const
Return preferred email address.
QString realName() const
Return the name of the addressee.
QString uid() const
Return unique identifier.
static StdAddressBook * self()
Returns the standard addressbook object.
Class that holds a Calendar Url (FBURL/CALADRURI/CALURI)