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>
33 #include <QPushButton>
37 class 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();
78 class 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();
267 void 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 );
283 void AddresseeDialog::Private::addCompletionItem(
const QString &str, QTreeWidgetItem *item )
285 if ( str.isEmpty() ) {
289 mItemDict.insert( str, item );
290 mAddresseeEdit->completionObject()->addItem( str );
293 void 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 );
308 void 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() );
319 void AddresseeDialog::Private::addSelected( QTreeWidgetItem *item )
328 QTreeWidgetItem *selectedItem = mSelectedDict.value( a.
uid(), 0 );
329 if ( !selectedItem ) {
331 mSelectedDict.insert( a.
uid(), selectedItem );
335 void AddresseeDialog::Private::removeSelected()
337 QList<QTreeWidgetItem*> selected = mSelectedList->selectedItems();
338 if ( selected.isEmpty() ) {
350 void AddresseeDialog::Private::addressBookChanged()
355 #include "moc_addresseedialog.cpp"
static Addressee::List getAddressees(QWidget *parent)
Select multiple address book entries.
Special ListViewItem, that is used by the AddresseeDialog.
a QValueList of Addressee, with sorting functionality
~AddresseeItem()
Destroys the item.
QString realName() const
Return the name of the addressee.
QString preferredEmail() const
Return preferred email address.
Addressee addressee() const
Return the address chosen.
AddresseeItem(QTreeWidget *parent, const Addressee &addressee)
Constructor.
virtual ~AddresseeDialog()
Destructor.
Addressee addressee() const
Returns the addressee.
AddresseeDialog(QWidget *parent=0, bool multiple=false)
Construct addressbook entry select dialog.
QString uid() const
Return unique identifier.
static StdAddressBook * self()
Returns the standard addressbook object.
virtual QString key(int column, bool ascending) const
Method used by QListView to sort the items.
Addressee::List addressees() const
Return the list of addresses chosen.
static Addressee getAddressee(QWidget *parent)
Select a single address book entry.