summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/addressbook/abtable.cpp5
-rw-r--r--core/pim/addressbook/contacteditor.cpp34
2 files changed, 20 insertions, 19 deletions
diff --git a/core/pim/addressbook/abtable.cpp b/core/pim/addressbook/abtable.cpp
index 4feadeb..5222f16 100644
--- a/core/pim/addressbook/abtable.cpp
+++ b/core/pim/addressbook/abtable.cpp
@@ -1,90 +1,91 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#define QTOPIA_INTERNAL_CONTACT_MRE 21#define QTOPIA_INTERNAL_CONTACT_MRE
22 22
23#include <qpe/categoryselect.h> 23#include <qpe/categoryselect.h>
24#include <qpe/config.h> 24#include <qpe/config.h>
25#include <qpe/stringutil.h> 25#include <qpe/stringutil.h>
26#include <qpe/qcopenvelope_qws.h> 26#include <qpe/qcopenvelope_qws.h>
27#include <qpe/timestring.h>
27 28
28#include <opie/orecordlist.h> 29#include <opie/orecordlist.h>
29 30
30#include <qasciidict.h> 31#include <qasciidict.h>
31#include <qdatetime.h> 32#include <qdatetime.h>
32#include <qfile.h> 33#include <qfile.h>
33#include <qregexp.h> 34#include <qregexp.h>
34#include <qmessagebox.h> 35#include <qmessagebox.h>
35 36
36#include "abtable.h" 37#include "abtable.h"
37 38
38#include <errno.h> 39#include <errno.h>
39#include <fcntl.h> 40#include <fcntl.h>
40#include <unistd.h> 41#include <unistd.h>
41#include <stdlib.h> 42#include <stdlib.h>
42 43
43#include <ctype.h> //toupper() for key hack 44#include <ctype.h> //toupper() for key hack
44 45
45static bool contactCompare( const OContact &cnt, const QRegExp &r, int category ); 46static bool contactCompare( const OContact &cnt, const QRegExp &r, int category );
46 47
47 48
48/*! 49/*!
49 \class AbTableItem abtable.h 50 \class AbTableItem abtable.h
50 51
51 \brief QTableItem based class for showing a field of an entry 52 \brief QTableItem based class for showing a field of an entry
52*/ 53*/
53 54
54AbTableItem::AbTableItem( QTable *t, EditType et, const QString &s, 55AbTableItem::AbTableItem( QTable *t, EditType et, const QString &s,
55 const QString &secondSortKey) 56 const QString &secondSortKey)
56 : QTableItem( t, et, s ) 57 : QTableItem( t, et, s )
57{ 58{
58 // sortKey = s.lower() + QChar( '\0' ) + secondSortKey.lower(); 59 // sortKey = s.lower() + QChar( '\0' ) + secondSortKey.lower();
59 sortKey = Qtopia::buildSortKey( s, secondSortKey ); 60 sortKey = Qtopia::buildSortKey( s, secondSortKey );
60} 61}
61 62
62int AbTableItem::alignment() const 63int AbTableItem::alignment() const
63{ 64{
64 return AlignLeft|AlignVCenter; 65 return AlignLeft|AlignVCenter;
65} 66}
66 67
67QString AbTableItem::key() const 68QString AbTableItem::key() const
68{ 69{
69 return sortKey; 70 return sortKey;
70} 71}
71 72
72// A way to reset the item, without out doing a delete or a new... 73// A way to reset the item, without out doing a delete or a new...
73void AbTableItem::setItem( const QString &txt, const QString &secondKey ) 74void AbTableItem::setItem( const QString &txt, const QString &secondKey )
74{ 75{
75 setText( txt ); 76 setText( txt );
76 sortKey = Qtopia::buildSortKey( txt, secondKey ); 77 sortKey = Qtopia::buildSortKey( txt, secondKey );
77 78
78 // sortKey = txt.lower() + QChar( '\0' ) + secondKey.lower(); 79 // sortKey = txt.lower() + QChar( '\0' ) + secondKey.lower();
79} 80}
80 81
81/*! 82/*!
82 \class AbPickItem abtable.h 83 \class AbPickItem abtable.h
83 84
84 \brief QTableItem based class for showing slection of an entry 85 \brief QTableItem based class for showing slection of an entry
85*/ 86*/
86 87
87AbPickItem::AbPickItem( QTable *t ) : 88AbPickItem::AbPickItem( QTable *t ) :
88 QTableItem(t, WhenCurrent, "?") 89 QTableItem(t, WhenCurrent, "?")
89{ 90{
90} 91}
@@ -389,132 +390,132 @@ QString AbTable::findContactContact( const OContact &entry, int /* row */ )
389 case Qtopia::HomeFax: 390 case Qtopia::HomeFax:
390 value = entry.homeFax(); 391 value = entry.homeFax();
391 break; 392 break;
392 case Qtopia::HomeMobile: 393 case Qtopia::HomeMobile:
393 value = entry.homeMobile(); 394 value = entry.homeMobile();
394 break; 395 break;
395 case Qtopia::HomeWebPage: 396 case Qtopia::HomeWebPage:
396 value = entry.homeWebpage(); 397 value = entry.homeWebpage();
397 break; 398 break;
398 case Qtopia::Company: 399 case Qtopia::Company:
399 value = entry.company(); 400 value = entry.company();
400 break; 401 break;
401 case Qtopia::BusinessCity: 402 case Qtopia::BusinessCity:
402 value = entry.businessCity(); 403 value = entry.businessCity();
403 break; 404 break;
404 case Qtopia::BusinessStreet: 405 case Qtopia::BusinessStreet:
405 value = entry.businessStreet(); 406 value = entry.businessStreet();
406 break; 407 break;
407 case Qtopia::BusinessZip: 408 case Qtopia::BusinessZip:
408 value = entry.businessZip(); 409 value = entry.businessZip();
409 break; 410 break;
410 case Qtopia::BusinessCountry: 411 case Qtopia::BusinessCountry:
411 value = entry.businessCountry(); 412 value = entry.businessCountry();
412 break; 413 break;
413 case Qtopia::BusinessWebPage: 414 case Qtopia::BusinessWebPage:
414 value = entry.businessWebpage(); 415 value = entry.businessWebpage();
415 break; 416 break;
416 case Qtopia::JobTitle: 417 case Qtopia::JobTitle:
417 value = entry.jobTitle(); 418 value = entry.jobTitle();
418 break; 419 break;
419 case Qtopia::Department: 420 case Qtopia::Department:
420 value = entry.department(); 421 value = entry.department();
421 break; 422 break;
422 case Qtopia::Office: 423 case Qtopia::Office:
423 value = entry.office(); 424 value = entry.office();
424 break; 425 break;
425 case Qtopia::BusinessPhone: 426 case Qtopia::BusinessPhone:
426 value = entry.businessPhone(); 427 value = entry.businessPhone();
427 break; 428 break;
428 case Qtopia::BusinessFax: 429 case Qtopia::BusinessFax:
429 value = entry.businessFax(); 430 value = entry.businessFax();
430 break; 431 break;
431 case Qtopia::BusinessMobile: 432 case Qtopia::BusinessMobile:
432 value = entry.businessMobile(); 433 value = entry.businessMobile();
433 break; 434 break;
434 case Qtopia::BusinessPager: 435 case Qtopia::BusinessPager:
435 value = entry.businessPager(); 436 value = entry.businessPager();
436 break; 437 break;
437 case Qtopia::Profession: 438 case Qtopia::Profession:
438 value = entry.profession(); 439 value = entry.profession();
439 break; 440 break;
440 case Qtopia::Assistant: 441 case Qtopia::Assistant:
441 value = entry.assistant(); 442 value = entry.assistant();
442 break; 443 break;
443 case Qtopia::Manager: 444 case Qtopia::Manager:
444 value = entry.manager(); 445 value = entry.manager();
445 break; 446 break;
446 case Qtopia::Spouse: 447 case Qtopia::Spouse:
447 value = entry.spouse(); 448 value = entry.spouse();
448 break; 449 break;
449 case Qtopia::Gender: 450 case Qtopia::Gender:
450 value = entry.gender(); 451 value = entry.gender();
451 break; 452 break;
452 case Qtopia::Birthday: 453 case Qtopia::Birthday:
453 value = entry.birthday(); 454 value = TimeString::numberDateString( entry.birthday() );
454 break; 455 break;
455 case Qtopia::Anniversary: 456 case Qtopia::Anniversary:
456 value = entry.anniversary(); 457 value = TimeString::numberDateString( entry.anniversary() );
457 break; 458 break;
458 case Qtopia::Nickname: 459 case Qtopia::Nickname:
459 value = entry.nickname(); 460 value = entry.nickname();
460 break; 461 break;
461 case Qtopia::Children: 462 case Qtopia::Children:
462 value = entry.children(); 463 value = entry.children();
463 break; 464 break;
464 case Qtopia::Notes: 465 case Qtopia::Notes:
465 value = entry.notes(); 466 value = entry.notes();
466 break; 467 break;
467 } 468 }
468 if ( !value.isEmpty() ) 469 if ( !value.isEmpty() )
469 break; 470 break;
470 } 471 }
471 return value; 472 return value;
472} 473}
473 474
474void AbTable::addEntry( const OContact &newCnt ) 475void AbTable::addEntry( const OContact &newCnt )
475{ 476{
476 int row = numRows(); 477 int row = numRows();
477 478
478 setNumRows( row + 1 ); 479 setNumRows( row + 1 );
479 insertIntoTable( newCnt, row ); 480 insertIntoTable( newCnt, row );
480 481
481 qWarning("abtable:AddContact"); 482 qWarning("abtable:AddContact");
482 m_contactdb.add ( newCnt ); 483 m_contactdb.add ( newCnt );
483 484
484 setCurrentCell( row, 0 ); 485 setCurrentCell( row, 0 );
485 // updateVisible(); 486 // updateVisible();
486} 487}
487 488
488void AbTable::resizeRows() { 489void AbTable::resizeRows() {
489 /* 490 /*
490 if (numRows()) { 491 if (numRows()) {
491 for (int i = 0; i < numRows(); i++) { 492 for (int i = 0; i < numRows(); i++) {
492 setRowHeight( i, size ); 493 setRowHeight( i, size );
493 } 494 }
494 } 495 }
495 updateVisible(); 496 updateVisible();
496 */ 497 */
497} 498}
498 499
499 500
500bool AbTable::save() 501bool AbTable::save()
501{ 502{
502 // QTime t; 503 // QTime t;
503 // t.start(); 504 // t.start();
504 qWarning("abtable:Save data"); 505 qWarning("abtable:Save data");
505 506
506 return m_contactdb.save(); 507 return m_contactdb.save();
507} 508}
508 509
509void AbTable::load() 510void AbTable::load()
510{ 511{
511 setSorting( false ); 512 setSorting( false );
512 setUpdatesEnabled( FALSE ); 513 setUpdatesEnabled( FALSE );
513 514
514 qWarning("abtable:Load data"); 515 qWarning("abtable:Load data");
515 516
516 OContactAccess::List list = m_contactdb.allRecords(); 517 OContactAccess::List list = m_contactdb.allRecords();
517 OContactAccess::List::Iterator it; 518 OContactAccess::List::Iterator it;
518 setNumRows( list.count() ); 519 setNumRows( list.count() );
519 int row = 0; 520 int row = 0;
520 for ( it = list.begin(); it != list.end(); ++it ) 521 for ( it = list.begin(); it != list.end(); ++it )
diff --git a/core/pim/addressbook/contacteditor.cpp b/core/pim/addressbook/contacteditor.cpp
index 52ab0f2..e034b35 100644
--- a/core/pim/addressbook/contacteditor.cpp
+++ b/core/pim/addressbook/contacteditor.cpp
@@ -1,66 +1,67 @@
1/* 1/*
2 * Copyright (c) 2002 Michael R. Crawford <mike@tuxnami.org> 2 * Copyright (c) 2002 Michael R. Crawford <mike@tuxnami.org>
3 * Copyright (C) 2002 by Stefan Eilers (eilers.stefan@epost.de)
3 * 4 *
4 * This file is an add-on for the OPIE Palmtop Environment 5 * This file is an add-on for the OPIE Palmtop Environment
5 * 6 *
6 * This file may be distributed and/or modified under the terms of the 7 * This file may be distributed and/or modified under the terms of the
7 * GNU General Public License version 2 as published by the Free Software 8 * GNU General Public License version 2 as published by the Free Software
8 * Foundation and appearing in the file LICENSE.GPL included in the pacakaging 9 * Foundation and appearing in the file LICENSE.GPL included in the pacakaging
9 * of this file. 10 * of this file.
10 * 11 *
11 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 12 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 13 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13 * 14 *
14 * 15 *
15 * This is a rewrite of the abeditor.h file, modified to provide a more 16 * This is a rewrite of the abeditor.h file, modified to provide a more
16 * intuitive interface to TrollTech's original Address Book editor. This 17 * intuitive interface to TrollTech's original Address Book editor. This
17 * is made to operate exactly in interface with the exception of name. 18 * is made to operate exactly in interface with the exception of name.
18 * 19 *
19 */ 20 */
20 21
21#include "contacteditor.h" 22#include "contacteditor.h"
22#include "addresspicker.h" 23#include "addresspicker.h"
23 24
24#include <qpe/categoryselect.h> 25#include <qpe/categoryselect.h>
25#include <qpe/qpeapplication.h> 26#include <qpe/qpeapplication.h>
26#include <qpe/qpedialog.h> 27#include <qpe/qpedialog.h>
27#include <qpe/timeconversion.h> 28#include <qpe/timeconversion.h>
28 29
29#include <qcombobox.h> 30#include <qcombobox.h>
30#include <qlabel.h> 31#include <qlabel.h>
31#include <qtabwidget.h> 32#include <qtabwidget.h>
32#include <qlayout.h> 33#include <qlayout.h>
33#include <qlineedit.h> 34#include <qlineedit.h>
34#include <qmultilineedit.h> 35#include <qmultilineedit.h>
35#include <qscrollview.h> 36#include <qscrollview.h>
36#include <qtoolbutton.h> 37#include <qtoolbutton.h>
37#include <qpushbutton.h> 38#include <qpushbutton.h>
38#include <qmainwindow.h> 39#include <qmainwindow.h>
39#include <qvaluelist.h> 40#include <qvaluelist.h>
40#include <qpopupmenu.h> 41#include <qpopupmenu.h>
41#include <qlistbox.h> 42#include <qlistbox.h>
42 43
43static inline bool containsAlphaNum( const QString &str ); 44static inline bool containsAlphaNum( const QString &str );
44static inline bool constainsWhiteSpace( const QString &str ); 45static inline bool constainsWhiteSpace( const QString &str );
45 46
46// helper functions, convert our comma delimited list to proper 47// helper functions, convert our comma delimited list to proper
47// file format... 48// file format...
48void parseEmailFrom( const QString &txt, QString &strDefaultEmail, 49void parseEmailFrom( const QString &txt, QString &strDefaultEmail,
49 QString &strAll ); 50 QString &strAll );
50 51
51// helper convert from file format to comma delimited... 52// helper convert from file format to comma delimited...
52void parseEmailTo( const QString &strDefaultEmail, 53void parseEmailTo( const QString &strDefaultEmail,
53 const QString &strOtherEmail, QString &strBack ); 54 const QString &strOtherEmail, QString &strBack );
54 55
55 ContactEditor::ContactEditor(const OContact &entry, 56 ContactEditor::ContactEditor(const OContact &entry,
56 const QValueList<int> *newOrderedValues, 57 const QValueList<int> *newOrderedValues,
57 QStringList *slNewOrdered, 58 QStringList *slNewOrdered,
58 QWidget *parent, 59 QWidget *parent,
59 const char *name, 60 const char *name,
60 WFlags fl ) 61 WFlags fl )
61 : QDialog( parent, name, TRUE, fl ), 62 : QDialog( parent, name, TRUE, fl ),
62 orderedValues( newOrderedValues ), 63 orderedValues( newOrderedValues ),
63 slOrdered( *slNewOrdered ), 64 slOrdered( *slNewOrdered ),
64 m_personalView ( false ) 65 m_personalView ( false )
65{ 66{
66 67
@@ -1047,142 +1048,128 @@ void ContactEditor::slotAddressTypeChange( int index ) {
1047 txtAddress->setText( slHomeAddress[0] ); 1048 txtAddress->setText( slHomeAddress[0] );
1048 //txtAddress2->setText( (*slHomeAddress)[1] ); 1049 //txtAddress2->setText( (*slHomeAddress)[1] );
1049 //txtPOBox->setText( (*slHomeAddress)[2] ); 1050 //txtPOBox->setText( (*slHomeAddress)[2] );
1050 txtCity->setText( slHomeAddress[3] ); 1051 txtCity->setText( slHomeAddress[3] );
1051 txtState->setText( slHomeAddress[4] ); 1052 txtState->setText( slHomeAddress[4] );
1052 txtZip->setText( slHomeAddress[5] ); 1053 txtZip->setText( slHomeAddress[5] );
1053 QLineEdit *txtTmp = cmbCountry->lineEdit(); 1054 QLineEdit *txtTmp = cmbCountry->lineEdit();
1054 txtTmp->setText( slHomeAddress[6] ); 1055 txtTmp->setText( slHomeAddress[6] );
1055 1056
1056 } 1057 }
1057 1058
1058} 1059}
1059 1060
1060void ContactEditor::slotFullNameChange( const QString &textChanged ) { 1061void ContactEditor::slotFullNameChange( const QString &textChanged ) {
1061 1062
1062 int index = cmbFileAs->currentItem(); 1063 int index = cmbFileAs->currentItem();
1063 1064
1064 cmbFileAs->clear(); 1065 cmbFileAs->clear();
1065 1066
1066 cmbFileAs->insertItem( parseName( textChanged, 0 ) ); 1067 cmbFileAs->insertItem( parseName( textChanged, 0 ) );
1067 cmbFileAs->insertItem( parseName( textChanged, 1 ) ); 1068 cmbFileAs->insertItem( parseName( textChanged, 1 ) );
1068 cmbFileAs->insertItem( parseName( textChanged, 2 ) ); 1069 cmbFileAs->insertItem( parseName( textChanged, 2 ) );
1069 cmbFileAs->insertItem( parseName( textChanged, 3 ) ); 1070 cmbFileAs->insertItem( parseName( textChanged, 3 ) );
1070 1071
1071 cmbFileAs->setCurrentItem( index ); 1072 cmbFileAs->setCurrentItem( index );
1072 1073
1073 useFullName = TRUE; 1074 useFullName = TRUE;
1074 1075
1075} 1076}
1076 1077
1077// Loads the detail fields 1078// Loads the detail fields
1078void ContactEditor::loadFields() { 1079void ContactEditor::loadFields() {
1079 1080
1080 QStringList::ConstIterator it; 1081 QStringList::ConstIterator it;
1081 QListIterator<QLabel> lit( listName ); 1082 QListIterator<QLabel> lit( listName );
1082 for ( it = slDynamicEntries.begin(); *lit; ++lit, ++it) { 1083 for ( it = slDynamicEntries.begin(); *lit; ++lit, ++it) {
1083 1084
1084 if ( *it == "Department" ) 1085 if ( *it == "Department" )
1085 (*lit)->setText( tr( "Department" ) ); 1086 (*lit)->setText( tr( "Department" ) );
1086 1087
1087 if ( *it == "Company" ) 1088 if ( *it == "Company" )
1088 (*lit)->setText( tr( "Company" ) ); 1089 (*lit)->setText( tr( "Company" ) );
1089 1090
1090 if ( *it == "Office" ) 1091 if ( *it == "Office" )
1091 (*lit)->setText( tr( "Office" ) ); 1092 (*lit)->setText( tr( "Office" ) );
1092 1093
1093 if ( *it == "Profession" ) 1094 if ( *it == "Profession" )
1094 (*lit)->setText( tr( "Profession" ) ); 1095 (*lit)->setText( tr( "Profession" ) );
1095 1096
1096 if ( *it == "Assistant" ) 1097 if ( *it == "Assistant" )
1097 (*lit)->setText( tr( "Assistant" ) ); 1098 (*lit)->setText( tr( "Assistant" ) );
1098 1099
1099 if ( *it == "Manager" ) 1100 if ( *it == "Manager" )
1100 (*lit)->setText( tr( "Manager" ) ); 1101 (*lit)->setText( tr( "Manager" ) );
1101 1102
1102 if ( *it == "Spouse" ) 1103 if ( *it == "Spouse" )
1103 (*lit)->setText( tr( "Spouse" ) ); 1104 (*lit)->setText( tr( "Spouse" ) );
1104 1105
1105 if ( *it == "Nickname" ) 1106 if ( *it == "Nickname" )
1106 (*lit)->setText( tr( "Nickname" ) ); 1107 (*lit)->setText( tr( "Nickname" ) );
1107 1108
1108 if ( *it == "Children" ) 1109 if ( *it == "Children" )
1109 (*lit)->setText( tr( "Children" ) ); 1110 (*lit)->setText( tr( "Children" ) );
1110 } 1111 }
1111 // Set DatePicker
1112 qWarning ("**Info: %s", ent.birthday().latin1() );
1113 if ( !ent.birthday().isEmpty() ){
1114 birthdayButton->setText( ent.birthday() );
1115 birthdayPicker->setDate( TimeConversion::fromString ( ent.birthday() ) );
1116 } else
1117 birthdayButton->setText( tr ("Unknown") );
1118
1119 qWarning ("**Info: %s", ent.anniversary().latin1() );
1120 if ( !ent.anniversary().isEmpty() ){
1121 anniversaryButton->setText( ent.anniversary() );
1122 anniversaryPicker->setDate( TimeConversion::fromString ( ent.birthday() ) );
1123 } else
1124 anniversaryButton->setText( tr ("Unknown") );
1125 1112
1126} 1113}
1127 1114
1128void ContactEditor::accept() { 1115void ContactEditor::accept() {
1129 1116
1130 if ( isEmpty() ) { 1117 if ( isEmpty() ) {
1131 cleanupFields(); 1118 cleanupFields();
1132 reject(); 1119 reject();
1133 } else { 1120 } else {
1134 saveEntry(); 1121 saveEntry();
1135 cleanupFields(); 1122 cleanupFields();
1136 QDialog::accept(); 1123 QDialog::accept();
1137 } 1124 }
1138 1125
1139} 1126}
1140 1127
1141void ContactEditor::slotNote() { 1128void ContactEditor::slotNote() {
1142 1129
1143 dlgNote->showMaximized(); 1130 dlgNote->showMaximized();
1144 if ( !dlgNote->exec() ) { 1131 if ( !dlgNote->exec() ) {
1145 txtNote->setText( ent.notes() ); 1132 txtNote->setText( ent.notes() );
1146 } 1133 }
1147} 1134}
1148 1135
1149void ContactEditor::slotName() { 1136void ContactEditor::slotName() {
1150 1137
1151 QString tmpName; 1138 QString tmpName;
1152 if (useFullName == TRUE) { 1139 if (useFullName == TRUE) {
1153 txtFirstName->setText( parseName(txtFullName->text(), NAME_F) ); 1140 txtFirstName->setText( parseName(txtFullName->text(), NAME_F) );
1154 txtMiddleName->setText( parseName(txtFullName->text(), NAME_M) ); 1141 txtMiddleName->setText( parseName(txtFullName->text(), NAME_M) );
1155 txtLastName->setText( parseName(txtFullName->text(), NAME_L) ); 1142 txtLastName->setText( parseName(txtFullName->text(), NAME_L) );
1156 txtSuffix->setText( parseName(txtFullName->text(), NAME_S) ); 1143 txtSuffix->setText( parseName(txtFullName->text(), NAME_S) );
1157 } 1144 }
1158 dlgName->showMaximized(); 1145 dlgName->showMaximized();
1159 if ( dlgName->exec() ) { 1146 if ( dlgName->exec() ) {
1160 1147
1161 tmpName = txtFirstName->text() + " " + txtMiddleName->text() + " " + txtLastName->text() + " " + txtSuffix->text(); 1148 tmpName = txtFirstName->text() + " " + txtMiddleName->text() + " " + txtLastName->text() + " " + txtSuffix->text();
1162 txtFullName->setText( tmpName.simplifyWhiteSpace() ); 1149 txtFullName->setText( tmpName.simplifyWhiteSpace() );
1163 slotFullNameChange( txtFullName->text() ); 1150 slotFullNameChange( txtFullName->text() );
1164 useFullName = FALSE; 1151 useFullName = FALSE;
1165 } 1152 }
1166 1153
1167} 1154}
1168 1155
1169void ContactEditor::setNameFocus() { 1156void ContactEditor::setNameFocus() {
1170 1157
1171 txtFullName->setFocus(); 1158 txtFullName->setFocus();
1172 1159
1173} 1160}
1174 1161
1175bool ContactEditor::isEmpty() { 1162bool ContactEditor::isEmpty() {
1176 // Test and see if the record should be saved. 1163 // Test and see if the record should be saved.
1177 // More strict than the original qtopia, needs name or fileas to save 1164 // More strict than the original qtopia, needs name or fileas to save
1178 1165
1179 QString t = txtFullName->text(); 1166 QString t = txtFullName->text();
1180 if ( !t.isEmpty() && containsAlphaNum( t ) ) 1167 if ( !t.isEmpty() && containsAlphaNum( t ) )
1181 return false; 1168 return false;
1182 1169
1183 t = cmbFileAs->currentText(); 1170 t = cmbFileAs->currentText();
1184 if ( !t.isEmpty() && containsAlphaNum( t ) ) 1171 if ( !t.isEmpty() && containsAlphaNum( t ) )
1185 return false; 1172 return false;
1186 1173
1187 return true; 1174 return true;
1188 1175
@@ -1540,129 +1527,142 @@ void ContactEditor::setEntry( const OContact &entry ) {
1540 *itV = ent.homePhone(); 1527 *itV = ent.homePhone();
1541/* 1528/*
1542 if ( *it == "Home 2 Phone" ) 1529 if ( *it == "Home 2 Phone" )
1543 *itV = ent.home2Phone(); 1530 *itV = ent.home2Phone();
1544*/ 1531*/
1545 if ( *it == "Home Fax" ) 1532 if ( *it == "Home Fax" )
1546 *itV = ent.homeFax(); 1533 *itV = ent.homeFax();
1547 1534
1548 if ( *it == "Home Mobile" ) 1535 if ( *it == "Home Mobile" )
1549 *itV = ent.homeMobile(); 1536 *itV = ent.homeMobile();
1550/* 1537/*
1551 if ( *it == "Car Phone" ) 1538 if ( *it == "Car Phone" )
1552 *itV = ent.carPhone(); 1539 *itV = ent.carPhone();
1553 1540
1554 if ( *it == "ISDN Phone" ) 1541 if ( *it == "ISDN Phone" )
1555 *itV = ent.ISDNPhone(); 1542 *itV = ent.ISDNPhone();
1556 1543
1557 if ( *it == "Other Phone" ) 1544 if ( *it == "Other Phone" )
1558 *itV = ent.otherPhone(); 1545 *itV = ent.otherPhone();
1559*/ 1546*/
1560 if ( ( *it == "Business Pager" ) || ( *it == "Work Pager" ) ) 1547 if ( ( *it == "Business Pager" ) || ( *it == "Work Pager" ) )
1561 *itV = ent.businessPager(); 1548 *itV = ent.businessPager();
1562/* 1549/*
1563 if ( *it == "Home Pager") 1550 if ( *it == "Home Pager")
1564 *itV = ent.homePager(); 1551 *itV = ent.homePager();
1565 1552
1566 if ( *it == "AIM IM" ) 1553 if ( *it == "AIM IM" )
1567 *itV = ent.AIMIM(); 1554 *itV = ent.AIMIM();
1568 1555
1569 if ( *it == "ICQ IM" ) 1556 if ( *it == "ICQ IM" )
1570 *itV = ent.ICQIM(); 1557 *itV = ent.ICQIM();
1571 1558
1572 if ( *it == "Jabber IM" ) 1559 if ( *it == "Jabber IM" )
1573 *itV = ent.jabberIM(); 1560 *itV = ent.jabberIM();
1574 1561
1575 if ( *it == "MSN IM" ) 1562 if ( *it == "MSN IM" )
1576 *itV = ent.MSNIM(); 1563 *itV = ent.MSNIM();
1577 1564
1578 if ( *it == "Yahoo IM" ) 1565 if ( *it == "Yahoo IM" )
1579 *itV = ent.yahooIM(); 1566 *itV = ent.yahooIM();
1580*/ 1567*/
1581 if ( *it == "Home Web Page" ) 1568 if ( *it == "Home Web Page" )
1582 *itV = ent.homeWebpage(); 1569 *itV = ent.homeWebpage();
1583 1570
1584 if ( ( *it == "Business WebPage" ) || ( *it == "Work Web Page" ) ) 1571 if ( ( *it == "Business WebPage" ) || ( *it == "Work Web Page" ) )
1585 *itV = ent.businessWebpage(); 1572 *itV = ent.businessWebpage();
1586 1573
1587 1574
1588 } 1575 }
1589 1576
1590 1577
1591 cmbCat->setCategories( ent.categories(), "Contacts", tr("Contacts") ); 1578 cmbCat->setCategories( ent.categories(), "Contacts", tr("Contacts") );
1592 1579
1593 QString gender = ent.gender(); 1580 QString gender = ent.gender();
1594 cmbGender->setCurrentItem( gender.toInt() ); 1581 cmbGender->setCurrentItem( gender.toInt() );
1595 1582
1596 txtNote->setText( ent.notes() ); 1583 txtNote->setText( ent.notes() );
1597 1584
1598 slotCmbChooser1Change( cmbChooserField1->currentItem() ); 1585 slotCmbChooser1Change( cmbChooserField1->currentItem() );
1599 slotCmbChooser2Change( cmbChooserField2->currentItem() ); 1586 slotCmbChooser2Change( cmbChooserField2->currentItem() );
1600 slotCmbChooser3Change( cmbChooserField3->currentItem() ); 1587 slotCmbChooser3Change( cmbChooserField3->currentItem() );
1601 1588
1602 slotAddressTypeChange( cmbAddress->currentItem() ); 1589 slotAddressTypeChange( cmbAddress->currentItem() );
1603 1590
1604 loadFields(); 1591 // loadFields(); :SX
1592
1593 // Set DatePicker
1594 if ( !ent.birthday().isNull() ){
1595 birthdayButton->setText( TimeString::numberDateString( ent.birthday() ) );
1596 birthdayPicker->setDate( ent.birthday() );
1597 } else
1598 birthdayButton->setText( tr ("Unknown") );
1599
1600 if ( !ent.anniversary().isNull() ){
1601 anniversaryButton->setText( TimeString::numberDateString( ent.anniversary() ) );
1602 anniversaryPicker->setDate( ent.anniversary() );
1603 } else
1604 anniversaryButton->setText( tr ("Unknown") );
1605 1605
1606} 1606}
1607 1607
1608void ContactEditor::saveEntry() { 1608void ContactEditor::saveEntry() {
1609 1609
1610 if ( useFullName == TRUE ) { 1610 if ( useFullName == TRUE ) {
1611 txtFirstName->setText( parseName( txtFullName->text(), NAME_F ) ); 1611 txtFirstName->setText( parseName( txtFullName->text(), NAME_F ) );
1612 txtMiddleName->setText( parseName( txtFullName->text(), NAME_M ) ); 1612 txtMiddleName->setText( parseName( txtFullName->text(), NAME_M ) );
1613 txtLastName->setText( parseName( txtFullName->text(), NAME_L ) ); 1613 txtLastName->setText( parseName( txtFullName->text(), NAME_L ) );
1614 txtSuffix->setText( parseName( txtFullName->text(), NAME_S ) ); 1614 txtSuffix->setText( parseName( txtFullName->text(), NAME_S ) );
1615 1615
1616 useFullName = FALSE; 1616 useFullName = FALSE;
1617} 1617}
1618 1618
1619 /*if ( ent.firstName() != txtFirstName->text() || 1619 /*if ( ent.firstName() != txtFirstName->text() ||
1620 ent.lastName != txtLastName->text() || 1620 ent.lastName != txtLastName->text() ||
1621 ent.middleName != txtMiddleName->text() ) { 1621 ent.middleName != txtMiddleName->text() ) {
1622 */ 1622 */
1623 ent.setFirstName( txtFirstName->text() ); 1623 ent.setFirstName( txtFirstName->text() );
1624 ent.setLastName( txtLastName->text() ); 1624 ent.setLastName( txtLastName->text() );
1625 ent.setMiddleName( txtMiddleName->text() ); 1625 ent.setMiddleName( txtMiddleName->text() );
1626 ent.setSuffix( txtSuffix->text() ); 1626 ent.setSuffix( txtSuffix->text() );
1627 1627
1628 //} 1628 //}
1629 1629
1630 ent.setFileAs( cmbFileAs->currentText() ); 1630 ent.setFileAs( cmbFileAs->currentText() );
1631 1631
1632 ent.setCategories( cmbCat->currentCategories() ); 1632 ent.setCategories( cmbCat->currentCategories() );
1633 1633
1634 if (hasTitle) 1634 if (hasTitle)
1635 ent.setJobTitle( txtJobTitle->text() ); 1635 ent.setJobTitle( txtJobTitle->text() );
1636 1636
1637 if (hasCompany) 1637 if (hasCompany)
1638 ent.setCompany( txtOrganization->text() ); 1638 ent.setCompany( txtOrganization->text() );
1639 1639
1640 if (hasNotes) 1640 if (hasNotes)
1641 ent.setNotes( txtNote->text() ); 1641 ent.setNotes( txtNote->text() );
1642 1642
1643 if (hasStreet) { 1643 if (hasStreet) {
1644 ent.setHomeStreet( slHomeAddress[0] ); 1644 ent.setHomeStreet( slHomeAddress[0] );
1645 ent.setBusinessStreet( slBusinessAddress[0] ); 1645 ent.setBusinessStreet( slBusinessAddress[0] );
1646 } 1646 }
1647/* 1647/*
1648 if (hasStreet2) { 1648 if (hasStreet2) {
1649 ent.setHomeStreet2( (*slHomeAddress)[1] ); 1649 ent.setHomeStreet2( (*slHomeAddress)[1] );
1650 ent.setBusinessStreet2( (*slBusinessAddress)[1] ); 1650 ent.setBusinessStreet2( (*slBusinessAddress)[1] );
1651 } 1651 }
1652 1652
1653 if (hasPOBox) { 1653 if (hasPOBox) {
1654 ent.setHomePOBox( (*slHomeAddress)[2] ); 1654 ent.setHomePOBox( (*slHomeAddress)[2] );
1655 ent.setBusinessPOBox( (*slBusinessAddress)[2] ); 1655 ent.setBusinessPOBox( (*slBusinessAddress)[2] );
1656 } 1656 }
1657*/ 1657*/
1658 if (hasCity) { 1658 if (hasCity) {
1659 ent.setHomeCity( slHomeAddress[3] ); 1659 ent.setHomeCity( slHomeAddress[3] );
1660 ent.setBusinessCity( slBusinessAddress[3] ); 1660 ent.setBusinessCity( slBusinessAddress[3] );
1661 } 1661 }
1662 1662
1663 if (hasState) { 1663 if (hasState) {
1664 ent.setHomeState( slHomeAddress[4] ); 1664 ent.setHomeState( slHomeAddress[4] );
1665 ent.setBusinessState( slBusinessAddress[4] ); 1665 ent.setBusinessState( slBusinessAddress[4] );
1666 } 1666 }
1667 1667
1668 if (hasZip) { 1668 if (hasZip) {
@@ -1830,75 +1830,75 @@ void parseEmailTo( const QString &strDefaultEmail,
1830 // create a comma dilimeted set of emails... 1830 // create a comma dilimeted set of emails...
1831 // use the power of short circuiting... 1831 // use the power of short circuiting...
1832 bool foundDefault = false; 1832 bool foundDefault = false;
1833 QString strTmp; 1833 QString strTmp;
1834 int start = 0; 1834 int start = 0;
1835 int where; 1835 int where;
1836 // start at the beginng. 1836 // start at the beginng.
1837 strBack = strDefaultEmail; 1837 strBack = strDefaultEmail;
1838 where = 0; 1838 where = 0;
1839 while ( where > -1 ) { 1839 while ( where > -1 ) {
1840 start = where; 1840 start = where;
1841 where = strOtherEmail.find( ' ', where + 1 ); 1841 where = strOtherEmail.find( ' ', where + 1 );
1842 if ( where > 0 ) { 1842 if ( where > 0 ) {
1843 strTmp = strOtherEmail.mid( start, where - start ).stripWhiteSpace(); 1843 strTmp = strOtherEmail.mid( start, where - start ).stripWhiteSpace();
1844 } else 1844 } else
1845 strTmp = strOtherEmail.right( strOtherEmail.length() - start ).stripWhiteSpace(); 1845 strTmp = strOtherEmail.right( strOtherEmail.length() - start ).stripWhiteSpace();
1846 if ( foundDefault || strTmp != strDefaultEmail ) { 1846 if ( foundDefault || strTmp != strDefaultEmail ) {
1847 strBack.append( ", " ); 1847 strBack.append( ", " );
1848 strBack.append( strTmp ); 1848 strBack.append( strTmp );
1849 } else 1849 } else
1850 foundDefault = true; 1850 foundDefault = true;
1851 } 1851 }
1852} 1852}
1853 1853
1854 1854
1855static inline bool containsAlphaNum( const QString &str ) 1855static inline bool containsAlphaNum( const QString &str )
1856{ 1856{
1857 int i, 1857 int i,
1858 count = str.length(); 1858 count = str.length();
1859 for ( i = 0; i < count; i++ ) 1859 for ( i = 0; i < count; i++ )
1860 if ( !str[i].isSpace() ) 1860 if ( !str[i].isSpace() )
1861 return TRUE; 1861 return TRUE;
1862 return FALSE; 1862 return FALSE;
1863} 1863}
1864 1864
1865static inline bool constainsWhiteSpace( const QString &str ) 1865static inline bool constainsWhiteSpace( const QString &str )
1866{ 1866{
1867 int i, 1867 int i,
1868 count = str.length(); 1868 count = str.length();
1869 for (i = 0; i < count; i++ ) 1869 for (i = 0; i < count; i++ )
1870 if ( str[i].isSpace() ) 1870 if ( str[i].isSpace() )
1871 return TRUE; 1871 return TRUE;
1872 return FALSE; 1872 return FALSE;
1873} 1873}
1874 1874
1875void ContactEditor::setPersonalView( bool personal ) 1875void ContactEditor::setPersonalView( bool personal )
1876{ 1876{
1877 m_personalView = personal; 1877 m_personalView = personal;
1878 if ( personal ){ 1878 if ( personal ){
1879 cmbCat->hide(); 1879 cmbCat->hide();
1880 labCat->hide(); 1880 labCat->hide();
1881 } else{ 1881 } else{
1882 cmbCat->show(); 1882 cmbCat->show();
1883 labCat->show(); 1883 labCat->show();
1884 1884
1885 } 1885 }
1886} 1886}
1887 1887
1888void ContactEditor::slotAnniversaryDateChanged( int year, int month, int day) 1888void ContactEditor::slotAnniversaryDateChanged( int year, int month, int day)
1889{ 1889{
1890 QDate date; 1890 QDate date;
1891 date.setYMD( year, month, day ); 1891 date.setYMD( year, month, day );
1892 QString dateString = TimeString::numberDateString( date ); 1892 QString dateString = TimeString::numberDateString( date );
1893 anniversaryButton->setText( dateString ); 1893 anniversaryButton->setText( dateString );
1894 ent.setAnniversary ( dateString ); 1894 ent.setAnniversary ( date );
1895} 1895}
1896 1896
1897void ContactEditor::slotBirthdayDateChanged( int year, int month, int day) 1897void ContactEditor::slotBirthdayDateChanged( int year, int month, int day)
1898{ 1898{
1899 QDate date; 1899 QDate date;
1900 date.setYMD( year, month, day ); 1900 date.setYMD( year, month, day );
1901 QString dateString = TimeString::numberDateString( date ); 1901 QString dateString = TimeString::numberDateString( date );
1902 birthdayButton->setText( dateString ); 1902 birthdayButton->setText( dateString );
1903 ent.setBirthday ( dateString ); 1903 ent.setBirthday ( date );
1904} 1904}