summaryrefslogtreecommitdiffabout
path: root/kaddressbook/addresseeeditorwidget.cpp
Unidiff
Diffstat (limited to 'kaddressbook/addresseeeditorwidget.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/addresseeeditorwidget.cpp1284
1 files changed, 1284 insertions, 0 deletions
diff --git a/kaddressbook/addresseeeditorwidget.cpp b/kaddressbook/addresseeeditorwidget.cpp
new file mode 100644
index 0000000..4365ee5
--- a/dev/null
+++ b/kaddressbook/addresseeeditorwidget.cpp
@@ -0,0 +1,1284 @@
1/*
2 This file is part of KAddressBook.
3 Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
4
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
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
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
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution.
22*/
23
24#include <qcheckbox.h>
25#include <qhbox.h>
26#include <qlabel.h>
27#include <qlayout.h>
28#include <qlistbox.h>
29#include <qpushbutton.h>
30#include <qtabwidget.h>
31
32#ifndef KAB_EMBEDDED
33#include <qtextedit.h>
34
35#include <kaccelmanager.h>
36#include "keywidget.h"
37#include "soundwidget.h"
38
39#else //KAB_EMBEDDED
40#include <qmultilineedit.h>
41#endif //KAB_EMBEDDED
42
43
44#include "keywidget.h"
45#include "geowidget.h"
46#include "imagewidget.h"
47#include "nameeditdialog.h"
48#include "phoneeditwidget.h"
49#include "secrecywidget.h"
50
51
52#include <qtoolbutton.h>
53#include <qtooltip.h>
54
55#include <kapplication.h>
56#include <kconfig.h>
57#include <kcombobox.h>
58#include <kdebug.h>
59#include <kdialogbase.h>
60#include <kglobal.h>
61#include <kiconloader.h>
62#include <klineedit.h>
63#include <klocale.h>
64#include <kmessagebox.h>
65#include <kseparator.h>
66#include <ksqueezedtextlabel.h>
67
68#include <libkdepim/categoryeditdialog.h>
69#include <libkdepim/categoryselectdialog.h>
70
71#include <libkdepim/kdateedit.h>
72
73#include "addresseditwidget.h"
74#include "emaileditwidget.h"
75#include "kabcore.h"
76#include "kabprefs.h"
77
78#include "addresseeeditorwidget.h"
79
80
81
82AddresseeEditorWidget::AddresseeEditorWidget( KABCore *core, bool isExtension,
83 QWidget *parent, const char *name )
84 : ExtensionWidget( core, parent, name ), mIsExtension( isExtension ),
85 mBlockSignals( false )
86{
87
88 mAConfig = AddresseeConfig::instance();
89
90 kdDebug(5720) << "AddresseeEditorWidget()" << endl;
91 mFormattedNameType = NameEditDialog::CustomName;
92 initGUI();
93 mCategoryDialog = 0;
94 mCategoryEditDialog = 0;
95
96 // Load the empty addressee as defaults
97 load();
98
99 mDirty = false;
100}
101
102AddresseeEditorWidget::~AddresseeEditorWidget()
103{
104 kdDebug(5720) << "~AddresseeEditorWidget()" << endl;
105}
106
107void AddresseeEditorWidget::contactsSelectionChanged()
108{
109 KABC::Addressee::List list = selectedContacts();
110
111 mAddressee = list[ 0 ];
112 load();
113}
114
115void AddresseeEditorWidget::setAddressee( const KABC::Addressee &addr )
116{
117 mAddressee = addr;
118 load();
119}
120
121const KABC::Addressee &AddresseeEditorWidget::addressee()
122{
123 return mAddressee;
124}
125
126void AddresseeEditorWidget::textChanged( const QString& )
127{
128 emitModified();
129}
130
131void AddresseeEditorWidget::initGUI()
132{
133 QVBoxLayout *layout = new QVBoxLayout( this );
134
135 mTabWidget = new QTabWidget( this );
136 layout->addWidget( mTabWidget );
137
138 setupTab1();
139 setupTab1_1();
140 setupTab2();
141 setupTab2_1();
142 setupTab3();
143 setupTab3_1();
144
145 mNameEdit->setFocus();
146
147 connect( mTabWidget, SIGNAL( currentChanged(QWidget*) ),
148 SLOT( pageChanged(QWidget*) ) );
149}
150
151void AddresseeEditorWidget::setupTab1()
152{
153 // This is the General tab
154 QWidget *tab1 = new QWidget( mTabWidget );
155
156//US QGridLayout *layout = new QGridLayout( tab1, 11, 7 );
157 QGridLayout *layout = new QGridLayout( tab1, 7, 1 );
158 layout->setMargin( KDialogBase::marginHintSmall() );
159 layout->setSpacing( KDialogBase::spacingHintSmall() );
160
161 QLabel *label;
162 KSeparator* bar;
163 QPushButton *button;
164
165 //////////////////////////////////
166 // Upper left group (person info)
167
168 // Person icon
169 /* LR
170 label = new QLabel( tab1 );
171//US ambiguous call. Add one more parameter
172//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "personal", KIcon::Desktop ) );
173 label->setPixmap( KGlobal::iconLoader()->loadIcon( "personal", KIcon::Desktop, 0 ) );
174 layout->addMultiCellWidget( label, 0, 1, 0, 0 );
175 */
176 // First name
177 button = new QPushButton( i18n( "Name..." ), tab1 );
178//US QToolTip::add( button, i18n( "Edit the contact's name" ) );
179 mNameEdit = new KLineEdit( tab1, "mNameEdit" );
180 connect( mNameEdit, SIGNAL( textChanged( const QString& ) ),
181 SLOT( nameTextChanged( const QString& ) ) );
182 connect( button, SIGNAL( clicked() ), SLOT( nameButtonClicked() ) );
183
184 mNameLabel = new KSqueezedTextLabel( tab1 );
185 mNameLabel->hide();
186
187 layout->addWidget( button, 0, 0 );
188 layout->addWidget( mNameEdit, 0, 1 );
189 layout->addWidget( mNameLabel, 0, 1 );
190
191 label = new QLabel( i18n( "Role:" ), tab1 );
192 mRoleEdit = new KLineEdit( tab1 );
193 connect( mRoleEdit, SIGNAL( textChanged( const QString& ) ),
194 SLOT( textChanged( const QString& ) ) );
195 label->setBuddy( mRoleEdit );
196 layout->addWidget( label, 1, 0 );
197 layout->addWidget( mRoleEdit, 1, 1 );
198
199 // Organization
200 label = new QLabel( i18n( "Organization:" ), tab1 );
201 mOrgEdit = new KLineEdit( tab1 );
202 label->setBuddy( mOrgEdit );
203 connect( mOrgEdit, SIGNAL( textChanged( const QString& ) ),
204 SLOT( textChanged( const QString& ) ) );
205 layout->addWidget( label, 2, 0 );
206 layout->addWidget( mOrgEdit, 2, 1 );
207
208 // File as (formatted name)
209 label = new QLabel( i18n( "Formatted name:" ), tab1 );
210 mFormattedNameLabel = new KSqueezedTextLabel( tab1 );
211 layout->addWidget( label, 3, 0 );
212 layout->addWidget( mFormattedNameLabel, 3, 1 );
213 /* LR
214 // Left hand separator. This separator doesn't go all the way
215 // across so the dialog still flows from top to bottom
216 bar = new KSeparator( KSeparator::HLine, tab1 );
217 layout->addMultiCellWidget( bar, 4, 4, 0, 2 );
218 */
219 //////////////////////////////////////
220
221 /* LR
222 // Phone numbers (upper right)
223 label = new QLabel( tab1 );
224//US loadIcon call is ambiguous. Add one more parameter
225//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop ) );
226 label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) );
227//US layout->addMultiCellWidget( label, 0, 1, 3, 3 );
228 layout->addMultiCellWidget( label, 5, 6, 0, 0 );
229 */
230 mPhoneEditWidget = new PhoneEditWidget( tab1 );
231 connect( mPhoneEditWidget, SIGNAL( modified() ), SLOT( emitModified() ) );
232//US layout->addMultiCellWidget( mPhoneEditWidget, 0, 3, 4, 6 );
233 int iii;
234#ifndef DESKTOP_VERSION
235 iii = 7;
236#else
237 iii = 8;
238#endif
239 layout->addMultiCellWidget( mPhoneEditWidget, 4, iii, 0, 1 );
240 ++iii;
241 /* LR
242 bar = new KSeparator( KSeparator::HLine, tab1 );
243//US layout->addMultiCellWidget( bar, 4, 4, 3, 6 );
244 layout->addMultiCellWidget( bar, 9, 9, 0, 2 );
245 */
246/*US
247 //////////////////////////////////////
248 // Addresses (lower left)
249 label = new QLabel( tab1 );
250//US loadIcon call is ambiguous. Add one more parameter
251//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "gohome", KIcon::Desktop ) );
252 label->setPixmap( KGlobal::iconLoader()->loadIcon( "gohome", KIcon::Desktop, 0 ) );
253 layout->addMultiCellWidget( label, 5, 6, 0, 0 );
254
255 mAddressEditWidget = new AddressEditWidget( tab1 );
256 connect( mAddressEditWidget, SIGNAL( modified() ), SLOT( emitModified() ) );
257 layout->addMultiCellWidget( mAddressEditWidget, 5, 9, 1, 2 );
258
259 //////////////////////////////////////
260 // Email / Web (lower right)
261 label = new QLabel( tab1 );
262//US loadIcon call is ambiguous. Add one more parameter
263//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "email", KIcon::Desktop) );
264 label->setPixmap( KGlobal::iconLoader()->loadIcon( "email", KIcon::Desktop, 0) );
265 layout->addMultiCellWidget( label, 5, 6, 3, 3 );
266
267 mEmailWidget = new EmailEditWidget( tab1 );
268 connect( mEmailWidget, SIGNAL( modified() ), SLOT( emitModified() ) );
269 layout->addMultiCellWidget( mEmailWidget, 5, 6, 4, 6 );
270
271 // add the separator
272 bar = new KSeparator( KSeparator::HLine, tab1 );
273 layout->addMultiCellWidget( bar, 7, 7, 3, 6 );
274
275 label = new QLabel( tab1 );
276//US loadIcon call is ambiguous. Add one more parameter
277//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "homepage", KIcon::Desktop) );
278 label->setPixmap( KGlobal::iconLoader()->loadIcon( "homepage", KIcon::Desktop, 0) );
279 layout->addMultiCellWidget( label, 8, 9, 3, 3 );
280
281 label = new QLabel( i18n( "URL:" ), tab1 );
282 mURLEdit = new KLineEdit( tab1 );
283 connect( mURLEdit, SIGNAL( textChanged( const QString& ) ),
284 SLOT( textChanged( const QString& ) ) );
285 label->setBuddy( mURLEdit );
286 layout->addWidget( label, 8, 4 );
287 layout->addMultiCellWidget( mURLEdit, 8, 8, 5, 6 );
288
289 label = new QLabel( i18n( "&IM address:" ), tab1 );
290 mIMAddressEdit = new KLineEdit( tab1 );
291 connect( mIMAddressEdit, SIGNAL( textChanged( const QString& ) ),
292 SLOT( textChanged( const QString& ) ) );
293 label->setBuddy( mIMAddressEdit );
294 layout->addWidget( label, 9, 4 );
295 layout->addMultiCellWidget( mIMAddressEdit, 9, 9, 5, 6 );
296
297 layout->addColSpacing( 6, 50 );
298
299 bar = new KSeparator( KSeparator::HLine, tab1 );
300 layout->addMultiCellWidget( bar, 10, 10, 0, 6 );
301*/
302 ///////////////////////////////////////
303 QHBox *categoryBox = new QHBox( tab1 );
304 categoryBox->setSpacing( KDialogBase::spacingHint() );
305 categoryBox->setMargin( KDialogBase::marginHintSmall() );
306
307 // Categories
308 button = new QPushButton( i18n( "Categories" ), categoryBox );
309 connect( button, SIGNAL( clicked() ), SLOT( categoryButtonClicked() ) );
310
311 mCategoryEdit = new KLineEdit( categoryBox );
312 mCategoryEdit->setReadOnly( true );
313 connect( mCategoryEdit, SIGNAL( textChanged( const QString& ) ),
314 SLOT( textChanged( const QString& ) ) );
315
316 mSecrecyWidget = new SecrecyWidget( categoryBox );
317 connect( mSecrecyWidget, SIGNAL( changed() ), SLOT( emitModified() ) );
318
319//US layout->addMultiCellWidget( categoryBox, 11, 11, 0, 6 );
320 layout->addMultiCellWidget( categoryBox, iii, iii, 0, 1 );
321
322 // Build the layout and add to the tab widget
323 layout->activate(); // required
324
325 mTabWidget->addTab( tab1, i18n( "&General" ) );
326}
327
328
329void AddresseeEditorWidget::setupTab1_1()
330{
331 // This is the Address tab
332 QWidget *tab1_1 = new QWidget( mTabWidget );
333
334//US QGridLayout *layout = new QGridLayout( tab1_1, 11, 7 );
335 QGridLayout *layout = new QGridLayout( tab1_1, 7, 2 );
336 layout->setMargin( KDialogBase::marginHintSmall() );
337 layout->setSpacing( KDialogBase::spacingHintSmall() );
338
339 QLabel *label;
340 KSeparator* bar;
341 QPushButton *button;
342
343/*US
344 //////////////////////////////////
345 // Upper left group (person info)
346
347 // Person icon
348 label = new QLabel( tab1 );
349//US ambiguous call. Add one more parameter
350//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "personal", KIcon::Desktop ) );
351 label->setPixmap( KGlobal::iconLoader()->loadIcon( "personal", KIcon::Desktop, 0 ) );
352 layout->addMultiCellWidget( label, 0, 1, 0, 0 );
353
354 // First name
355 button = new QPushButton( i18n( "Name..." ), tab1 );
356 QToolTip::add( button, i18n( "Edit the contact's name" ) );
357 mNameEdit = new KLineEdit( tab1, "mNameEdit" );
358 connect( mNameEdit, SIGNAL( textChanged( const QString& ) ),
359 SLOT( nameTextChanged( const QString& ) ) );
360 connect( button, SIGNAL( clicked() ), SLOT( nameButtonClicked() ) );
361
362#ifndef KAB_EMBEDDED
363 mNameLabel = new KSqueezedTextLabel( tab1 );
364 mNameLabel->hide();
365#else //KAB_EMBEDDED
366qDebug("AddresseeEditorWidget::setupTab1 has to be changed");
367#endif //KAB_EMBEDDED
368
369 layout->addWidget( button, 0, 1 );
370 layout->addWidget( mNameEdit, 0, 2 );
371
372#ifndef KAB_EMBEDDED
373 layout->addWidget( mNameLabel, 0, 2 );
374#else //KAB_EMBEDDED
375qDebug("AddresseeEditorWidget::setupTab1 has to be changed");
376#endif //KAB_EMBEDDED
377
378 label = new QLabel( i18n( "Role:" ), tab1 );
379 mRoleEdit = new KLineEdit( tab1 );
380 connect( mRoleEdit, SIGNAL( textChanged( const QString& ) ),
381 SLOT( textChanged( const QString& ) ) );
382 label->setBuddy( mRoleEdit );
383 layout->addWidget( label, 1, 1 );
384 layout->addWidget( mRoleEdit, 1, 2 );
385
386 // Organization
387 label = new QLabel( i18n( "Organization:" ), tab1 );
388 mOrgEdit = new KLineEdit( tab1 );
389 label->setBuddy( mOrgEdit );
390 connect( mOrgEdit, SIGNAL( textChanged( const QString& ) ),
391 SLOT( textChanged( const QString& ) ) );
392 layout->addWidget( label, 2, 1 );
393 layout->addWidget( mOrgEdit, 2, 2 );
394
395 // File as (formatted name)
396 label = new QLabel( i18n( "Formatted name:" ), tab1 );
397#ifndef KAB_EMBEDDED
398 mFormattedNameLabel = new KSqueezedTextLabel( tab1 );
399#else //KAB_EMBEDDED
400qDebug("AddresseeEditorWidget::setupTab1 has to be changed");
401#endif //KAB_EMBEDDED
402 layout->addWidget( label, 3, 1 );
403#ifndef KAB_EMBEDDED
404 layout->addWidget( mFormattedNameLabel, 3, 2 );
405#else //KAB_EMBEDDED
406qDebug("AddresseeEditorWidget::setupTab1 has to be changed");
407#endif //KAB_EMBEDDED
408
409 // Left hand separator. This separator doesn't go all the way
410 // across so the dialog still flows from top to bottom
411 bar = new KSeparator( KSeparator::HLine, tab1 );
412 layout->addMultiCellWidget( bar, 4, 4, 0, 2 );
413
414 //////////////////////////////////////
415 // Phone numbers (upper right)
416 label = new QLabel( tab1 );
417//US loadIcon call is ambiguous. Add one more parameter
418//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop ) );
419 label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) );
420 layout->addMultiCellWidget( label, 0, 1, 3, 3 );
421
422 mPhoneEditWidget = new PhoneEditWidget( tab1 );
423 connect( mPhoneEditWidget, SIGNAL( modified() ), SLOT( emitModified() ) );
424 layout->addMultiCellWidget( mPhoneEditWidget, 0, 3, 4, 6 );
425
426 bar = new KSeparator( KSeparator::HLine, tab1 );
427 layout->addMultiCellWidget( bar, 4, 4, 3, 6 );
428*/
429 //////////////////////////////////////
430 // Addresses (lower left)
431 /* LR
432 label = new QLabel( tab1_1 );
433//US loadIcon call is ambiguous. Add one more parameter
434//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "gohome", KIcon::Desktop ) );
435 label->setPixmap( KGlobal::iconLoader()->loadIcon( "gohome", KIcon::Desktop, 0 ) );
436//US layout->addMultiCellWidget( label, 5, 6, 0, 0 );
437 layout->addMultiCellWidget( label, 0, 1, 0, 0 );
438 */
439
440 mAddressEditWidget = new AddressEditWidget( tab1_1 );
441 connect( mAddressEditWidget, SIGNAL( modified() ), SLOT( emitModified() ) );
442//US layout->addMultiCellWidget( mAddressEditWidget, 5, 9, 1, 2 );
443 layout->addMultiCellWidget( mAddressEditWidget, 0, 4, 0, 1 );
444
445//US
446/* LR
447 bar = new KSeparator( KSeparator::HLine, tab1_1 );
448 layout->addMultiCellWidget( bar, 5, 5, 0, 3 );
449*/
450
451 //////////////////////////////////////
452 // Email / Web (lower right)
453 /* LR
454 label = new QLabel( tab1_1 );
455//US loadIcon call is ambiguous. Add one more parameter
456//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "email", KIcon::Desktop) );
457 label->setPixmap( KGlobal::iconLoader()->loadIcon( "email", KIcon::Desktop, 0) );
458//US layout->addMultiCellWidget( label, 5, 6, 3, 3 );
459 layout->addMultiCellWidget( label, 6, 7, 0, 0 );
460 */
461 mEmailWidget = new EmailEditWidget( tab1_1 );
462 connect( mEmailWidget, SIGNAL( modified() ), SLOT( emitModified() ) );
463//US layout->addMultiCellWidget( mEmailWidget, 5, 6, 4, 6 );
464 layout->addMultiCellWidget( mEmailWidget, 5, 6, 0, 1 );
465
466 /* LR
467 // add the separator
468 bar = new KSeparator( KSeparator::HLine, tab1_1 );
469//US layout->addMultiCellWidget( bar, 7, 7, 3, 6 );
470 layout->addMultiCellWidget( bar, 8, 8, 0, 3 );
471
472 label = new QLabel( tab1_1 );
473//US loadIcon call is ambiguous. Add one more parameter
474//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "homepage", KIcon::Desktop) );
475 label->setPixmap( KGlobal::iconLoader()->loadIcon( "homepage", KIcon::Desktop, 0) );
476//US layout->addMultiCellWidget( label, 8, 9, 3, 3 );
477 layout->addMultiCellWidget( label, 9, 10, 0, 0 );
478 */
479 label = new QLabel( i18n( "URL:" ), tab1_1 );
480 mURLEdit = new KLineEdit( tab1_1 );
481 connect( mURLEdit, SIGNAL( textChanged( const QString& ) ),
482 SLOT( textChanged( const QString& ) ) );
483 label->setBuddy( mURLEdit );
484//US layout->addWidget( label, 8, 4 );
485 layout->addWidget( label, 7,0 );
486//US layout->addMultiCellWidget( mURLEdit, 8, 8, 5, 6 );
487 layout->addWidget( mURLEdit, 7, 1);
488
489 label = new QLabel( i18n( "&IM address:" ), tab1_1 );
490 mIMAddressEdit = new KLineEdit( tab1_1 );
491 connect( mIMAddressEdit, SIGNAL( textChanged( const QString& ) ),
492 SLOT( textChanged( const QString& ) ) );
493 label->setBuddy( mIMAddressEdit );
494//US layout->addWidget( label, 9, 4 );
495 layout->addWidget( label, 8, 0 );
496//US layout->addMultiCellWidget( mIMAddressEdit, 9, 9, 5, 6 );
497 layout->addWidget( mIMAddressEdit, 8,1 );
498
499//US layout->addColSpacing( 6, 50 );
500
501//US bar = new KSeparator( KSeparator::HLine, tab1_1 );
502//US layout->addMultiCellWidget( bar, 10, 10, 0, 6 );
503
504/*US
505 ///////////////////////////////////////
506 QHBox *categoryBox = new QHBox( tab1 );
507 categoryBox->setSpacing( KDialogBase::spacingHintSmall() );
508
509 // Categories
510 button = new QPushButton( i18n( "Categories" ), categoryBox );
511 connect( button, SIGNAL( clicked() ), SLOT( categoryButtonClicked() ) );
512
513 mCategoryEdit = new KLineEdit( categoryBox );
514 mCategoryEdit->setReadOnly( true );
515 connect( mCategoryEdit, SIGNAL( textChanged( const QString& ) ),
516 SLOT( textChanged( const QString& ) ) );
517
518 mSecrecyWidget = new SecrecyWidget( categoryBox );
519 connect( mSecrecyWidget, SIGNAL( changed() ), SLOT( emitModified() ) );
520
521 layout->addMultiCellWidget( categoryBox, 11, 11, 0, 6 );
522*/
523 // Build the layout and add to the tab widget
524 layout->activate(); // required
525
526 mTabWidget->addTab( tab1_1, i18n( "&Address" ) );
527}
528
529
530
531void AddresseeEditorWidget::setupTab2()
532{
533 // This is the Details tab
534 QWidget *tab2 = new QWidget( mTabWidget );
535
536 QGridLayout *layout = new QGridLayout( tab2, 8, 3 );
537 layout->setMargin( KDialogBase::marginHintSmall() );
538 layout->setSpacing( KDialogBase::spacingHintSmall() );
539
540 QLabel *label;
541 KSeparator* bar;
542
543 ///////////////////////
544 // Office info
545
546 // Department
547 label = new QLabel( tab2 );
548//US loadIcon call is ambiguous. Add one more parameter
549//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "folder", KIcon::Desktop ) );
550 label->setPixmap( KGlobal::iconLoader()->loadIcon( "folder", KIcon::Desktop, 0 ) );
551 layout->addMultiCellWidget( label, 0, 1, 0, 0 );
552
553 label = new QLabel( i18n( "Department:" ), tab2 );
554 layout->addWidget( label, 0, 1 );
555 mDepartmentEdit = new KLineEdit( tab2 );
556 connect( mDepartmentEdit, SIGNAL( textChanged( const QString& ) ),
557 SLOT( textChanged( const QString& ) ) );
558 label->setBuddy( mDepartmentEdit );
559 layout->addWidget( mDepartmentEdit, 0, 2 );
560
561 label = new QLabel( i18n( "Office:" ), tab2 );
562 layout->addWidget( label, 1, 1 );
563 mOfficeEdit = new KLineEdit( tab2 );
564 connect( mOfficeEdit, SIGNAL( textChanged( const QString& ) ),
565 SLOT( textChanged( const QString& ) ) );
566 label->setBuddy( mOfficeEdit );
567 layout->addWidget( mOfficeEdit, 1, 2 );
568
569 label = new QLabel( i18n( "Profession:" ), tab2 );
570 layout->addWidget( label, 2, 1 );
571 mProfessionEdit = new KLineEdit( tab2 );
572 connect( mProfessionEdit, SIGNAL( textChanged( const QString& ) ),
573 SLOT( textChanged( const QString& ) ) );
574 label->setBuddy( mProfessionEdit );
575 layout->addWidget( mProfessionEdit, 2, 2 );
576
577 label = new QLabel( i18n( "Manager\'s name:" ), tab2 );
578//US layout->addWidget( label, 0, 3 );
579 layout->addWidget( label, 3, 1 );
580 mManagerEdit = new KLineEdit( tab2 );
581 connect( mManagerEdit, SIGNAL( textChanged( const QString& ) ),
582 SLOT( textChanged( const QString& ) ) );
583 label->setBuddy( mManagerEdit );
584//US layout->addMultiCellWidget( mManagerEdit, 0, 0, 4, 5 );
585 layout->addWidget( mManagerEdit, 3, 2 );
586
587 label = new QLabel( i18n( "Assistant's name:" ), tab2 );
588//US layout->addWidget( label, 1, 3 );
589 layout->addWidget( label, 4, 1 );
590 mAssistantEdit = new KLineEdit( tab2 );
591 connect( mAssistantEdit, SIGNAL( textChanged( const QString& ) ),
592 SLOT( textChanged( const QString& ) ) );
593 label->setBuddy( mAssistantEdit );
594//US layout->addMultiCellWidget( mAssistantEdit, 1, 1, 4, 5 );
595 layout->addWidget( mAssistantEdit, 4, 2 );
596
597 bar = new KSeparator( KSeparator::HLine, tab2 );
598//US layout->addMultiCellWidget( bar, 3, 3, 0, 5 );
599 layout->addMultiCellWidget( bar, 5, 5, 0, 2 );
600
601 /////////////////////////////////////////////////
602 // Personal info
603
604 label = new QLabel( tab2 );
605//US loadIcon call is ambiguous. Add one more parameter
606//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "personal", KIcon::Desktop ) );
607 label->setPixmap( KGlobal::iconLoader()->loadIcon( "personal", KIcon::Desktop, 0 ) );
608//US layout->addMultiCellWidget( label, 4, 5, 0, 0 );
609 layout->addMultiCellWidget( label, 6, 7, 0, 0 );
610
611 label = new QLabel( i18n( "Nick name:" ), tab2 );
612//US layout->addWidget( label, 4, 1 );
613 layout->addWidget( label, 6, 1 );
614 mNicknameEdit = new KLineEdit( tab2 );
615 connect( mNicknameEdit, SIGNAL( textChanged( const QString& ) ),
616 SLOT( textChanged( const QString& ) ) );
617 label->setBuddy( mNicknameEdit );
618//US layout->addWidget( mNicknameEdit, 4, 2 );
619 layout->addWidget( mNicknameEdit, 6, 2 );
620
621 label = new QLabel( i18n( "Spouse's name:" ), tab2 );
622//US layout->addWidget( label, 5, 1 );
623 layout->addWidget( label, 7, 1 );
624 mSpouseEdit = new KLineEdit( tab2 );
625 connect( mSpouseEdit, SIGNAL( textChanged( const QString& ) ),
626 SLOT( textChanged( const QString& ) ) );
627 label->setBuddy( mSpouseEdit );
628//US layout->addWidget( mSpouseEdit, 5, 2 );
629 layout->addWidget( mSpouseEdit, 7, 2 );
630
631 label = new QLabel( i18n( "Birthday:" ), tab2 );
632//US layout->addWidget( label, 4, 3 );
633 layout->addWidget( label, 8, 1 );
634 mBirthdayPicker = new KDateEdit( tab2 );
635 mBirthdayPicker->setHandleInvalid( true );
636 connect( mBirthdayPicker, SIGNAL( dateChanged( QDate ) ),
637 SLOT( dateChanged( QDate ) ) );
638
639
640#ifndef KAB_EMBEDDED
641 //US invalid dates are handdled by the KDateEdit widget itself
642 connect( mBirthdayPicker, SIGNAL( invalidDateEntered() ),
643 SLOT( invalidDate() ) );
644 connect( mBirthdayPicker, SIGNAL( textChanged( const QString& ) ),
645 SLOT( emitModified() ) );
646#endif //KAB_EMBEDDED
647
648 label->setBuddy( mBirthdayPicker );
649//US layout->addWidget( mBirthdayPicker, 4, 4 );
650 layout->addWidget( mBirthdayPicker, 8, 2 );
651
652 label = new QLabel( i18n( "Anniversary:" ), tab2 );
653//US layout->addWidget( label, 5, 3 );
654 layout->addWidget( label, 9, 1 );
655 mAnniversaryPicker = new KDateEdit( tab2 );
656 mAnniversaryPicker->setHandleInvalid( true );
657 connect( mAnniversaryPicker, SIGNAL( dateChanged( QDate ) ),
658 SLOT( dateChanged( QDate ) ) );
659#ifndef KAB_EMBEDDED
660 //US invalid dates are handled by the KDateEdit widget itself
661 connect( mAnniversaryPicker, SIGNAL( invalidDateEntered() ),
662 SLOT( invalidDate() ) );
663 connect( mAnniversaryPicker, SIGNAL( textChanged( const QString& ) ),
664 SLOT( emitModified() ) );
665#endif //KAB_EMBEDDED
666
667 label->setBuddy( mAnniversaryPicker );
668//US layout->addWidget( mAnniversaryPicker, 5, 4 );
669 layout->addWidget( mAnniversaryPicker, 9, 2 );
670
671/*US
672 bar = new KSeparator( KSeparator::HLine, tab2 );
673 layout->addMultiCellWidget( bar, 6, 6, 0, 5 );
674
675 //////////////////////////////////////
676 // Notes
677 label = new QLabel( i18n( "Note:" ), tab2 );
678 label->setAlignment( Qt::AlignTop | Qt::AlignLeft );
679 layout->addWidget( label, 7, 0 );
680#ifndef KAB_EMBEDDED
681 mNoteEdit = new QTextEdit( tab2 );
682 mNoteEdit->setWordWrap( QTextEdit::WidgetWidth );
683 mNoteEdit->setMinimumSize( mNoteEdit->sizeHint() );
684#else //KAB_EMBEDDED
685 mNoteEdit = new QMultiLineEdit( tab2 );
686//US mNoteEdit->setWordWrap( QTextEdit::WidgetWidth );
687//US mNoteEdit->setMinimumSize( mNoteEdit->sizeHint() );
688qDebug("AddresseeEditorWidget::setupTab2 has to be changed");
689#endif //KAB_EMBEDDED
690 connect( mNoteEdit, SIGNAL( textChanged() ), SLOT( emitModified() ) );
691 label->setBuddy( mNoteEdit );
692 layout->addMultiCellWidget( mNoteEdit, 7, 7, 1, 5 );
693*/
694 // Build the layout and add to the tab widget
695 layout->activate(); // required
696
697 mTabWidget->addTab( tab2, i18n( "&Details" ) );
698}
699
700void AddresseeEditorWidget::setupTab2_1()
701{
702 // This is the Details tab
703 QWidget *tab2_2 = new QWidget( mTabWidget );
704
705 QGridLayout *layout = new QGridLayout( tab2_2, 1, 2 );
706 layout->setMargin( KDialogBase::marginHintSmall() );
707 layout->setSpacing( KDialogBase::spacingHintSmall() );
708
709 QLabel *label;
710 KSeparator* bar;
711
712/*US
713 ///////////////////////
714 // Office info
715
716 // Department
717 label = new QLabel( tab2 );
718//US loadIcon call is ambiguous. Add one more parameter
719//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "folder", KIcon::Desktop ) );
720 label->setPixmap( KGlobal::iconLoader()->loadIcon( "folder", KIcon::Desktop, 0 ) );
721 layout->addMultiCellWidget( label, 0, 1, 0, 0 );
722
723 label = new QLabel( i18n( "Department:" ), tab2 );
724 layout->addWidget( label, 0, 1 );
725 mDepartmentEdit = new KLineEdit( tab2 );
726 connect( mDepartmentEdit, SIGNAL( textChanged( const QString& ) ),
727 SLOT( textChanged( const QString& ) ) );
728 label->setBuddy( mDepartmentEdit );
729 layout->addWidget( mDepartmentEdit, 0, 2 );
730
731 label = new QLabel( i18n( "Office:" ), tab2 );
732 layout->addWidget( label, 1, 1 );
733 mOfficeEdit = new KLineEdit( tab2 );
734 connect( mOfficeEdit, SIGNAL( textChanged( const QString& ) ),
735 SLOT( textChanged( const QString& ) ) );
736 label->setBuddy( mOfficeEdit );
737 layout->addWidget( mOfficeEdit, 1, 2 );
738
739 label = new QLabel( i18n( "Profession:" ), tab2 );
740 layout->addWidget( label, 2, 1 );
741 mProfessionEdit = new KLineEdit( tab2 );
742 connect( mProfessionEdit, SIGNAL( textChanged( const QString& ) ),
743 SLOT( textChanged( const QString& ) ) );
744 label->setBuddy( mProfessionEdit );
745 layout->addWidget( mProfessionEdit, 2, 2 );
746
747 label = new QLabel( i18n( "Manager\'s name:" ), tab2 );
748 layout->addWidget( label, 0, 3 );
749 mManagerEdit = new KLineEdit( tab2 );
750 connect( mManagerEdit, SIGNAL( textChanged( const QString& ) ),
751 SLOT( textChanged( const QString& ) ) );
752 label->setBuddy( mManagerEdit );
753 layout->addMultiCellWidget( mManagerEdit, 0, 0, 4, 5 );
754
755 label = new QLabel( i18n( "Assistant's name:" ), tab2 );
756 layout->addWidget( label, 1, 3 );
757 mAssistantEdit = new KLineEdit( tab2 );
758 connect( mAssistantEdit, SIGNAL( textChanged( const QString& ) ),
759 SLOT( textChanged( const QString& ) ) );
760 label->setBuddy( mAssistantEdit );
761 layout->addMultiCellWidget( mAssistantEdit, 1, 1, 4, 5 );
762
763 bar = new KSeparator( KSeparator::HLine, tab2 );
764 layout->addMultiCellWidget( bar, 3, 3, 0, 5 );
765
766 /////////////////////////////////////////////////
767 // Personal info
768
769 label = new QLabel( tab2 );
770//US loadIcon call is ambiguous. Add one more parameter
771//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "personal", KIcon::Desktop ) );
772 label->setPixmap( KGlobal::iconLoader()->loadIcon( "personal", KIcon::Desktop, 0 ) );
773 layout->addMultiCellWidget( label, 4, 5, 0, 0 );
774
775 label = new QLabel( i18n( "Nick name:" ), tab2 );
776 layout->addWidget( label, 4, 1 );
777 mNicknameEdit = new KLineEdit( tab2 );
778 connect( mNicknameEdit, SIGNAL( textChanged( const QString& ) ),
779 SLOT( textChanged( const QString& ) ) );
780 label->setBuddy( mNicknameEdit );
781 layout->addWidget( mNicknameEdit, 4, 2 );
782
783 label = new QLabel( i18n( "Spouse's name:" ), tab2 );
784 layout->addWidget( label, 5, 1 );
785 mSpouseEdit = new KLineEdit( tab2 );
786 connect( mSpouseEdit, SIGNAL( textChanged( const QString& ) ),
787 SLOT( textChanged( const QString& ) ) );
788 label->setBuddy( mSpouseEdit );
789 layout->addWidget( mSpouseEdit, 5, 2 );
790
791 label = new QLabel( i18n( "Birthday:" ), tab2 );
792 layout->addWidget( label, 4, 3 );
793 mBirthdayPicker = new KDateEdit( tab2 );
794 mBirthdayPicker->setHandleInvalid( true );
795 connect( mBirthdayPicker, SIGNAL( dateChanged( QDate ) ),
796 SLOT( dateChanged( QDate ) ) );
797 connect( mBirthdayPicker, SIGNAL( invalidDateEntered() ),
798 SLOT( invalidDate() ) );
799 connect( mBirthdayPicker, SIGNAL( textChanged( const QString& ) ),
800 SLOT( emitModified() ) );
801 label->setBuddy( mBirthdayPicker );
802 layout->addWidget( mBirthdayPicker, 4, 4 );
803
804 label = new QLabel( i18n( "Anniversary:" ), tab2 );
805 layout->addWidget( label, 5, 3 );
806 mAnniversaryPicker = new KDateEdit( tab2 );
807 mAnniversaryPicker->setHandleInvalid( true );
808 connect( mAnniversaryPicker, SIGNAL( dateChanged( QDate ) ),
809 SLOT( dateChanged( QDate ) ) );
810 connect( mAnniversaryPicker, SIGNAL( invalidDateEntered() ),
811 SLOT( invalidDate() ) );
812 connect( mAnniversaryPicker, SIGNAL( textChanged( const QString& ) ),
813 SLOT( emitModified() ) );
814 label->setBuddy( mAnniversaryPicker );
815 layout->addWidget( mAnniversaryPicker, 5, 4 );
816
817 bar = new KSeparator( KSeparator::HLine, tab2 );
818 layout->addMultiCellWidget( bar, 6, 6, 0, 5 );
819*/
820 //////////////////////////////////////
821 // Notes
822 label = new QLabel( i18n( "Note:" ), tab2_2 );
823 label->setAlignment( Qt::AlignTop | Qt::AlignLeft );
824//US layout->addWidget( label, 7, 0 );
825 layout->addWidget( label, 0, 0 );
826#ifndef KAB_EMBEDDED
827 mNoteEdit = new QTextEdit( tab2_2 );
828 mNoteEdit->setWordWrap( QTextEdit::WidgetWidth );
829 mNoteEdit->setMinimumSize( mNoteEdit->sizeHint() );
830#else //KAB_EMBEDDED
831 mNoteEdit = new QMultiLineEdit( tab2_2 );
832 mNoteEdit->setWordWrap( QMultiLineEdit::WidgetWidth );
833 mNoteEdit->setMinimumSize( mNoteEdit->sizeHint() );
834#endif //KAB_EMBEDDED
835
836 connect( mNoteEdit, SIGNAL( textChanged() ), SLOT( emitModified() ) );
837 label->setBuddy( mNoteEdit );
838//US layout->addMultiCellWidget( mNoteEdit, 7, 7, 1, 5 );
839 layout->addWidget( mNoteEdit, 1, 0);
840
841 // Build the layout and add to the tab widget
842 layout->activate(); // required
843
844 mTabWidget->addTab( tab2_2, i18n( "&Notes" ) );
845}
846
847
848
849void AddresseeEditorWidget::setupTab3()
850{
851 // This is the Misc tab
852 QWidget *tab3 = new QWidget( mTabWidget );
853
854 QGridLayout *layout = new QGridLayout( tab3, 1, 1 );
855 layout->setMargin( KDialogBase::marginHintSmall() );
856 layout->setSpacing( KDialogBase::spacingHintSmall() );
857//US layout->setColStretch( 2, 1 );
858
859 //////////////////////////////////////
860 // Geo
861 mGeoWidget = new GeoWidget( tab3 );
862 // mGeoWidget->setMinimumSize( mGeoWidget->sizeHint() );
863 connect( mGeoWidget, SIGNAL( changed() ), SLOT( emitModified() ) );
864 layout->addWidget( mGeoWidget, 0, 0 );
865/*US
866 //////////////////////////////////////
867 // Sound
868#ifndef KAB_EMBEDDED
869 mSoundWidget = new SoundWidget( tab3 );
870 mSoundWidget->setMinimumSize( mSoundWidget->sizeHint() );
871 connect( mSoundWidget, SIGNAL( changed() ), SLOT( emitModified() ) );
872 layout->addWidget( mSoundWidget, 0, 1, Qt::AlignTop );
873#else //KAB_EMBEDDED
874qDebug("AddresseeEditorWidget::setupTab2 sound part is not supported = has to be changed");
875#endif //KAB_EMBEDDED
876
877 //////////////////////////////////////
878 // Images
879 mImageWidget = new ImageWidget( tab3 );
880 mImageWidget->setMinimumSize( mImageWidget->sizeHint() );
881 connect( mImageWidget, SIGNAL( changed() ), SLOT( emitModified() ) );
882 layout->addWidget( mImageWidget, 1, 0, Qt::AlignTop );
883*/
884//US
885/*
886 KSeparator* bar = new KSeparator( KSeparator::HLine, tab3 );
887 layout->addMultiCellWidget( bar, 1, 1, 0, 0 );
888*/
889 //////////////////////////////////////
890 // Keys
891 mKeyWidget = new KeyWidget( tab3 );
892 //mKeyWidget->setMinimumSize( mKeyWidget->sizeHint() );
893 connect( mKeyWidget, SIGNAL( changed() ), SLOT( emitModified() ) );
894//US layout->addWidget( mKeyWidget, 1, 1, Qt::AlignTop );
895 layout->addWidget( mKeyWidget, 1, 0 );
896
897 mTabWidget->addTab( tab3, i18n( "&Misc" ) );
898}
899
900void AddresseeEditorWidget::setupTab3_1()
901{
902 // This is the Misc tab
903 QWidget *tab3 = new QWidget( mTabWidget );
904
905//US QGridLayout *layout = new QGridLayout( tab3, 2, 3 );
906 QGridLayout *layout = new QGridLayout( tab3, 1, 1 );
907 layout->setMargin( KDialogBase::marginHint() );
908 layout->setSpacing( KDialogBase::spacingHint() );
909//US layout->setColStretch( 2, 1 );
910
911/*US
912 //////////////////////////////////////
913 // Geo
914 mGeoWidget = new GeoWidget( tab3 );
915 mGeoWidget->setMinimumSize( mGeoWidget->sizeHint() );
916 connect( mGeoWidget, SIGNAL( changed() ), SLOT( emitModified() ) );
917 layout->addWidget( mGeoWidget, 0, 0, Qt::AlignTop );
918*/
919 //////////////////////////////////////
920 // Sound
921#ifndef KAB_EMBEDDED
922 mSoundWidget = new SoundWidget( tab3 );
923 mSoundWidget->setMinimumSize( mSoundWidget->sizeHint() );
924 connect( mSoundWidget, SIGNAL( changed() ), SLOT( emitModified() ) );
925 layout->addWidget( mSoundWidget, 0, 1, Qt::AlignTop );
926#else //KAB_EMBEDDED
927//US qDebug("AddresseeEditorWidget::setupTab2 sound part is not supported = has to be changed");
928#endif //KAB_EMBEDDED
929
930 //////////////////////////////////////
931 // Images
932 mImageWidget = new ImageWidget( tab3 );
933 mImageWidget->setMinimumSize( mImageWidget->sizeHint() );
934 connect( mImageWidget, SIGNAL( changed() ), SLOT( emitModified() ) );
935 layout->addWidget( mImageWidget, 0, 0, Qt::AlignTop );
936/*US
937 //////////////////////////////////////
938 // Keys
939 mKeyWidget = new KeyWidget( tab3 );
940 mKeyWidget->setMinimumSize( mKeyWidget->sizeHint() );
941 connect( mKeyWidget, SIGNAL( changed() ), SLOT( emitModified() ) );
942 layout->addWidget( mKeyWidget, 1, 1, Qt::AlignTop );
943*/
944 mTabWidget->addTab( tab3, i18n( "&Images" ) );
945}
946
947
948void AddresseeEditorWidget::load()
949{
950 kdDebug(5720) << "AddresseeEditorWidget::load()" << endl;
951
952 // Block signals in case anything tries to emit modified
953 // CS: This doesn't seem to work.
954 bool block = signalsBlocked();
955 blockSignals( true );
956 mBlockSignals = true; // used for internal signal blocking
957
958 mNameEdit->setText( mAddressee.assembledName() );
959
960 if ( mAddressee.formattedName().isEmpty() ) {
961//US KConfig config( "kaddressbookrc" );
962 KConfig config( locateLocal("config", "kaddressbookrc") );
963 config.setGroup( "General" );
964 mFormattedNameType = config.readNumEntry( "FormattedNameType", 1 );
965 mAddressee.setFormattedName( NameEditDialog::formattedName( mAddressee, mFormattedNameType ) );
966 } else {
967 if ( mAddressee.formattedName() == NameEditDialog::formattedName( mAddressee, NameEditDialog::SimpleName ) )
968 mFormattedNameType = NameEditDialog::SimpleName;
969 else if ( mAddressee.formattedName() == NameEditDialog::formattedName( mAddressee, NameEditDialog::FullName ) )
970 mFormattedNameType = NameEditDialog::FullName;
971 else if ( mAddressee.formattedName() == NameEditDialog::formattedName( mAddressee, NameEditDialog::ReverseName ) )
972 mFormattedNameType = NameEditDialog::ReverseName;
973 else
974 mFormattedNameType = NameEditDialog::CustomName;
975 }
976
977 mFormattedNameLabel->setText( mAddressee.formattedName() );
978
979 mRoleEdit->setText( mAddressee.role() );
980 mOrgEdit->setText( mAddressee.organization() );
981
982//US mURLEdit->setURL( mAddressee.url().url() );
983 mURLEdit->setText( mAddressee.url().prettyURL() );
984//US?? mURLEdit->home( false );
985
986 // mNoteEdit->setText( mAddressee.note() );
987 mNoteEdit->setText( mAddressee.note() );
988 mEmailWidget->setEmails( mAddressee.emails() );
989 mPhoneEditWidget->setPhoneNumbers( mAddressee.phoneNumbers() );
990 mAddressEditWidget->setAddresses( mAddressee, mAddressee.addresses() );
991 mBirthdayPicker->setDate( mAddressee.birthday().date() );
992
993//US mAnniversaryPicker->setDate( QDate::fromString( mAddressee.custom(
994//US "KADDRESSBOOK", "X-Anniversary" ), Qt::ISODate) );
995 QDate dt = KGlobal::locale()->readDate( mAddressee.custom("KADDRESSBOOK", "X-Anniversary" ),
996 "%Y-%m-%d"); // = Qt::ISODate
997 mAnniversaryPicker->setDate( dt );
998
999
1000 mNicknameEdit->setText( mAddressee.nickName() );
1001 mCategoryEdit->setText( mAddressee.categories().join( "," ) );
1002
1003 mGeoWidget->setGeo( mAddressee.geo() );
1004 mImageWidget->setPhoto( mAddressee.photo() );
1005 mImageWidget->setLogo( mAddressee.logo() );
1006 mKeyWidget->setKeys( mAddressee.keys() );
1007 mSecrecyWidget->setSecrecy( mAddressee.secrecy() );
1008#ifndef KAB_EMBEDDED
1009 mSoundWidget->setSound( mAddressee.sound() );
1010#else //KAB_EMBEDDED
1011//US qDebug("AddresseeEditorWidget::load has to be changed 2");
1012#endif //KAB_EMBEDDED
1013
1014 // Load customs
1015 mIMAddressEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-IMAddress" ) );
1016 mSpouseEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-SpousesName" ) );
1017 mManagerEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-ManagersName" ) );
1018 mAssistantEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-AssistantsName" ) );
1019 mDepartmentEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-Department" ) );
1020 mOfficeEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-Office" ) );
1021 mProfessionEdit->setText( mAddressee.custom( "KADDRESSBOOK", "X-Profession" ) );
1022
1023 blockSignals( block );
1024 mBlockSignals = false;
1025
1026 mDirty = false;
1027}
1028
1029void AddresseeEditorWidget::save()
1030{
1031 if ( !mDirty ) return;
1032
1033 mAddressee.setRole( mRoleEdit->text() );
1034 mAddressee.setOrganization( mOrgEdit->text() );
1035 mAddressee.setUrl( KURL( mURLEdit->text() ) );
1036 mAddressee.setNote( mNoteEdit->text() );
1037 if ( mBirthdayPicker->inputIsValid() )
1038 mAddressee.setBirthday( QDateTime( mBirthdayPicker->date() ) );
1039 else
1040 mAddressee.setBirthday( QDateTime() );
1041
1042 mAddressee.setNickName( mNicknameEdit->text() );
1043 mAddressee.setCategories( QStringList::split( ",", mCategoryEdit->text() ) );
1044
1045 mAddressee.setGeo( mGeoWidget->geo() );
1046 mAddressee.setPhoto( mImageWidget->photo() );
1047 mAddressee.setLogo( mImageWidget->logo() );
1048 mAddressee.setKeys( mKeyWidget->keys() );
1049#ifndef KAB_EMBEDDED
1050 mAddressee.setSound( mSoundWidget->sound() );
1051#else //KAB_EMBEDDED
1052//US qDebug("AddresseeEditorWidget::save sound not supported");
1053#endif //KAB_EMBEDDED
1054 mAddressee.setSecrecy( mSecrecyWidget->secrecy() );
1055
1056 // save custom fields
1057 mAddressee.insertCustom( "KADDRESSBOOK", "X-IMAddress", mIMAddressEdit->text() );
1058 mAddressee.insertCustom( "KADDRESSBOOK", "X-SpousesName", mSpouseEdit->text() );
1059 mAddressee.insertCustom( "KADDRESSBOOK", "X-ManagersName", mManagerEdit->text() );
1060 mAddressee.insertCustom( "KADDRESSBOOK", "X-AssistantsName", mAssistantEdit->text() );
1061 mAddressee.insertCustom( "KADDRESSBOOK", "X-Department", mDepartmentEdit->text() );
1062 mAddressee.insertCustom( "KADDRESSBOOK", "X-Office", mOfficeEdit->text() );
1063 mAddressee.insertCustom( "KADDRESSBOOK", "X-Profession", mProfessionEdit->text() );
1064 if ( mAnniversaryPicker->inputIsValid() ) {
1065
1066//US mAddressee.insertCustom( "KADDRESSBOOK", "X-Anniversary",
1067//US mAnniversaryPicker->date().toString( Qt::ISODate ) );
1068 int orgformat = KGlobal::locale()->getIntDateFormat();
1069 QDate da = mAnniversaryPicker->date();
1070 KGlobal::locale()->setIntDateFormat( 2 ); // = Qt::ISODate
1071 QString dt = KGlobal::locale()->formatDate(da, true);
1072 KGlobal::locale()->setIntDateFormat(orgformat );
1073 mAddressee.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt);
1074 }
1075 else
1076 mAddressee.removeCustom( "KADDRESSBOOK", "X-Anniversary" );
1077
1078 // Save the email addresses
1079 QStringList emails = mAddressee.emails();
1080 QStringList::Iterator iter;
1081 for ( iter = emails.begin(); iter != emails.end(); ++iter )
1082 mAddressee.removeEmail( *iter );
1083
1084 emails = mEmailWidget->emails();
1085 bool first = true;
1086 for ( iter = emails.begin(); iter != emails.end(); ++iter ) {
1087 mAddressee.insertEmail( *iter, first );
1088 first = false;
1089 }
1090
1091 // Save the phone numbers
1092 KABC::PhoneNumber::List phoneNumbers;
1093 KABC::PhoneNumber::List::Iterator phoneIter;
1094 phoneNumbers = mAddressee.phoneNumbers();
1095 for ( phoneIter = phoneNumbers.begin(); phoneIter != phoneNumbers.end();
1096 ++phoneIter )
1097 mAddressee.removePhoneNumber( *phoneIter );
1098
1099 phoneNumbers = mPhoneEditWidget->phoneNumbers();
1100 for ( phoneIter = phoneNumbers.begin(); phoneIter != phoneNumbers.end();
1101 ++phoneIter )
1102 mAddressee.insertPhoneNumber( *phoneIter );
1103
1104 // Save the addresses
1105 KABC::Address::List addresses;
1106 KABC::Address::List::Iterator addressIter;
1107 addresses = mAddressee.addresses();
1108 for ( addressIter = addresses.begin(); addressIter != addresses.end();
1109 ++addressIter )
1110 mAddressee.removeAddress( *addressIter );
1111
1112 addresses = mAddressEditWidget->addresses();
1113 for ( addressIter = addresses.begin(); addressIter != addresses.end();
1114 ++addressIter )
1115 mAddressee.insertAddress( *addressIter );
1116 mDirty = false;
1117}
1118
1119bool AddresseeEditorWidget::dirty()
1120{
1121 return mDirty;
1122}
1123
1124void AddresseeEditorWidget::nameTextChanged( const QString &text )
1125{
1126 // use the addressee class to parse the name for us
1127 mAConfig->setUid( mAddressee.uid() );
1128 if ( mAConfig->automaticNameParsing() ) {
1129 if ( !mAddressee.formattedName().isEmpty() ) {
1130 QString fn = mAddressee.formattedName();
1131 mAddressee.setNameFromString( text );
1132 mAddressee.setFormattedName( fn );
1133 } else {
1134 // use extra addressee to avoid a formatted name assignment
1135 Addressee addr;
1136 addr.setNameFromString( text );
1137 mAddressee.setPrefix( addr.prefix() );
1138 mAddressee.setGivenName( addr.givenName() );
1139 mAddressee.setAdditionalName( addr.additionalName() );
1140 mAddressee.setFamilyName( addr.familyName() );
1141 mAddressee.setSuffix( addr.suffix() );
1142 }
1143 }
1144
1145 nameBoxChanged();
1146
1147 emitModified();
1148}
1149
1150void AddresseeEditorWidget::nameBoxChanged()
1151{
1152 KABC::Addressee addr;
1153 mAConfig->setUid( mAddressee.uid() );
1154 if ( mAConfig->automaticNameParsing() ) {
1155 addr.setNameFromString( mNameEdit->text() );
1156 mNameLabel->hide();
1157 mNameEdit->show();
1158 } else {
1159 addr = mAddressee;
1160 mNameEdit->hide();
1161 mNameLabel->setText( mNameEdit->text() );
1162 mNameLabel->show();
1163 }
1164
1165 if ( mFormattedNameType != NameEditDialog::CustomName ) {
1166 mFormattedNameLabel->setText( NameEditDialog::formattedName( mAddressee, mFormattedNameType ) );
1167 mAddressee.setFormattedName( NameEditDialog::formattedName( mAddressee, mFormattedNameType ) );
1168 }
1169}
1170
1171void AddresseeEditorWidget::nameButtonClicked()
1172{
1173 // show the name dialog.
1174 NameEditDialog dialog( mAddressee, mFormattedNameType, this );
1175
1176 if ( dialog.exec() ) {
1177 if ( dialog.changed() ) {
1178 mAddressee.setFamilyName( dialog.familyName() );
1179 mAddressee.setGivenName( dialog.givenName() );
1180 mAddressee.setPrefix( dialog.prefix() );
1181 mAddressee.setSuffix( dialog.suffix() );
1182 mAddressee.setAdditionalName( dialog.additionalName() );
1183 mFormattedNameType = dialog.formattedNameType();
1184 if ( mFormattedNameType == NameEditDialog::CustomName ) {
1185 mFormattedNameLabel->setText( dialog.customFormattedName() );
1186 mAddressee.setFormattedName( dialog.customFormattedName() );
1187 }
1188 // Update the name edit.
1189 bool block = mNameEdit->signalsBlocked();
1190 mNameEdit->blockSignals( true );
1191 mNameEdit->setText( mAddressee.assembledName() );
1192 mNameEdit->blockSignals( block );
1193
1194 // Update the combo box.
1195 nameBoxChanged();
1196
1197 emitModified();
1198 }
1199 }
1200}
1201
1202void AddresseeEditorWidget::categoryButtonClicked()
1203{
1204 // Show the category dialog
1205 if ( mCategoryDialog == 0 ) {
1206 mCategoryDialog = new KPIM::CategorySelectDialog( KABPrefs::instance(), this );
1207 connect( mCategoryDialog, SIGNAL( categoriesSelected( const QStringList& ) ),
1208 SLOT(categoriesSelected( const QStringList& ) ) );
1209 connect( mCategoryDialog, SIGNAL( editCategories() ), SLOT( editCategories() ) );
1210 }
1211
1212 mCategoryDialog->setCategories();
1213 mCategoryDialog->setSelected( QStringList::split( ",", mCategoryEdit->text() ) );
1214 mCategoryDialog->show();
1215 mCategoryDialog->raise();
1216}
1217
1218void AddresseeEditorWidget::categoriesSelected( const QStringList &list )
1219{
1220 mCategoryEdit->setText( list.join( "," ) );
1221}
1222
1223void AddresseeEditorWidget::editCategories()
1224{
1225 if ( mCategoryEditDialog == 0 ) {
1226 mCategoryEditDialog = new KPIM::CategoryEditDialog( KABPrefs::instance(), this );
1227 connect( mCategoryEditDialog, SIGNAL( categoryConfigChanged() ),
1228 SLOT( categoryButtonClicked() ) );
1229 }
1230
1231 mCategoryEditDialog->show();
1232 mCategoryEditDialog->raise();
1233}
1234
1235void AddresseeEditorWidget::emitModified()
1236{
1237 mDirty = true;
1238
1239 KABC::Addressee::List list;
1240
1241 if ( mIsExtension && !mBlockSignals ) {
1242 save();
1243 list.append( mAddressee );
1244 }
1245
1246 emit modified( list );
1247}
1248
1249void AddresseeEditorWidget::dateChanged( QDate )
1250{
1251 emitModified();
1252}
1253
1254//US invalid dates are handdled by the KDateEdit widget itself
1255void AddresseeEditorWidget::invalidDate()
1256{
1257 KMessageBox::sorry( this, i18n( "You must specify a valid date" ) );
1258}
1259
1260
1261void AddresseeEditorWidget::pageChanged( QWidget *wdg )
1262{
1263#ifndef KAB_EMBEDDED
1264 if ( wdg )
1265 KAcceleratorManager::manage( wdg );
1266#else //KAB_EMBEDDED
1267//US
1268#endif //KAB_EMBEDDED
1269
1270}
1271
1272QString AddresseeEditorWidget::title() const
1273{
1274 return i18n( "Contact Editor" );
1275}
1276
1277QString AddresseeEditorWidget::identifier() const
1278{
1279 return i18n( "contact_editor" );
1280}
1281
1282#ifndef KAB_EMBEDDED
1283#include "addresseeeditorwidget.moc"
1284#endif //KAB_EMBEDDED