summaryrefslogtreecommitdiffabout
path: root/kabc/addresseedialog.cpp
Unidiff
Diffstat (limited to 'kabc/addresseedialog.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addresseedialog.cpp73
1 files changed, 49 insertions, 24 deletions
diff --git a/kabc/addresseedialog.cpp b/kabc/addresseedialog.cpp
index 033e857..cb6c12f 100644
--- a/kabc/addresseedialog.cpp
+++ b/kabc/addresseedialog.cpp
@@ -1,264 +1,289 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21#include <qlayout.h> 21#include <qlayout.h>
22#include <qpushbutton.h> 22#include <qpushbutton.h>
23#include <qgroupbox.h> 23#include <qgroupbox.h>
24#include <qapplication.h> 24#include <qapplication.h>
25#include <qregexp.h> 25#include <qregexp.h>
26 26
27#include <klocale.h> 27#include <klocale.h>
28#include <kdebug.h> 28#include <kdebug.h>
29#include <kglobalsettings.h> 29#include <kglobalsettings.h>
30 30
31#include "stdaddressbook.h" 31#include "stdaddressbook.h"
32 32
33#include "addresseedialog.h" 33#include "addresseedialog.h"
34//#include "addresseedialog.moc" 34//#include "addresseedialog.moc"
35 35
36using namespace KABC; 36using namespace KABC;
37 37
38AddresseeItem::AddresseeItem( QListView *parent, const Addressee &addressee ) : 38AddresseeItem::AddresseeItem( QListView *parent, const Addressee &addressee ) :
39 QListViewItem( parent ), 39 QListViewItem( parent ),
40 mAddressee( addressee ) 40 mAddressee( addressee )
41{ 41{
42 setText( Name, addressee.realName() ); 42 QString name = addressee.familyName()+", "+ addressee.givenName();
43 setText( Email, addressee.preferredEmail() ); 43 if ( name.length() == 2 )
44 name = addressee.realName();
45 setText( Name,name);
46 setText( Email, addressee.preferredEmail() );
44} 47}
45 48
46QString AddresseeItem::key( int column, bool ) const 49QString AddresseeItem::key( int column, bool ) const
47{ 50{
48 /* LR 51
49 if (column == Email) { 52 if (column == Email) {
50 QString value = text(Email); 53 QString value = text(Email);
51 QRegExp emailRe("<\\S*>"); 54 int val = value.findRev("@");
52 int match = emailRe.search(value); 55 return value.mid( val) + value.left( val );
53 if (match > -1)
54 value = value.mid(match + 1, emailRe.matchedLength() - 2);
55
56 return value.lower();
57 } 56 }
58 */
59 return text(column).lower(); 57 return text(column).lower();
60} 58}
61 59
62AddresseeDialog::AddresseeDialog( QWidget *parent, bool multiple ) : 60AddresseeDialog::AddresseeDialog( QWidget *parent, bool multiple ) :
63 KDialogBase( KDialogBase::Plain, i18n("Select Addressee"), 61 KDialogBase( KDialogBase::Plain, i18n("Select Addressee"),
64 Ok|Cancel, Ok, parent ), mMultiple( multiple ) 62 Ok|Cancel, Ok, parent ), mMultiple( multiple )
65{ 63{
66 QWidget *topWidget = plainPage(); 64 QWidget *topWidget = plainPage();
67 65
68 QBoxLayout *topLayout = new QHBoxLayout( topWidget ); 66 QBoxLayout *topLayout = new QHBoxLayout( topWidget );
69 QBoxLayout *listLayout = new QVBoxLayout; 67 QBoxLayout *listLayout = new QVBoxLayout;
70 topLayout->addLayout( listLayout ); 68 topLayout->addLayout( listLayout );
71 69
72 mAddresseeList = new KListView( topWidget ); 70 mAddresseeList = new KListView( topWidget );
73 mAddresseeList->addColumn( i18n("Name") ); 71 mAddresseeList->addColumn( i18n("Name") );
74 mAddresseeList->addColumn( i18n("Email") ); 72 mAddresseeList->addColumn( i18n("Email") );
75 mAddresseeList->setAllColumnsShowFocus( true ); 73 mAddresseeList->setAllColumnsShowFocus( true );
76 mAddresseeList->setFullWidth( true ); 74 mAddresseeList->setFullWidth( true );
77 listLayout->addWidget( mAddresseeList ); 75 listLayout->addWidget( mAddresseeList );
78 connect( mAddresseeList, SIGNAL( doubleClicked( QListViewItem * ) ), 76 connect( mAddresseeList, SIGNAL( doubleClicked( QListViewItem * ) ),
79 SLOT( slotOk() ) ); 77 SLOT( slotOk() ) );
80 connect( mAddresseeList, SIGNAL( selectionChanged( QListViewItem * ) ),
81 SLOT( updateEdit( QListViewItem * ) ) );
82 78
83 mAddresseeEdit = new KLineEdit( topWidget ); 79 mAddresseeEdit = new QLineEdit( topWidget );
84 //mAddresseeEdit->setCompletionMode( KGlobalSettings::CompletionAuto ); 80 connect( mAddresseeEdit, SIGNAL( returnPressed() ),
85 // connect( mAddresseeEdit->completionObject(), SIGNAL( match( const QString & ) ), 81 SLOT( loadAddressBook() ) );
86 // SLOT( selectItem( const QString & ) ) );
87 mAddresseeEdit->setFocus(); 82 mAddresseeEdit->setFocus();
88 //mAddresseeEdit->completionObject()->setIgnoreCase( true ); 83
89 listLayout->addWidget( mAddresseeEdit ); 84 listLayout->addWidget( mAddresseeEdit );
90 85
91 //setInitialSize( QSize( 450, 300 ) );
92
93 if ( mMultiple ) { 86 if ( mMultiple ) {
94 QBoxLayout *selectedLayout = new QVBoxLayout; 87 QBoxLayout *selectedLayout = new QVBoxLayout;
95 topLayout->addLayout( selectedLayout ); 88 topLayout->addLayout( selectedLayout );
96 topLayout->setSpacing( spacingHint() ); 89 topLayout->setSpacing( spacingHint() );
97 90
98 QGroupBox *selectedGroup = new QGroupBox( 1, Horizontal, i18n("Selected"), 91 QGroupBox *selectedGroup = new QGroupBox( 1, Horizontal, i18n("Selected"),
99 topWidget ); 92 topWidget );
100 selectedLayout->addWidget( selectedGroup ); 93 selectedLayout->addWidget( selectedGroup );
101 94
102 mSelectedList = new KListView( selectedGroup ); 95 mSelectedList = new KListView( selectedGroup );
103 mSelectedList->addColumn( i18n("Name") ); 96 mSelectedList->addColumn( i18n("Name") );
104 mSelectedList->addColumn( i18n("Email") ); 97 mSelectedList->addColumn( i18n("Email") );
105 mSelectedList->setAllColumnsShowFocus( true ); 98 mSelectedList->setAllColumnsShowFocus( true );
106 mSelectedList->setFullWidth( true ); 99 mSelectedList->setFullWidth( true );
107 connect( mSelectedList, SIGNAL( doubleClicked( QListViewItem * ) ), 100 connect( mSelectedList, SIGNAL( doubleClicked( QListViewItem * ) ),
108 SLOT( removeSelected() ) ); 101 SLOT( removeSelected() ) );
109 102
110 QPushButton *unselectButton = new QPushButton( i18n("Unselect"), selectedGroup ); 103 QPushButton *unselectButton = new QPushButton( i18n("Unselect"), selectedGroup );
111 connect ( unselectButton, SIGNAL( clicked() ), SLOT( removeSelected() ) ); 104 connect ( unselectButton, SIGNAL( clicked() ), SLOT( removeSelected() ) );
112 105
113 connect( mAddresseeList, SIGNAL( clicked( QListViewItem * ) ), 106 connect( mAddresseeList, SIGNAL( clicked( QListViewItem * ) ),
114 SLOT( addSelected( QListViewItem * ) ) ); 107 SLOT( addSelected( QListViewItem * ) ) );
108 connect( mAddresseeList, SIGNAL( returnPressed( QListViewItem * ) ),
109 SLOT( selectNextItem( QListViewItem * ) ) );
115 110
116 // setInitialSize( QSize( 650, 350 ) );
117 } 111 }
118 112
119 mAddressBook = StdAddressBook::self( true ); 113 mAddressBook = StdAddressBook::self( true );
120 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook* ) ), 114 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook* ) ),
121 SLOT( addressBookChanged() ) ); 115 SLOT( addressBookChanged() ) );
122 connect( mAddressBook, SIGNAL( loadingFinished( Resource* ) ), 116 connect( mAddressBook, SIGNAL( loadingFinished( Resource* ) ),
123 SLOT( addressBookChanged() ) ); 117 SLOT( addressBookChanged() ) );
124 118
125 loadAddressBook(); 119 loadAddressBook();
126} 120}
127 121
128AddresseeDialog::~AddresseeDialog() 122AddresseeDialog::~AddresseeDialog()
129{ 123{
130} 124}
131 125
132void AddresseeDialog::loadAddressBook() 126void AddresseeDialog::loadAddressBook()
133{ 127{
134 mAddresseeList->clear(); 128 mAddresseeList->clear();
135 mItemDict.clear(); 129 mItemDict.clear();
130 if ( mAddresseeEdit->text().isEmpty() ) {
131 AddressBook::Iterator it;
132 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) {
133 new AddresseeItem( mAddresseeList, (*it) );
134 }
135 return;
136 }
136 //mAddresseeEdit->completionObject()->clear(); 137 //mAddresseeEdit->completionObject()->clear();
138 QRegExp re;
139 re.setWildcard(true); // most people understand these better.
140 re.setCaseSensitive(false);
141 re.setPattern( "*"+ mAddresseeEdit->text() + "*");
137 142
138 AddressBook::Iterator it; 143 AddressBook::Iterator it;
139 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { 144 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) {
140 AddresseeItem *item = new AddresseeItem( mAddresseeList, (*it) ); 145 QString name = (*it).familyName()+", "+ (*it).givenName();
141 addCompletionItem( (*it).realName(), item ); 146 if ( name.length() == 2 )
142 addCompletionItem( (*it).preferredEmail(), item ); 147 name = (*it).realName();
148 name += (*it).preferredEmail();
149#if QT_VERSION >= 300
150 if (re.search(name)) != -1)
151#else
152 if (re.match(name) != -1)
153#endif
154 AddresseeItem *item = new AddresseeItem( mAddresseeList, (*it) );
143 } 155 }
144} 156}
145 157
146void AddresseeDialog::addCompletionItem( const QString &str, QListViewItem *item ) 158void AddresseeDialog::addCompletionItem( const QString &str, QListViewItem *item )
147{ 159{
148 if ( str.isEmpty() ) return; 160 if ( str.isEmpty() ) return;
149 161
150 mItemDict.insert( str, item ); 162 mItemDict.insert( str, item );
151 //mAddresseeEdit->completionObject()->addItem( str ); 163 //mAddresseeEdit->completionObject()->addItem( str );
152} 164}
153 165
154void AddresseeDialog::selectItem( const QString &str ) 166void AddresseeDialog::selectItem( const QString &str )
155{ 167{
156 if ( str.isEmpty() ) return; 168 if ( str.isEmpty() ) return;
157 169
158 QListViewItem *item = mItemDict.find( str ); 170 QListViewItem *item = mItemDict.find( str );
159 if ( item ) { 171 if ( item ) {
160 mAddresseeList->blockSignals( true ); 172 mAddresseeList->blockSignals( true );
161 mAddresseeList->setSelected( item, true ); 173 mAddresseeList->setSelected( item, true );
162 mAddresseeList->ensureItemVisible( item ); 174 mAddresseeList->ensureItemVisible( item );
163 mAddresseeList->blockSignals( false ); 175 mAddresseeList->blockSignals( false );
164 } 176 }
165} 177}
166 178
167void AddresseeDialog::updateEdit( QListViewItem *item ) 179void AddresseeDialog::updateEdit( QListViewItem *item )
168{ 180{
169 mAddresseeEdit->setText( item->text( 0 ) ); 181 mAddresseeEdit->setText( item->text( 0 ) );
170 mAddresseeEdit->setSelection( 0, item->text( 0 ).length() ); 182 mAddresseeEdit->setSelection( 0, item->text( 0 ).length() );
171} 183}
172 184
185void AddresseeDialog::selectNextItem( QListViewItem *item )
186{
187 addSelected( item );
188 QListViewItem *next = item->nextSibling();
189 if ( next ) {
190 next->setSelected( true );
191 item->setSelected( false );
192 mAddresseeList->setCurrentItem( next );
193 }
194}
173void AddresseeDialog::addSelected( QListViewItem *item ) 195void AddresseeDialog::addSelected( QListViewItem *item )
174{ 196{
175 AddresseeItem *addrItem = (AddresseeItem *)( item ); 197 AddresseeItem *addrItem = (AddresseeItem *)( item );
176 if ( !addrItem ) return; 198 if ( !addrItem ) return;
177 199
178 Addressee a = addrItem->addressee(); 200 Addressee a = addrItem->addressee();
179 201
180 QListViewItem *selectedItem = mSelectedDict.find( a.uid() ); 202 QListViewItem *selectedItem = mSelectedDict.find( a.uid() );
181 if ( !selectedItem ) { 203 if ( !selectedItem ) {
182 selectedItem = new AddresseeItem( mSelectedList, a ); 204 selectedItem = new AddresseeItem( mSelectedList, a );
183 mSelectedDict.insert( a.uid(), selectedItem ); 205 mSelectedDict.insert( a.uid(), selectedItem );
184 } 206 }
207
185} 208}
186 209
187void AddresseeDialog::removeSelected() 210void AddresseeDialog::removeSelected()
188{ 211{
189 QListViewItem *item = mSelectedList->selectedItem(); 212 QListViewItem *item = mSelectedList->selectedItem();
190 AddresseeItem *addrItem = (AddresseeItem *)( item ); 213 AddresseeItem *addrItem = (AddresseeItem *)( item );
191 if ( !addrItem ) return; 214 if ( !addrItem ) return;
192 215 QListViewItem *next = item->nextSibling();
193 mSelectedDict.remove( addrItem->addressee().uid() ); 216 mSelectedDict.remove( addrItem->addressee().uid() );
194 delete addrItem; 217 delete addrItem;
218 if ( next )
219 next->setSelected( true );
195} 220}
196 221
197Addressee AddresseeDialog::addressee() 222Addressee AddresseeDialog::addressee()
198{ 223{
199 AddresseeItem *aItem = 0; 224 AddresseeItem *aItem = 0;
200 225
201 if ( mMultiple ) 226 if ( mMultiple )
202 aItem = (AddresseeItem *)( mSelectedList->firstChild() ); 227 aItem = (AddresseeItem *)( mSelectedList->firstChild() );
203 else 228 else
204 aItem = (AddresseeItem *)( mAddresseeList->selectedItem() ); 229 aItem = (AddresseeItem *)( mAddresseeList->selectedItem() );
205 230
206 if (aItem) return aItem->addressee(); 231 if (aItem) return aItem->addressee();
207 return Addressee(); 232 return Addressee();
208} 233}
209 234
210Addressee::List AddresseeDialog::addressees() 235Addressee::List AddresseeDialog::addressees()
211{ 236{
212 Addressee::List al; 237 Addressee::List al;
213 AddresseeItem *aItem = 0; 238 AddresseeItem *aItem = 0;
214 239
215 if ( mMultiple ) { 240 if ( mMultiple ) {
216 QListViewItem *item = mSelectedList->firstChild(); 241 QListViewItem *item = mSelectedList->firstChild();
217 while( item ) { 242 while( item ) {
218 aItem = (AddresseeItem *)( item ); 243 aItem = (AddresseeItem *)( item );
219 if ( aItem ) al.append( aItem->addressee() ); 244 if ( aItem ) al.append( aItem->addressee() );
220 item = item->nextSibling(); 245 item = item->nextSibling();
221 } 246 }
222 } 247 }
223 else 248 else
224 { 249 {
225 aItem = (AddresseeItem *)( mAddresseeList->selectedItem() ); 250 aItem = (AddresseeItem *)( mAddresseeList->selectedItem() );
226 if (aItem) al.append( aItem->addressee() ); 251 if (aItem) al.append( aItem->addressee() );
227 } 252 }
228 253
229 return al; 254 return al;
230} 255}
231 256
232Addressee AddresseeDialog::getAddressee( QWidget *parent ) 257Addressee AddresseeDialog::getAddressee( QWidget *parent )
233{ 258{
234 AddresseeDialog *dlg = new AddresseeDialog( parent ); 259 AddresseeDialog *dlg = new AddresseeDialog( parent );
235 Addressee addressee; 260 Addressee addressee;
236 int result = dlg->exec(); 261 int result = dlg->exec();
237 262
238 if ( result == QDialog::Accepted ) { 263 if ( result == QDialog::Accepted ) {
239 addressee = dlg->addressee(); 264 addressee = dlg->addressee();
240 } 265 }
241 266
242 delete dlg; 267 delete dlg;
243 return addressee; 268 return addressee;
244} 269}
245 270
246Addressee::List AddresseeDialog::getAddressees( QWidget *parent ) 271Addressee::List AddresseeDialog::getAddressees( QWidget *parent )
247{ 272{
248 AddresseeDialog *dlg = new AddresseeDialog( parent, true ); 273 AddresseeDialog *dlg = new AddresseeDialog( parent, true );
249 Addressee::List addressees; 274 Addressee::List addressees;
250 if ( QApplication::desktop()->width() <= 640 ) 275 if ( QApplication::desktop()->width() <= 640 )
251 dlg->showMaximized(); 276 dlg->showMaximized();
252 int result = dlg->exec(); 277 int result = dlg->exec();
253 if ( result == QDialog::Accepted ) { 278 if ( result == QDialog::Accepted ) {
254 addressees = dlg->addressees(); 279 addressees = dlg->addressees();
255 } 280 }
256 281
257 delete dlg; 282 delete dlg;
258 return addressees; 283 return addressees;
259} 284}
260 285
261void AddresseeDialog::addressBookChanged() 286void AddresseeDialog::addressBookChanged()
262{ 287{
263 loadAddressBook(); 288 loadAddressBook();
264} 289}