summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/addressbook/TODO11
-rw-r--r--core/pim/addressbook/addressbook.cpp9
-rw-r--r--core/pim/addressbook/configdlg_base.ui6
-rw-r--r--core/pim/addressbook/contacteditor.cpp153
-rw-r--r--core/pim/addressbook/contacteditor.h16
5 files changed, 154 insertions, 41 deletions
diff --git a/core/pim/addressbook/TODO b/core/pim/addressbook/TODO
index 96134f4..100a6fd 100644
--- a/core/pim/addressbook/TODO
+++ b/core/pim/addressbook/TODO
@@ -1,43 +1,46 @@
1Stuff todo until OPIE 1.0 : 1Stuff todo until OPIE 1.0 :
2 2
3Pending bugfixes from previous work: 3Pending bugfixes from previous work:
4 4
5Urgent: 5Urgent:
6 6
7 7
8Important: 8Important:
9 9
10- Personal contact editor: Disable categories
11- Name order selected in "contacteditor" not used in list view. 10- Name order selected in "contacteditor" not used in list view.
12- contacteditor: Birthday, annyversary, ... : Use Dateselector
13 11
14- Overview window cleanup needed.. 12- Overview window cleanup needed..
15- Cursor keys should work in detail-view (ablabel) 13- Cursor keys should work in detail-view (ablabel)
16- "What's this" should be added 14 -> Ablabel should be removed and Abtable should be increased with
15 different views (as started by darwin zins)..
17- Store last settings of combo-boxes 16- Store last settings of combo-boxes
18- Finishing of new View functions (List, Phonebook...) 17- Finishing of new View functions (List, Phonebook...)
19- The names of the countries are sorted by there english names, only.. 18- The names of the countries are sorted by there english names, only..
20 Even if they are translated.. :S 19 Even if they are translated.. :S
21- Reload if contacts were changed externally 20- Reload if contacts were changed externally
21- "What's this" should be added
22 22
23Less important: 23Less important:
24 24
25- The picker (alphabetical sort widget) should be 25- The picker (alphabetical sort widget) should be
26 placed verticaly or horizontally (configurable) 26 placed verticaly or horizontally (configurable)
27- Use advanced database functions in abtable to decrease 27- Use advanced database functions in abtable to decrease
28 memory footprint and to make everything more easy ! 28 memory footprint and to make everything more easy !
29 (abtable should store Iterator for selected Category) 29 (abtable should store Iterator for selected Category)
30 30
31Should be Fixed (not absolute sure, need further validation): 31Should be Fixed (not absolute sure, need further validation):
32- "Nonenglish" translation bug has to be fixed. 32
33 33
34Fixed: 34Fixed:
35- Syncing: abtable not reloaded after sync. 35- Syncing: abtable not reloaded after sync.
36- Find widget should be replaced by something like 36- Find widget should be replaced by something like
37 qpdf has. 37 qpdf has.
38- Adding a configuration dialog 38- Adding a configuration dialog
39- Picker: Activated letter schould be more visible 39- Picker: Activated letter schould be more visible
40- Advanced handling of cursor keys (search..) 40- Advanced handling of cursor keys (search..)
41- Mail-Icon is missing 41- Mail-Icon is missing
42- Use opie-mail insted of qt-mail if possible. 42- Use opie-mail insted of qt-mail if possible.
43- Font menu is invisible using german translation 43- Font menu is invisible using german translation
44- Personal contact editor: Disable categories
45- "Nonenglish" translation bug has to be fixed.
46- contacteditor: Birthday, annyversary, ... : Use Dateselector
diff --git a/core/pim/addressbook/addressbook.cpp b/core/pim/addressbook/addressbook.cpp
index 39d8321..108e66d 100644
--- a/core/pim/addressbook/addressbook.cpp
+++ b/core/pim/addressbook/addressbook.cpp
@@ -85,25 +85,25 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name,
85 bAbEditFirstTime(TRUE), 85 bAbEditFirstTime(TRUE),
86 syncing(FALSE) 86 syncing(FALSE)
87{ 87{
88 isLoading = true; 88 isLoading = true;
89 89
90 // Read Config settings 90 // Read Config settings
91 Config cfg("AddressBook"); 91 Config cfg("AddressBook");
92 cfg.setGroup("Search"); 92 cfg.setGroup("Search");
93 useRegExp = cfg.readBoolEntry( "useRegExp" ); 93 useRegExp = cfg.readBoolEntry( "useRegExp" );
94 caseSensitive = cfg.readBoolEntry( "caseSensitive" ); 94 caseSensitive = cfg.readBoolEntry( "caseSensitive" );
95 doNotifyWrapAround = cfg.readBoolEntry( "doNotifyWrapAround" ); 95 doNotifyWrapAround = cfg.readBoolEntry( "doNotifyWrapAround" );
96 cfg.setGroup("Mail"); 96 cfg.setGroup("Mail");
97 m_useQtMail = cfg.readBoolEntry( "useQtMail" ); 97 m_useQtMail = cfg.readBoolEntry( "useQtMail", true );
98 m_useOpieMail=cfg.readBoolEntry( "useOpieMail" ); 98 m_useOpieMail=cfg.readBoolEntry( "useOpieMail" );
99 99
100 100
101 initFields(); 101 initFields();
102 102
103 setCaption( tr("Contacts") ); 103 setCaption( tr("Contacts") );
104 setIcon( Resource::loadPixmap( "AddressBook" ) ); 104 setIcon( Resource::loadPixmap( "AddressBook" ) );
105 105
106 setToolBarsMovable( FALSE ); 106 setToolBarsMovable( FALSE );
107 107
108 // Create Toolbars 108 // Create Toolbars
109 109
@@ -664,45 +664,50 @@ void AddressbookWindow::appMessage(const QCString &msg, const QByteArray &data)
664 } 664 }
665#endif 665#endif
666 666
667} 667}
668 668
669void AddressbookWindow::editPersonal() 669void AddressbookWindow::editPersonal()
670{ 670{
671 QString filename = addressbookPersonalVCardName(); 671 QString filename = addressbookPersonalVCardName();
672 OContact me; 672 OContact me;
673 if (QFile::exists(filename)) 673 if (QFile::exists(filename))
674 me = OContact::readVCard( filename )[0]; 674 me = OContact::readVCard( filename )[0];
675 if (bAbEditFirstTime) { 675 if (bAbEditFirstTime) {
676 qWarning("Editing personal data");
676 abEditor = new ContactEditor( me, &orderedFields, &slOrderedFields, 677 abEditor = new ContactEditor( me, &orderedFields, &slOrderedFields,
677 this, "editor" ); 678 this, "editor" );
678 // don't create a new editor every time 679 // don't create a new editor every time
679 bAbEditFirstTime = FALSE; 680 bAbEditFirstTime = FALSE;
680 } else 681 } else{
681 abEditor->setEntry( me ); 682 abEditor->setEntry( me );
683 }
684
685 abEditor->setPersonalView( true );
682 686
683 abEditor->setCaption(tr("Edit My Personal Details")); 687 abEditor->setCaption(tr("Edit My Personal Details"));
684 abEditor->showMaximized(); 688 abEditor->showMaximized();
685 689
686 // fix the foxus... 690 // fix the foxus...
687 abEditor->setNameFocus(); 691 abEditor->setNameFocus();
688 if ( abEditor->exec() ) { 692 if ( abEditor->exec() ) {
689 setFocus(); 693 setFocus();
690 OContact new_personal = abEditor->entry(); 694 OContact new_personal = abEditor->entry();
691 QString fname = addressbookPersonalVCardName(); 695 QString fname = addressbookPersonalVCardName();
692 OContact::writeVCard( fname, new_personal ); 696 OContact::writeVCard( fname, new_personal );
693 abView()->init(new_personal); 697 abView()->init(new_personal);
694 abView()->sync(); 698 abView()->sync();
695 } 699 }
696 abEditor->setCaption( tr("Edit Address") ); 700 abEditor->setCaption( tr("Edit Address") );
701 abEditor->setPersonalView( false );
697} 702}
698 703
699void AddressbookWindow::slotPersonalView() 704void AddressbookWindow::slotPersonalView()
700{ 705{
701 if (!actionPersonal->isOn()) { 706 if (!actionPersonal->isOn()) {
702 // we just turned it off 707 // we just turned it off
703 setCaption( tr("Contacts") ); 708 setCaption( tr("Contacts") );
704 actionNew->setEnabled(TRUE); 709 actionNew->setEnabled(TRUE);
705 actionTrash->setEnabled(TRUE); 710 actionTrash->setEnabled(TRUE);
706 actionFind->setEnabled(TRUE); 711 actionFind->setEnabled(TRUE);
707 slotUpdateToolbar(); // maybe some of the above could be moved there 712 slotUpdateToolbar(); // maybe some of the above could be moved there
708 showList(); 713 showList();
diff --git a/core/pim/addressbook/configdlg_base.ui b/core/pim/addressbook/configdlg_base.ui
index d3ea12e..a6fcffa 100644
--- a/core/pim/addressbook/configdlg_base.ui
+++ b/core/pim/addressbook/configdlg_base.ui
@@ -3,26 +3,26 @@
3<author>Stefan Eilers</author> 3<author>Stefan Eilers</author>
4<widget> 4<widget>
5 <class>QDialog</class> 5 <class>QDialog</class>
6 <property stdset="1"> 6 <property stdset="1">
7 <name>name</name> 7 <name>name</name>
8 <cstring>Configuration</cstring> 8 <cstring>Configuration</cstring>
9 </property> 9 </property>
10 <property stdset="1"> 10 <property stdset="1">
11 <name>geometry</name> 11 <name>geometry</name>
12 <rect> 12 <rect>
13 <x>0</x> 13 <x>0</x>
14 <y>0</y> 14 <y>0</y>
15 <width>217</width> 15 <width>244</width>
16 <height>287</height> 16 <height>298</height>
17 </rect> 17 </rect>
18 </property> 18 </property>
19 <property stdset="1"> 19 <property stdset="1">
20 <name>caption</name> 20 <name>caption</name>
21 <string>MyDialog1</string> 21 <string>MyDialog1</string>
22 </property> 22 </property>
23 <property stdset="1"> 23 <property stdset="1">
24 <name>sizeGripEnabled</name> 24 <name>sizeGripEnabled</name>
25 <bool>true</bool> 25 <bool>true</bool>
26 </property> 26 </property>
27 <vbox> 27 <vbox>
28 <property stdset="1"> 28 <property stdset="1">
@@ -320,16 +320,18 @@ is provided free !</string>
320 <connection> 320 <connection>
321 <sender>buttonCancel</sender> 321 <sender>buttonCancel</sender>
322 <signal>clicked()</signal> 322 <signal>clicked()</signal>
323 <receiver>Configuration</receiver> 323 <receiver>Configuration</receiver>
324 <slot>reject()</slot> 324 <slot>reject()</slot>
325 </connection> 325 </connection>
326</connections> 326</connections>
327<tabstops> 327<tabstops>
328 <tabstop>configDlg_base</tabstop> 328 <tabstop>configDlg_base</tabstop>
329 <tabstop>m_useWildCard</tabstop> 329 <tabstop>m_useWildCard</tabstop>
330 <tabstop>m_useCaseSensitive</tabstop> 330 <tabstop>m_useCaseSensitive</tabstop>
331 <tabstop>m_signalWrapAround</tabstop> 331 <tabstop>m_signalWrapAround</tabstop>
332 <tabstop>m_useQtMail</tabstop>
333 <tabstop>m_useOpieMail</tabstop>
332 <tabstop>buttonOk</tabstop> 334 <tabstop>buttonOk</tabstop>
333 <tabstop>buttonCancel</tabstop> 335 <tabstop>buttonCancel</tabstop>
334</tabstops> 336</tabstops>
335</UI> 337</UI>
diff --git a/core/pim/addressbook/contacteditor.cpp b/core/pim/addressbook/contacteditor.cpp
index e7f2ebd..a59a927 100644
--- a/core/pim/addressbook/contacteditor.cpp
+++ b/core/pim/addressbook/contacteditor.cpp
@@ -15,58 +15,61 @@
15 * This is a rewrite of the abeditor.h file, modified to provide a more 15 * 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 16 * intuitive interface to TrollTech's original Address Book editor. This
17 * is made to operate exactly in interface with the exception of name. 17 * is made to operate exactly in interface with the exception of name.
18 * 18 *
19 */ 19 */
20 20
21#include "contacteditor.h" 21#include "contacteditor.h"
22#include "addresspicker.h" 22#include "addresspicker.h"
23 23
24#include <qpe/categoryselect.h> 24#include <qpe/categoryselect.h>
25#include <qpe/qpeapplication.h> 25#include <qpe/qpeapplication.h>
26#include <qpe/qpedialog.h> 26#include <qpe/qpedialog.h>
27#include <qpe/timeconversion.h>
27 28
28#include <qcombobox.h> 29#include <qcombobox.h>
29#include <qlabel.h> 30#include <qlabel.h>
30#include <qtabwidget.h> 31#include <qtabwidget.h>
31#include <qlayout.h> 32#include <qlayout.h>
32#include <qlineedit.h> 33#include <qlineedit.h>
33#include <qmultilineedit.h> 34#include <qmultilineedit.h>
34#include <qscrollview.h> 35#include <qscrollview.h>
35#include <qtoolbutton.h> 36#include <qtoolbutton.h>
36#include <qpushbutton.h> 37#include <qpushbutton.h>
37#include <qmainwindow.h> 38#include <qmainwindow.h>
38#include <qvaluelist.h> 39#include <qvaluelist.h>
40#include <qpopupmenu.h>
39 41
40static inline bool containsAlphaNum( const QString &str ); 42static inline bool containsAlphaNum( const QString &str );
41static inline bool constainsWhiteSpace( const QString &str ); 43static inline bool constainsWhiteSpace( const QString &str );
42 44
43// helper functions, convert our comma delimited list to proper 45// helper functions, convert our comma delimited list to proper
44// file format... 46// file format...
45void parseEmailFrom( const QString &txt, QString &strDefaultEmail, 47void parseEmailFrom( const QString &txt, QString &strDefaultEmail,
46 QString &strAll ); 48 QString &strAll );
47 49
48// helper convert from file format to comma delimited... 50// helper convert from file format to comma delimited...
49void parseEmailTo( const QString &strDefaultEmail, 51void parseEmailTo( const QString &strDefaultEmail,
50 const QString &strOtherEmail, QString &strBack ); 52 const QString &strOtherEmail, QString &strBack );
51 53
52 ContactEditor::ContactEditor(const OContact &entry, 54 ContactEditor::ContactEditor(const OContact &entry,
53 const QValueList<int> *newOrderedValues, 55 const QValueList<int> *newOrderedValues,
54 QStringList *slNewOrdered, 56 QStringList *slNewOrdered,
55 QWidget *parent, 57 QWidget *parent,
56 const char *name, 58 const char *name,
57 WFlags fl ) 59 WFlags fl )
58 : QDialog( parent, name, TRUE, fl ), 60 : QDialog( parent, name, TRUE, fl ),
59 orderedValues( newOrderedValues ), 61 orderedValues( newOrderedValues ),
60 slOrdered( *slNewOrdered ) 62 slOrdered( *slNewOrdered ),
63 m_personalView ( false )
61{ 64{
62 65
63 init(); 66 init();
64 initMap(); 67 initMap();
65 setEntry( entry ); 68 setEntry( entry );
66 qDebug("finish"); 69 qDebug("finish");
67} 70}
68 71
69ContactEditor::~ContactEditor() { 72ContactEditor::~ContactEditor() {
70} 73}
71 74
72void ContactEditor::init() { 75void ContactEditor::init() {
@@ -197,25 +200,34 @@ void ContactEditor::init() {
197 //slDynamicEntries->remove( it ); 200 //slDynamicEntries->remove( it );
198 continue; 201 continue;
199 } 202 }
200 203
201 if ( *it == "Emails" ) { 204 if ( *it == "Emails" ) {
202 trlChooserNames.append( tr( "Emails" ) ); 205 trlChooserNames.append( tr( "Emails" ) );
203 slChooserNames.append( *it ); 206 slChooserNames.append( *it );
204 slChooserValues.append( "" ); 207 slChooserValues.append( "" );
205 //slDynamicEntries->remove( it ); 208 //slDynamicEntries->remove( it );
206 continue; 209 continue;
207 } 210 }
208 211
209 if ( *it == "Name Title" || *it == "First Name" || *it == "Middle Name" || *it == "Last Name" || *it == "File As" || *it == "Default Email" || *it == "Emails" || *it == "Groups" ) 212 if ( *it == "Name Title" ||
213 *it == "First Name" ||
214 *it == "Middle Name" ||
215 *it == "Last Name" ||
216 *it == "File As" ||
217 *it == "Default Email" ||
218 *it == "Emails" ||
219 *it == "Groups" ||
220 *it == "Anniversary" ||
221 *it == "Birthday" )
210 continue; 222 continue;
211 223
212 if ( *it == "Name Title" ) { 224 if ( *it == "Name Title" ) {
213 //slDynamicEntries->remove( it ); 225 //slDynamicEntries->remove( it );
214 continue; 226 continue;
215 } 227 }
216 228
217 if ( *it == "First Name" ) { 229 if ( *it == "First Name" ) {
218 //slDynamicEntries->remove( it ); 230 //slDynamicEntries->remove( it );
219 continue; 231 continue;
220 } 232 }
221 233
@@ -393,29 +405,39 @@ void ContactEditor::init() {
393 405
394 cmbChooserField3 = new QComboBox( FALSE, container ); 406 cmbChooserField3 = new QComboBox( FALSE, container );
395 cmbChooserField3->setMaximumWidth( 90 ); 407 cmbChooserField3->setMaximumWidth( 90 );
396 gl->addWidget( cmbChooserField3, 5, 0 ); 408 gl->addWidget( cmbChooserField3, 5, 0 );
397 txtChooserField3 = new QLineEdit( container ); 409 txtChooserField3 = new QLineEdit( container );
398 gl->addWidget( txtChooserField3, 5, 1 ); 410 gl->addWidget( txtChooserField3, 5, 1 );
399 411
400 l = new QLabel( tr( "File As" ), container ); 412 l = new QLabel( tr( "File As" ), container );
401 gl->addWidget( l, 6, 0 ); 413 gl->addWidget( l, 6, 0 );
402 cmbFileAs = new QComboBox( TRUE, container ); 414 cmbFileAs = new QComboBox( TRUE, container );
403 gl->addWidget( cmbFileAs, 6, 1 ); 415 gl->addWidget( cmbFileAs, 6, 1 );
404 416
405 l = new QLabel( tr( "Category" ), container ); 417 labCat = new QLabel( tr( "Category" ), container );
406 gl->addWidget( l, 7, 0 ); 418 gl->addWidget( labCat, 7, 0 );
407 cmbCat = new CategorySelect( container ); 419 cmbCat = new CategorySelect( container );
408 gl->addWidget( cmbCat, 7, 1 ); 420 gl->addWidget( cmbCat, 7, 1 );
409 421
422 // We don't need categories for the personal view
423 if ( m_personalView ){
424 qWarning("Disable Category..");
425 labCat->hide();
426 cmbCat->hide();
427 } else {
428 labCat->show();
429 cmbCat->show();
430 }
431
410 btnNote = new QPushButton( tr( "Notes..." ), container ); 432 btnNote = new QPushButton( tr( "Notes..." ), container );
411 gl->addWidget( btnNote, 8, 1 ); 433 gl->addWidget( btnNote, 8, 1 );
412 434
413 tabMain->insertTab( tabViewport, tr( "General" ) ); 435 tabMain->insertTab( tabViewport, tr( "General" ) );
414 436
415 tabViewport = new QWidget ( tabMain ); 437 tabViewport = new QWidget ( tabMain );
416 438
417 vb = new QVBoxLayout( tabViewport ); 439 vb = new QVBoxLayout( tabViewport );
418 440
419 svAddress = new QScrollView( tabViewport ); 441 svAddress = new QScrollView( tabViewport );
420 vb->addWidget( svAddress, 0, 0 ); 442 vb->addWidget( svAddress, 0, 0 );
421 svAddress->setResizePolicy( QScrollView::AutoOneFit ); 443 svAddress->setResizePolicy( QScrollView::AutoOneFit );
@@ -698,44 +720,84 @@ void ContactEditor::init() {
698 vb = new QVBoxLayout( tabViewport ); 720 vb = new QVBoxLayout( tabViewport );
699 721
700 svDetails = new QScrollView( tabViewport ); 722 svDetails = new QScrollView( tabViewport );
701 vb->addWidget( svDetails, 0, 0 ); 723 vb->addWidget( svDetails, 0, 0 );
702 svDetails->setResizePolicy( QScrollView::AutoOneFit ); 724 svDetails->setResizePolicy( QScrollView::AutoOneFit );
703 svDetails->setFrameStyle( QFrame::NoFrame ); 725 svDetails->setFrameStyle( QFrame::NoFrame );
704 726
705 container = new QWidget( svDetails->viewport() ); 727 container = new QWidget( svDetails->viewport() );
706 svDetails->addChild( container ); 728 svDetails->addChild( container );
707 729
708 gl = new QGridLayout( container, 1, 2, 2, 4 ); 730 gl = new QGridLayout( container, 1, 2, 2, 4 );
709 731
732 int counter = 0;
733
734 // Birthday
735 l = new QLabel( tr("Birthday"), container );
736 gl->addWidget( l, counter, 0 );
737
738 QPopupMenu* m1 = new QPopupMenu( container );
739 birthdayPicker = new DateBookMonth( m1, 0, TRUE );
740 m1->insertItem( birthdayPicker );
741
742 birthdayButton= new QToolButton( container, "buttonStart" );
743 birthdayButton->setPopup( m1 );
744 birthdayButton->setPopupDelay(0);
745 gl->addWidget( birthdayButton, counter , 1 );
746 connect( birthdayPicker, SIGNAL( dateClicked( int, int, int ) ),
747 this, SLOT( slotBirthdayDateChanged( int, int, int ) ) );
748
749 ++counter;
750
751 // Anniversary
752 l = new QLabel( tr("Anniversary"), container );
753 gl->addWidget( l, counter, 0 );
754
755 m1 = new QPopupMenu( container );
756 anniversaryPicker = new DateBookMonth( m1, 0, TRUE );
757 m1->insertItem( anniversaryPicker );
758
759 anniversaryButton= new QToolButton( container, "buttonStart" );
760 anniversaryButton->setPopup( m1 );
761 anniversaryButton->setPopupDelay(0);
762 gl->addWidget( anniversaryButton, counter , 1 );
763 connect( anniversaryPicker, SIGNAL( dateClicked( int, int, int ) ),
764 this, SLOT( slotAnniversaryDateChanged( int, int, int ) ) );
765
766 ++counter;
767
768 // Gender
769 l = new QLabel( tr("Gender"), container );
770 gl->addWidget( l, counter, 0 );
771 cmbGender = new QComboBox( container );
772 cmbGender->insertItem( "", 0 );
773 cmbGender->insertItem( tr("Male"), 1);
774 cmbGender->insertItem( tr("Female"), 2);
775 gl->addWidget( cmbGender, counter, 1 );
776
777 ++counter;
778
710 // Create Labels and lineedit fields for every dynamic entry 779 // Create Labels and lineedit fields for every dynamic entry
711 QStringList::ConstIterator it = slDynamicEntries.begin(); 780 QStringList::ConstIterator it = slDynamicEntries.begin();
712 for (i = 0; it != slDynamicEntries.end(); i++, ++it) { 781 for (i = counter; it != slDynamicEntries.end(); i++, ++it) {
713 l = new QLabel( QString::null , container ); 782 l = new QLabel( QString::null , container );
714 listName.append( l ); 783 listName.append( l );
715 gl->addWidget( l, i, 0 ); 784 gl->addWidget( l, i, 0 );
716 QLineEdit *e = new QLineEdit( container ); 785 QLineEdit *e = new QLineEdit( container );
717 listValue.append( e ); 786 listValue.append( e );
718 gl->addWidget( e, i, 1); 787 gl->addWidget( e, i, 1);
719 } 788 }
720 // Fill labels with names.. 789 // Fill labels with names..
721 loadFields(); 790 loadFields();
722 791
723 l = new QLabel( tr("Gender"), container );
724 gl->addWidget( l, slDynamicEntries.count(), 0 );
725 cmbGender = new QComboBox( container );
726 cmbGender->insertItem( "", 0 );
727 cmbGender->insertItem( tr("Male"), 1);
728 cmbGender->insertItem( tr("Female"), 2);
729 gl->addWidget( cmbGender, slDynamicEntries.count(), 1 );
730 792
731 tabMain->insertTab( tabViewport, tr( "Details" ) ); 793 tabMain->insertTab( tabViewport, tr( "Details" ) );
732 794
733 dlgNote = new QDialog( this, "Note Dialog", TRUE ); 795 dlgNote = new QDialog( this, "Note Dialog", TRUE );
734 dlgNote->setCaption( tr("Enter Note") ); 796 dlgNote->setCaption( tr("Enter Note") );
735 QVBoxLayout *vbNote = new QVBoxLayout( dlgNote ); 797 QVBoxLayout *vbNote = new QVBoxLayout( dlgNote );
736 txtNote = new QMultiLineEdit( dlgNote ); 798 txtNote = new QMultiLineEdit( dlgNote );
737 vbNote->addWidget( txtNote ); 799 vbNote->addWidget( txtNote );
738 connect( btnNote, SIGNAL(clicked()), this, SLOT(slotNote()) ); 800 connect( btnNote, SIGNAL(clicked()), this, SLOT(slotNote()) );
739 801
740 dlgName = new QDialog( this, "Name Dialog", TRUE ); 802 dlgName = new QDialog( this, "Name Dialog", TRUE );
741 dlgName->setCaption( tr("Edit Name") ); 803 dlgName->setCaption( tr("Edit Name") );
@@ -1000,24 +1062,25 @@ void ContactEditor::slotFullNameChange( const QString &textChanged ) {
1000 1062
1001 cmbFileAs->insertItem( parseName( textChanged, 0 ) ); 1063 cmbFileAs->insertItem( parseName( textChanged, 0 ) );
1002 cmbFileAs->insertItem( parseName( textChanged, 1 ) ); 1064 cmbFileAs->insertItem( parseName( textChanged, 1 ) );
1003 cmbFileAs->insertItem( parseName( textChanged, 2 ) ); 1065 cmbFileAs->insertItem( parseName( textChanged, 2 ) );
1004 cmbFileAs->insertItem( parseName( textChanged, 3 ) ); 1066 cmbFileAs->insertItem( parseName( textChanged, 3 ) );
1005 1067
1006 cmbFileAs->setCurrentItem( index ); 1068 cmbFileAs->setCurrentItem( index );
1007 1069
1008 useFullName = TRUE; 1070 useFullName = TRUE;
1009 1071
1010} 1072}
1011 1073
1074// Loads the detail fields
1012void ContactEditor::loadFields() { 1075void ContactEditor::loadFields() {
1013 1076
1014 QStringList::ConstIterator it; 1077 QStringList::ConstIterator it;
1015 QListIterator<QLabel> lit( listName ); 1078 QListIterator<QLabel> lit( listName );
1016 for ( it = slDynamicEntries.begin(); *lit; ++lit, ++it) { 1079 for ( it = slDynamicEntries.begin(); *lit; ++lit, ++it) {
1017 1080
1018 if ( *it == "Department" ) 1081 if ( *it == "Department" )
1019 (*lit)->setText( tr( "Department" ) ); 1082 (*lit)->setText( tr( "Department" ) );
1020 1083
1021 if ( *it == "Company" ) 1084 if ( *it == "Company" )
1022 (*lit)->setText( tr( "Company" ) ); 1085 (*lit)->setText( tr( "Company" ) );
1023 1086
@@ -1027,36 +1090,45 @@ void ContactEditor::loadFields() {
1027 if ( *it == "Profession" ) 1090 if ( *it == "Profession" )
1028 (*lit)->setText( tr( "Profession" ) ); 1091 (*lit)->setText( tr( "Profession" ) );
1029 1092
1030 if ( *it == "Assistant" ) 1093 if ( *it == "Assistant" )
1031 (*lit)->setText( tr( "Assistant" ) ); 1094 (*lit)->setText( tr( "Assistant" ) );
1032 1095
1033 if ( *it == "Manager" ) 1096 if ( *it == "Manager" )
1034 (*lit)->setText( tr( "Manager" ) ); 1097 (*lit)->setText( tr( "Manager" ) );
1035 1098
1036 if ( *it == "Spouse" ) 1099 if ( *it == "Spouse" )
1037 (*lit)->setText( tr( "Spouse" ) ); 1100 (*lit)->setText( tr( "Spouse" ) );
1038 1101
1039 if ( *it == "Birthday" )
1040 (*lit)->setText( tr( "Birthday" ) );
1041
1042 if ( *it == "Anniversary" )
1043 (*lit)->setText( tr( "Anniversary" ) );
1044
1045 if ( *it == "Nickname" ) 1102 if ( *it == "Nickname" )
1046 (*lit)->setText( tr( "Nickname" ) ); 1103 (*lit)->setText( tr( "Nickname" ) );
1047 1104
1048 if ( *it == "Children" ) 1105 if ( *it == "Children" )
1049 (*lit)->setText( tr( "Children" ) ); 1106 (*lit)->setText( tr( "Children" ) );
1050 } 1107 }
1108 // Set DatePicker
1109 qWarning ("**Info: %s", ent.birthday().latin1() );
1110 if ( !ent.birthday().isEmpty() ){
1111 birthdayButton->setText( ent.birthday() );
1112 birthdayPicker->setDate( TimeConversion::fromString ( ent.birthday() ) );
1113 } else
1114 birthdayButton->setText( tr ("Unknown") );
1115
1116 qWarning ("**Info: %s", ent.anniversary().latin1() );
1117 if ( !ent.anniversary().isEmpty() ){
1118 anniversaryButton->setText( ent.anniversary() );
1119 anniversaryPicker->setDate( TimeConversion::fromString ( ent.birthday() ) );
1120 } else
1121 anniversaryButton->setText( tr ("Unknown") );
1122
1051} 1123}
1052 1124
1053void ContactEditor::accept() { 1125void ContactEditor::accept() {
1054 1126
1055 if ( isEmpty() ) { 1127 if ( isEmpty() ) {
1056 cleanupFields(); 1128 cleanupFields();
1057 reject(); 1129 reject();
1058 } else { 1130 } else {
1059 saveEntry(); 1131 saveEntry();
1060 cleanupFields(); 1132 cleanupFields();
1061 QDialog::accept(); 1133 QDialog::accept();
1062 } 1134 }
@@ -1420,30 +1492,24 @@ void ContactEditor::setEntry( const OContact &entry ) {
1420 if ( *it == "Profession" ) 1492 if ( *it == "Profession" )
1421 (*itLE)->setText( ent.profession() ); 1493 (*itLE)->setText( ent.profession() );
1422 1494
1423 if ( *it == "Assistant" ) 1495 if ( *it == "Assistant" )
1424 (*itLE)->setText( ent.assistant() ); 1496 (*itLE)->setText( ent.assistant() );
1425 1497
1426 if ( *it == "Manager" ) 1498 if ( *it == "Manager" )
1427 (*itLE)->setText( ent.manager() ); 1499 (*itLE)->setText( ent.manager() );
1428 1500
1429 if ( *it == "Spouse" ) 1501 if ( *it == "Spouse" )
1430 (*itLE)->setText( ent.spouse() ); 1502 (*itLE)->setText( ent.spouse() );
1431 1503
1432 if ( *it == "Birthday" )
1433 (*itLE)->setText( ent.birthday() );
1434
1435 if ( *it == "Anniversary" )
1436 (*itLE)->setText( ent.anniversary() );
1437
1438 if ( *it == "Nickname" ) 1504 if ( *it == "Nickname" )
1439 (*itLE)->setText( ent.nickname() ); 1505 (*itLE)->setText( ent.nickname() );
1440 1506
1441 if ( *it == "Children" ) 1507 if ( *it == "Children" )
1442 (*itLE)->setText( ent.children() ); 1508 (*itLE)->setText( ent.children() );
1443 1509
1444 } 1510 }
1445 1511
1446 QStringList::Iterator itV; 1512 QStringList::Iterator itV;
1447 for ( it = slChooserNames.begin(), itV = slChooserValues.begin(); it != slChooserNames.end(); ++it, ++itV ) { 1513 for ( it = slChooserNames.begin(), itV = slChooserValues.begin(); it != slChooserNames.end(); ++it, ++itV ) {
1448 1514
1449 if ( ( *it == "Business Phone") || ( *it == "Work Phone" ) ) 1515 if ( ( *it == "Business Phone") || ( *it == "Work Phone" ) )
@@ -1509,37 +1575,40 @@ void ContactEditor::setEntry( const OContact &entry ) {
1509 if ( *it == "Yahoo IM" ) 1575 if ( *it == "Yahoo IM" )
1510 *itV = ent.yahooIM(); 1576 *itV = ent.yahooIM();
1511*/ 1577*/
1512 if ( *it == "Home Web Page" ) 1578 if ( *it == "Home Web Page" )
1513 *itV = ent.homeWebpage(); 1579 *itV = ent.homeWebpage();
1514 1580
1515 if ( ( *it == "Business WebPage" ) || ( *it == "Work Web Page" ) ) 1581 if ( ( *it == "Business WebPage" ) || ( *it == "Work Web Page" ) )
1516 *itV = ent.businessWebpage(); 1582 *itV = ent.businessWebpage();
1517 1583
1518 1584
1519 } 1585 }
1520 1586
1587
1521 cmbCat->setCategories( ent.categories(), "Contacts", tr("Contacts") ); 1588 cmbCat->setCategories( ent.categories(), "Contacts", tr("Contacts") );
1522 1589
1523 QString gender = ent.gender(); 1590 QString gender = ent.gender();
1524 cmbGender->setCurrentItem( gender.toInt() ); 1591 cmbGender->setCurrentItem( gender.toInt() );
1525 1592
1526 txtNote->setText( ent.notes() ); 1593 txtNote->setText( ent.notes() );
1527 1594
1528 slotCmbChooser1Change( cmbChooserField1->currentItem() ); 1595 slotCmbChooser1Change( cmbChooserField1->currentItem() );
1529 slotCmbChooser2Change( cmbChooserField2->currentItem() ); 1596 slotCmbChooser2Change( cmbChooserField2->currentItem() );
1530 slotCmbChooser3Change( cmbChooserField3->currentItem() ); 1597 slotCmbChooser3Change( cmbChooserField3->currentItem() );
1531 1598
1532 slotAddressTypeChange( cmbAddress->currentItem() ); 1599 slotAddressTypeChange( cmbAddress->currentItem() );
1533 1600
1601 loadFields();
1602
1534} 1603}
1535 1604
1536void ContactEditor::saveEntry() { 1605void ContactEditor::saveEntry() {
1537 1606
1538 if ( useFullName == TRUE ) { 1607 if ( useFullName == TRUE ) {
1539 txtFirstName->setText( parseName( txtFullName->text(), NAME_F ) ); 1608 txtFirstName->setText( parseName( txtFullName->text(), NAME_F ) );
1540 txtMiddleName->setText( parseName( txtFullName->text(), NAME_M ) ); 1609 txtMiddleName->setText( parseName( txtFullName->text(), NAME_M ) );
1541 txtLastName->setText( parseName( txtFullName->text(), NAME_L ) ); 1610 txtLastName->setText( parseName( txtFullName->text(), NAME_L ) );
1542 txtSuffix->setText( parseName( txtFullName->text(), NAME_S ) ); 1611 txtSuffix->setText( parseName( txtFullName->text(), NAME_S ) );
1543 1612
1544 useFullName = FALSE; 1613 useFullName = FALSE;
1545} 1614}
@@ -1618,30 +1687,24 @@ void ContactEditor::saveEntry() {
1618 if ( *it == "Profession" ) 1687 if ( *it == "Profession" )
1619 ent.setProfession( (*itLE)->text() ); 1688 ent.setProfession( (*itLE)->text() );
1620 1689
1621 if ( *it == "Assistant" ) 1690 if ( *it == "Assistant" )
1622 ent.setAssistant( (*itLE)->text() ); 1691 ent.setAssistant( (*itLE)->text() );
1623 1692
1624 if ( *it == "Manager" ) 1693 if ( *it == "Manager" )
1625 ent.setManager( (*itLE)->text() ); 1694 ent.setManager( (*itLE)->text() );
1626 1695
1627 if ( *it == "Spouse" ) 1696 if ( *it == "Spouse" )
1628 ent.setSpouse( (*itLE)->text() ); 1697 ent.setSpouse( (*itLE)->text() );
1629 1698
1630 if ( *it == "Birthday" )
1631 ent.setBirthday( (*itLE)->text() );
1632
1633 if ( *it == "Anniversary" )
1634 ent.setAnniversary( (*itLE)->text() );
1635
1636 if ( *it == "Nickname" ) 1699 if ( *it == "Nickname" )
1637 ent.setNickname( (*itLE)->text() ); 1700 ent.setNickname( (*itLE)->text() );
1638 1701
1639 if ( *it == "Children" ) 1702 if ( *it == "Children" )
1640 ent.setChildren( (*itLE)->text() ); 1703 ent.setChildren( (*itLE)->text() );
1641 1704
1642 } 1705 }
1643 1706
1644 QStringList::ConstIterator itV; 1707 QStringList::ConstIterator itV;
1645 for ( it = slChooserNames.begin(), itV = slChooserValues.begin(); it != slChooserNames.end(); ++it, ++itV ) { 1708 for ( it = slChooserNames.begin(), itV = slChooserValues.begin(); it != slChooserNames.end(); ++it, ++itV ) {
1646 1709
1647 if ( ( *it == "Business Phone" ) || ( *it == "Work Phone" ) ) 1710 if ( ( *it == "Business Phone" ) || ( *it == "Work Phone" ) )
@@ -1797,12 +1860,42 @@ static inline bool containsAlphaNum( const QString &str )
1797} 1860}
1798 1861
1799static inline bool constainsWhiteSpace( const QString &str ) 1862static inline bool constainsWhiteSpace( const QString &str )
1800{ 1863{
1801 int i, 1864 int i,
1802 count = str.length(); 1865 count = str.length();
1803 for (i = 0; i < count; i++ ) 1866 for (i = 0; i < count; i++ )
1804 if ( str[i].isSpace() ) 1867 if ( str[i].isSpace() )
1805 return TRUE; 1868 return TRUE;
1806 return FALSE; 1869 return FALSE;
1807} 1870}
1808 1871
1872void ContactEditor::setPersonalView( bool personal )
1873{
1874 m_personalView = personal;
1875 if ( personal ){
1876 cmbCat->hide();
1877 labCat->hide();
1878 } else{
1879 cmbCat->show();
1880 labCat->show();
1881
1882 }
1883}
1884
1885void ContactEditor::slotAnniversaryDateChanged( int year, int month, int day)
1886{
1887 QDate date;
1888 date.setYMD( year, month, day );
1889 QString dateString = TimeString::numberDateString( date );
1890 anniversaryButton->setText( dateString );
1891 ent.setAnniversary ( dateString );
1892}
1893
1894void ContactEditor::slotBirthdayDateChanged( int year, int month, int day)
1895{
1896 QDate date;
1897 date.setYMD( year, month, day );
1898 QString dateString = TimeString::numberDateString( date );
1899 birthdayButton->setText( dateString );
1900 ent.setBirthday ( dateString );
1901}
diff --git a/core/pim/addressbook/contacteditor.h b/core/pim/addressbook/contacteditor.h
index 8ed8553..40ce864 100644
--- a/core/pim/addressbook/contacteditor.h
+++ b/core/pim/addressbook/contacteditor.h
@@ -14,24 +14,26 @@
14 * 14 *
15 * This is a rewrite of the abeditor.h file, modified to provide a more 15 * 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 16 * intuitive interface to TrollTech's original Address Book editor. This
17 * is made to operate exactly in interface with the exception of name. 17 * is made to operate exactly in interface with the exception of name.
18 * 18 *
19 */ 19 */
20 20
21#ifndef CONTACTEDITOR_H 21#ifndef CONTACTEDITOR_H
22#define CONTACTEDITOR_H 22#define CONTACTEDITOR_H
23 23
24#include <opie/ocontact.h> 24#include <opie/ocontact.h>
25 25
26#include <qpe/datebookmonth.h>
27
26#include <qdialog.h> 28#include <qdialog.h>
27#include <qlist.h> 29#include <qlist.h>
28#include <qmap.h> 30#include <qmap.h>
29#include <qstringlist.h> 31#include <qstringlist.h>
30 32
31const int NAME_LF = 0; 33const int NAME_LF = 0;
32const int NAME_LFM = 1; 34const int NAME_LFM = 1;
33const int NAME_FL = 2; 35const int NAME_FL = 2;
34const int NAME_FMLS = 3; 36const int NAME_FMLS = 3;
35 37
36const int NAME_F = 4; 38const int NAME_F = 4;
37const int NAME_M = 5; 39const int NAME_M = 5;
@@ -52,75 +54,79 @@ class ContactEditor : public QDialog {
52 Q_OBJECT 54 Q_OBJECT
53 55
54 public: 56 public:
55 ContactEditor(const OContact &entry, 57 ContactEditor(const OContact &entry,
56 const QValueList<int> *newOrderedValues, 58 const QValueList<int> *newOrderedValues,
57 QStringList *slNewOrdered, 59 QStringList *slNewOrdered,
58 QWidget *parent = 0, 60 QWidget *parent = 0,
59 const char *name = 0, 61 const char *name = 0,
60 WFlags fl = 0 ); 62 WFlags fl = 0 );
61 ~ContactEditor(); 63 ~ContactEditor();
62 void loadFields(); 64 void loadFields();
63 void setNameFocus(); 65 void setNameFocus();
66 void setPersonalView( bool personal = true );
64 OContact entry() const { return ent; } 67 OContact entry() const { return ent; }
65 68
66 public slots: 69 public slots:
67 void slotNote(); 70 void slotNote();
68 void slotName(); 71 void slotName();
69 void setEntry(const OContact &entry); 72 void setEntry(const OContact &entry);
70 73
71 protected slots: 74 protected slots:
72 void accept(); 75 void accept();
73 76
74 private: 77 private:
75 void init(); 78 void init();
76 void initMap(); 79 void initMap();
77 void saveEntry(); 80 void saveEntry();
78 bool isEmpty(); 81 bool isEmpty();
79 void cleanupFields(); 82 void cleanupFields();
80 QString parseName( QString fullName, int type ); 83 QString parseName( QString fullName, int type );
81
82 private slots: 84 private slots:
83 void slotChooser1Change( const QString &textChanged ); 85 void slotChooser1Change( const QString &textChanged );
84 void slotChooser2Change( const QString &textChanged ); 86 void slotChooser2Change( const QString &textChanged );
85 void slotChooser3Change( const QString &textChanged ); 87 void slotChooser3Change( const QString &textChanged );
86 void slotChooser4Change( const QString &textChanged ); 88 void slotChooser4Change( const QString &textChanged );
87 void slotCmbChooser1Change( int index ); 89 void slotCmbChooser1Change( int index );
88 void slotCmbChooser2Change( int index ); 90 void slotCmbChooser2Change( int index );
89 void slotCmbChooser3Change( int index ); 91 void slotCmbChooser3Change( int index );
90 void slotCmbChooser4Change( int index ); 92 void slotCmbChooser4Change( int index );
91 void slotAddressTypeChange( int index ); 93 void slotAddressTypeChange( int index );
92 void slotAddressChange( const QString &textChanged ); 94 void slotAddressChange( const QString &textChanged );
93 void slotAddress2Change( const QString &textChanged ); 95 void slotAddress2Change( const QString &textChanged );
94 void slotPOBoxChange( const QString &textChanged ); 96 void slotPOBoxChange( const QString &textChanged );
95 void slotCityChange( const QString &textChanged ); 97 void slotCityChange( const QString &textChanged );
96 void slotStateChange( const QString &textChanged ); 98 void slotStateChange( const QString &textChanged );
97 void slotZipChange( const QString &textChanged ); 99 void slotZipChange( const QString &textChanged );
98 void slotCountryChange( const QString &textChanged ); 100 void slotCountryChange( const QString &textChanged );
99 void slotFullNameChange( const QString &textChanged ); 101 void slotFullNameChange( const QString &textChanged );
102 void slotAnniversaryDateChanged( int year, int month, int day);
103 void slotBirthdayDateChanged( int year, int month, int day);
100 104
101 private: 105 private:
102 bool useFullName, hasGender, hasTitle, hasCompany, hasNotes, hasStreet, hasStreet2, hasPOBox, hasCity, hasState, hasZip, hasCountry; 106 bool useFullName, hasGender, hasTitle, hasCompany, hasNotes, hasStreet, hasStreet2, hasPOBox, hasCity, hasState, hasZip, hasCountry;
103 107
104 OContact ent; 108 OContact ent;
105 109
106 QDialog *dlgNote; 110 QDialog *dlgNote;
107 QDialog *dlgName; 111 QDialog *dlgName;
108 112
109 QList<QLineEdit> listValue; 113 QList<QLineEdit> listValue;
110 QList<QLabel> listName; 114 QList<QLabel> listName;
111 const QValueList<int> *orderedValues; 115 const QValueList<int> *orderedValues;
112 QStringList slOrdered; 116 QStringList slOrdered;
113 QStringList slDynamicEntries; 117 QStringList slDynamicEntries;
114 118
119 bool m_personalView;
120
115 QStringList slHomeAddress; 121 QStringList slHomeAddress;
116 QStringList slBusinessAddress; 122 QStringList slBusinessAddress;
117 QStringList slChooserNames; 123 QStringList slChooserNames;
118 QStringList slChooserValues; 124 QStringList slChooserValues;
119 125
120 QMultiLineEdit *txtNote; 126 QMultiLineEdit *txtNote;
121 QLabel *lblNote; 127 QLabel *lblNote;
122 128
123 //QLineEdit *txtTitle; 129 //QLineEdit *txtTitle;
124 QLineEdit *txtFirstName; 130 QLineEdit *txtFirstName;
125 QLineEdit *txtMiddleName; 131 QLineEdit *txtMiddleName;
126 QLineEdit *txtLastName; 132 QLineEdit *txtLastName;
@@ -134,29 +140,33 @@ class ContactEditor : public QDialog {
134 QLineEdit *txtJobTitle; 140 QLineEdit *txtJobTitle;
135 QLineEdit *txtOrganization; 141 QLineEdit *txtOrganization;
136 QLineEdit *txtChooserField1; 142 QLineEdit *txtChooserField1;
137 QLineEdit *txtChooserField2; 143 QLineEdit *txtChooserField2;
138 QLineEdit *txtChooserField3; 144 QLineEdit *txtChooserField3;
139 QLineEdit *txtChooserField4; 145 QLineEdit *txtChooserField4;
140 QComboBox *cmbChooserField1; 146 QComboBox *cmbChooserField1;
141 QComboBox *cmbChooserField2; 147 QComboBox *cmbChooserField2;
142 QComboBox *cmbChooserField3; 148 QComboBox *cmbChooserField3;
143 QComboBox *cmbChooserField4; 149 QComboBox *cmbChooserField4;
144 QComboBox *cmbFileAs; 150 QComboBox *cmbFileAs;
145 CategorySelect *cmbCat; 151 CategorySelect *cmbCat;
152 QLabel *labCat;
146 153
147 QScrollView *svAddress; 154 QScrollView *svAddress;
148 QLineEdit *txtAddress; 155 QLineEdit *txtAddress;
149 //QLineEdit *txtAddress2; 156 //QLineEdit *txtAddress2;
150 //QLineEdit *txtPOBox; 157 //QLineEdit *txtPOBox;
151 QLineEdit *txtCity; 158 QLineEdit *txtCity;
152 QLineEdit *txtState; 159 QLineEdit *txtState;
153 QLineEdit *txtZip; 160 QLineEdit *txtZip;
154 QComboBox *cmbAddress; 161 QComboBox *cmbAddress;
155 QComboBox *cmbCountry; 162 QComboBox *cmbCountry;
156 163
157 QScrollView *svDetails; 164 QScrollView *svDetails;
158 QComboBox *cmbGender; 165 QComboBox *cmbGender;
159 166 DateBookMonth* birthdayPicker;
160}; 167 QToolButton* birthdayButton;
168 DateBookMonth* anniversaryPicker;
169 QToolButton* anniversaryButton;
170 };
161 171
162#endif 172#endif