summaryrefslogtreecommitdiffabout
path: root/kabc
Unidiff
Diffstat (limited to 'kabc') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addresseedialog.cpp73
-rw-r--r--kabc/addresseedialog.h5
2 files changed, 52 insertions, 26 deletions
diff --git a/kabc/addresseedialog.cpp b/kabc/addresseedialog.cpp
index 033e857..cb6c12f 100644
--- a/kabc/addresseedialog.cpp
+++ b/kabc/addresseedialog.cpp
@@ -30,125 +30,137 @@
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 )
@@ -161,46 +173,59 @@ void AddresseeDialog::selectItem( const QString &str )
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();
diff --git a/kabc/addresseedialog.h b/kabc/addresseedialog.h
index 74e7871..99c74bd 100644
--- a/kabc/addresseedialog.h
+++ b/kabc/addresseedialog.h
@@ -120,39 +120,40 @@ class AddresseeDialog : public KDialogBase
120 120
121 /** 121 /**
122 Select multiple address book entries. 122 Select multiple address book entries.
123 123
124 Open addressee select dialog and return the entries selected by the user. 124 Open addressee select dialog and return the entries selected by the user.
125 If the user doesn't select an entry or presses cancel, the returned 125 If the user doesn't select an entry or presses cancel, the returned
126 addressee list is empty. 126 addressee list is empty.
127 */ 127 */
128 static Addressee::List getAddressees( QWidget *parent ); 128 static Addressee::List getAddressees( QWidget *parent );
129 129
130 private slots: 130 private slots:
131 void selectItem( const QString & ); 131 void selectItem( const QString & );
132 void selectNextItem( QListViewItem *item );
132 void updateEdit( QListViewItem *item ); 133 void updateEdit( QListViewItem *item );
133 void addSelected( QListViewItem *item ); 134 void addSelected( QListViewItem *item );
134 void removeSelected(); 135 void removeSelected();
136 void loadAddressBook();
135 137
136 protected slots: 138 protected slots:
137 void addressBookChanged(); 139 void addressBookChanged();
138 140
139 private: 141 private:
140 void loadAddressBook();
141 void addCompletionItem( const QString &str, QListViewItem *item ); 142 void addCompletionItem( const QString &str, QListViewItem *item );
142 143
143 bool mMultiple; 144 bool mMultiple;
144 145
145 KListView *mAddresseeList; 146 KListView *mAddresseeList;
146 KLineEdit *mAddresseeEdit; 147 QLineEdit *mAddresseeEdit;
147 148
148 KListView *mSelectedList; 149 KListView *mSelectedList;
149 150
150 AddressBook *mAddressBook; 151 AddressBook *mAddressBook;
151 152
152 QDict<QListViewItem> mItemDict; 153 QDict<QListViewItem> mItemDict;
153 QDict<QListViewItem> mSelectedDict; 154 QDict<QListViewItem> mSelectedDict;
154 155
155 class AddresseeDialogPrivate; 156 class AddresseeDialogPrivate;
156 AddresseeDialogPrivate *d; 157 AddresseeDialogPrivate *d;
157}; 158};
158 159