summaryrefslogtreecommitdiffabout
path: root/kaddressbook/phoneeditwidget.cpp
Unidiff
Diffstat (limited to 'kaddressbook/phoneeditwidget.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/phoneeditwidget.cpp112
1 files changed, 111 insertions, 1 deletions
diff --git a/kaddressbook/phoneeditwidget.cpp b/kaddressbook/phoneeditwidget.cpp
index 2bce39a..b20275d 100644
--- a/kaddressbook/phoneeditwidget.cpp
+++ b/kaddressbook/phoneeditwidget.cpp
@@ -1,556 +1,666 @@
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#include <qhbox.h>
33 34
34#include <kbuttonbox.h> 35#include <kbuttonbox.h>
35#include <klistview.h> 36#include <klistview.h>
36#include <kapplication.h> 37#include <kapplication.h>
37#include <qapplication.h> 38#include <qapplication.h>
38#include <kconfig.h> 39#include <kconfig.h>
39#include <klineedit.h> 40#include <klineedit.h>
40#include <kcombobox.h> 41#include <kcombobox.h>
41#include <klocale.h> 42#include <klocale.h>
42#include <kdebug.h> 43#include <kdebug.h>
43#include <kglobal.h> 44#include <kglobal.h>
44#include <kiconloader.h> 45#include <kiconloader.h>
45 46
46#include <kabc/phonenumber.h> 47#include <kabc/phonenumber.h>
47 48
48#include "typecombo.h" 49#include "typecombo.h"
49 50
50#include "phoneeditwidget.h" 51#include "phoneeditwidget.h"
51 52
52PhoneEditWidget::PhoneEditWidget( QWidget *parent, const char *name ) 53PhoneEditWidget::PhoneEditWidget( QWidget *parent, const char *name )
54 : QScrollView(parent,name)
55{
56 setFrameStyle ( QFrame::Panel | QFrame::Plain );
57 setLineWidth ( 1 );
58 setMidLineWidth ( 1 );
59 mw = new QWidget ( viewport() );
60 addChild(mw);
61 setResizePolicy( AutoOneFit );
62 mainLayout = new QVBoxLayout ( mw );
63 mainLayout->setMargin( 2 );
64 mainLayout->setSpacing( 2 );
65 QWidget* hb = new QWidget ( mw );
66 mainLayout->add( hb );
67 QHBoxLayout* hbLayout = new QHBoxLayout ( hb );
68 QPushButton *addBut = new QPushButton ( "add", hb );
69 hbLayout->add( addBut );
70 addBut->setPixmap ( SmallIcon("plus"));
71 addBut->setMaximumSize( addBut->sizeHint().height(),addBut->sizeHint().height() );
72 connect(addBut,SIGNAL(clicked()),SLOT(addNumber()));
73 //QLabel * temp = new QLabel( i18n("Phone Type"), hb );
74 QLabel *temp = new QLabel( i18n("Phone Number"),hb );
75 temp->setAlignment( Qt::AlignCenter );
76 temp->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) );
77 hbLayout->add( temp );
78 appendEditCombo();
79 appendEditCombo();
80 appendEditCombo();
81 setDefaults();
82}
83
84PhoneEditWidget::~PhoneEditWidget()
85{
86}
87void PhoneEditWidget::setDefaults()
88{
89 PhoneTypeNumberEdit* edit = mTypeNumberEditList.first();
90 KABC::PhoneNumber phoneNumber;
91 phoneNumber.setType( KABC::PhoneNumber::Home | KABC::PhoneNumber::Pref );
92 edit->setPhoneNumber( phoneNumber );
93 edit = mTypeNumberEditList.next();
94 phoneNumber.setType( KABC::PhoneNumber::Work | KABC::PhoneNumber::Pref );
95 edit->setPhoneNumber( phoneNumber );
96 edit = mTypeNumberEditList.next();
97 phoneNumber.setType( KABC::PhoneNumber::Cell );
98 edit->setPhoneNumber( phoneNumber );
99 edit = mTypeNumberEditList.next();
100 while ( edit ) {
101 edit->hide();
102 edit = mTypeNumberEditList.next();
103 }
104}
105void PhoneEditWidget::addNumber()
106{
107
108}
109PhoneTypeNumberEdit* PhoneEditWidget::appendEditCombo()
110{
111 PhoneTypeNumberEdit* edit = new PhoneTypeNumberEdit( mw );
112 connect ( edit, SIGNAL ( typeChange( int , int) ), this, SIGNAL ( typeChange( int , int)) );
113 connect ( edit, SIGNAL ( modified() ), this, SIGNAL ( modified() ) );
114 connect ( this, SIGNAL ( typeChange( int , int)), edit, SLOT ( typeExternalChanged( int, int)) );
115
116 mainLayout->add( edit );
117 mTypeNumberEditList.append( edit );
118 return edit;
119}
120
121void PhoneEditWidget::setPhoneNumbers( const KABC::PhoneNumber::List &li )
122{
123 if ( li.isEmpty() ) {
124 setDefaults();
125 return;
126 }
127 KABC::PhoneNumber::List::Iterator it;
128 KABC::PhoneNumber::List list = li;
129 PhoneTypeNumberEdit* edit = mTypeNumberEditList.first();
130 for ( it = list.begin(); it != list.end(); ++it ) {
131 if ( edit ) {
132 edit->setPhoneNumber( (*it ) );
133 edit = mTypeNumberEditList.next();
134 } else {
135 PhoneTypeNumberEdit* editNew = appendEditCombo();
136 editNew->setPhoneNumber( (*it ) );
137 }
138 }
139 while ( edit ) {
140 edit->hide();
141 edit = mTypeNumberEditList.next();
142 }
143 //mainLayout->invalidate ();
144 mw->update();
145}
146KABC::PhoneNumber::List PhoneEditWidget::phoneNumbers()
147{
148 KABC::PhoneNumber::List retList;
149
150 PhoneTypeNumberEdit* edit = mTypeNumberEditList.first();
151 while ( edit ) {
152 if ( edit->isValid() ) {
153 retList.append( edit->phoneNumber());
154 }
155 edit = mTypeNumberEditList.next();
156
157 }
158 return retList;
159}
160
161#if 0
162PhoneEditWidget::PhoneEditWidget( QWidget *parent, const char *name )
53 : QWidget( parent, name ) 163 : QWidget( parent, name )
54{ 164{
55 QGridLayout *layout = new QGridLayout( this, 4, 1 ); 165 QGridLayout *layout = new QGridLayout( this, 4, 1 );
56//US layout->setSpacing( KDialog::spacingHint() ); 166//US layout->setSpacing( KDialog::spacingHint() );
57 layout->setSpacing( KDialogBase::spacingHintSmall() ); 167 layout->setSpacing( KDialogBase::spacingHintSmall() );
58 168
59 169
60 170
61 QLabel* label = new QLabel( this ); 171 QLabel* label = new QLabel( this );
62//US loadIcon call is ambiguous. Add one more parameter 172//US loadIcon call is ambiguous. Add one more parameter
63//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop ) ); 173//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop ) );
64 label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) ); 174 label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) );
65 label->setAlignment( AlignCenter ); 175 label->setAlignment( AlignCenter );
66//US layout->addMultiCellWidget( label, 0, 1, 3, 3 ); 176//US layout->addMultiCellWidget( label, 0, 1, 3, 3 );
67 layout->addWidget( label, 0, 0 ); 177 layout->addWidget( label, 0, 0 );
68 178
69 QPushButton *editButton = new QPushButton( i18n( "Edit Phone Numbers..." ), 179 QPushButton *editButton = new QPushButton( i18n( "Edit Phone Numbers..." ),
70 this ); 180 this );
71 if ( QApplication::desktop()->width() < 640 ) 181 if ( QApplication::desktop()->width() < 640 )
72 layout->addWidget( editButton, 0, 1 ); 182 layout->addWidget( editButton, 0, 1 );
73 else 183 else
74 layout->addMultiCellWidget( editButton, 0, 0, 1, 3); 184 layout->addMultiCellWidget( editButton, 0, 0, 1, 3);
75 185
76 mPrefCombo = new PhoneTypeCombo( mPhoneList, this ); 186 mPrefCombo = new PhoneTypeCombo( mPhoneList, this );
77 mPrefEdit = new KLineEdit( this ); 187 mPrefEdit = new KLineEdit( this );
78 //mPrefEdit->setMinimumWidth( int(mPrefEdit->sizeHint().width() * 1.5) ); 188 //mPrefEdit->setMinimumWidth( int(mPrefEdit->sizeHint().width() * 1.5) );
79 mPrefCombo->setLineEdit( mPrefEdit ); 189 mPrefCombo->setLineEdit( mPrefEdit );
80 layout->addWidget( mPrefCombo, 1, 0 ); 190 layout->addWidget( mPrefCombo, 1, 0 );
81 layout->addWidget( mPrefEdit, 1, 1 ); 191 layout->addWidget( mPrefEdit, 1, 1 );
82 int x = 1, y = 2; 192 int x = 1, y = 2;
83 if ( QApplication::desktop()->width() < 640 ) { 193 if ( QApplication::desktop()->width() < 640 ) {
84 ++x; 194 ++x;
85 y = 0; 195 y = 0;
86 } 196 }
87 mSecondCombo = new PhoneTypeCombo( mPhoneList, this ); 197 mSecondCombo = new PhoneTypeCombo( mPhoneList, this );
88 mSecondEdit = new KLineEdit( this ); 198 mSecondEdit = new KLineEdit( this );
89 mSecondCombo->setLineEdit( mSecondEdit ); 199 mSecondCombo->setLineEdit( mSecondEdit );
90 layout->addWidget( mSecondCombo, x, y++ ); 200 layout->addWidget( mSecondCombo, x, y++ );
91 layout->addWidget( mSecondEdit, x, y++ ); 201 layout->addWidget( mSecondEdit, x, y++ );
92 202
93 y = 0; 203 y = 0;
94 ++x; 204 ++x;
95 mThirdCombo = new PhoneTypeCombo( mPhoneList, this ); 205 mThirdCombo = new PhoneTypeCombo( mPhoneList, this );
96 mThirdEdit = new KLineEdit( this ); 206 mThirdEdit = new KLineEdit( this );
97 mThirdCombo->setLineEdit( mThirdEdit ); 207 mThirdCombo->setLineEdit( mThirdEdit );
98 layout->addWidget( mThirdCombo, x, y++ ); 208 layout->addWidget( mThirdCombo, x, y++ );
99 layout->addWidget( mThirdEdit, x, y++ ); 209 layout->addWidget( mThirdEdit, x, y++ );
100 if ( QApplication::desktop()->width() < 640 ) { 210 if ( QApplication::desktop()->width() < 640 ) {
101 ++x; 211 ++x;
102 y = 0; 212 y = 0;
103 } 213 }
104 mFourthCombo = new PhoneTypeCombo( mPhoneList, this ); 214 mFourthCombo = new PhoneTypeCombo( mPhoneList, this );
105 mFourthEdit = new KLineEdit( this ); 215 mFourthEdit = new KLineEdit( this );
106 mFourthCombo->setLineEdit( mFourthEdit ); 216 mFourthCombo->setLineEdit( mFourthEdit );
107 layout->addWidget( mFourthCombo, x, y++ ); 217 layout->addWidget( mFourthCombo, x, y++ );
108 layout->addWidget( mFourthEdit, x, y++ ); 218 layout->addWidget( mFourthEdit, x, y++ );
109 219
110 // Four numbers don't fit in the current dialog 220 // Four numbers don't fit in the current dialog
111 if ( QApplication::desktop()->width() < 640 ) { 221 if ( QApplication::desktop()->width() < 640 ) {
112 mFourthCombo->hide(); 222 mFourthCombo->hide();
113 mFourthEdit->hide(); 223 mFourthEdit->hide();
114 } else { 224 } else {
115 QFontMetrics fm ( font () ) ; 225 QFontMetrics fm ( font () ) ;
116 int wid = fm.width( "Messenger" ) +60; 226 int wid = fm.width( "Messenger" ) +60;
117 mPrefCombo->setMaximumWidth( wid ); 227 mPrefCombo->setMaximumWidth( wid );
118 mSecondCombo->setMaximumWidth( wid ); 228 mSecondCombo->setMaximumWidth( wid );
119 mThirdCombo->setMaximumWidth( wid ); 229 mThirdCombo->setMaximumWidth( wid );
120 mFourthCombo->setMaximumWidth( wid ); 230 mFourthCombo->setMaximumWidth( wid );
121 } 231 }
122 232
123 233
124 connect( mPrefEdit, SIGNAL( textChanged( const QString& ) ), 234 connect( mPrefEdit, SIGNAL( textChanged( const QString& ) ),
125 SLOT( slotPrefEditChanged() ) ); 235 SLOT( slotPrefEditChanged() ) );
126 connect( mSecondEdit, SIGNAL( textChanged( const QString& ) ), 236 connect( mSecondEdit, SIGNAL( textChanged( const QString& ) ),
127 SLOT( slotSecondEditChanged() ) ); 237 SLOT( slotSecondEditChanged() ) );
128 connect( mThirdEdit, SIGNAL( textChanged( const QString& ) ), 238 connect( mThirdEdit, SIGNAL( textChanged( const QString& ) ),
129 SLOT( slotThirdEditChanged() ) ); 239 SLOT( slotThirdEditChanged() ) );
130 connect( mFourthEdit, SIGNAL( textChanged( const QString& ) ), 240 connect( mFourthEdit, SIGNAL( textChanged( const QString& ) ),
131 SLOT( slotFourthEditChanged() ) ); 241 SLOT( slotFourthEditChanged() ) );
132 242
133 connect( editButton, SIGNAL( clicked() ), SLOT( edit() ) ); 243 connect( editButton, SIGNAL( clicked() ), SLOT( edit() ) );
134 244
135 connect( mPrefCombo, SIGNAL( activated( int ) ), 245 connect( mPrefCombo, SIGNAL( activated( int ) ),
136 SLOT( updatePrefEdit() ) ); 246 SLOT( updatePrefEdit() ) );
137 connect( mSecondCombo, SIGNAL( activated( int ) ), 247 connect( mSecondCombo, SIGNAL( activated( int ) ),
138 SLOT( updateSecondEdit() ) ); 248 SLOT( updateSecondEdit() ) );
139 connect( mThirdCombo, SIGNAL( activated( int ) ), 249 connect( mThirdCombo, SIGNAL( activated( int ) ),
140 SLOT( updateThirdEdit() ) ); 250 SLOT( updateThirdEdit() ) );
141 connect( mFourthCombo, SIGNAL( activated( int ) ), 251 connect( mFourthCombo, SIGNAL( activated( int ) ),
142 SLOT( updateFourthEdit() ) ); 252 SLOT( updateFourthEdit() ) );
143} 253}
144 254
145PhoneEditWidget::~PhoneEditWidget() 255PhoneEditWidget::~PhoneEditWidget()
146{ 256{
147} 257}
148 258
149void PhoneEditWidget::setPhoneNumbers( const KABC::PhoneNumber::List &list ) 259void PhoneEditWidget::setPhoneNumbers( const KABC::PhoneNumber::List &list )
150{ 260{
151 mPhoneList.clear(); 261 mPhoneList.clear();
152 262
153 // Insert types for existing numbers. 263 // Insert types for existing numbers.
154 mPrefCombo->insertTypeList( list ); 264 mPrefCombo->insertTypeList( list );
155 265
156 QValueList<int> defaultTypes; 266 QValueList<int> defaultTypes;
157 defaultTypes << KABC::PhoneNumber::Home; 267 defaultTypes << KABC::PhoneNumber::Home;
158 defaultTypes << KABC::PhoneNumber::Work; 268 defaultTypes << KABC::PhoneNumber::Work;
159 defaultTypes << KABC::PhoneNumber::Cell; 269 defaultTypes << KABC::PhoneNumber::Cell;
160 defaultTypes << ( KABC::PhoneNumber::Work | KABC::PhoneNumber::Fax ); 270 defaultTypes << ( KABC::PhoneNumber::Work | KABC::PhoneNumber::Fax );
161 defaultTypes << ( KABC::PhoneNumber::Home | KABC::PhoneNumber::Fax ); 271 defaultTypes << ( KABC::PhoneNumber::Home | KABC::PhoneNumber::Fax );
162 272
163 // Insert default types. 273 // Insert default types.
164 // Doing this for mPrefCombo is enough because the list is shared by all 274 // Doing this for mPrefCombo is enough because the list is shared by all
165 // combos. 275 // combos.
166 QValueList<int>::ConstIterator it; 276 QValueList<int>::ConstIterator it;
167 for( it = defaultTypes.begin(); it != defaultTypes.end(); ++it ) { 277 for( it = defaultTypes.begin(); it != defaultTypes.end(); ++it ) {
168 if ( !mPrefCombo->hasType( *it ) ) 278 if ( !mPrefCombo->hasType( *it ) )
169 mPrefCombo->insertType( list, *it, PhoneNumber( "", *it ) ); 279 mPrefCombo->insertType( list, *it, PhoneNumber( "", *it ) );
170 } 280 }
171 281
172 updateCombos(); 282 updateCombos();
173 283
174 mPrefCombo->selectType( defaultTypes[ 0 ] ); 284 mPrefCombo->selectType( defaultTypes[ 0 ] );
175 mSecondCombo->selectType( defaultTypes[ 1 ] ); 285 mSecondCombo->selectType( defaultTypes[ 1 ] );
176 mThirdCombo->selectType( defaultTypes[ 2 ] ); 286 mThirdCombo->selectType( defaultTypes[ 2 ] );
177 mFourthCombo->selectType( defaultTypes[ 3 ] ); 287 mFourthCombo->selectType( defaultTypes[ 3 ] );
178 288
179 updateLineEdits(); 289 updateLineEdits();
180} 290}
181 291
182void PhoneEditWidget::updateLineEdits() 292void PhoneEditWidget::updateLineEdits()
183{ 293{
184 updatePrefEdit(); 294 updatePrefEdit();
185 updateSecondEdit(); 295 updateSecondEdit();
186 updateThirdEdit(); 296 updateThirdEdit();
187 updateFourthEdit(); 297 updateFourthEdit();
188} 298}
189 299
190void PhoneEditWidget::updateCombos() 300void PhoneEditWidget::updateCombos()
191{ 301{
192 mPrefCombo->updateTypes(); 302 mPrefCombo->updateTypes();
193 mSecondCombo->updateTypes(); 303 mSecondCombo->updateTypes();
194 mThirdCombo->updateTypes(); 304 mThirdCombo->updateTypes();
195 mFourthCombo->updateTypes(); 305 mFourthCombo->updateTypes();
196} 306}
197 307
198KABC::PhoneNumber::List PhoneEditWidget::phoneNumbers() 308KABC::PhoneNumber::List PhoneEditWidget::phoneNumbers()
199{ 309{
200 KABC::PhoneNumber::List retList; 310 KABC::PhoneNumber::List retList;
201 311
202 KABC::PhoneNumber::List::Iterator it; 312 KABC::PhoneNumber::List::Iterator it;
203 for ( it = mPhoneList.begin(); it != mPhoneList.end(); ++it ) 313 for ( it = mPhoneList.begin(); it != mPhoneList.end(); ++it )
204 if ( !(*it).number().isEmpty() ) 314 if ( !(*it).number().isEmpty() )
205 retList.append( *it ); 315 retList.append( *it );
206 316
207 return retList; 317 return retList;
208} 318}
209 319
210void PhoneEditWidget::edit() 320void PhoneEditWidget::edit()
211{ 321{
212 PhoneEditDialog dlg( mPhoneList, this ); 322 PhoneEditDialog dlg( mPhoneList, this );
213 323
214 if ( dlg.exec() ) { 324 if ( dlg.exec() ) {
215 if ( dlg.changed() ) { 325 if ( dlg.changed() ) {
216 KABC::PhoneNumber::List list = dlg.phoneNumbers(); 326 KABC::PhoneNumber::List list = dlg.phoneNumbers();
217 setPhoneNumbers( list ); 327 setPhoneNumbers( list );
218 updateCombos(); 328 updateCombos();
219 updateLineEdits(); 329 updateLineEdits();
220 emit modified(); 330 emit modified();
221 } 331 }
222 } 332 }
223} 333}
224 334
225void PhoneEditWidget::updatePrefEdit() 335void PhoneEditWidget::updatePrefEdit()
226{ 336{
227 updateEdit( mPrefCombo ); 337 updateEdit( mPrefCombo );
228} 338}
229 339
230void PhoneEditWidget::updateSecondEdit() 340void PhoneEditWidget::updateSecondEdit()
231{ 341{
232 updateEdit( mSecondCombo ); 342 updateEdit( mSecondCombo );
233} 343}
234 344
235void PhoneEditWidget::updateThirdEdit() 345void PhoneEditWidget::updateThirdEdit()
236{ 346{
237 updateEdit( mThirdCombo ); 347 updateEdit( mThirdCombo );
238} 348}
239 349
240void PhoneEditWidget::updateFourthEdit() 350void PhoneEditWidget::updateFourthEdit()
241{ 351{
242 updateEdit( mFourthCombo ); 352 updateEdit( mFourthCombo );
243} 353}
244 354
245void PhoneEditWidget::updateEdit( PhoneTypeCombo *combo ) 355void PhoneEditWidget::updateEdit( PhoneTypeCombo *combo )
246{ 356{
247 QLineEdit *edit = combo->lineEdit(); 357 QLineEdit *edit = combo->lineEdit();
248 if ( !edit ) 358 if ( !edit )
249 return; 359 return;
250 360
251#if 0 361#if 0
252 if ( edit == mPrefEdit ) kdDebug(5720) << " prefEdit" << endl; 362 if ( edit == mPrefEdit ) kdDebug(5720) << " prefEdit" << endl;
253 if ( edit == mSecondEdit ) kdDebug(5720) << " secondEdit" << endl; 363 if ( edit == mSecondEdit ) kdDebug(5720) << " secondEdit" << endl;
254 if ( edit == mThirdEdit ) kdDebug(5720) << " thirdEdit" << endl; 364 if ( edit == mThirdEdit ) kdDebug(5720) << " thirdEdit" << endl;
255 if ( edit == mFourthEdit ) kdDebug(5720) << " fourthEdit" << endl; 365 if ( edit == mFourthEdit ) kdDebug(5720) << " fourthEdit" << endl;
256#endif 366#endif
257 367
258 PhoneNumber::List::Iterator it = combo->selectedElement(); 368 PhoneNumber::List::Iterator it = combo->selectedElement();
259 if ( it != mPhoneList.end() ) { 369 if ( it != mPhoneList.end() ) {
260 edit->setText( (*it).number() ); 370 edit->setText( (*it).number() );
261 } else { 371 } else {
262 kdDebug(5720) << "PhoneEditWidget::updateEdit(): no selected element" << endl; 372 kdDebug(5720) << "PhoneEditWidget::updateEdit(): no selected element" << endl;
263 } 373 }
264} 374}
265 375
266void PhoneEditWidget::slotPrefEditChanged() 376void PhoneEditWidget::slotPrefEditChanged()
267{ 377{
268 updatePhoneNumber( mPrefCombo ); 378 updatePhoneNumber( mPrefCombo );
269} 379}
270 380
271void PhoneEditWidget::slotSecondEditChanged() 381void PhoneEditWidget::slotSecondEditChanged()
272{ 382{
273 updatePhoneNumber( mSecondCombo ); 383 updatePhoneNumber( mSecondCombo );
274} 384}
275 385
276void PhoneEditWidget::slotThirdEditChanged() 386void PhoneEditWidget::slotThirdEditChanged()
277{ 387{
278 updatePhoneNumber( mThirdCombo ); 388 updatePhoneNumber( mThirdCombo );
279} 389}
280 390
281void PhoneEditWidget::slotFourthEditChanged() 391void PhoneEditWidget::slotFourthEditChanged()
282{ 392{
283 updatePhoneNumber( mFourthCombo ); 393 updatePhoneNumber( mFourthCombo );
284} 394}
285 395
286void PhoneEditWidget::updatePhoneNumber( PhoneTypeCombo *combo ) 396void PhoneEditWidget::updatePhoneNumber( PhoneTypeCombo *combo )
287{ 397{
288 QLineEdit *edit = combo->lineEdit(); 398 QLineEdit *edit = combo->lineEdit();
289 if ( !edit ) return; 399 if ( !edit ) return;
290 400
291 PhoneNumber::List::Iterator it = combo->selectedElement(); 401 PhoneNumber::List::Iterator it = combo->selectedElement();
292 if ( it != mPhoneList.end() ) { 402 if ( it != mPhoneList.end() ) {
293 (*it).setNumber( edit->text() ); 403 (*it).setNumber( edit->text() );
294 } 404 }
295 405
296 updateOtherEdit( combo, mPrefCombo ); 406 updateOtherEdit( combo, mPrefCombo );
297 updateOtherEdit( combo, mSecondCombo ); 407 updateOtherEdit( combo, mSecondCombo );
298 updateOtherEdit( combo, mThirdCombo ); 408 updateOtherEdit( combo, mThirdCombo );
299 updateOtherEdit( combo, mFourthCombo ); 409 updateOtherEdit( combo, mFourthCombo );
300 410
301 emit modified(); 411 emit modified();
302} 412}
303 413
304void PhoneEditWidget::updateOtherEdit( PhoneTypeCombo *combo, PhoneTypeCombo *otherCombo ) 414void PhoneEditWidget::updateOtherEdit( PhoneTypeCombo *combo, PhoneTypeCombo *otherCombo )
305{ 415{
306 if ( combo == otherCombo ) return; 416 if ( combo == otherCombo ) return;
307 417
308 if ( combo->currentItem() == otherCombo->currentItem() ) { 418 if ( combo->currentItem() == otherCombo->currentItem() ) {
309 updateEdit( otherCombo ); 419 updateEdit( otherCombo );
310 } 420 }
311} 421}
312 422
313/////////////////////////////////////////// 423///////////////////////////////////////////
314// PhoneEditDialog 424// PhoneEditDialog
315 425
316class PhoneViewItem : public QListViewItem 426class PhoneViewItem : public QListViewItem
317{ 427{
318public: 428public:
319 PhoneViewItem( QListView *parent, const KABC::PhoneNumber &number ); 429 PhoneViewItem( QListView *parent, const KABC::PhoneNumber &number );
320 430
321 void setPhoneNumber( const KABC::PhoneNumber &number ) 431 void setPhoneNumber( const KABC::PhoneNumber &number )
322 { 432 {
323 mPhoneNumber = number; 433 mPhoneNumber = number;
324 makeText(); 434 makeText();
325 } 435 }
326 436
327 QString key() { return mPhoneNumber.id(); } 437 QString key() { return mPhoneNumber.id(); }
328 QString country() { return ""; } 438 QString country() { return ""; }
329 QString region() { return ""; } 439 QString region() { return ""; }
330 QString number() { return ""; } 440 QString number() { return ""; }
331 441
332 KABC::PhoneNumber phoneNumber() { return mPhoneNumber; } 442 KABC::PhoneNumber phoneNumber() { return mPhoneNumber; }
333 443
334private: 444private:
335 void makeText(); 445 void makeText();
336 446
337 KABC::PhoneNumber mPhoneNumber; 447 KABC::PhoneNumber mPhoneNumber;
338}; 448};
339 449
340PhoneViewItem::PhoneViewItem( QListView *parent, const KABC::PhoneNumber &number ) 450PhoneViewItem::PhoneViewItem( QListView *parent, const KABC::PhoneNumber &number )
341 : QListViewItem( parent ), mPhoneNumber( number ) 451 : QListViewItem( parent ), mPhoneNumber( number )
342{ 452{
343#ifdef DESKTOP_VERSION 453#ifdef DESKTOP_VERSION
344 setRenameEnabled ( 0, true ); 454 setRenameEnabled ( 0, true );
345#endif 455#endif
346 makeText(); 456 makeText();
347} 457}
348 458
349void PhoneViewItem::makeText() 459void PhoneViewItem::makeText()
350{ 460{
351 /** 461 /**
352 * Will be used in future versions of kaddressbook/libkabc 462 * Will be used in future versions of kaddressbook/libkabc
353 463
354 setText( 0, mPhoneNumber.country() ); 464 setText( 0, mPhoneNumber.country() );
355 setText( 1, mPhoneNumber.region() ); 465 setText( 1, mPhoneNumber.region() );
356 setText( 2, mPhoneNumber.number() ); 466 setText( 2, mPhoneNumber.number() );
357 setText( 3, mPhoneNumber.typeLabel() ); 467 setText( 3, mPhoneNumber.typeLabel() );
358 */ 468 */
359 469
360 setText( 0, mPhoneNumber.number() ); 470 setText( 0, mPhoneNumber.number() );
361 setText( 1, mPhoneNumber.typeLabel() ); 471 setText( 1, mPhoneNumber.typeLabel() );
362} 472}
363 473
364PhoneEditDialog::PhoneEditDialog( const KABC::PhoneNumber::List &list, QWidget *parent, const char *name ) 474PhoneEditDialog::PhoneEditDialog( const KABC::PhoneNumber::List &list, QWidget *parent, const char *name )
365 : KDialogBase( KDialogBase::Plain, i18n( "Edit Phone Numbers" ), 475 : KDialogBase( KDialogBase::Plain, i18n( "Edit Phone Numbers" ),
366 KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, 476 KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok,
367 parent, name, true) 477 parent, name, true)
368{ 478{
369 mPhoneNumberList = list; 479 mPhoneNumberList = list;
370 480
371 QWidget *page = plainPage(); 481 QWidget *page = plainPage();
372 482
373 QGridLayout *layout = new QGridLayout( page, 1, 2 ); 483 QGridLayout *layout = new QGridLayout( page, 1, 2 );
374 layout->setSpacing( spacingHint() ); 484 layout->setSpacing( spacingHint() );
375 485
376 mListView = new KListView( page ); 486 mListView = new KListView( page );
377 mListView->setAllColumnsShowFocus( true ); 487 mListView->setAllColumnsShowFocus( true );
378 mListView->addColumn( i18n( "Number" ) ); 488 mListView->addColumn( i18n( "Number" ) );
379 mListView->addColumn( i18n( "Type" ) ); 489 mListView->addColumn( i18n( "Type" ) );
380 490
381 KButtonBox *buttonBox = new KButtonBox( page, Vertical ); 491 KButtonBox *buttonBox = new KButtonBox( page, Vertical );
382 492
383 buttonBox->addButton( i18n( "&Add..." ), this, SLOT( slotAddPhoneNumber() ) ); 493 buttonBox->addButton( i18n( "&Add..." ), this, SLOT( slotAddPhoneNumber() ) );
384 mEditButton = buttonBox->addButton( i18n( "&Edit..." ), this, SLOT( slotEditPhoneNumber() ) ); 494 mEditButton = buttonBox->addButton( i18n( "&Edit..." ), this, SLOT( slotEditPhoneNumber() ) );
385 mEditButton->setEnabled( false ); 495 mEditButton->setEnabled( false );
386 mRemoveButton = buttonBox->addButton( i18n( "&Remove" ), this, SLOT( slotRemovePhoneNumber() ) ); 496 mRemoveButton = buttonBox->addButton( i18n( "&Remove" ), this, SLOT( slotRemovePhoneNumber() ) );
387 mRemoveButton->setEnabled( false ); 497 mRemoveButton->setEnabled( false );
388 buttonBox->layout(); 498 buttonBox->layout();
389 499
390 layout->addWidget( mListView, 0, 0 ); 500 layout->addWidget( mListView, 0, 0 );
391 layout->addWidget( buttonBox, 0, 1 ); 501 layout->addWidget( buttonBox, 0, 1 );
392 502
393 connect( mListView, SIGNAL(selectionChanged()), SLOT(slotSelectionChanged()) ); 503 connect( mListView, SIGNAL(selectionChanged()), SLOT(slotSelectionChanged()) );
394 connect( mListView, SIGNAL(doubleClicked( QListViewItem *, const QPoint &, int )), this, SLOT( slotEditPhoneNumber())); 504 connect( mListView, SIGNAL(doubleClicked( QListViewItem *, const QPoint &, int )), this, SLOT( slotEditPhoneNumber()));
395 505
396 KABC::PhoneNumber::List::Iterator it; 506 KABC::PhoneNumber::List::Iterator it;
397 for ( it = mPhoneNumberList.begin(); it != mPhoneNumberList.end(); ++it ) 507 for ( it = mPhoneNumberList.begin(); it != mPhoneNumberList.end(); ++it )
398 new PhoneViewItem( mListView, *it ); 508 new PhoneViewItem( mListView, *it );
399 if (QApplication::desktop()->width() < 480 ) 509 if (QApplication::desktop()->width() < 480 )
400 showMaximized(); 510 showMaximized();
401 else 511 else
402 resize( 400, 400 ); 512 resize( 400, 400 );
403 mChanged = false; 513 mChanged = false;
404} 514}
405 515
406PhoneEditDialog::~PhoneEditDialog() 516PhoneEditDialog::~PhoneEditDialog()
407{ 517{
408} 518}
409 519
410void PhoneEditDialog::slotAddPhoneNumber() 520void PhoneEditDialog::slotAddPhoneNumber()
411{ 521{
412 KABC::PhoneNumber tmp( "", 0 ); 522 KABC::PhoneNumber tmp( "", 0 );
413 PhoneTypeDialog dlg( tmp, this ); 523 PhoneTypeDialog dlg( tmp, this );
414 524
415 if ( dlg.exec() ) { 525 if ( dlg.exec() ) {
416 QListViewItem* i = mListView->firstChild(); 526 QListViewItem* i = mListView->firstChild();
417 KABC::PhoneNumber phoneNumber = dlg.phoneNumber(); 527 KABC::PhoneNumber phoneNumber = dlg.phoneNumber();
418 bool insert = true; 528 bool insert = true;
419 while ( i ) { 529 while ( i ) {
420 PhoneViewItem* p = ( PhoneViewItem* ) i; 530 PhoneViewItem* p = ( PhoneViewItem* ) i;
421 KABC::PhoneNumber pn = p->phoneNumber(); 531 KABC::PhoneNumber pn = p->phoneNumber();
422 if ( (pn.type() | KABC::PhoneNumber::Pref) == (phoneNumber.type() | KABC::PhoneNumber::Pref) ) { 532 if ( (pn.type() | KABC::PhoneNumber::Pref) == (phoneNumber.type() | KABC::PhoneNumber::Pref) ) {
423 if ( p->text(0).isEmpty()) { 533 if ( p->text(0).isEmpty()) {
424 p->setPhoneNumber( phoneNumber ); 534 p->setPhoneNumber( phoneNumber );
425 mPhoneNumberList.remove( pn ); 535 mPhoneNumberList.remove( pn );
426 mPhoneNumberList.append( phoneNumber ); 536 mPhoneNumberList.append( phoneNumber );
427 insert = false; 537 insert = false;
428 break; 538 break;
429 } 539 }
430 } 540 }
431 i = i->nextSibling(); 541 i = i->nextSibling();
432 } 542 }
433 if ( insert ) { 543 if ( insert ) {
434 mPhoneNumberList.append( phoneNumber ); 544 mPhoneNumberList.append( phoneNumber );
435 new PhoneViewItem( mListView, phoneNumber ); 545 new PhoneViewItem( mListView, phoneNumber );
436 } 546 }
437 mChanged = true; 547 mChanged = true;
438 } 548 }
439} 549}
440 550
441void PhoneEditDialog::slotRemovePhoneNumber() 551void PhoneEditDialog::slotRemovePhoneNumber()
442{ 552{
443 PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() ); 553 PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() );
444 if ( !item ) 554 if ( !item )
445 return; 555 return;
446 556
447 mPhoneNumberList.remove( item->phoneNumber() ); 557 mPhoneNumberList.remove( item->phoneNumber() );
448 QListViewItem *currItem = mListView->currentItem(); 558 QListViewItem *currItem = mListView->currentItem();
449 mListView->takeItem( currItem ); 559 mListView->takeItem( currItem );
450 delete currItem; 560 delete currItem;
451 561
452 mChanged = true; 562 mChanged = true;
453} 563}
454 564
455void PhoneEditDialog::slotEditPhoneNumber() 565void PhoneEditDialog::slotEditPhoneNumber()
456{ 566{
457 PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() ); 567 PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() );
458 if ( !item ) 568 if ( !item )
459 return; 569 return;
460 570
461 PhoneTypeDialog dlg( item->phoneNumber(), this ); 571 PhoneTypeDialog dlg( item->phoneNumber(), this );
462 572
463 if ( dlg.exec() ) { 573 if ( dlg.exec() ) {
464 slotRemovePhoneNumber(); 574 slotRemovePhoneNumber();
465 KABC::PhoneNumber phoneNumber = dlg.phoneNumber(); 575 KABC::PhoneNumber phoneNumber = dlg.phoneNumber();
466 mPhoneNumberList.append( phoneNumber ); 576 mPhoneNumberList.append( phoneNumber );
467 new PhoneViewItem( mListView, phoneNumber ); 577 new PhoneViewItem( mListView, phoneNumber );
468 578
469 mChanged = true; 579 mChanged = true;
470 } 580 }
471} 581}
472 582
473void PhoneEditDialog::slotSelectionChanged() 583void PhoneEditDialog::slotSelectionChanged()
474{ 584{
475 bool state = ( mListView->currentItem() != 0 ); 585 bool state = ( mListView->currentItem() != 0 );
476 586
477 mRemoveButton->setEnabled( state ); 587 mRemoveButton->setEnabled( state );
478 mEditButton->setEnabled( state ); 588 mEditButton->setEnabled( state );
479} 589}
480 590
481const KABC::PhoneNumber::List &PhoneEditDialog::phoneNumbers() 591const KABC::PhoneNumber::List &PhoneEditDialog::phoneNumbers()
482{ 592{
483 return mPhoneNumberList; 593 return mPhoneNumberList;
484} 594}
485 595
486bool PhoneEditDialog::changed() const 596bool PhoneEditDialog::changed() const
487{ 597{
488 return mChanged; 598 return mChanged;
489} 599}
490 600
491/////////////////////////////////////////// 601///////////////////////////////////////////
492// PhoneTypeDialog 602// PhoneTypeDialog
493PhoneTypeDialog::PhoneTypeDialog( const KABC::PhoneNumber &phoneNumber, 603PhoneTypeDialog::PhoneTypeDialog( const KABC::PhoneNumber &phoneNumber,
494 QWidget *parent, const char *name) 604 QWidget *parent, const char *name)
495 : KDialogBase( KDialogBase::Plain, i18n( "Edit Phone Number" ), 605 : KDialogBase( KDialogBase::Plain, i18n( "Edit Phone Number" ),
496 KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, 606 KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok,
497 parent, name, true), mPhoneNumber( phoneNumber ) 607 parent, name, true), mPhoneNumber( phoneNumber )
498{ 608{
499 QWidget *page = plainPage(); 609 QWidget *page = plainPage();
500 QLabel *label = 0; 610 QLabel *label = 0;
501 QGridLayout *layout = new QGridLayout( page, 3, 2, marginHint(), spacingHint() ); 611 QGridLayout *layout = new QGridLayout( page, 3, 2, marginHint(), spacingHint() );
502 612
503 label = new QLabel( i18n( "Number:" ), page ); 613 label = new QLabel( i18n( "Number:" ), page );
504 layout->addWidget( label, 0, 0 ); 614 layout->addWidget( label, 0, 0 );
505 mNumber = new KLineEdit( page ); 615 mNumber = new KLineEdit( page );
506 layout->addWidget( mNumber, 0, 1 ); 616 layout->addWidget( mNumber, 0, 1 );
507 617
508 mPreferredBox = new QCheckBox( i18n( "This is the preferred phone number" ), page ); 618 mPreferredBox = new QCheckBox( i18n( "This is the preferred phone number" ), page );
509 layout->addMultiCellWidget( mPreferredBox, 1, 1, 0, 1 ); 619 layout->addMultiCellWidget( mPreferredBox, 1, 1, 0, 1 );
510 620
511 mGroup = new QButtonGroup( 2, Horizontal, i18n( "Types" ), page ); 621 mGroup = new QButtonGroup( 2, Horizontal, i18n( "Types" ), page );
512 layout->addMultiCellWidget( mGroup, 2, 2, 0, 1 ); 622 layout->addMultiCellWidget( mGroup, 2, 2, 0, 1 );
513 623
514 // fill widgets 624 // fill widgets
515 mNumber->setText( mPhoneNumber.number() ); 625 mNumber->setText( mPhoneNumber.number() );
516 626
517 mTypeList = KABC::PhoneNumber::typeList(); 627 mTypeList = KABC::PhoneNumber::typeList();
518 mTypeList.remove( KABC::PhoneNumber::Pref ); 628 mTypeList.remove( KABC::PhoneNumber::Pref );
519 629
520 KABC::PhoneNumber::TypeList::Iterator it; 630 KABC::PhoneNumber::TypeList::Iterator it;
521 for ( it = mTypeList.begin(); it != mTypeList.end(); ++it ) 631 for ( it = mTypeList.begin(); it != mTypeList.end(); ++it )
522 new QCheckBox( KABC::PhoneNumber::typeLabel( *it ), mGroup ); 632 new QCheckBox( KABC::PhoneNumber::typeLabel( *it ), mGroup );
523 633
524 for ( int i = 0; i < mGroup->count(); ++i ) { 634 for ( int i = 0; i < mGroup->count(); ++i ) {
525 int type = mPhoneNumber.type(); 635 int type = mPhoneNumber.type();
526 QCheckBox *box = (QCheckBox*)mGroup->find( i ); 636 QCheckBox *box = (QCheckBox*)mGroup->find( i );
527 box->setChecked( type & mTypeList[ i ] ); 637 box->setChecked( type & mTypeList[ i ] );
528 } 638 }
529 639
530 mPreferredBox->setChecked( mPhoneNumber.type() & KABC::PhoneNumber::Pref ); 640 mPreferredBox->setChecked( mPhoneNumber.type() & KABC::PhoneNumber::Pref );
531 mNumber->setFocus(); 641 mNumber->setFocus();
532 mNumber->setSelection( 0, 1024); 642 mNumber->setSelection( 0, 1024);
533} 643}
534 644
535KABC::PhoneNumber PhoneTypeDialog::phoneNumber() 645KABC::PhoneNumber PhoneTypeDialog::phoneNumber()
536{ 646{
537 mPhoneNumber.setNumber( mNumber->text() ); 647 mPhoneNumber.setNumber( mNumber->text() );
538 648
539 int type = 0; 649 int type = 0;
540 for ( int i = 0; i < mGroup->count(); ++i ) { 650 for ( int i = 0; i < mGroup->count(); ++i ) {
541 QCheckBox *box = (QCheckBox*)mGroup->find( i ); 651 QCheckBox *box = (QCheckBox*)mGroup->find( i );
542 if ( box->isChecked() ) 652 if ( box->isChecked() )
543 type += mTypeList[ i ]; 653 type += mTypeList[ i ];
544 } 654 }
545 655
546 if ( mPreferredBox->isChecked() ) 656 if ( mPreferredBox->isChecked() )
547 mPhoneNumber.setType( type | KABC::PhoneNumber::Pref ); 657 mPhoneNumber.setType( type | KABC::PhoneNumber::Pref );
548 else 658 else
549 mPhoneNumber.setType( type & ~KABC::PhoneNumber::Pref ); 659 mPhoneNumber.setType( type & ~KABC::PhoneNumber::Pref );
550 660
551 return mPhoneNumber; 661 return mPhoneNumber;
552} 662}
553 663#endif
554#ifndef KAB_EMBEDDED 664#ifndef KAB_EMBEDDED
555#include "phoneeditwidget.moc" 665#include "phoneeditwidget.moc"
556#endif //KAB_EMBEDDED 666#endif //KAB_EMBEDDED