summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-10-28 12:10:35 (UTC)
committer zautrix <zautrix>2005-10-28 12:10:35 (UTC)
commitcee83f70d8e4a6945f4456c55ab1b280d3425f0f (patch) (unidiff)
tree1b317655a344f1a3640ef2561d61075e0feddd64
parentb27cb619bb9005ad4345d38bbee3b1c3d0eda1b2 (diff)
downloadkdepimpi-cee83f70d8e4a6945f4456c55ab1b280d3425f0f.zip
kdepimpi-cee83f70d8e4a6945f4456c55ab1b280d3425f0f.tar.gz
kdepimpi-cee83f70d8e4a6945f4456c55ab1b280d3425f0f.tar.bz2
commit
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/phoneeditwidget.cpp37
-rw-r--r--kaddressbook/phoneeditwidget.h18
2 files changed, 31 insertions, 24 deletions
diff --git a/kaddressbook/phoneeditwidget.cpp b/kaddressbook/phoneeditwidget.cpp
index b20275d..997fc05 100644
--- a/kaddressbook/phoneeditwidget.cpp
+++ b/kaddressbook/phoneeditwidget.cpp
@@ -14,195 +14,201 @@
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#include <qhbox.h>
34 34
35#include <kbuttonbox.h> 35#include <kbuttonbox.h>
36#include <klistview.h> 36#include <klistview.h>
37#include <kapplication.h> 37#include <kapplication.h>
38#include <qapplication.h> 38#include <qapplication.h>
39#include <kconfig.h> 39#include <kconfig.h>
40#include <klineedit.h> 40#include <klineedit.h>
41#include <kcombobox.h> 41#include <kcombobox.h>
42#include <klocale.h> 42#include <klocale.h>
43#include <kdebug.h> 43#include <kdebug.h>
44#include <kglobal.h> 44#include <kglobal.h>
45#include <kiconloader.h> 45#include <kiconloader.h>
46 46
47#include <kabc/phonenumber.h> 47#include <kabc/phonenumber.h>
48 48
49#include "typecombo.h" 49#include "typecombo.h"
50 50
51#include "phoneeditwidget.h" 51#include "phoneeditwidget.h"
52 52
53PhoneEditWidget::PhoneEditWidget( QWidget *parent, const char *name ) 53PhoneEditWidget::PhoneEditWidget( QWidget *parent, const char *name )
54 : QScrollView(parent,name) 54 : QScrollView(parent,name)
55{ 55{
56 setFrameStyle ( QFrame::Panel | QFrame::Plain ); 56 setFrameStyle ( QFrame::Panel | QFrame::Plain );
57 setLineWidth ( 1 ); 57 setLineWidth ( 1 );
58 setMidLineWidth ( 1 ); 58 setMidLineWidth ( 1 );
59 mw = new QWidget ( viewport() ); 59 mw = new QWidget ( viewport() );
60 addChild(mw); 60 addChild(mw);
61 setResizePolicy( AutoOneFit ); 61 setResizePolicy( AutoOneFit );
62 mainLayout = new QVBoxLayout ( mw ); 62 mainLayout = new QVBoxLayout ( mw );
63 mainLayout->setMargin( 2 ); 63 mainLayout->setMargin( 2 );
64 mainLayout->setSpacing( 2 ); 64 mainLayout->setSpacing( 2 );
65 QWidget* hb = new QWidget ( mw ); 65 QWidget* hb = new QWidget ( mw );
66 mainLayout->add( hb ); 66 mainLayout->add( hb );
67 QHBoxLayout* hbLayout = new QHBoxLayout ( hb ); 67 QHBoxLayout* hbLayout = new QHBoxLayout ( hb );
68 QPushButton *addBut = new QPushButton ( "add", hb ); 68 QPushButton *addBut = new QPushButton ( "add", hb );
69 hbLayout->add( addBut ); 69 hbLayout->add( addBut );
70 addBut->setPixmap ( SmallIcon("plus")); 70 addBut->setPixmap ( SmallIcon("plus"));
71 addBut->setMaximumSize( addBut->sizeHint().height(),addBut->sizeHint().height() ); 71 addBut->setMaximumSize( addBut->sizeHint().height(),addBut->sizeHint().height() );
72 connect(addBut,SIGNAL(clicked()),SLOT(addNumber())); 72 connect(addBut,SIGNAL(clicked()),SLOT(addNumber()));
73 //QLabel * temp = new QLabel( i18n("Phone Type"), hb ); 73 //QLabel * temp = new QLabel( i18n("Phone Type"), hb );
74 QLabel *temp = new QLabel( i18n("Phone Number"),hb ); 74 QLabel *temp = new QLabel( i18n("Phone Number"),hb );
75 temp->setAlignment( Qt::AlignCenter ); 75 temp->setAlignment( Qt::AlignCenter );
76 temp->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) ); 76 temp->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) );
77 hbLayout->add( temp ); 77 hbLayout->add( temp );
78 appendEditCombo();
79 appendEditCombo();
80 appendEditCombo();
81 setDefaults(); 78 setDefaults();
79 mTypeNumberEditList.setAutoDelete( true );
82} 80}
83 81
84PhoneEditWidget::~PhoneEditWidget() 82PhoneEditWidget::~PhoneEditWidget()
85{ 83{
86} 84}
87void PhoneEditWidget::setDefaults() 85void PhoneEditWidget::setDefaults()
88{ 86{
89 PhoneTypeNumberEdit* edit = mTypeNumberEditList.first(); 87 mTypeNumberEditList.clear();
88 PhoneTypeNumberEdit* edit = appendEditCombo();
90 KABC::PhoneNumber phoneNumber; 89 KABC::PhoneNumber phoneNumber;
91 phoneNumber.setType( KABC::PhoneNumber::Home | KABC::PhoneNumber::Pref ); 90 phoneNumber.setType( KABC::PhoneNumber::Home | KABC::PhoneNumber::Pref );
92 edit->setPhoneNumber( phoneNumber ); 91 edit->setPhoneNumber( phoneNumber );
93 edit = mTypeNumberEditList.next(); 92 edit = appendEditCombo();
94 phoneNumber.setType( KABC::PhoneNumber::Work | KABC::PhoneNumber::Pref ); 93 phoneNumber.setType( KABC::PhoneNumber::Work | KABC::PhoneNumber::Pref );
95 edit->setPhoneNumber( phoneNumber ); 94 edit->setPhoneNumber( phoneNumber );
96 edit = mTypeNumberEditList.next(); 95 edit = appendEditCombo();
97 phoneNumber.setType( KABC::PhoneNumber::Cell ); 96 phoneNumber.setType( KABC::PhoneNumber::Cell );
98 edit->setPhoneNumber( phoneNumber ); 97 edit->setPhoneNumber( phoneNumber );
99 edit = mTypeNumberEditList.next(); 98
100 while ( edit ) {
101 edit->hide();
102 edit = mTypeNumberEditList.next();
103 }
104} 99}
105void PhoneEditWidget::addNumber() 100void PhoneEditWidget::addNumber()
106{ 101{
107 102
108} 103}
109PhoneTypeNumberEdit* PhoneEditWidget::appendEditCombo() 104PhoneTypeNumberEdit* PhoneEditWidget::appendEditCombo()
110{ 105{
111 PhoneTypeNumberEdit* edit = new PhoneTypeNumberEdit( mw ); 106 PhoneTypeNumberEdit* edit = new PhoneTypeNumberEdit( mw );
112 connect ( edit, SIGNAL ( typeChange( int , int) ), this, SIGNAL ( typeChange( int , int)) ); 107 connect ( edit, SIGNAL ( typeChange( int , int) ), this, SIGNAL ( typeChange( int , int)) );
113 connect ( edit, SIGNAL ( modified() ), this, SIGNAL ( modified() ) ); 108 connect ( edit, SIGNAL ( modified() ), this, SIGNAL ( modified() ) );
109 connect ( edit, SIGNAL ( deleteMe( PhoneTypeNumberEdit* ) ), this, SLOT ( deleteEdit( PhoneTypeNumberEdit*) ) );
114 connect ( this, SIGNAL ( typeChange( int , int)), edit, SLOT ( typeExternalChanged( int, int)) ); 110 connect ( this, SIGNAL ( typeChange( int , int)), edit, SLOT ( typeExternalChanged( int, int)) );
115 111
116 mainLayout->add( edit ); 112 mainLayout->add( edit );
117 mTypeNumberEditList.append( edit ); 113 mTypeNumberEditList.append( edit );
118 return edit; 114 return edit;
119} 115}
120 116
117void PhoneEditWidget::deleteEdit( PhoneTypeNumberEdit* ew )
118{
119 mPendingDelete = ew;
120 QTimer::singleShot( 0, this, SLOT ( pendingDelete() ) );
121}
122void PhoneEditWidget::pendingDelete()
123{
124 mTypeNumberEditList.removeRef( mPendingDelete );
125 emit modified();
126}
127
121void PhoneEditWidget::setPhoneNumbers( const KABC::PhoneNumber::List &li ) 128void PhoneEditWidget::setPhoneNumbers( const KABC::PhoneNumber::List &li )
122{ 129{
123 if ( li.isEmpty() ) { 130 if ( li.isEmpty() ) {
124 setDefaults(); 131 setDefaults();
125 return; 132 return;
126 } 133 }
134 mTypeNumberEditList.clear();
127 KABC::PhoneNumber::List::Iterator it; 135 KABC::PhoneNumber::List::Iterator it;
128 KABC::PhoneNumber::List list = li; 136 KABC::PhoneNumber::List list = li;
129 PhoneTypeNumberEdit* edit = mTypeNumberEditList.first(); 137 PhoneTypeNumberEdit* edit = 0;//mTypeNumberEditList.first();
130 for ( it = list.begin(); it != list.end(); ++it ) { 138 for ( it = list.begin(); it != list.end(); ++it ) {
131 if ( edit ) { 139 if ( edit ) {
132 edit->setPhoneNumber( (*it ) ); 140 edit->setPhoneNumber( (*it ) );
133 edit = mTypeNumberEditList.next(); 141 edit = mTypeNumberEditList.next();
134 } else { 142 } else {
135 PhoneTypeNumberEdit* editNew = appendEditCombo(); 143 PhoneTypeNumberEdit* editNew = appendEditCombo();
136 editNew->setPhoneNumber( (*it ) ); 144 editNew->setPhoneNumber( (*it ) );
137 } 145 }
138 } 146 }
139 while ( edit ) { 147 while ( edit ) {
140 edit->hide(); 148 edit->hide();
141 edit = mTypeNumberEditList.next(); 149 edit = mTypeNumberEditList.next();
142 } 150 }
143 //mainLayout->invalidate ();
144 mw->update();
145} 151}
146KABC::PhoneNumber::List PhoneEditWidget::phoneNumbers() 152KABC::PhoneNumber::List PhoneEditWidget::phoneNumbers()
147{ 153{
148 KABC::PhoneNumber::List retList; 154 KABC::PhoneNumber::List retList;
149 155
150 PhoneTypeNumberEdit* edit = mTypeNumberEditList.first(); 156 PhoneTypeNumberEdit* edit = mTypeNumberEditList.first();
151 while ( edit ) { 157 while ( edit ) {
152 if ( edit->isValid() ) { 158 if ( edit->isValid() ) {
153 retList.append( edit->phoneNumber()); 159 retList.append( edit->phoneNumber());
154 } 160 }
155 edit = mTypeNumberEditList.next(); 161 edit = mTypeNumberEditList.next();
156 162
157 } 163 }
158 return retList; 164 return retList;
159} 165}
160 166
161#if 0 167#if 0
162PhoneEditWidget::PhoneEditWidget( QWidget *parent, const char *name ) 168PhoneEditWidget::PhoneEditWidget( QWidget *parent, const char *name )
163 : QWidget( parent, name ) 169 : QWidget( parent, name )
164{ 170{
165 QGridLayout *layout = new QGridLayout( this, 4, 1 ); 171 QGridLayout *layout = new QGridLayout( this, 4, 1 );
166//US layout->setSpacing( KDialog::spacingHint() ); 172//US layout->setSpacing( KDialog::spacingHint() );
167 layout->setSpacing( KDialogBase::spacingHintSmall() ); 173 layout->setSpacing( KDialogBase::spacingHintSmall() );
168 174
169 175
170 176
171 QLabel* label = new QLabel( this ); 177 QLabel* label = new QLabel( this );
172//US loadIcon call is ambiguous. Add one more parameter 178//US loadIcon call is ambiguous. Add one more parameter
173//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop ) ); 179//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop ) );
174 label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) ); 180 label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) );
175 label->setAlignment( AlignCenter ); 181 label->setAlignment( AlignCenter );
176//US layout->addMultiCellWidget( label, 0, 1, 3, 3 ); 182//US layout->addMultiCellWidget( label, 0, 1, 3, 3 );
177 layout->addWidget( label, 0, 0 ); 183 layout->addWidget( label, 0, 0 );
178 184
179 QPushButton *editButton = new QPushButton( i18n( "Edit Phone Numbers..." ), 185 QPushButton *editButton = new QPushButton( i18n( "Edit Phone Numbers..." ),
180 this ); 186 this );
181 if ( QApplication::desktop()->width() < 640 ) 187 if ( QApplication::desktop()->width() < 640 )
182 layout->addWidget( editButton, 0, 1 ); 188 layout->addWidget( editButton, 0, 1 );
183 else 189 else
184 layout->addMultiCellWidget( editButton, 0, 0, 1, 3); 190 layout->addMultiCellWidget( editButton, 0, 0, 1, 3);
185 191
186 mPrefCombo = new PhoneTypeCombo( mPhoneList, this ); 192 mPrefCombo = new PhoneTypeCombo( mPhoneList, this );
187 mPrefEdit = new KLineEdit( this ); 193 mPrefEdit = new KLineEdit( this );
188 //mPrefEdit->setMinimumWidth( int(mPrefEdit->sizeHint().width() * 1.5) ); 194 //mPrefEdit->setMinimumWidth( int(mPrefEdit->sizeHint().width() * 1.5) );
189 mPrefCombo->setLineEdit( mPrefEdit ); 195 mPrefCombo->setLineEdit( mPrefEdit );
190 layout->addWidget( mPrefCombo, 1, 0 ); 196 layout->addWidget( mPrefCombo, 1, 0 );
191 layout->addWidget( mPrefEdit, 1, 1 ); 197 layout->addWidget( mPrefEdit, 1, 1 );
192 int x = 1, y = 2; 198 int x = 1, y = 2;
193 if ( QApplication::desktop()->width() < 640 ) { 199 if ( QApplication::desktop()->width() < 640 ) {
194 ++x; 200 ++x;
195 y = 0; 201 y = 0;
196 } 202 }
197 mSecondCombo = new PhoneTypeCombo( mPhoneList, this ); 203 mSecondCombo = new PhoneTypeCombo( mPhoneList, this );
198 mSecondEdit = new KLineEdit( this ); 204 mSecondEdit = new KLineEdit( this );
199 mSecondCombo->setLineEdit( mSecondEdit ); 205 mSecondCombo->setLineEdit( mSecondEdit );
200 layout->addWidget( mSecondCombo, x, y++ ); 206 layout->addWidget( mSecondCombo, x, y++ );
201 layout->addWidget( mSecondEdit, x, y++ ); 207 layout->addWidget( mSecondEdit, x, y++ );
202 208
203 y = 0; 209 y = 0;
204 ++x; 210 ++x;
205 mThirdCombo = new PhoneTypeCombo( mPhoneList, this ); 211 mThirdCombo = new PhoneTypeCombo( mPhoneList, this );
206 mThirdEdit = new KLineEdit( this ); 212 mThirdEdit = new KLineEdit( this );
207 mThirdCombo->setLineEdit( mThirdEdit ); 213 mThirdCombo->setLineEdit( mThirdEdit );
208 layout->addWidget( mThirdCombo, x, y++ ); 214 layout->addWidget( mThirdCombo, x, y++ );
@@ -454,128 +460,129 @@ PhoneViewItem::PhoneViewItem( QListView *parent, const KABC::PhoneNumber &number
454 setRenameEnabled ( 0, true ); 460 setRenameEnabled ( 0, true );
455#endif 461#endif
456 makeText(); 462 makeText();
457} 463}
458 464
459void PhoneViewItem::makeText() 465void PhoneViewItem::makeText()
460{ 466{
461 /** 467 /**
462 * Will be used in future versions of kaddressbook/libkabc 468 * Will be used in future versions of kaddressbook/libkabc
463 469
464 setText( 0, mPhoneNumber.country() ); 470 setText( 0, mPhoneNumber.country() );
465 setText( 1, mPhoneNumber.region() ); 471 setText( 1, mPhoneNumber.region() );
466 setText( 2, mPhoneNumber.number() ); 472 setText( 2, mPhoneNumber.number() );
467 setText( 3, mPhoneNumber.typeLabel() ); 473 setText( 3, mPhoneNumber.typeLabel() );
468 */ 474 */
469 475
470 setText( 0, mPhoneNumber.number() ); 476 setText( 0, mPhoneNumber.number() );
471 setText( 1, mPhoneNumber.typeLabel() ); 477 setText( 1, mPhoneNumber.typeLabel() );
472} 478}
473 479
474PhoneEditDialog::PhoneEditDialog( const KABC::PhoneNumber::List &list, QWidget *parent, const char *name ) 480PhoneEditDialog::PhoneEditDialog( const KABC::PhoneNumber::List &list, QWidget *parent, const char *name )
475 : KDialogBase( KDialogBase::Plain, i18n( "Edit Phone Numbers" ), 481 : KDialogBase( KDialogBase::Plain, i18n( "Edit Phone Numbers" ),
476 KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, 482 KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok,
477 parent, name, true) 483 parent, name, true)
478{ 484{
479 mPhoneNumberList = list; 485 mPhoneNumberList = list;
480 486
481 QWidget *page = plainPage(); 487 QWidget *page = plainPage();
482 488
483 QGridLayout *layout = new QGridLayout( page, 1, 2 ); 489 QGridLayout *layout = new QGridLayout( page, 1, 2 );
484 layout->setSpacing( spacingHint() ); 490 layout->setSpacing( spacingHint() );
485 491
486 mListView = new KListView( page ); 492 mListView = new KListView( page );
487 mListView->setAllColumnsShowFocus( true ); 493 mListView->setAllColumnsShowFocus( true );
488 mListView->addColumn( i18n( "Number" ) ); 494 mListView->addColumn( i18n( "Number" ) );
489 mListView->addColumn( i18n( "Type" ) ); 495 mListView->addColumn( i18n( "Type" ) );
490 496
491 KButtonBox *buttonBox = new KButtonBox( page, Vertical ); 497 KButtonBox *buttonBox = new KButtonBox( page, Vertical );
492 498
493 buttonBox->addButton( i18n( "&Add..." ), this, SLOT( slotAddPhoneNumber() ) ); 499 buttonBox->addButton( i18n( "&Add..." ), this, SLOT( slotAddPhoneNumber() ) );
494 mEditButton = buttonBox->addButton( i18n( "&Edit..." ), this, SLOT( slotEditPhoneNumber() ) ); 500 mEditButton = buttonBox->addButton( i18n( "&Edit..." ), this, SLOT( slotEditPhoneNumber() ) );
495 mEditButton->setEnabled( false ); 501 mEditButton->setEnabled( false );
496 mRemoveButton = buttonBox->addButton( i18n( "&Remove" ), this, SLOT( slotRemovePhoneNumber() ) ); 502 mRemoveButton = buttonBox->addButton( i18n( "&Remove" ), this, SLOT( slotRemovePhoneNumber() ) );
497 mRemoveButton->setEnabled( false ); 503 mRemoveButton->setEnabled( false );
498 buttonBox->layout(); 504 buttonBox->layout();
499 505
500 layout->addWidget( mListView, 0, 0 ); 506 layout->addWidget( mListView, 0, 0 );
501 layout->addWidget( buttonBox, 0, 1 ); 507 layout->addWidget( buttonBox, 0, 1 );
502 508
503 connect( mListView, SIGNAL(selectionChanged()), SLOT(slotSelectionChanged()) ); 509 connect( mListView, SIGNAL(selectionChanged()), SLOT(slotSelectionChanged()) );
504 connect( mListView, SIGNAL(doubleClicked( QListViewItem *, const QPoint &, int )), this, SLOT( slotEditPhoneNumber())); 510 connect( mListView, SIGNAL(doubleClicked( QListViewItem *, const QPoint &, int )), this, SLOT( slotEditPhoneNumber()));
505 511
506 KABC::PhoneNumber::List::Iterator it; 512 KABC::PhoneNumber::List::Iterator it;
507 for ( it = mPhoneNumberList.begin(); it != mPhoneNumberList.end(); ++it ) 513 for ( it = mPhoneNumberList.begin(); it != mPhoneNumberList.end(); ++it )
508 new PhoneViewItem( mListView, *it ); 514 new PhoneViewItem( mListView, *it );
509 if (QApplication::desktop()->width() < 480 ) 515 if (QApplication::desktop()->width() < 480 )
510 showMaximized(); 516 showMaximized();
511 else 517 else
512 resize( 400, 400 ); 518 resize( 400, 400 );
513 mChanged = false; 519 mChanged = false;
514} 520}
515 521
516PhoneEditDialog::~PhoneEditDialog() 522PhoneEditDialog::~PhoneEditDialog()
517{ 523{
524 qDebug("PhoneEditDialog::~PhoneEditDialog() ");
518} 525}
519 526
520void PhoneEditDialog::slotAddPhoneNumber() 527void PhoneEditDialog::slotAddPhoneNumber()
521{ 528{
522 KABC::PhoneNumber tmp( "", 0 ); 529 KABC::PhoneNumber tmp( "", 0 );
523 PhoneTypeDialog dlg( tmp, this ); 530 PhoneTypeDialog dlg( tmp, this );
524 531
525 if ( dlg.exec() ) { 532 if ( dlg.exec() ) {
526 QListViewItem* i = mListView->firstChild(); 533 QListViewItem* i = mListView->firstChild();
527 KABC::PhoneNumber phoneNumber = dlg.phoneNumber(); 534 KABC::PhoneNumber phoneNumber = dlg.phoneNumber();
528 bool insert = true; 535 bool insert = true;
529 while ( i ) { 536 while ( i ) {
530 PhoneViewItem* p = ( PhoneViewItem* ) i; 537 PhoneViewItem* p = ( PhoneViewItem* ) i;
531 KABC::PhoneNumber pn = p->phoneNumber(); 538 KABC::PhoneNumber pn = p->phoneNumber();
532 if ( (pn.type() | KABC::PhoneNumber::Pref) == (phoneNumber.type() | KABC::PhoneNumber::Pref) ) { 539 if ( (pn.type() | KABC::PhoneNumber::Pref) == (phoneNumber.type() | KABC::PhoneNumber::Pref) ) {
533 if ( p->text(0).isEmpty()) { 540 if ( p->text(0).isEmpty()) {
534 p->setPhoneNumber( phoneNumber ); 541 p->setPhoneNumber( phoneNumber );
535 mPhoneNumberList.remove( pn ); 542 mPhoneNumberList.remove( pn );
536 mPhoneNumberList.append( phoneNumber ); 543 mPhoneNumberList.append( phoneNumber );
537 insert = false; 544 insert = false;
538 break; 545 break;
539 } 546 }
540 } 547 }
541 i = i->nextSibling(); 548 i = i->nextSibling();
542 } 549 }
543 if ( insert ) { 550 if ( insert ) {
544 mPhoneNumberList.append( phoneNumber ); 551 mPhoneNumberList.append( phoneNumber );
545 new PhoneViewItem( mListView, phoneNumber ); 552 new PhoneViewItem( mListView, phoneNumber );
546 } 553 }
547 mChanged = true; 554 mChanged = true;
548 } 555 }
549} 556}
550 557
551void PhoneEditDialog::slotRemovePhoneNumber() 558void PhoneEditDialog::slotRemovePhoneNumber()
552{ 559{
553 PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() ); 560 PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() );
554 if ( !item ) 561 if ( !item )
555 return; 562 return;
556 563
557 mPhoneNumberList.remove( item->phoneNumber() ); 564 mPhoneNumberList.remove( item->phoneNumber() );
558 QListViewItem *currItem = mListView->currentItem(); 565 QListViewItem *currItem = mListView->currentItem();
559 mListView->takeItem( currItem ); 566 mListView->takeItem( currItem );
560 delete currItem; 567 delete currItem;
561 568
562 mChanged = true; 569 mChanged = true;
563} 570}
564 571
565void PhoneEditDialog::slotEditPhoneNumber() 572void PhoneEditDialog::slotEditPhoneNumber()
566{ 573{
567 PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() ); 574 PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() );
568 if ( !item ) 575 if ( !item )
569 return; 576 return;
570 577
571 PhoneTypeDialog dlg( item->phoneNumber(), this ); 578 PhoneTypeDialog dlg( item->phoneNumber(), this );
572 579
573 if ( dlg.exec() ) { 580 if ( dlg.exec() ) {
574 slotRemovePhoneNumber(); 581 slotRemovePhoneNumber();
575 KABC::PhoneNumber phoneNumber = dlg.phoneNumber(); 582 KABC::PhoneNumber phoneNumber = dlg.phoneNumber();
576 mPhoneNumberList.append( phoneNumber ); 583 mPhoneNumberList.append( phoneNumber );
577 new PhoneViewItem( mListView, phoneNumber ); 584 new PhoneViewItem( mListView, phoneNumber );
578 585
579 mChanged = true; 586 mChanged = true;
580 } 587 }
581} 588}
diff --git a/kaddressbook/phoneeditwidget.h b/kaddressbook/phoneeditwidget.h
index 6a514ed..c730c7b 100644
--- a/kaddressbook/phoneeditwidget.h
+++ b/kaddressbook/phoneeditwidget.h
@@ -5,132 +5,135 @@
5 Copyright (c) 2002 Mike Pilone <mpilone@slac.com> 5 Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
6 6
7 This program is free software; you can redistribute it and/or modify 7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by 8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or 9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version. 10 (at your option) any later version.
11 11
12 This program is distributed in the hope that it will be useful, 12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details. 15 GNU General Public License for more details.
16 16
17 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software 18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 20
21 As a special exception, permission is given to link this program 21 As a special exception, permission is given to link this program
22 with any edition of Qt, and distribute the resulting executable, 22 with any edition of Qt, and distribute the resulting executable,
23 without including the source code for Qt in the source distribution. 23 without including the source code for Qt in the source distribution.
24*/ 24*/
25 25
26#include <kdialogbase.h> 26#include <kdialogbase.h>
27#include <kiconloader.h> 27#include <kiconloader.h>
28#include <qpushbutton.h> 28#include <qpushbutton.h>
29#include <qlayout.h> 29#include <qlayout.h>
30 30
31#include <qptrlist.h> 31#include <qptrlist.h>
32#include <qscrollview.h> 32#include <qscrollview.h>
33 33
34#include "addresseeconfig.h" 34#include "addresseeconfig.h"
35#include "typecombo.h" 35#include "typecombo.h"
36 36
37class QButtonGroup; 37class QButtonGroup;
38class QCheckBox; 38class QCheckBox;
39class PhoneTypeNumberEdit; 39class PhoneTypeNumberEdit;
40 40
41#include <klineedit.h> 41#include <klineedit.h>
42#include <kcombobox.h> 42#include <kcombobox.h>
43#include <kabc/phonenumber.h> 43#include <kabc/phonenumber.h>
44 44
45typedef TypeCombo<KABC::PhoneNumber> PhoneTypeCombo; 45typedef TypeCombo<KABC::PhoneNumber> PhoneTypeCombo;
46 46
47/** 47/**
48 Widget for editing phone numbers. 48 Widget for editing phone numbers.
49*/ 49*/
50class PhoneEditWidget : public QScrollView 50class PhoneEditWidget : public QScrollView
51{ 51{
52 Q_OBJECT 52 Q_OBJECT
53 53
54 public: 54 public:
55 PhoneEditWidget( QWidget *parent, const char *name = 0 ); 55 PhoneEditWidget( QWidget *parent, const char *name = 0 );
56 ~PhoneEditWidget(); 56 ~PhoneEditWidget();
57 57
58 void setPhoneNumbers( const KABC::PhoneNumber::List &list ); 58 void setPhoneNumbers( const KABC::PhoneNumber::List &list );
59 KABC::PhoneNumber::List phoneNumbers(); 59 KABC::PhoneNumber::List phoneNumbers();
60 60
61 // void updateTypeCombo( const KABC::PhoneNumber::List&, KComboBox* ); 61 // void updateTypeCombo( const KABC::PhoneNumber::List&, KComboBox* );
62 //KABC::PhoneNumber currentPhoneNumber( KComboBox*, int ); 62 //KABC::PhoneNumber currentPhoneNumber( KComboBox*, int );
63 63
64 signals: 64 signals:
65 void modified(); 65 void modified();
66 void typeChange( int oldType, int newType ); 66 void typeChange( int oldType, int newType );
67 67
68 private slots: 68 private slots:
69 void addNumber(); 69 void deleteEdit( PhoneTypeNumberEdit* ew );
70 void addNumber();
71 void pendingDelete();
70 protected: 72 protected:
71 73
72 private: 74 private:
75 PhoneTypeNumberEdit* mPendingDelete;
73 void setDefaults(); 76 void setDefaults();
74 PhoneTypeNumberEdit* appendEditCombo(); 77 PhoneTypeNumberEdit* appendEditCombo();
75 QWidget* mw; 78 QWidget* mw;
76 QVBoxLayout* mainLayout; 79 QVBoxLayout* mainLayout;
77 QPtrList <PhoneTypeNumberEdit> mTypeNumberEditList; 80 QPtrList <PhoneTypeNumberEdit> mTypeNumberEditList;
78 81
79 KABC::PhoneNumber::List mPhoneList; 82 KABC::PhoneNumber::List mPhoneList;
80}; 83};
81 84
82 85
83 86
84 87
85 88
86#if 0 89#if 0
87class PhoneEditWidget : public QWidget 90class PhoneEditWidget : public QWidget
88{ 91{
89 Q___OBJECT 92 Q___OBJECT
90 93
91 public: 94 public:
92 PhoneEditWidget( QWidget *parent, const char *name = 0 ); 95 PhoneEditWidget( QWidget *parent, const char *name = 0 );
93 ~PhoneEditWidget(); 96 ~PhoneEditWidget();
94 97
95 void setPhoneNumbers( const KABC::PhoneNumber::List &list ); 98 void setPhoneNumbers( const KABC::PhoneNumber::List &list );
96 KABC::PhoneNumber::List phoneNumbers(); 99 KABC::PhoneNumber::List phoneNumbers();
97 100
98 void updateTypeCombo( const KABC::PhoneNumber::List&, KComboBox* ); 101 void updateTypeCombo( const KABC::PhoneNumber::List&, KComboBox* );
99 KABC::PhoneNumber currentPhoneNumber( KComboBox*, int ); 102 KABC::PhoneNumber currentPhoneNumber( KComboBox*, int );
100 103
101 sig_nals: 104 sig_nals:
102 void modified(); 105 void modified();
103 void typeChange( int oldType, int newType ); 106 void typeChange( int oldType, int newType );
104 107
105 private sl_ots: 108 private sl_ots:
106 void edit(); 109 void edit();
107 110
108 void updatePrefEdit(); 111 void updatePrefEdit();
109 void updateSecondEdit(); 112 void updateSecondEdit();
110 void updateThirdEdit(); 113 void updateThirdEdit();
111 void updateFourthEdit(); 114 void updateFourthEdit();
112 115
113 void slotPrefEditChanged(); 116 void slotPrefEditChanged();
114 void slotSecondEditChanged(); 117 void slotSecondEditChanged();
115 void slotThirdEditChanged(); 118 void slotThirdEditChanged();
116 void slotFourthEditChanged(); 119 void slotFourthEditChanged();
117 120
118 protected: 121 protected:
119 void updateLineEdits(); 122 void updateLineEdits();
120 void updateCombos(); 123 void updateCombos();
121 124
122 private: 125 private:
123 QPtrList <PhoneTypeNumberEdit> mTypeNumberEditList; 126 QPtrList <PhoneTypeNumberEdit> mTypeNumberEditList;
124 void updateEdit( PhoneTypeCombo *combo ); 127 void updateEdit( PhoneTypeCombo *combo );
125 void updatePhoneNumber( PhoneTypeCombo *combo ); 128 void updatePhoneNumber( PhoneTypeCombo *combo );
126 void updateOtherEdit( PhoneTypeCombo *combo, PhoneTypeCombo *otherCombo ); 129 void updateOtherEdit( PhoneTypeCombo *combo, PhoneTypeCombo *otherCombo );
127 130
128 PhoneTypeCombo *mPrefCombo; 131 PhoneTypeCombo *mPrefCombo;
129 PhoneTypeCombo *mSecondCombo; 132 PhoneTypeCombo *mSecondCombo;
130 PhoneTypeCombo *mThirdCombo; 133 PhoneTypeCombo *mThirdCombo;
131 PhoneTypeCombo *mFourthCombo; 134 PhoneTypeCombo *mFourthCombo;
132 135
133 KLineEdit *mPrefEdit; 136 KLineEdit *mPrefEdit;
134 KLineEdit *mSecondEdit; 137 KLineEdit *mSecondEdit;
135 KLineEdit *mThirdEdit; 138 KLineEdit *mThirdEdit;
136 KLineEdit *mFourthEdit; 139 KLineEdit *mFourthEdit;
@@ -151,137 +154,134 @@ class PhoneEditDialog : public KDialogBase
151 154
152 const KABC::PhoneNumber::List &phoneNumbers(); 155 const KABC::PhoneNumber::List &phoneNumbers();
153 bool changed() const; 156 bool changed() const;
154 157
155 protected s__lots: 158 protected s__lots:
156 void slotAddPhoneNumber(); 159 void slotAddPhoneNumber();
157 void slotRemovePhoneNumber(); 160 void slotRemovePhoneNumber();
158 void slotEditPhoneNumber(); 161 void slotEditPhoneNumber();
159 void slotSelectionChanged(); 162 void slotSelectionChanged();
160 163
161 private: 164 private:
162 KABC::PhoneNumber::List mPhoneNumberList; 165 KABC::PhoneNumber::List mPhoneNumberList;
163 KABC::PhoneNumber::TypeList mTypeList; 166 KABC::PhoneNumber::TypeList mTypeList;
164 KComboBox *mTypeBox; 167 KComboBox *mTypeBox;
165 KListView *mListView; 168 KListView *mListView;
166 169
167 QPushButton *mRemoveButton; 170 QPushButton *mRemoveButton;
168 QPushButton *mEditButton; 171 QPushButton *mEditButton;
169 172
170 bool mChanged; 173 bool mChanged;
171}; 174};
172 175
173/** 176/**
174 Dialog for editing phone number types. 177 Dialog for editing phone number types.
175*/ 178*/
176class PhoneTypeDialog : public KDialogBase 179class PhoneTypeDialog : public KDialogBase
177{ 180{
178 Q___OBJECT 181 Q___OBJECT
179public: 182public:
180 PhoneTypeDialog( const KABC::PhoneNumber &phoneNumber, QWidget *parent, const char *name = 0 ); 183 PhoneTypeDialog( const KABC::PhoneNumber &phoneNumber, QWidget *parent, const char *name = 0 );
181 184
182 KABC::PhoneNumber phoneNumber(); 185 KABC::PhoneNumber phoneNumber();
183 186
184private: 187private:
185 KABC::PhoneNumber mPhoneNumber; 188 KABC::PhoneNumber mPhoneNumber;
186 KABC::PhoneNumber::TypeList mTypeList; 189 KABC::PhoneNumber::TypeList mTypeList;
187 190
188 QButtonGroup *mGroup; 191 QButtonGroup *mGroup;
189 QCheckBox *mPreferredBox; 192 QCheckBox *mPreferredBox;
190 KLineEdit *mNumber; 193 KLineEdit *mNumber;
191}; 194};
192#endif 195#endif
193 196
194class PhoneTypeNumberEdit : public QWidget 197class PhoneTypeNumberEdit : public QWidget
195{ 198{
196 Q_OBJECT 199 Q_OBJECT
197public: 200public:
198 PhoneTypeNumberEdit( QWidget *parent, const char *name = 0 ) :QWidget( parent ) 201 PhoneTypeNumberEdit( QWidget *parent, const char *name = 0 ) :QWidget( parent )
199 { 202 {
200 QHBoxLayout * lay = new QHBoxLayout( this ); 203 QHBoxLayout * lay = new QHBoxLayout( this );
201 lay->setSpacing( KDialogBase::spacingHintSmall() ); 204 lay->setSpacing( KDialogBase::spacingHintSmall() );
202 lay->setMargin( KDialogBase::marginHintSmall() ); 205 lay->setMargin( KDialogBase::marginHintSmall() );
203 mMinusButton = new QPushButton ( this ); 206 mMinusButton = new QPushButton ( this );
204 mMinusButton->setPixmap ( SmallIcon("minus")); 207 mMinusButton->setPixmap ( SmallIcon("minus"));
205 mCombo = new KComboBox( this ); 208 mCombo = new KComboBox( this );
206 mNumber = new KLineEdit( this ); 209 mNumber = new KLineEdit( this );
207 lay->addWidget( mMinusButton ); 210 lay->addWidget( mMinusButton );
208 lay->addWidget( mCombo ); 211 lay->addWidget( mCombo );
209 lay->addWidget( mNumber ); 212 lay->addWidget( mNumber );
210 connect( mMinusButton , SIGNAL ( clicked() ), this, SLOT ( deleteNumber() ) ); 213 connect( mMinusButton , SIGNAL ( clicked() ), this, SLOT ( deleteNumber() ) );
211 connect( mCombo , SIGNAL ( activated ( int ) ), this, SLOT ( comboTypeChange( int ) ) ); 214 connect( mCombo , SIGNAL ( activated ( int ) ), this, SLOT ( comboTypeChange( int ) ) );
212 connect( mNumber , SIGNAL ( textChanged ( const QString & ) ), 215 connect( mNumber , SIGNAL ( textChanged ( const QString & ) ),
213 this, SLOT ( textChanged ( const QString & ) ) ); 216 this, SLOT ( textChanged ( const QString & ) ) );
214 mCombo->insertStringList( PhoneNumber::supportedTypeListNames() ); 217 mCombo->insertStringList( PhoneNumber::supportedTypeListNames() );
215 mIsValid = true;
216 } 218 }
217 219 ~PhoneTypeNumberEdit() {
220 // qDebug("~PhoneTypeNumberEdit() ");
221 }
218 void setPhoneNumber( const KABC::PhoneNumber &phoneNumber ) 222 void setPhoneNumber( const KABC::PhoneNumber &phoneNumber )
219 { 223 {
220 mPhoneNumber = phoneNumber; 224 mPhoneNumber = phoneNumber;
221 int index = PhoneNumber::typeListIndex4Type( mPhoneNumber.type() ); 225 int index = PhoneNumber::typeListIndex4Type( mPhoneNumber.type() );
222 mCombo->setCurrentItem( index ); 226 mCombo->setCurrentItem( index );
223 mNumber->setText( mPhoneNumber.number() ); 227 mNumber->setText( mPhoneNumber.number() );
224 mIsValid = true;
225 show(); 228 show();
226 229
227 } 230 }
228 KABC::PhoneNumber phoneNumber() 231 KABC::PhoneNumber phoneNumber()
229 { 232 {
230 mPhoneNumber.setNumber( mNumber->text() ); 233 mPhoneNumber.setNumber( mNumber->text() );
231 int index = mCombo->currentItem(); 234 int index = mCombo->currentItem();
232 mPhoneNumber.setType( PhoneNumber::supportedTypeList()[index] ); 235 mPhoneNumber.setType( PhoneNumber::supportedTypeList()[index] );
233 return mPhoneNumber; 236 return mPhoneNumber;
234 } 237 }
235 bool isValid() 238 bool isValid()
236 { 239 {
237 if ( !mIsValid ) return false;
238 if ( mNumber->text().isEmpty() )return false; 240 if ( mNumber->text().isEmpty() )return false;
239 return true; 241 return true;
240 } 242 }
241 private slots: 243 private slots:
242 void typeExternalChanged( int oldType, int newType ) 244 void typeExternalChanged( int oldType, int newType )
243 { 245 {
244 if ( mPhoneNumber.type() == newType ) { 246 if ( mPhoneNumber.type() == newType ) {
245 mPhoneNumber.setType(oldType); 247 mPhoneNumber.setType(oldType);
246 int index = PhoneNumber::typeListIndex4Type( mPhoneNumber.type() ); 248 int index = PhoneNumber::typeListIndex4Type( mPhoneNumber.type() );
247 mCombo->setCurrentItem( index ); 249 mCombo->setCurrentItem( index );
248 } 250 }
249 } 251 }
250 void deleteNumber() 252 void deleteNumber()
251 { 253 {
252 emit modified(); 254 emit deleteMe( this );
253 hide();
254 mIsValid = false;
255 } 255 }
256 void comboTypeChange( int index ) 256 void comboTypeChange( int index )
257 { 257 {
258 int old = mPhoneNumber.type(); 258 int old = mPhoneNumber.type();
259 int newT = PhoneNumber::supportedTypeList()[index]; 259 int newT = PhoneNumber::supportedTypeList()[index];
260 if ( old != newT ) { 260 if ( old != newT ) {
261 emit modified(); 261 emit modified();
262 emit typeChange ( old, newT ); 262 emit typeChange ( old, newT );
263 mPhoneNumber.setType(newT ); 263 mPhoneNumber.setType(newT );
264 } 264 }
265 265
266 } 266 }
267 int currentType() 267 int currentType()
268 { 268 {
269 return mCombo->currentItem(); 269 return mCombo->currentItem();
270 } 270 }
271 void textChanged ( const QString & ) 271 void textChanged ( const QString & )
272 { 272 {
273 emit modified(); 273 emit modified();
274 } 274 }
275 signals: 275 signals:
276void typeChange( int oldType, int newType ); 276void typeChange( int oldType, int newType );
277 void modified(); 277 void modified();
278 void deleteMe( PhoneTypeNumberEdit* );
278 279
279private: 280private:
280 bool mIsValid;
281 KABC::PhoneNumber mPhoneNumber; 281 KABC::PhoneNumber mPhoneNumber;
282 QPushButton* mMinusButton; 282 QPushButton* mMinusButton;
283 KComboBox *mCombo; 283 KComboBox *mCombo;
284 KLineEdit *mNumber; 284 KLineEdit *mNumber;
285}; 285};
286 286
287#endif 287#endif