summaryrefslogtreecommitdiffabout
path: root/kaddressbook/phoneeditwidget.cpp
Unidiff
Diffstat (limited to 'kaddressbook/phoneeditwidget.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/phoneeditwidget.cpp37
1 files changed, 30 insertions, 7 deletions
diff --git a/kaddressbook/phoneeditwidget.cpp b/kaddressbook/phoneeditwidget.cpp
index 19bb676..a435959 100644
--- a/kaddressbook/phoneeditwidget.cpp
+++ b/kaddressbook/phoneeditwidget.cpp
@@ -1,530 +1,553 @@
1/* 1/*
2 This file is part of KAddressBook. 2 This file is part of KAddressBook.
3 Copyright (c) 2002 Mike Pilone <mpilone@slac.com> 3 Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program 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 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#include <qlayout.h> 24#include <qlayout.h>
25#include <qlabel.h> 25#include <qlabel.h>
26#include <qtooltip.h> 26#include <qtooltip.h>
27#include <qpushbutton.h> 27#include <qpushbutton.h>
28#include <qcheckbox.h> 28#include <qcheckbox.h>
29#include <qstring.h> 29#include <qstring.h>
30#include <qlistbox.h> 30#include <qlistbox.h>
31#include <qlistview.h> 31#include <qlistview.h>
32#include <qbuttongroup.h> 32#include <qbuttongroup.h>
33 33
34#include <kbuttonbox.h> 34#include <kbuttonbox.h>
35#include <klistview.h> 35#include <klistview.h>
36#include <kapplication.h> 36#include <kapplication.h>
37#include <qapplication.h> 37#include <qapplication.h>
38#include <kconfig.h> 38#include <kconfig.h>
39#include <klineedit.h> 39#include <klineedit.h>
40#include <kcombobox.h> 40#include <kcombobox.h>
41#include <klocale.h> 41#include <klocale.h>
42#include <kdebug.h> 42#include <kdebug.h>
43#include <kglobal.h> 43#include <kglobal.h>
44#include <kiconloader.h> 44#include <kiconloader.h>
45 45
46#include <kabc/phonenumber.h> 46#include <kabc/phonenumber.h>
47 47
48#include "typecombo.h" 48#include "typecombo.h"
49 49
50#include "phoneeditwidget.h" 50#include "phoneeditwidget.h"
51 51
52PhoneEditWidget::PhoneEditWidget( QWidget *parent, const char *name ) 52PhoneEditWidget::PhoneEditWidget( QWidget *parent, const char *name )
53 : QWidget( parent, name ) 53 : QWidget( parent, name )
54{ 54{
55 QGridLayout *layout = new QGridLayout( this, 4, 1 ); 55 QGridLayout *layout = new QGridLayout( this, 4, 1 );
56//US layout->setSpacing( KDialog::spacingHint() ); 56//US layout->setSpacing( KDialog::spacingHint() );
57 layout->setSpacing( KDialogBase::spacingHintSmall() ); 57 layout->setSpacing( KDialogBase::spacingHintSmall() );
58 58
59 59
60 60
61 QLabel* label = new QLabel( this ); 61 QLabel* label = new QLabel( this );
62//US loadIcon call is ambiguous. Add one more parameter 62//US loadIcon call is ambiguous. Add one more parameter
63//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop ) ); 63//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop ) );
64 label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) ); 64 label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) );
65 label->setAlignment( AlignCenter ); 65 label->setAlignment( AlignCenter );
66//US layout->addMultiCellWidget( label, 0, 1, 3, 3 ); 66//US layout->addMultiCellWidget( label, 0, 1, 3, 3 );
67 layout->addWidget( label, 0, 0 ); 67 layout->addWidget( label, 0, 0 );
68 68
69 QPushButton *editButton = new QPushButton( i18n( "Edit Phone Numbers..." ), 69 QPushButton *editButton = new QPushButton( i18n( "Edit Phone Numbers..." ),
70 this ); 70 this );
71 if ( QApplication::desktop()->width() < 640 ) 71 if ( QApplication::desktop()->width() < 640 )
72 layout->addWidget( editButton, 0, 1 ); 72 layout->addWidget( editButton, 0, 1 );
73 else 73 else
74 layout->addMultiCellWidget( editButton, 0, 0, 1, 3); 74 layout->addMultiCellWidget( editButton, 0, 0, 1, 3);
75 75
76 mPrefCombo = new PhoneTypeCombo( mPhoneList, this ); 76 mPrefCombo = new PhoneTypeCombo( mPhoneList, this );
77 mPrefEdit = new KLineEdit( this ); 77 mPrefEdit = new KLineEdit( this );
78 //mPrefEdit->setMinimumWidth( int(mPrefEdit->sizeHint().width() * 1.5) ); 78 //mPrefEdit->setMinimumWidth( int(mPrefEdit->sizeHint().width() * 1.5) );
79 mPrefCombo->setLineEdit( mPrefEdit ); 79 mPrefCombo->setLineEdit( mPrefEdit );
80 layout->addWidget( mPrefCombo, 1, 0 ); 80 layout->addWidget( mPrefCombo, 1, 0 );
81 layout->addWidget( mPrefEdit, 1, 1 ); 81 layout->addWidget( mPrefEdit, 1, 1 );
82 int x = 1, y = 2; 82 int x = 1, y = 2;
83 if ( QApplication::desktop()->width() < 640 ) { 83 if ( QApplication::desktop()->width() < 640 ) {
84 ++x; 84 ++x;
85 y = 0; 85 y = 0;
86 } 86 }
87 mSecondCombo = new PhoneTypeCombo( mPhoneList, this ); 87 mSecondCombo = new PhoneTypeCombo( mPhoneList, this );
88 mSecondEdit = new KLineEdit( this ); 88 mSecondEdit = new KLineEdit( this );
89 mSecondCombo->setLineEdit( mSecondEdit ); 89 mSecondCombo->setLineEdit( mSecondEdit );
90 layout->addWidget( mSecondCombo, x, y++ ); 90 layout->addWidget( mSecondCombo, x, y++ );
91 layout->addWidget( mSecondEdit, x, y++ ); 91 layout->addWidget( mSecondEdit, x, y++ );
92 92
93 y = 0; 93 y = 0;
94 ++x; 94 ++x;
95 mThirdCombo = new PhoneTypeCombo( mPhoneList, this ); 95 mThirdCombo = new PhoneTypeCombo( mPhoneList, this );
96 mThirdEdit = new KLineEdit( this ); 96 mThirdEdit = new KLineEdit( this );
97 mThirdCombo->setLineEdit( mThirdEdit ); 97 mThirdCombo->setLineEdit( mThirdEdit );
98 layout->addWidget( mThirdCombo, x, y++ ); 98 layout->addWidget( mThirdCombo, x, y++ );
99 layout->addWidget( mThirdEdit, x, y++ ); 99 layout->addWidget( mThirdEdit, x, y++ );
100 if ( QApplication::desktop()->width() < 640 ) { 100 if ( QApplication::desktop()->width() < 640 ) {
101 ++x; 101 ++x;
102 y = 0; 102 y = 0;
103 } 103 }
104 mFourthCombo = new PhoneTypeCombo( mPhoneList, this ); 104 mFourthCombo = new PhoneTypeCombo( mPhoneList, this );
105 mFourthEdit = new KLineEdit( this ); 105 mFourthEdit = new KLineEdit( this );
106 mFourthCombo->setLineEdit( mFourthEdit ); 106 mFourthCombo->setLineEdit( mFourthEdit );
107 layout->addWidget( mFourthCombo, x, y++ ); 107 layout->addWidget( mFourthCombo, x, y++ );
108 layout->addWidget( mFourthEdit, x, y++ ); 108 layout->addWidget( mFourthEdit, x, y++ );
109 109
110 // Four numbers don't fit in the current dialog 110 // Four numbers don't fit in the current dialog
111 if ( QApplication::desktop()->width() < 640 ) { 111 if ( QApplication::desktop()->width() < 640 ) {
112 mFourthCombo->hide(); 112 mFourthCombo->hide();
113 mFourthEdit->hide(); 113 mFourthEdit->hide();
114 } else { 114 } else {
115 QFontMetrics fm ( font () ) ; 115 QFontMetrics fm ( font () ) ;
116 int wid = fm.width( "Messenger" ) +60; 116 int wid = fm.width( "Messenger" ) +60;
117 mPrefCombo->setMaximumWidth( wid ); 117 mPrefCombo->setMaximumWidth( wid );
118 mSecondCombo->setMaximumWidth( wid ); 118 mSecondCombo->setMaximumWidth( wid );
119 mThirdCombo->setMaximumWidth( wid ); 119 mThirdCombo->setMaximumWidth( wid );
120 mFourthCombo->setMaximumWidth( wid ); 120 mFourthCombo->setMaximumWidth( wid );
121 } 121 }
122 122
123 123
124 connect( mPrefEdit, SIGNAL( textChanged( const QString& ) ), 124 connect( mPrefEdit, SIGNAL( textChanged( const QString& ) ),
125 SLOT( slotPrefEditChanged() ) ); 125 SLOT( slotPrefEditChanged() ) );
126 connect( mSecondEdit, SIGNAL( textChanged( const QString& ) ), 126 connect( mSecondEdit, SIGNAL( textChanged( const QString& ) ),
127 SLOT( slotSecondEditChanged() ) ); 127 SLOT( slotSecondEditChanged() ) );
128 connect( mThirdEdit, SIGNAL( textChanged( const QString& ) ), 128 connect( mThirdEdit, SIGNAL( textChanged( const QString& ) ),
129 SLOT( slotThirdEditChanged() ) ); 129 SLOT( slotThirdEditChanged() ) );
130 connect( mFourthEdit, SIGNAL( textChanged( const QString& ) ), 130 connect( mFourthEdit, SIGNAL( textChanged( const QString& ) ),
131 SLOT( slotFourthEditChanged() ) ); 131 SLOT( slotFourthEditChanged() ) );
132 132
133 connect( editButton, SIGNAL( clicked() ), SLOT( edit() ) ); 133 connect( editButton, SIGNAL( clicked() ), SLOT( edit() ) );
134 134
135 connect( mPrefCombo, SIGNAL( activated( int ) ), 135 connect( mPrefCombo, SIGNAL( activated( int ) ),
136 SLOT( updatePrefEdit() ) ); 136 SLOT( updatePrefEdit() ) );
137 connect( mSecondCombo, SIGNAL( activated( int ) ), 137 connect( mSecondCombo, SIGNAL( activated( int ) ),
138 SLOT( updateSecondEdit() ) ); 138 SLOT( updateSecondEdit() ) );
139 connect( mThirdCombo, SIGNAL( activated( int ) ), 139 connect( mThirdCombo, SIGNAL( activated( int ) ),
140 SLOT( updateThirdEdit() ) ); 140 SLOT( updateThirdEdit() ) );
141 connect( mFourthCombo, SIGNAL( activated( int ) ), 141 connect( mFourthCombo, SIGNAL( activated( int ) ),
142 SLOT( updateFourthEdit() ) ); 142 SLOT( updateFourthEdit() ) );
143} 143}
144 144
145PhoneEditWidget::~PhoneEditWidget() 145PhoneEditWidget::~PhoneEditWidget()
146{ 146{
147} 147}
148 148
149void PhoneEditWidget::setPhoneNumbers( const KABC::PhoneNumber::List &list ) 149void PhoneEditWidget::setPhoneNumbers( const KABC::PhoneNumber::List &list )
150{ 150{
151 mPhoneList.clear(); 151 mPhoneList.clear();
152 152
153 // Insert types for existing numbers. 153 // Insert types for existing numbers.
154 mPrefCombo->insertTypeList( list ); 154 mPrefCombo->insertTypeList( list );
155 155
156 QValueList<int> defaultTypes; 156 QValueList<int> defaultTypes;
157 defaultTypes << KABC::PhoneNumber::Home; 157 defaultTypes << KABC::PhoneNumber::Home;
158 defaultTypes << KABC::PhoneNumber::Work; 158 defaultTypes << KABC::PhoneNumber::Work;
159 defaultTypes << KABC::PhoneNumber::Cell; 159 defaultTypes << KABC::PhoneNumber::Cell;
160 defaultTypes << ( KABC::PhoneNumber::Work | KABC::PhoneNumber::Fax ); 160 defaultTypes << ( KABC::PhoneNumber::Work | KABC::PhoneNumber::Fax );
161 defaultTypes << ( KABC::PhoneNumber::Home | KABC::PhoneNumber::Fax ); 161 defaultTypes << ( KABC::PhoneNumber::Home | KABC::PhoneNumber::Fax );
162 162
163 // Insert default types. 163 // Insert default types.
164 // Doing this for mPrefCombo is enough because the list is shared by all 164 // Doing this for mPrefCombo is enough because the list is shared by all
165 // combos. 165 // combos.
166 QValueList<int>::ConstIterator it; 166 QValueList<int>::ConstIterator it;
167 for( it = defaultTypes.begin(); it != defaultTypes.end(); ++it ) { 167 for( it = defaultTypes.begin(); it != defaultTypes.end(); ++it ) {
168 if ( !mPrefCombo->hasType( *it ) ) 168 if ( !mPrefCombo->hasType( *it ) )
169 mPrefCombo->insertType( list, *it, PhoneNumber( "", *it ) ); 169 mPrefCombo->insertType( list, *it, PhoneNumber( "", *it ) );
170 } 170 }
171 171
172 updateCombos(); 172 updateCombos();
173 173
174 mPrefCombo->selectType( defaultTypes[ 0 ] ); 174 mPrefCombo->selectType( defaultTypes[ 0 ] );
175 mSecondCombo->selectType( defaultTypes[ 1 ] ); 175 mSecondCombo->selectType( defaultTypes[ 1 ] );
176 mThirdCombo->selectType( defaultTypes[ 2 ] ); 176 mThirdCombo->selectType( defaultTypes[ 2 ] );
177 mFourthCombo->selectType( defaultTypes[ 3 ] ); 177 mFourthCombo->selectType( defaultTypes[ 3 ] );
178 178
179 updateLineEdits(); 179 updateLineEdits();
180} 180}
181 181
182void PhoneEditWidget::updateLineEdits() 182void PhoneEditWidget::updateLineEdits()
183{ 183{
184 updatePrefEdit(); 184 updatePrefEdit();
185 updateSecondEdit(); 185 updateSecondEdit();
186 updateThirdEdit(); 186 updateThirdEdit();
187 updateFourthEdit(); 187 updateFourthEdit();
188} 188}
189 189
190void PhoneEditWidget::updateCombos() 190void PhoneEditWidget::updateCombos()
191{ 191{
192 mPrefCombo->updateTypes(); 192 mPrefCombo->updateTypes();
193 mSecondCombo->updateTypes(); 193 mSecondCombo->updateTypes();
194 mThirdCombo->updateTypes(); 194 mThirdCombo->updateTypes();
195 mFourthCombo->updateTypes(); 195 mFourthCombo->updateTypes();
196} 196}
197 197
198KABC::PhoneNumber::List PhoneEditWidget::phoneNumbers() 198KABC::PhoneNumber::List PhoneEditWidget::phoneNumbers()
199{ 199{
200 KABC::PhoneNumber::List retList; 200 KABC::PhoneNumber::List retList;
201 201
202 KABC::PhoneNumber::List::Iterator it; 202 KABC::PhoneNumber::List::Iterator it;
203 for ( it = mPhoneList.begin(); it != mPhoneList.end(); ++it ) 203 for ( it = mPhoneList.begin(); it != mPhoneList.end(); ++it )
204 if ( !(*it).number().isEmpty() ) 204 if ( !(*it).number().isEmpty() )
205 retList.append( *it ); 205 retList.append( *it );
206 206
207 return retList; 207 return retList;
208} 208}
209 209
210void PhoneEditWidget::edit() 210void PhoneEditWidget::edit()
211{ 211{
212 PhoneEditDialog dlg( mPhoneList, this ); 212 PhoneEditDialog dlg( mPhoneList, this );
213 213
214 if ( dlg.exec() ) { 214 if ( dlg.exec() ) {
215 if ( dlg.changed() ) { 215 if ( dlg.changed() ) {
216 mPhoneList = dlg.phoneNumbers(); 216 KABC::PhoneNumber::List list = dlg.phoneNumbers();
217 setPhoneNumbers( list );
217 updateCombos(); 218 updateCombos();
218 updateLineEdits(); 219 updateLineEdits();
219 emit modified(); 220 emit modified();
220 } 221 }
221 } 222 }
222} 223}
223 224
224void PhoneEditWidget::updatePrefEdit() 225void PhoneEditWidget::updatePrefEdit()
225{ 226{
226 updateEdit( mPrefCombo ); 227 updateEdit( mPrefCombo );
227} 228}
228 229
229void PhoneEditWidget::updateSecondEdit() 230void PhoneEditWidget::updateSecondEdit()
230{ 231{
231 updateEdit( mSecondCombo ); 232 updateEdit( mSecondCombo );
232} 233}
233 234
234void PhoneEditWidget::updateThirdEdit() 235void PhoneEditWidget::updateThirdEdit()
235{ 236{
236 updateEdit( mThirdCombo ); 237 updateEdit( mThirdCombo );
237} 238}
238 239
239void PhoneEditWidget::updateFourthEdit() 240void PhoneEditWidget::updateFourthEdit()
240{ 241{
241 updateEdit( mFourthCombo ); 242 updateEdit( mFourthCombo );
242} 243}
243 244
244void PhoneEditWidget::updateEdit( PhoneTypeCombo *combo ) 245void PhoneEditWidget::updateEdit( PhoneTypeCombo *combo )
245{ 246{
246 QLineEdit *edit = combo->lineEdit(); 247 QLineEdit *edit = combo->lineEdit();
247 if ( !edit ) 248 if ( !edit )
248 return; 249 return;
249 250
250#if 0 251#if 0
251 if ( edit == mPrefEdit ) kdDebug(5720) << " prefEdit" << endl; 252 if ( edit == mPrefEdit ) kdDebug(5720) << " prefEdit" << endl;
252 if ( edit == mSecondEdit ) kdDebug(5720) << " secondEdit" << endl; 253 if ( edit == mSecondEdit ) kdDebug(5720) << " secondEdit" << endl;
253 if ( edit == mThirdEdit ) kdDebug(5720) << " thirdEdit" << endl; 254 if ( edit == mThirdEdit ) kdDebug(5720) << " thirdEdit" << endl;
254 if ( edit == mFourthEdit ) kdDebug(5720) << " fourthEdit" << endl; 255 if ( edit == mFourthEdit ) kdDebug(5720) << " fourthEdit" << endl;
255#endif 256#endif
256 257
257 PhoneNumber::List::Iterator it = combo->selectedElement(); 258 PhoneNumber::List::Iterator it = combo->selectedElement();
258 if ( it != mPhoneList.end() ) { 259 if ( it != mPhoneList.end() ) {
259 edit->setText( (*it).number() ); 260 edit->setText( (*it).number() );
260 } else { 261 } else {
261 kdDebug(5720) << "PhoneEditWidget::updateEdit(): no selected element" << endl; 262 kdDebug(5720) << "PhoneEditWidget::updateEdit(): no selected element" << endl;
262 } 263 }
263} 264}
264 265
265void PhoneEditWidget::slotPrefEditChanged() 266void PhoneEditWidget::slotPrefEditChanged()
266{ 267{
267 updatePhoneNumber( mPrefCombo ); 268 updatePhoneNumber( mPrefCombo );
268} 269}
269 270
270void PhoneEditWidget::slotSecondEditChanged() 271void PhoneEditWidget::slotSecondEditChanged()
271{ 272{
272 updatePhoneNumber( mSecondCombo ); 273 updatePhoneNumber( mSecondCombo );
273} 274}
274 275
275void PhoneEditWidget::slotThirdEditChanged() 276void PhoneEditWidget::slotThirdEditChanged()
276{ 277{
277 updatePhoneNumber( mThirdCombo ); 278 updatePhoneNumber( mThirdCombo );
278} 279}
279 280
280void PhoneEditWidget::slotFourthEditChanged() 281void PhoneEditWidget::slotFourthEditChanged()
281{ 282{
282 updatePhoneNumber( mFourthCombo ); 283 updatePhoneNumber( mFourthCombo );
283} 284}
284 285
285void PhoneEditWidget::updatePhoneNumber( PhoneTypeCombo *combo ) 286void PhoneEditWidget::updatePhoneNumber( PhoneTypeCombo *combo )
286{ 287{
287 QLineEdit *edit = combo->lineEdit(); 288 QLineEdit *edit = combo->lineEdit();
288 if ( !edit ) return; 289 if ( !edit ) return;
289 290
290 PhoneNumber::List::Iterator it = combo->selectedElement(); 291 PhoneNumber::List::Iterator it = combo->selectedElement();
291 if ( it != mPhoneList.end() ) { 292 if ( it != mPhoneList.end() ) {
292 (*it).setNumber( edit->text() ); 293 (*it).setNumber( edit->text() );
293 } 294 }
294 295
295 updateOtherEdit( combo, mPrefCombo ); 296 updateOtherEdit( combo, mPrefCombo );
296 updateOtherEdit( combo, mSecondCombo ); 297 updateOtherEdit( combo, mSecondCombo );
297 updateOtherEdit( combo, mThirdCombo ); 298 updateOtherEdit( combo, mThirdCombo );
298 updateOtherEdit( combo, mFourthCombo ); 299 updateOtherEdit( combo, mFourthCombo );
299 300
300 emit modified(); 301 emit modified();
301} 302}
302 303
303void PhoneEditWidget::updateOtherEdit( PhoneTypeCombo *combo, PhoneTypeCombo *otherCombo ) 304void PhoneEditWidget::updateOtherEdit( PhoneTypeCombo *combo, PhoneTypeCombo *otherCombo )
304{ 305{
305 if ( combo == otherCombo ) return; 306 if ( combo == otherCombo ) return;
306 307
307 if ( combo->currentItem() == otherCombo->currentItem() ) { 308 if ( combo->currentItem() == otherCombo->currentItem() ) {
308 updateEdit( otherCombo ); 309 updateEdit( otherCombo );
309 } 310 }
310} 311}
311 312
312/////////////////////////////////////////// 313///////////////////////////////////////////
313// PhoneEditDialog 314// PhoneEditDialog
314 315
315class PhoneViewItem : public QListViewItem 316class PhoneViewItem : public QListViewItem
316{ 317{
317public: 318public:
318 PhoneViewItem( QListView *parent, const KABC::PhoneNumber &number ); 319 PhoneViewItem( QListView *parent, const KABC::PhoneNumber &number );
319 320
320 void setPhoneNumber( const KABC::PhoneNumber &number ) 321 void setPhoneNumber( const KABC::PhoneNumber &number )
321 { 322 {
322 mPhoneNumber = number; 323 mPhoneNumber = number;
323 makeText(); 324 makeText();
324 } 325 }
325 326
326 QString key() { return mPhoneNumber.id(); } 327 QString key() { return mPhoneNumber.id(); }
327 QString country() { return ""; } 328 QString country() { return ""; }
328 QString region() { return ""; } 329 QString region() { return ""; }
329 QString number() { return ""; } 330 QString number() { return ""; }
330 331
331 KABC::PhoneNumber phoneNumber() { return mPhoneNumber; } 332 KABC::PhoneNumber phoneNumber() { return mPhoneNumber; }
332 333
333private: 334private:
334 void makeText(); 335 void makeText();
335 336
336 KABC::PhoneNumber mPhoneNumber; 337 KABC::PhoneNumber mPhoneNumber;
337}; 338};
338 339
339PhoneViewItem::PhoneViewItem( QListView *parent, const KABC::PhoneNumber &number ) 340PhoneViewItem::PhoneViewItem( QListView *parent, const KABC::PhoneNumber &number )
340 : QListViewItem( parent ), mPhoneNumber( number ) 341 : QListViewItem( parent ), mPhoneNumber( number )
341{ 342{
343#ifdef DESKTOP_VERSION
344 setRenameEnabled ( 0, true );
345#endif
342 makeText(); 346 makeText();
343} 347}
344 348
345void PhoneViewItem::makeText() 349void PhoneViewItem::makeText()
346{ 350{
347 /** 351 /**
348 * Will be used in future versions of kaddressbook/libkabc 352 * Will be used in future versions of kaddressbook/libkabc
349 353
350 setText( 0, mPhoneNumber.country() ); 354 setText( 0, mPhoneNumber.country() );
351 setText( 1, mPhoneNumber.region() ); 355 setText( 1, mPhoneNumber.region() );
352 setText( 2, mPhoneNumber.number() ); 356 setText( 2, mPhoneNumber.number() );
353 setText( 3, mPhoneNumber.typeLabel() ); 357 setText( 3, mPhoneNumber.typeLabel() );
354 */ 358 */
355 359
356 setText( 0, mPhoneNumber.number() ); 360 setText( 0, mPhoneNumber.number() );
357 setText( 1, mPhoneNumber.typeLabel() ); 361 setText( 1, mPhoneNumber.typeLabel() );
358} 362}
359 363
360PhoneEditDialog::PhoneEditDialog( const KABC::PhoneNumber::List &list, QWidget *parent, const char *name ) 364PhoneEditDialog::PhoneEditDialog( const KABC::PhoneNumber::List &list, QWidget *parent, const char *name )
361 : KDialogBase( KDialogBase::Plain, i18n( "Edit Phone Numbers" ), 365 : KDialogBase( KDialogBase::Plain, i18n( "Edit Phone Numbers" ),
362 KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, 366 KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok,
363 parent, name, true) 367 parent, name, true)
364{ 368{
365 mPhoneNumberList = list; 369 mPhoneNumberList = list;
366 370
367 QWidget *page = plainPage(); 371 QWidget *page = plainPage();
368 372
369 QGridLayout *layout = new QGridLayout( page, 1, 2 ); 373 QGridLayout *layout = new QGridLayout( page, 1, 2 );
370 layout->setSpacing( spacingHint() ); 374 layout->setSpacing( spacingHint() );
371 375
372 mListView = new KListView( page ); 376 mListView = new KListView( page );
373 mListView->setAllColumnsShowFocus( true ); 377 mListView->setAllColumnsShowFocus( true );
374 mListView->addColumn( i18n( "Number" ) ); 378 mListView->addColumn( i18n( "Number" ) );
375 mListView->addColumn( i18n( "Type" ) ); 379 mListView->addColumn( i18n( "Type" ) );
376 380
377 KButtonBox *buttonBox = new KButtonBox( page, Vertical ); 381 KButtonBox *buttonBox = new KButtonBox( page, Vertical );
378 382
379 buttonBox->addButton( i18n( "&Add..." ), this, SLOT( slotAddPhoneNumber() ) ); 383 buttonBox->addButton( i18n( "&Add..." ), this, SLOT( slotAddPhoneNumber() ) );
380 mEditButton = buttonBox->addButton( i18n( "&Edit..." ), this, SLOT( slotEditPhoneNumber() ) ); 384 mEditButton = buttonBox->addButton( i18n( "&Edit..." ), this, SLOT( slotEditPhoneNumber() ) );
381 mEditButton->setEnabled( false ); 385 mEditButton->setEnabled( false );
382 mRemoveButton = buttonBox->addButton( i18n( "&Remove" ), this, SLOT( slotRemovePhoneNumber() ) ); 386 mRemoveButton = buttonBox->addButton( i18n( "&Remove" ), this, SLOT( slotRemovePhoneNumber() ) );
383 mRemoveButton->setEnabled( false ); 387 mRemoveButton->setEnabled( false );
384 buttonBox->layout(); 388 buttonBox->layout();
385 389
386 layout->addWidget( mListView, 0, 0 ); 390 layout->addWidget( mListView, 0, 0 );
387 layout->addWidget( buttonBox, 0, 1 ); 391 layout->addWidget( buttonBox, 0, 1 );
388 392
389 connect( mListView, SIGNAL(selectionChanged()), SLOT(slotSelectionChanged()) ); 393 connect( mListView, SIGNAL(selectionChanged()), SLOT(slotSelectionChanged()) );
390 connect( mListView, SIGNAL(doubleClicked( QListViewItem *, const QPoint &, int )), this, SLOT( slotEditPhoneNumber())); 394 connect( mListView, SIGNAL(doubleClicked( QListViewItem *, const QPoint &, int )), this, SLOT( slotEditPhoneNumber()));
391 395
392 KABC::PhoneNumber::List::Iterator it; 396 KABC::PhoneNumber::List::Iterator it;
393 for ( it = mPhoneNumberList.begin(); it != mPhoneNumberList.end(); ++it ) 397 for ( it = mPhoneNumberList.begin(); it != mPhoneNumberList.end(); ++it )
394 new PhoneViewItem( mListView, *it ); 398 new PhoneViewItem( mListView, *it );
395 399
396 mChanged = false; 400 mChanged = false;
397} 401}
398 402
399PhoneEditDialog::~PhoneEditDialog() 403PhoneEditDialog::~PhoneEditDialog()
400{ 404{
401} 405}
402 406
403void PhoneEditDialog::slotAddPhoneNumber() 407void PhoneEditDialog::slotAddPhoneNumber()
404{ 408{
405 KABC::PhoneNumber tmp( "", 0 ); 409 KABC::PhoneNumber tmp( "", 0 );
406 PhoneTypeDialog dlg( tmp, this ); 410 PhoneTypeDialog dlg( tmp, this );
407 411
408 if ( dlg.exec() ) { 412 if ( dlg.exec() ) {
409 KABC::PhoneNumber phoneNumber = dlg.phoneNumber(); 413 QListViewItem* i = mListView->firstChild();
410 mPhoneNumberList.append( phoneNumber ); 414 KABC::PhoneNumber phoneNumber = dlg.phoneNumber();
411 new PhoneViewItem( mListView, phoneNumber ); 415 bool insert = true;
412 416 while ( i ) {
413 mChanged = true; 417 PhoneViewItem* p = ( PhoneViewItem* ) i;
418 KABC::PhoneNumber pn = p->phoneNumber();
419 if ( (pn.type() | KABC::PhoneNumber::Pref) == (phoneNumber.type() | KABC::PhoneNumber::Pref) ) {
420 if ( p->text(0).isEmpty()) {
421 p->setPhoneNumber( phoneNumber );
422 mPhoneNumberList.remove( pn );
423 mPhoneNumberList.append( phoneNumber );
424 insert = false;
425 break;
426 }
427 }
428 i = i->nextSibling();
429 }
430 if ( insert ) {
431 mPhoneNumberList.append( phoneNumber );
432 new PhoneViewItem( mListView, phoneNumber );
433 }
434 mChanged = true;
414 } 435 }
415} 436}
416 437
417void PhoneEditDialog::slotRemovePhoneNumber() 438void PhoneEditDialog::slotRemovePhoneNumber()
418{ 439{
419 PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() ); 440 PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() );
420 if ( !item ) 441 if ( !item )
421 return; 442 return;
422 443
423 mPhoneNumberList.remove( item->phoneNumber() ); 444 mPhoneNumberList.remove( item->phoneNumber() );
424 QListViewItem *currItem = mListView->currentItem(); 445 QListViewItem *currItem = mListView->currentItem();
425 mListView->takeItem( currItem ); 446 mListView->takeItem( currItem );
426 delete currItem; 447 delete currItem;
427 448
428 mChanged = true; 449 mChanged = true;
429} 450}
430 451
431void PhoneEditDialog::slotEditPhoneNumber() 452void PhoneEditDialog::slotEditPhoneNumber()
432{ 453{
433 PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() ); 454 PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() );
434 if ( !item ) 455 if ( !item )
435 return; 456 return;
436 457
437 PhoneTypeDialog dlg( item->phoneNumber(), this ); 458 PhoneTypeDialog dlg( item->phoneNumber(), this );
438 459
439 if ( dlg.exec() ) { 460 if ( dlg.exec() ) {
440 slotRemovePhoneNumber(); 461 slotRemovePhoneNumber();
441 KABC::PhoneNumber phoneNumber = dlg.phoneNumber(); 462 KABC::PhoneNumber phoneNumber = dlg.phoneNumber();
442 mPhoneNumberList.append( phoneNumber ); 463 mPhoneNumberList.append( phoneNumber );
443 new PhoneViewItem( mListView, phoneNumber ); 464 new PhoneViewItem( mListView, phoneNumber );
444 465
445 mChanged = true; 466 mChanged = true;
446 } 467 }
447} 468}
448 469
449void PhoneEditDialog::slotSelectionChanged() 470void PhoneEditDialog::slotSelectionChanged()
450{ 471{
451 bool state = ( mListView->currentItem() != 0 ); 472 bool state = ( mListView->currentItem() != 0 );
452 473
453 mRemoveButton->setEnabled( state ); 474 mRemoveButton->setEnabled( state );
454 mEditButton->setEnabled( state ); 475 mEditButton->setEnabled( state );
455} 476}
456 477
457const KABC::PhoneNumber::List &PhoneEditDialog::phoneNumbers() 478const KABC::PhoneNumber::List &PhoneEditDialog::phoneNumbers()
458{ 479{
459 return mPhoneNumberList; 480 return mPhoneNumberList;
460} 481}
461 482
462bool PhoneEditDialog::changed() const 483bool PhoneEditDialog::changed() const
463{ 484{
464 return mChanged; 485 return mChanged;
465} 486}
466 487
467/////////////////////////////////////////// 488///////////////////////////////////////////
468// PhoneTypeDialog 489// PhoneTypeDialog
469PhoneTypeDialog::PhoneTypeDialog( const KABC::PhoneNumber &phoneNumber, 490PhoneTypeDialog::PhoneTypeDialog( const KABC::PhoneNumber &phoneNumber,
470 QWidget *parent, const char *name) 491 QWidget *parent, const char *name)
471 : KDialogBase( KDialogBase::Plain, i18n( "Edit Phone Number" ), 492 : KDialogBase( KDialogBase::Plain, i18n( "Edit Phone Number" ),
472 KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, 493 KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok,
473 parent, name, true), mPhoneNumber( phoneNumber ) 494 parent, name, true), mPhoneNumber( phoneNumber )
474{ 495{
475 QWidget *page = plainPage(); 496 QWidget *page = plainPage();
476 QLabel *label = 0; 497 QLabel *label = 0;
477 QGridLayout *layout = new QGridLayout( page, 3, 2, marginHint(), spacingHint() ); 498 QGridLayout *layout = new QGridLayout( page, 3, 2, marginHint(), spacingHint() );
478 499
479 label = new QLabel( i18n( "Number:" ), page ); 500 label = new QLabel( i18n( "Number:" ), page );
480 layout->addWidget( label, 0, 0 ); 501 layout->addWidget( label, 0, 0 );
481 mNumber = new KLineEdit( page ); 502 mNumber = new KLineEdit( page );
482 layout->addWidget( mNumber, 0, 1 ); 503 layout->addWidget( mNumber, 0, 1 );
483 504
484 mPreferredBox = new QCheckBox( i18n( "This is the preferred phone number" ), page ); 505 mPreferredBox = new QCheckBox( i18n( "This is the preferred phone number" ), page );
485 layout->addMultiCellWidget( mPreferredBox, 1, 1, 0, 1 ); 506 layout->addMultiCellWidget( mPreferredBox, 1, 1, 0, 1 );
486 507
487 mGroup = new QButtonGroup( 2, Horizontal, i18n( "Types" ), page ); 508 mGroup = new QButtonGroup( 2, Horizontal, i18n( "Types" ), page );
488 layout->addMultiCellWidget( mGroup, 2, 2, 0, 1 ); 509 layout->addMultiCellWidget( mGroup, 2, 2, 0, 1 );
489 510
490 // fill widgets 511 // fill widgets
491 mNumber->setText( mPhoneNumber.number() ); 512 mNumber->setText( mPhoneNumber.number() );
492 513
493 mTypeList = KABC::PhoneNumber::typeList(); 514 mTypeList = KABC::PhoneNumber::typeList();
494 mTypeList.remove( KABC::PhoneNumber::Pref ); 515 mTypeList.remove( KABC::PhoneNumber::Pref );
495 516
496 KABC::PhoneNumber::TypeList::Iterator it; 517 KABC::PhoneNumber::TypeList::Iterator it;
497 for ( it = mTypeList.begin(); it != mTypeList.end(); ++it ) 518 for ( it = mTypeList.begin(); it != mTypeList.end(); ++it )
498 new QCheckBox( KABC::PhoneNumber::typeLabel( *it ), mGroup ); 519 new QCheckBox( KABC::PhoneNumber::typeLabel( *it ), mGroup );
499 520
500 for ( int i = 0; i < mGroup->count(); ++i ) { 521 for ( int i = 0; i < mGroup->count(); ++i ) {
501 int type = mPhoneNumber.type(); 522 int type = mPhoneNumber.type();
502 QCheckBox *box = (QCheckBox*)mGroup->find( i ); 523 QCheckBox *box = (QCheckBox*)mGroup->find( i );
503 box->setChecked( type & mTypeList[ i ] ); 524 box->setChecked( type & mTypeList[ i ] );
504 } 525 }
505 526
506 mPreferredBox->setChecked( mPhoneNumber.type() & KABC::PhoneNumber::Pref ); 527 mPreferredBox->setChecked( mPhoneNumber.type() & KABC::PhoneNumber::Pref );
528 mNumber->setFocus();
529 mNumber->setSelection( 0, 1024);
507} 530}
508 531
509KABC::PhoneNumber PhoneTypeDialog::phoneNumber() 532KABC::PhoneNumber PhoneTypeDialog::phoneNumber()
510{ 533{
511 mPhoneNumber.setNumber( mNumber->text() ); 534 mPhoneNumber.setNumber( mNumber->text() );
512 535
513 int type = 0; 536 int type = 0;
514 for ( int i = 0; i < mGroup->count(); ++i ) { 537 for ( int i = 0; i < mGroup->count(); ++i ) {
515 QCheckBox *box = (QCheckBox*)mGroup->find( i ); 538 QCheckBox *box = (QCheckBox*)mGroup->find( i );
516 if ( box->isChecked() ) 539 if ( box->isChecked() )
517 type += mTypeList[ i ]; 540 type += mTypeList[ i ];
518 } 541 }
519 542
520 if ( mPreferredBox->isChecked() ) 543 if ( mPreferredBox->isChecked() )
521 mPhoneNumber.setType( type | KABC::PhoneNumber::Pref ); 544 mPhoneNumber.setType( type | KABC::PhoneNumber::Pref );
522 else 545 else
523 mPhoneNumber.setType( type & ~KABC::PhoneNumber::Pref ); 546 mPhoneNumber.setType( type & ~KABC::PhoneNumber::Pref );
524 547
525 return mPhoneNumber; 548 return mPhoneNumber;
526} 549}
527 550
528#ifndef KAB_EMBEDDED 551#ifndef KAB_EMBEDDED
529#include "phoneeditwidget.moc" 552#include "phoneeditwidget.moc"
530#endif //KAB_EMBEDDED 553#endif //KAB_EMBEDDED