summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-09-03 19:28:45 (UTC)
committer zautrix <zautrix>2004-09-03 19:28:45 (UTC)
commit7b3148175ea540f0d7b4bc79e05dd52f2cd47771 (patch) (unidiff)
tree5194240a1015a7fe9bab697233965dd807c464fd
parent14399c0c21955d30b2d69684e0cf11edb9fd9b63 (diff)
downloadkdepimpi-7b3148175ea540f0d7b4bc79e05dd52f2cd47771.zip
kdepimpi-7b3148175ea540f0d7b4bc79e05dd52f2cd47771.tar.gz
kdepimpi-7b3148175ea540f0d7b4bc79e05dd52f2cd47771.tar.bz2
Made addressee select dialog useable
Diffstat (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
@@ -10,217 +10,242 @@
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() );
diff --git a/kabc/addresseedialog.h b/kabc/addresseedialog.h
index 74e7871..99c74bd 100644
--- a/kabc/addresseedialog.h
+++ b/kabc/addresseedialog.h
@@ -100,61 +100,62 @@ class AddresseeDialog : public KDialogBase
100 /** 100 /**
101 Return the address chosen. 101 Return the address chosen.
102 102
103 If it is a multiple select, this will return only the first address chosen 103 If it is a multiple select, this will return only the first address chosen
104 */ 104 */
105 Addressee addressee(); 105 Addressee addressee();
106 106
107 /** 107 /**
108 Return the list of addresses chosen 108 Return the list of addresses chosen
109 */ 109 */
110 Addressee::List addressees(); 110 Addressee::List addressees();
111 111
112 /** 112 /**
113 Select a single address book entry. 113 Select a single address book entry.
114 114
115 Open addressee select dialog and return the entry selected by the user. 115 Open addressee select dialog and return the entry selected by the user.
116 If the user doesn't select an entry or presses cancel, the returned 116 If the user doesn't select an entry or presses cancel, the returned
117 addressee is empty. 117 addressee is empty.
118 */ 118 */
119 static Addressee getAddressee( QWidget *parent ); 119 static Addressee getAddressee( QWidget *parent );
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
159} 160}
160#endif 161#endif