summaryrefslogtreecommitdiff
authoreilers <eilers>2003-05-11 12:36:30 (UTC)
committer eilers <eilers>2003-05-11 12:36:30 (UTC)
commit37084d3961026893840ef9891132bdf193a312b3 (patch) (unidiff)
tree342792abd777eb11a378cc5e06e0436ab48f6d89
parentb068a42c89af19f5642b68060c1d085afa78e7b1 (diff)
downloadopie-37084d3961026893840ef9891132bdf193a312b3.zip
opie-37084d3961026893840ef9891132bdf193a312b3.tar.gz
opie-37084d3961026893840ef9891132bdf193a312b3.tar.bz2
Some improvements in handling of organizations:
- If you enter a organization name and no Fullname is entered, the organization name will be used. Thus, the organization is shown correctly in the listview.. - The letterpicker now searches for the SaveAs Entry (configurable) instead for lastname. Ths guarantees that the organization is found as expected.. This addresses bugreport #590 and #895..
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/addressbook/TODO13
-rw-r--r--core/pim/addressbook/abconfig.cpp19
-rw-r--r--core/pim/addressbook/abconfig.h11
-rw-r--r--core/pim/addressbook/abview.cpp24
-rw-r--r--core/pim/addressbook/abview.h3
-rw-r--r--core/pim/addressbook/addressbook.cpp3
-rw-r--r--core/pim/addressbook/configdlg_base.ui2
-rw-r--r--core/pim/addressbook/contacteditor.cpp20
-rw-r--r--core/pim/addressbook/contacteditor.h1
-rw-r--r--core/pim/addressbook/version.h2
10 files changed, 79 insertions, 19 deletions
diff --git a/core/pim/addressbook/TODO b/core/pim/addressbook/TODO
index a3cffa7..383f8c5 100644
--- a/core/pim/addressbook/TODO
+++ b/core/pim/addressbook/TODO
@@ -1,112 +1,115 @@
1Stuff todo until OPIE 1.0 : 1Stuff todo until OPIE 1.0 :
2=========================== 2===========================
3 3
4Feature requests: 4Feature requests:
5----------------- 5-----------------
6- Dial by mobile phone by tapping the number.. 6- Dial by mobile phone by tapping the number..
7 (Maybe using gsmtool. And we may 7 (Maybe using gsmtool. And we may
8 add a library class for this) 8 add a library class for this)
9- dial with dtmfdial in case it's installed and there's no mobile 9- dial with dtmfdial in case it's installed and there's no mobile
10- 3rd column for 2. Contact 10- 3rd column for 2. Contact
11- Implementing additional Views (Phonebook, ...) 11- Implementing additional Views (Phonebook, ...)
12- Birthday & Anniversary Reminder 12- Birthday & Anniversary Reminder
13- Beaming of multiple contacts (current list/ by search or by category) 13- Beaming of multiple contacts (current list/ by search or by category)
14- Configure the letter-picker: lastname/fullname search
15- Optionally put scrollbars left. 14- Optionally put scrollbars left.
16 15
17Known Bugs: 16Known Bugs:
18----------- 17-----------
19 18
20Urgent: 19Urgent:
21-------- 20--------
22- Category is on the wrong position after changing to personal and back to normal 21- Category is on the wrong position after changing to personal and back to normal
23 ( Temporarily workaround: Category is never deactivated.. :S ) 22 ( Temporarily workaround: Category is never deactivated.. :S )
24 23
25 24
26Important: 25Important:
27---------- 26----------
28 27
29- "What's this" should be added (Deleyed after Feature Freeze) 28- Configure the letter-picker: lastname/fullname search
29 -> Currently just behind the scenes ..
30- Implement a correct handling of Organizations. They are currently
31 handled as normal persons.. :(
30 32
31Less important: 33Less important:
32--------------- 34---------------
33- Reload if contacts were changed externally 35- Reload if contacts were changed externally
34- The picker (alphabetical sort widget) should be 36- The picker (alphabetical sort widget) should be
35 placed verticaly or horizontally (configurable) 37 placed verticaly or horizontally (configurable)
36- Find a smart solution for activating/deactivating the "send email" event
37- If new contact is added (contacteditor closed): focus (table, card) to
38 this entry !
39- After search (Started with Return): KeyFocus should be on Tabelle 38- After search (Started with Return): KeyFocus should be on Tabelle
39- Find a smart solution for activating/deactivating the "send email" event
40 40
41ContactEditor: 41ContactEditor:
42- Redesign of Contacteditor 42- Redesign of Contacteditor
43 43
44Should be Fixed (not absolute sure, need further validation): 44Should be Fixed (not absolute sure, need further validation):
45------------------------------------------------------------- 45-------------------------------------------------------------
46 46
47 47
48Fixed/Ready: 48Fixed/Ready:
49------- 49-------
50- Syncing: abtable not reloaded after sync. 50- Syncing: abtable not reloaded after sync.
51- Find widget should be replaced by something like 51- Find widget should be replaced by something like
52 qpdf has. 52 qpdf has.
53- Adding a configuration dialog 53- Adding a configuration dialog
54- Picker: Activated letter schould be more visible 54- Picker: Activated letter schould be more visible
55- Advanced handling of cursor keys (search..) 55- Advanced handling of cursor keys (search..)
56- Mail-Icon is missing 56- Mail-Icon is missing
57- Use opie-mail insted of qt-mail if possible. 57- Use opie-mail insted of qt-mail if possible.
58- Font menu is invisible using german translation 58- Font menu is invisible using german translation
59- Personal contact editor: Disable categories 59- Personal contact editor: Disable categories
60- "Nonenglish" translation bug has to be fixed. 60- "Nonenglish" translation bug has to be fixed.
61- contacteditor: Birthday, annyversary, ... : Use Dateselector 61- contacteditor: Birthday, annyversary, ... : Use Dateselector
62- The names of the countries are sorted by there english names, only.. 62- The names of the countries are sorted by there english names, only..
63 Even if they are translated.. :S 63 Even if they are translated.. :S
64- Cursor keys should work in detail-view (ablabel) 64- Cursor keys should work in detail-view (ablabel)
65 -> Ablabel should be removed and Abtable should be increased with 65 -> Ablabel should be removed and Abtable should be increased with
66 different views (as started by darwin zins).. 66 different views (as started by darwin zins)..
67- Use advanced database functions in abtable to decrease 67- Use advanced database functions in abtable to decrease
68 memory footprint and to make everything more easy ! 68 memory footprint and to make everything more easy !
69 (abtable should store Iterator for selected Category) 69 (abtable should store Iterator for selected Category)
70- Abtable: Configure Contact column (internally already available, 70- Abtable: Configure Contact column (internally already available,
71 need configuration) 71 need configuration)
72- Select of primary contact (see #274 on mantis) 72- Select of primary contact (see #274 on mantis)
73- Category-select does not work completely: "Unfiled" is always in listview .. 73- Category-select does not work completely: "Unfiled" is always in listview ..
74- Return from Contacteditor: Category resettet to all 74- Return from Contacteditor: Category resettet to all
75- Personal Details not working 75- Personal Details not working
76- If category changed, the letterpicker should be resetted 76- If category changed, the letterpicker should be resetted
77- There should be some icons for List and Cardview 77- There should be some icons for List and Cardview
78- If in Cardview and a category change removes all entries: 78- If in Cardview and a category change removes all entries:
79 There are already entries in Cardview after up/down 79 There are already entries in Cardview after up/down
80- Personal Details: Anniversary zeigt Fantasie-Werte 80- Personal Details: Anniversary zeigt Fantasie-Werte
81- Unfiled shown just in Category "All" and "Unfiled". 81- Unfiled shown just in Category "All" and "Unfiled".
82- After finising search and after Edit: Clear Picker 82- After finising search and after Edit: Clear Picker
83- After Edit: Table position back to edited entry. 83- After Edit: Table position back to edited entry.
84- Optimize Table Update... 84- Optimize Table Update...
85- Change MyDialog to Config 85- Change MyDialog to Config
86- Store position and state of toolbar 86- Store position and state of toolbar
87- Searchwidget closed: Selected user is jumping 87- Searchwidget closed: Selected user is jumping
88- Wenn suchen beendet, dann dauert das Tabellenupdate (was überhaupt überflüssig ist) 88- Wenn suchen beendet, dann dauert das Tabellenupdate (was überhaupt überflüssig ist)
89 zu lange.. 89 zu lange..
90- VCARD: Import of Anniversary does not work correctly (currently disabled) 90- VCARD: Import of Anniversary does not work correctly (currently disabled)
91- Name order selected in "contacteditor" not used in list view. 91- Name order selected in "contacteditor" not used in list view.
92- OK-Key does not switch from Detailview (ablable) to Listview 92- OK-Key does not switch from Detailview (ablable) to Listview
93- Receiving of beams should open a dialog 93- Receiving of beams should open a dialog
94- Fix start of opie-mail 94- Fix start of opie-mail
95- Implement Button Pics 95- Implement Button Pics
96- Add a dialog to accept and optionally edit received contacts by IRDA. 96- Add a dialog to accept and optionally edit received contacts by IRDA.
97- Language not English (tested with german opie-translation): 97- Language not English (tested with german opie-translation):
98 1. Configure nicht übersetzt (alles leer). 98 1. Configure nicht übersetzt (alles leer).
99 2. Contacteditor nur teilweise übersetzt. 99 2. Contacteditor nur teilweise übersetzt.
100 3. Kategorie-Picker geht nicht. 100 3. Kategorie-Picker geht nicht.
101- Plugin for Today for Birthdays and Anniversaries 101- Plugin for Today for Birthdays and Anniversaries
102- Implement a picker/combo for the default email. 102- Implement a picker/combo for the default email.
103- Overview window cleanup needed.. 103- Overview window cleanup needed..
104- Store last settings of combo-boxes 104- Store last settings of combo-boxes
105- Personal and Business Web-page is not editable 105- Personal and Business Web-page is not editable
106- Default Email-button: A lot of problems: 106- Default Email-button: A lot of problems:
107 If on second tab: The combo chooser is on the top left of the screen ! :( 107 If on second tab: The combo chooser is on the top left of the screen ! :(
108- Default Email-Button: Sometimes not hiding the textfields completely 108- Default Email-Button: Sometimes not hiding the textfields completely
109- Fix handling of 3 Firstnames 109- Fix handling of 3 Firstnames
110- Cursor-UP/Down: Should additionally scroll cardview if it is too large 110- Cursor-UP/Down: Should additionally scroll cardview if it is too large
111 (behaviour should be selectable by configuration) 111 (behaviour should be selectable by configuration)
112- User center of the joypad to switch back from card to listview ! 112- User center of the joypad to switch back from card to listview !
113- If new contact is added (contacteditor closed): focus (table, card) to
114 this entry !
115- Typo: Mov_e_able in Config-Dlg
diff --git a/core/pim/addressbook/abconfig.cpp b/core/pim/addressbook/abconfig.cpp
index 0b61614..4a0875b 100644
--- a/core/pim/addressbook/abconfig.cpp
+++ b/core/pim/addressbook/abconfig.cpp
@@ -1,198 +1,213 @@
1#include "abconfig.h" 1#include "abconfig.h"
2#include "version.h" 2#include "version.h"
3 3
4#include <qpe/config.h> 4#include <qpe/config.h>
5#include <qpe/recordfields.h> 5#include <qpe/recordfields.h>
6 6
7AbConfig::AbConfig( ): 7AbConfig::AbConfig( ):
8 m_useQtMail( true ), 8 m_useQtMail( true ),
9 m_useOpieMail( false ), 9 m_useOpieMail( false ),
10 m_useRegExp( false ), 10 m_useRegExp( false ),
11 m_beCaseSensitive( false ), 11 m_beCaseSensitive( false ),
12 m_fontSize( 1 ), 12 m_fontSize( 1 ),
13 m_barPos( QMainWindow::Top ), 13 m_barPos( QMainWindow::Top ),
14 m_fixedBars( true ), 14 m_fixedBars( true ),
15 m_lpSearchMode( LastName ),
15 m_changed( false ) 16 m_changed( false )
16{ 17{
17} 18}
18 19
19AbConfig::~AbConfig() 20AbConfig::~AbConfig()
20{ 21{
21} 22}
22 23
23bool AbConfig::useRegExp() const 24bool AbConfig::useRegExp() const
24{ 25{
25 return m_useRegExp; 26 return m_useRegExp;
26} 27}
27bool AbConfig::useWildCards() const 28bool AbConfig::useWildCards() const
28{ 29{
29 return !m_useRegExp; 30 return !m_useRegExp;
30} 31}
31bool AbConfig::useQtMail() const 32bool AbConfig::useQtMail() const
32{ 33{
33 return m_useQtMail; 34 return m_useQtMail;
34} 35}
35bool AbConfig::useOpieMail() const 36bool AbConfig::useOpieMail() const
36{ 37{
37 return m_useOpieMail; 38 return m_useOpieMail;
38} 39}
39bool AbConfig::beCaseSensitive() const 40bool AbConfig::beCaseSensitive() const
40{ 41{
41 return m_beCaseSensitive; 42 return m_beCaseSensitive;
42} 43}
43int AbConfig::fontSize() const 44int AbConfig::fontSize() const
44{ 45{
45 return m_fontSize; 46 return m_fontSize;
46} 47}
47 48
48QValueList<int> AbConfig::orderList() const 49QValueList<int> AbConfig::orderList() const
49{ 50{
50 return m_ordered; 51 return m_ordered;
51} 52}
52 53
53QMainWindow::ToolBarDock AbConfig::getToolBarPos() const 54QMainWindow::ToolBarDock AbConfig::getToolBarPos() const
54{ 55{
55 return (QMainWindow::ToolBarDock) m_barPos; 56 return (QMainWindow::ToolBarDock) m_barPos;
56} 57}
57 58
58bool AbConfig::fixedBars() const 59bool AbConfig::fixedBars() const
59{ 60{
60 return m_fixedBars; 61 return m_fixedBars;
61} 62}
62 63
64AbConfig::LPSearchMode AbConfig::letterPickerSearch() const
65{
66 return ( AbConfig::LPSearchMode ) m_lpSearchMode;
67}
68
63void AbConfig::setUseRegExp( bool v ) 69void AbConfig::setUseRegExp( bool v )
64{ 70{
65 m_useRegExp = v ; 71 m_useRegExp = v ;
66 m_changed = true; 72 m_changed = true;
67} 73}
68void AbConfig::setUseWildCards( bool v ) 74void AbConfig::setUseWildCards( bool v )
69{ 75{
70 m_useRegExp = !v; 76 m_useRegExp = !v;
71 m_changed = true; 77 m_changed = true;
72} 78}
73void AbConfig::setBeCaseSensitive( bool v ) 79void AbConfig::setBeCaseSensitive( bool v )
74{ 80{
75 m_beCaseSensitive = v; 81 m_beCaseSensitive = v;
76 m_changed = true; 82 m_changed = true;
77} 83}
78void AbConfig::setUseQtMail( bool v ) 84void AbConfig::setUseQtMail( bool v )
79{ 85{
80 m_useQtMail = v; 86 m_useQtMail = v;
81 m_changed = true; 87 m_changed = true;
82} 88}
83void AbConfig::setUseOpieMail( bool v ) 89void AbConfig::setUseOpieMail( bool v )
84{ 90{
85 m_useOpieMail = v; 91 m_useOpieMail = v;
86 m_changed = true; 92 m_changed = true;
87} 93}
88void AbConfig::setFontSize( int v ) 94void AbConfig::setFontSize( int v )
89{ 95{
90 m_fontSize = v; 96 m_fontSize = v;
91 m_changed = true; 97 m_changed = true;
92} 98}
93 99
94void AbConfig::setOrderList( const QValueList<int>& list ) 100void AbConfig::setOrderList( const QValueList<int>& list )
95{ 101{
96 m_ordered = list; 102 m_ordered = list;
97 m_changed = true; 103 m_changed = true;
98} 104}
99 105
100void AbConfig::setToolBarDock( const QMainWindow::ToolBarDock v ) 106void AbConfig::setToolBarDock( const QMainWindow::ToolBarDock v )
101{ 107{
102 m_barPos = v; 108 m_barPos = v;
103 m_changed = true; 109 m_changed = true;
104} 110}
105 111
106void AbConfig::setFixedBars( const bool fixed ) 112void AbConfig::setFixedBars( const bool fixed )
107{ 113{
108 m_fixedBars = fixed; 114 m_fixedBars = fixed;
109 m_changed = true; 115 m_changed = true;
110} 116}
111 117
118void AbConfig::setLetterPickerSearch( const AbConfig::LPSearchMode mode )
119{
120 m_lpSearchMode = mode;
121 m_changed = true;
122}
123
112void AbConfig::load() 124void AbConfig::load()
113{ 125{
114 // Read Config settings 126 // Read Config settings
115 Config cfg("AddressBook"); 127 Config cfg("AddressBook");
116 128
117 cfg.setGroup("Font"); 129 cfg.setGroup("Font");
118 m_fontSize = cfg.readNumEntry( "fontSize", 1 ); 130 m_fontSize = cfg.readNumEntry( "fontSize", 1 );
119 131
120 cfg.setGroup("Search"); 132 cfg.setGroup("Search");
121 m_useRegExp = cfg.readBoolEntry( "useRegExp" ); 133 m_useRegExp = cfg.readBoolEntry( "useRegExp", false );
122 m_beCaseSensitive = cfg.readBoolEntry( "caseSensitive" ); 134 m_beCaseSensitive = cfg.readBoolEntry( "caseSensitive", false );
135 m_lpSearchMode = cfg.readNumEntry( "lpSearchMode", FullName );
123 136
124 cfg.setGroup("Mail"); 137 cfg.setGroup("Mail");
125 m_useQtMail = cfg.readBoolEntry( "useQtMail", true ); 138 m_useQtMail = cfg.readBoolEntry( "useQtMail", true );
126 m_useOpieMail=cfg.readBoolEntry( "useOpieMail" ); 139 m_useOpieMail=cfg.readBoolEntry( "useOpieMail" );
127 140
128 cfg.setGroup("ContactOrder"); 141 cfg.setGroup("ContactOrder");
129 int ID = 0; 142 int ID = 0;
130 int i = 0; 143 int i = 0;
131 ID = cfg.readNumEntry( "ContactID_"+QString::number(i++), 0 ); 144 ID = cfg.readNumEntry( "ContactID_"+QString::number(i++), 0 );
132 while ( ID != 0 ){ 145 while ( ID != 0 ){
133 m_ordered.append( ID ); 146 m_ordered.append( ID );
134 ID = cfg.readNumEntry( "ContactID_"+QString::number(i++), 0 ); 147 ID = cfg.readNumEntry( "ContactID_"+QString::number(i++), 0 );
135 } 148 }
136 149
137 // If no contact order is defined, we set the default 150 // If no contact order is defined, we set the default
138 if ( m_ordered.count() == 0 ) { 151 if ( m_ordered.count() == 0 ) {
139 m_ordered.append( Qtopia::DefaultEmail ); 152 m_ordered.append( Qtopia::DefaultEmail );
140 m_ordered.append( Qtopia::HomePhone); 153 m_ordered.append( Qtopia::HomePhone);
141 m_ordered.append( Qtopia::HomeMobile); 154 m_ordered.append( Qtopia::HomeMobile);
142 m_ordered.append( Qtopia::BusinessPhone); 155 m_ordered.append( Qtopia::BusinessPhone);
143 } 156 }
144 157
145 cfg.setGroup("ToolBar"); 158 cfg.setGroup("ToolBar");
146 m_barPos = cfg.readNumEntry( "Position", QMainWindow::Top ); 159 m_barPos = cfg.readNumEntry( "Position", QMainWindow::Top );
147 m_fixedBars= cfg.readBoolEntry( "fixedBars", true ); 160 m_fixedBars= cfg.readBoolEntry( "fixedBars", true );
148 161
149 m_changed = false; 162 m_changed = false;
150} 163}
151 164
152void AbConfig::save() 165void AbConfig::save()
153{ 166{
154 if ( m_changed ){ 167 if ( m_changed ){
155 Config cfg("AddressBook"); 168 Config cfg("AddressBook");
156 cfg.setGroup("Font"); 169 cfg.setGroup("Font");
157 cfg.writeEntry("fontSize", m_fontSize); 170 cfg.writeEntry("fontSize", m_fontSize);
158 171
159 cfg.setGroup("Search"); 172 cfg.setGroup("Search");
160 cfg.writeEntry("useRegExp", m_useRegExp); 173 cfg.writeEntry("useRegExp", m_useRegExp);
161 cfg.writeEntry("caseSensitive", m_beCaseSensitive); 174 cfg.writeEntry("caseSensitive", m_beCaseSensitive);
175 cfg.writeEntry("lpSearchMode", m_lpSearchMode );
162 176
163 cfg.setGroup("Mail"); 177 cfg.setGroup("Mail");
164 cfg.writeEntry( "useQtMail", m_useQtMail ); 178 cfg.writeEntry( "useQtMail", m_useQtMail );
165 cfg.writeEntry( "useOpieMail", m_useOpieMail); 179 cfg.writeEntry( "useOpieMail", m_useOpieMail);
166 180
167 cfg.setGroup("ContactOrder"); 181 cfg.setGroup("ContactOrder");
168 cfg.clearGroup(); 182 cfg.clearGroup();
169 for ( uint i = 0; i < m_ordered.count(); i++ ){ 183 for ( uint i = 0; i < m_ordered.count(); i++ ){
170 cfg.writeEntry( "ContactID_"+QString::number(i), m_ordered[i] ); 184 cfg.writeEntry( "ContactID_"+QString::number(i), m_ordered[i] );
171 } 185 }
172 186
173 cfg.setGroup("ToolBar"); 187 cfg.setGroup("ToolBar");
174 cfg.writeEntry( "Position", m_barPos ); 188 cfg.writeEntry( "Position", m_barPos );
175 cfg.writeEntry( "fixedBars", m_fixedBars ); 189 cfg.writeEntry( "fixedBars", m_fixedBars );
176 190
177 cfg.setGroup("Version"); 191 cfg.setGroup("Version");
178 cfg.writeEntry( "AppName", APPNAME + QString(" V" ) + MAINVERSION + QString(".") + SUBVERSION + QString(".") + PATCHVERSION); 192 cfg.writeEntry( "AppName", APPNAME + QString(" V" ) + MAINVERSION + QString(".") + SUBVERSION + QString(".") + PATCHVERSION);
179 cfg.writeEntry( "Mainversion", MAINVERSION ); 193 cfg.writeEntry( "Mainversion", MAINVERSION );
180 cfg.writeEntry( "SubVersion", SUBVERSION ); 194 cfg.writeEntry( "SubVersion", SUBVERSION );
181 cfg.writeEntry( "PatchVersion", PATCHVERSION ); 195 cfg.writeEntry( "PatchVersion", PATCHVERSION );
182 196
183 } 197 }
184 198
185} 199}
186 200
187void AbConfig::operator= ( const AbConfig& cnf ) 201void AbConfig::operator= ( const AbConfig& cnf )
188{ 202{
189 m_useQtMail = cnf.m_useQtMail; 203 m_useQtMail = cnf.m_useQtMail;
190 m_useOpieMail = cnf.m_useOpieMail; 204 m_useOpieMail = cnf.m_useOpieMail;
191 m_useRegExp = cnf.m_useRegExp; 205 m_useRegExp = cnf.m_useRegExp;
192 m_beCaseSensitive = cnf.m_beCaseSensitive; 206 m_beCaseSensitive = cnf.m_beCaseSensitive;
193 m_fontSize = cnf.m_fontSize; 207 m_fontSize = cnf.m_fontSize;
194 m_ordered = cnf.m_ordered; 208 m_ordered = cnf.m_ordered;
195 m_barPos = cnf.m_barPos; 209 m_barPos = cnf.m_barPos;
196 m_fixedBars = cnf.m_fixedBars; 210 m_fixedBars = cnf.m_fixedBars;
211 m_lpSearchMode = cnf.m_lpSearchMode;
197} 212}
198 213
diff --git a/core/pim/addressbook/abconfig.h b/core/pim/addressbook/abconfig.h
index ce51b4c..93764f2 100644
--- a/core/pim/addressbook/abconfig.h
+++ b/core/pim/addressbook/abconfig.h
@@ -1,58 +1,69 @@
1#ifndef _ABCONFIG_H_ 1#ifndef _ABCONFIG_H_
2#define _ABCONFIG_H_ 2#define _ABCONFIG_H_
3 3
4#include <qstringlist.h> 4#include <qstringlist.h>
5#include <qmainwindow.h> 5#include <qmainwindow.h>
6 6
7class AbConfig 7class AbConfig
8{ 8{
9public: 9public:
10 enum LPSearchMode{
11 LastName = 0,
12 FullName,
13 LASTELEMENT
14 };
15
16
17
10 AbConfig(); 18 AbConfig();
11 ~AbConfig(); 19 ~AbConfig();
12 20
13 // Search Settings 21 // Search Settings
14 bool useRegExp() const; 22 bool useRegExp() const;
15 bool useWildCards() const; 23 bool useWildCards() const;
16 bool beCaseSensitive() const; 24 bool beCaseSensitive() const;
17 bool useQtMail() const; 25 bool useQtMail() const;
18 bool useOpieMail() const; 26 bool useOpieMail() const;
19 int fontSize() const; 27 int fontSize() const;
20 QValueList<int> orderList() const; 28 QValueList<int> orderList() const;
21 QMainWindow::ToolBarDock getToolBarPos() const; 29 QMainWindow::ToolBarDock getToolBarPos() const;
22 bool fixedBars() const; 30 bool fixedBars() const;
31 LPSearchMode letterPickerSearch() const;
23 32
24 void setUseRegExp( bool v ); 33 void setUseRegExp( bool v );
25 void setUseWildCards( bool v ); 34 void setUseWildCards( bool v );
26 void setBeCaseSensitive( bool v ); 35 void setBeCaseSensitive( bool v );
27 void setUseQtMail( bool v ); 36 void setUseQtMail( bool v );
28 void setUseOpieMail( bool v ); 37 void setUseOpieMail( bool v );
29 void setFontSize( int v ); 38 void setFontSize( int v );
30 void setOrderList( const QValueList<int>& list ); 39 void setOrderList( const QValueList<int>& list );
31 void setToolBarDock( const QMainWindow::ToolBarDock v ); 40 void setToolBarDock( const QMainWindow::ToolBarDock v );
32 void setFixedBars( const bool fixed ); 41 void setFixedBars( const bool fixed );
42 void setLetterPickerSearch( const LPSearchMode mode );
33 43
34 void operator= ( const AbConfig& cnf ); 44 void operator= ( const AbConfig& cnf );
35 45
36 void load(); 46 void load();
37 void save(); 47 void save();
38 48
39protected: 49protected:
40/* virtual void itemUp(); */ 50/* virtual void itemUp(); */
41/* virtual void itemDown(); */ 51/* virtual void itemDown(); */
42 52
43 QStringList contFields; 53 QStringList contFields;
44 54
45 bool m_useQtMail; 55 bool m_useQtMail;
46 bool m_useOpieMail; 56 bool m_useOpieMail;
47 bool m_useRegExp; 57 bool m_useRegExp;
48 bool m_beCaseSensitive; 58 bool m_beCaseSensitive;
49 int m_fontSize; 59 int m_fontSize;
50 QValueList<int> m_ordered; 60 QValueList<int> m_ordered;
51 int m_barPos; 61 int m_barPos;
52 bool m_fixedBars; 62 bool m_fixedBars;
63 int m_lpSearchMode;
53 64
54 bool m_changed; 65 bool m_changed;
55}; 66};
56 67
57 68
58#endif 69#endif
diff --git a/core/pim/addressbook/abview.cpp b/core/pim/addressbook/abview.cpp
index d3ca783..664bd3f 100644
--- a/core/pim/addressbook/abview.cpp
+++ b/core/pim/addressbook/abview.cpp
@@ -1,486 +1,502 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (c) 2002 Stefan Eilers (eilers.stefan@epost.de) 2** Copyright (c) 2002 Stefan Eilers (eilers.stefan@epost.de)
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** 14**
15**********************************************************************/ 15**********************************************************************/
16 16
17#include "abview.h" 17#include "abview.h"
18 18
19#include <qlayout.h> 19#include <qlayout.h>
20 20
21#include <qpe/global.h> 21#include <qpe/global.h>
22 22
23#include <opie/ocontactaccessbackend_vcard.h> 23#include <opie/ocontactaccessbackend_vcard.h>
24 24
25#include <assert.h>
26
25 27
26// Is defined in LibQPE 28// Is defined in LibQPE
27extern QString categoryFileName(); 29extern QString categoryFileName();
28 30
29QString addressbookPersonalVCardName() 31QString addressbookPersonalVCardName()
30{ 32{
31 QString filename = Global::applicationFileName("addressbook", 33 QString filename = Global::applicationFileName("addressbook",
32 "businesscard.vcf"); 34 "businesscard.vcf");
33 return filename; 35 return filename;
34} 36}
35 37
36 38
37AbView::AbView ( QWidget* parent, const QValueList<int>& ordered ): 39AbView::AbView ( QWidget* parent, const QValueList<int>& ordered ):
38 QWidget(parent), 40 QWidget(parent),
39 mCat(0), 41 mCat(0),
40 m_inSearch( false ), 42 m_inSearch( false ),
41 m_inPersonal( false ), 43 m_inPersonal( false ),
42 m_curr_category( -1 ), 44 m_curr_category( -1 ),
43 m_curr_View( TableView ), 45 m_curr_View( TableView ),
44 m_prev_View( TableView ), 46 m_prev_View( TableView ),
45 m_curr_Contact ( 0 ), 47 m_curr_Contact ( 0 ),
46 m_contactdb ( 0l ), 48 m_contactdb ( 0l ),
47 m_storedDB ( 0l ), 49 m_storedDB ( 0l ),
48 m_viewStack( 0l ), 50 m_viewStack( 0l ),
49 m_abTable( 0l ), 51 m_abTable( 0l ),
50 m_orderedFields( ordered ) 52 m_orderedFields( ordered )
51{ 53{
52 // Load default database and handle syncing myself.. ! 54 // Load default database and handle syncing myself.. !
53 m_contactdb = new OContactAccess ( "addressbook", 0l, 0l, false ), 55 m_contactdb = new OContactAccess ( "addressbook", 0l, 0l, false ),
54 mCat.load( categoryFileName() ); 56 mCat.load( categoryFileName() );
55 57
56 // Create Layout and put WidgetStack into it. 58 // Create Layout and put WidgetStack into it.
57 QVBoxLayout *vb = new QVBoxLayout( this ); 59 QVBoxLayout *vb = new QVBoxLayout( this );
58 m_viewStack = new QWidgetStack( this ); 60 m_viewStack = new QWidgetStack( this );
59 vb->addWidget( m_viewStack ); 61 vb->addWidget( m_viewStack );
60 62
61 // Creat TableView 63 // Creat TableView
62 QVBox* tableBox = new QVBox( m_viewStack ); 64 QVBox* tableBox = new QVBox( m_viewStack );
63 m_abTable = new AbTable( m_orderedFields, tableBox, "table" ); 65 m_abTable = new AbTable( m_orderedFields, tableBox, "table" );
64 m_abTable->setCurrentCell( 0, 0 ); 66 m_abTable->setCurrentCell( 0, 0 );
65 m_abTable->setFocus(); 67 m_abTable->setFocus();
66 68
67 // Add TableView to WidgetStack and raise it 69 // Add TableView to WidgetStack and raise it
68 m_viewStack -> addWidget( tableBox , TableView ); 70 m_viewStack -> addWidget( tableBox , TableView );
69 71
70 // Create CardView and add it to WidgetStack 72 // Create CardView and add it to WidgetStack
71 QVBox* cardBox = new QVBox( m_viewStack ); 73 QVBox* cardBox = new QVBox( m_viewStack );
72 m_ablabel = new AbLabel( cardBox, "CardView"); 74 m_ablabel = new AbLabel( cardBox, "CardView");
73 m_viewStack -> addWidget( cardBox , CardView ); 75 m_viewStack -> addWidget( cardBox , CardView );
74 76
75 // Connect views to me 77 // Connect views to me
76 connect ( m_abTable, SIGNAL( signalSwitch( void ) ), 78 connect ( m_abTable, SIGNAL( signalSwitch( void ) ),
77 this, SLOT( slotSwitch( void ) ) ); 79 this, SLOT( slotSwitch( void ) ) );
78 connect ( m_ablabel, SIGNAL( signalOkPressed( void ) ), 80 connect ( m_ablabel, SIGNAL( signalOkPressed( void ) ),
79 this, SLOT( slotSwitch( void ) ) ); 81 this, SLOT( slotSwitch( void ) ) );
80 82
81 load(); 83 load();
82} 84}
83 85
84AbView::~AbView() 86AbView::~AbView()
85{ 87{
86 m_contactdb -> save(); 88 m_contactdb -> save();
87 delete m_contactdb; 89 delete m_contactdb;
88 90
89 if ( m_storedDB ){ 91 if ( m_storedDB ){
90 m_storedDB -> save(); 92 m_storedDB -> save();
91 delete m_storedDB; 93 delete m_storedDB;
92 } 94 }
93} 95}
94 96
95 97
96void AbView::setView( Views view ) 98void AbView::setView( Views view )
97{ 99{
98 //qWarning("AbView::setView( Views view )"); 100 //qWarning("AbView::setView( Views view )");
99 m_curr_View = view; 101 m_curr_View = view;
100 load(); 102 load();
101} 103}
102 104
103void AbView::addEntry( const OContact &newContact ) 105void AbView::addEntry( const OContact &newContact )
104{ 106{
105 //qWarning("abview:AddContact"); 107 //qWarning("abview:AddContact");
106 m_contactdb->add ( newContact ); 108 m_contactdb->add ( newContact );
107 load(); 109 load();
108 110
109} 111}
110void AbView::removeEntry( const int UID ) 112void AbView::removeEntry( const int UID )
111{ 113{
112 //qWarning("abview:RemoveContact"); 114 //qWarning("abview:RemoveContact");
113 m_contactdb->remove( UID ); 115 m_contactdb->remove( UID );
114 load(); 116 load();
115} 117}
116 118
117void AbView::replaceEntry( const OContact &contact ) 119void AbView::replaceEntry( const OContact &contact )
118{ 120{
119 //qWarning("abview:ReplaceContact"); 121 //qWarning("abview:ReplaceContact");
120 m_contactdb->replace( contact ); 122 m_contactdb->replace( contact );
121 load(); 123 load();
122 124
123} 125}
124 126
125OContact AbView::currentEntry() 127OContact AbView::currentEntry()
126{ 128{
127 OContact currentContact; 129 OContact currentContact;
128 130
129 switch ( (int) m_curr_View ) { 131 switch ( (int) m_curr_View ) {
130 case TableView: 132 case TableView:
131 currentContact = m_abTable -> currentEntry(); 133 currentContact = m_abTable -> currentEntry();
132 break; 134 break;
133 case CardView: 135 case CardView:
134 currentContact = m_ablabel -> currentEntry(); 136 currentContact = m_ablabel -> currentEntry();
135 break; 137 break;
136 } 138 }
137 m_curr_Contact = currentContact.uid(); 139 m_curr_Contact = currentContact.uid();
138 return currentContact; 140 return currentContact;
139} 141}
140 142
141bool AbView::save() 143bool AbView::save()
142{ 144{
143 //qWarning("abView:Save data"); 145 //qWarning("abView:Save data");
144 146
145 return m_contactdb->save(); 147 return m_contactdb->save();
146} 148}
147 149
148void AbView::load() 150void AbView::load()
149{ 151{
150 //qWarning("abView:Load data"); 152 //qWarning("abView:Load data");
151 153
152 // Letter Search is stopped at this place 154 // Letter Search is stopped at this place
153 emit signalClearLetterPicker(); 155 emit signalClearLetterPicker();
154 156
155 if ( m_inPersonal ) 157 if ( m_inPersonal )
156 // VCard Backend does not sort.. 158 // VCard Backend does not sort..
157 m_list = m_contactdb->allRecords(); 159 m_list = m_contactdb->allRecords();
158 else{ 160 else{
159 m_list = m_contactdb->sorted( true, 0, 0, 0 ); 161 m_list = m_contactdb->sorted( true, 0, 0, 0 );
160 clearForCategory(); 162 clearForCategory();
161 } 163 }
162 164
163 //qWarning ("Number of contacts: %d", m_list.count()); 165 qWarning ("Number of contacts: %d", m_list.count());
164 166
165 updateView( true ); 167 updateView( true );
166 168
167} 169}
168 170
169void AbView::reload() 171void AbView::reload()
170{ 172{
171 //qWarning( "void AbView::reload()" ); 173 //qWarning( "void AbView::reload()" );
172 174
173 m_contactdb->reload(); 175 m_contactdb->reload();
174 load(); 176 load();
175} 177}
176 178
177void AbView::clear() 179void AbView::clear()
178{ 180{
179 // :SX 181 // :SX
180} 182}
181 183
182void AbView::setShowByCategory( const QString& cat ) 184void AbView::setShowByCategory( const QString& cat )
183{ 185{
184 //qWarning("AbView::setShowCategory( const QString& cat )"); 186 //qWarning("AbView::setShowCategory( const QString& cat )");
185 187
186 int intCat = 0; 188 int intCat = 0;
187 189
188 // All (cat == NULL) will be stored as -1 190 // All (cat == NULL) will be stored as -1
189 if ( cat.isNull() ) 191 if ( cat.isNull() )
190 intCat = -1; 192 intCat = -1;
191 else 193 else
192 intCat = mCat.id("Contacts", cat ); 194 intCat = mCat.id("Contacts", cat );
193 195
194 // Just do anything if we really change the category 196 // Just do anything if we really change the category
195 if ( intCat != m_curr_category ){ 197 if ( intCat != m_curr_category ){
196 // qWarning ("Categories: Selected %s.. Number: %d", cat.latin1(), m_curr_category); 198 // qWarning ("Categories: Selected %s.. Number: %d", cat.latin1(), m_curr_category);
197 199
198 m_curr_category = intCat; 200 m_curr_category = intCat;
199 emit signalClearLetterPicker(); 201 emit signalClearLetterPicker();
200 202
201 load(); 203 load();
202 } 204 }
203 205
204} 206}
205 207
206void AbView::setShowToView( Views view ) 208void AbView::setShowToView( Views view )
207{ 209{
208 //qWarning("void AbView::setShowToView( View %d )", view); 210 //qWarning("void AbView::setShowToView( View %d )", view);
209 211
210 //qWarning ("Change the View (Category is: %d)", m_curr_category); 212 //qWarning ("Change the View (Category is: %d)", m_curr_category);
211 213
212 if ( m_curr_View != view ){ 214 if ( m_curr_View != view ){
213 m_prev_View = m_curr_View; 215 m_prev_View = m_curr_View;
214 m_curr_View = view; 216 m_curr_View = view;
215 217
216 updateView(); 218 updateView();
217 } 219 }
218 220
219} 221}
220 222
221void AbView::setShowByLetter( char c ) 223void AbView::setShowByLetter( char c, AbConfig::LPSearchMode mode )
222{ 224{
223 //qWarning("void AbView::setShowByLetter( %c )", c ); 225 qWarning("void AbView::setShowByLetter( %c, %d )", c, mode );
226
227 assert( mode < AbConfig::LASTELEMENT );
228
224 OContact query; 229 OContact query;
225 if ( c == 0 ){ 230 if ( c == 0 ){
226 load(); 231 load();
227 return; 232 return;
228 }else{ 233 }else{
229 // If the current Backend is unable to solve the query, we will 234 // If the current Backend is unable to solve the query, we will
230 // ignore the request .. 235 // ignore the request ..
231 if ( ! m_contactdb->hasQuerySettings( OContactAccess::WildCards | OContactAccess::IgnoreCase ) ){ 236 if ( ! m_contactdb->hasQuerySettings( OContactAccess::WildCards | OContactAccess::IgnoreCase ) ){
232 return; 237 return;
233 } 238 }
234 239
235 query.setLastName( QString("%1*").arg(c) ); 240 switch( mode ){
241 case AbConfig::LastName:
242 query.setLastName( QString("%1*").arg(c) );
243 break;
244 case AbConfig::FullName:
245 query.setFileAs( QString("%1*").arg(c) );
246 break;
247 default:
248 qWarning( "Unknown Searchmode for AbView::setShowByLetter ! -> %d", mode );
249 qWarning( "I will ignore it.." );
250 return;
251 }
236 m_list = m_contactdb->queryByExample( query, OContactAccess::WildCards | OContactAccess::IgnoreCase ); 252 m_list = m_contactdb->queryByExample( query, OContactAccess::WildCards | OContactAccess::IgnoreCase );
237 clearForCategory(); 253 clearForCategory();
238 m_curr_Contact = 0; 254 m_curr_Contact = 0;
239 } 255 }
240 updateView( true ); 256 updateView( true );
241} 257}
242 258
243void AbView::setListOrder( const QValueList<int>& ordered ) 259void AbView::setListOrder( const QValueList<int>& ordered )
244{ 260{
245 m_orderedFields = ordered; 261 m_orderedFields = ordered;
246 if ( m_abTable ){ 262 if ( m_abTable ){
247 m_abTable->setOrderedList( ordered ); 263 m_abTable->setOrderedList( ordered );
248 m_abTable->refresh(); 264 m_abTable->refresh();
249 } 265 }
250 updateView(); 266 updateView();
251} 267}
252 268
253 269
254QString AbView::showCategory() const 270QString AbView::showCategory() const
255{ 271{
256 return mCat.label( "Contacts", m_curr_category ); 272 return mCat.label( "Contacts", m_curr_category );
257} 273}
258 274
259void AbView::showPersonal( bool personal ) 275void AbView::showPersonal( bool personal )
260{ 276{
261 //qWarning ("void AbView::showPersonal( %d )", personal); 277 //qWarning ("void AbView::showPersonal( %d )", personal);
262 278
263 if ( personal ){ 279 if ( personal ){
264 280
265 if ( m_inPersonal ) 281 if ( m_inPersonal )
266 return; 282 return;
267 283
268 // Now switch to vCard Backend and load data. 284 // Now switch to vCard Backend and load data.
269 // The current default backend will be stored 285 // The current default backend will be stored
270 // to avoid unneeded load/stores. 286 // to avoid unneeded load/stores.
271 m_storedDB = m_contactdb; 287 m_storedDB = m_contactdb;
272 288
273 OContactAccessBackend* vcard_backend = new OContactAccessBackend_VCard( QString::null, 289 OContactAccessBackend* vcard_backend = new OContactAccessBackend_VCard( QString::null,
274 addressbookPersonalVCardName() ); 290 addressbookPersonalVCardName() );
275 m_contactdb = new OContactAccess ( "addressbook", QString::null , vcard_backend, true ); 291 m_contactdb = new OContactAccess ( "addressbook", QString::null , vcard_backend, true );
276 292
277 m_inPersonal = true; 293 m_inPersonal = true;
278 m_curr_View = CardView; 294 m_curr_View = CardView;
279 295
280 }else{ 296 }else{
281 297
282 if ( !m_inPersonal ) 298 if ( !m_inPersonal )
283 return; 299 return;
284 300
285 // Remove vCard Backend and restore default 301 // Remove vCard Backend and restore default
286 m_contactdb->save(); 302 m_contactdb->save();
287 delete m_contactdb; 303 delete m_contactdb;
288 304
289 m_contactdb = m_storedDB; 305 m_contactdb = m_storedDB;
290 m_storedDB = 0l; 306 m_storedDB = 0l;
291 307
292 m_curr_View = TableView; 308 m_curr_View = TableView;
293 m_inPersonal = false; 309 m_inPersonal = false;
294 310
295 } 311 }
296 load(); 312 load();
297} 313}
298 314
299void AbView::setCurrentUid( int uid ){ 315void AbView::setCurrentUid( int uid ){
300 316
301 m_curr_Contact = uid; 317 m_curr_Contact = uid;
302 updateView( true ); //true: Don't modificate the UID ! 318 updateView( true ); //true: Don't modificate the UID !
303} 319}
304 320
305 321
306QStringList AbView::categories() 322QStringList AbView::categories()
307{ 323{
308 mCat.load( categoryFileName() ); 324 mCat.load( categoryFileName() );
309 QStringList categoryList = mCat.labels( "Contacts" ); 325 QStringList categoryList = mCat.labels( "Contacts" );
310 return categoryList; 326 return categoryList;
311} 327}
312 328
313// BEGIN: Slots 329// BEGIN: Slots
314void AbView::slotDoFind( const QString &str, bool caseSensitive, bool useRegExp, 330void AbView::slotDoFind( const QString &str, bool caseSensitive, bool useRegExp,
315 bool , QString cat ) 331 bool , QString cat )
316{ 332{
317 //qWarning( "void AbView::slotDoFind" ); 333 //qWarning( "void AbView::slotDoFind" );
318 334
319 // We reloading the data: Deselect Letterpicker 335 // We reloading the data: Deselect Letterpicker
320 emit signalClearLetterPicker(); 336 emit signalClearLetterPicker();
321 337
322 // Use the current Category if nothing else selected 338 // Use the current Category if nothing else selected
323 int category = 0; 339 int category = 0;
324 340
325 if ( cat.isEmpty() ) 341 if ( cat.isEmpty() )
326 category = m_curr_category; 342 category = m_curr_category;
327 else{ 343 else{
328 category = mCat.id("Contacts", cat ); 344 category = mCat.id("Contacts", cat );
329 } 345 }
330 346
331 //qWarning ("Find in Category %d", category); 347 //qWarning ("Find in Category %d", category);
332 348
333 QRegExp r( str ); 349 QRegExp r( str );
334 r.setCaseSensitive( caseSensitive ); 350 r.setCaseSensitive( caseSensitive );
335 r.setWildcard( !useRegExp ); 351 r.setWildcard( !useRegExp );
336 352
337 // Get all matching entries out of the database 353 // Get all matching entries out of the database
338 m_list = m_contactdb->matchRegexp( r ); 354 m_list = m_contactdb->matchRegexp( r );
339 355
340 //qWarning( "found: %d", m_list.count() ); 356 //qWarning( "found: %d", m_list.count() );
341 if ( m_list.count() == 0 ){ 357 if ( m_list.count() == 0 ){
342 emit signalNotFound(); 358 emit signalNotFound();
343 return; 359 return;
344 } 360 }
345 361
346 // Now remove all contacts with wrong category (if any selected) 362 // Now remove all contacts with wrong category (if any selected)
347 // This algorithm is a litte bit ineffective, but 363 // This algorithm is a litte bit ineffective, but
348 // we will not have a lot of matching entries.. 364 // we will not have a lot of matching entries..
349 clearForCategory(); 365 clearForCategory();
350 366
351 // Now show all found entries 367 // Now show all found entries
352 updateView( true ); 368 updateView( true );
353} 369}
354 370
355void AbView::offSearch() 371void AbView::offSearch()
356{ 372{
357 m_inSearch = false; 373 m_inSearch = false;
358 374
359 load(); 375 load();
360} 376}
361 377
362void AbView::slotSwitch(){ 378void AbView::slotSwitch(){
363 //qWarning("AbView::slotSwitch()"); 379 //qWarning("AbView::slotSwitch()");
364 380
365 m_prev_View = m_curr_View; 381 m_prev_View = m_curr_View;
366 switch ( (int) m_curr_View ){ 382 switch ( (int) m_curr_View ){
367 case TableView: 383 case TableView:
368 qWarning("Switching to CardView"); 384 qWarning("Switching to CardView");
369 m_curr_View = CardView; 385 m_curr_View = CardView;
370 break; 386 break;
371 case CardView: 387 case CardView:
372 qWarning("Switching to TableView"); 388 qWarning("Switching to TableView");
373 m_curr_View = TableView; 389 m_curr_View = TableView;
374 break; 390 break;
375 } 391 }
376 updateView(); 392 updateView();
377 393
378} 394}
379 395
380// END: Slots 396// END: Slots
381 397
382void AbView::clearForCategory() 398void AbView::clearForCategory()
383{ 399{
384 OContactAccess::List::Iterator it; 400 OContactAccess::List::Iterator it;
385 // Now remove all contacts with wrong category if any category selected 401 // Now remove all contacts with wrong category if any category selected
386 402
387 OContactAccess::List allList = m_list; 403 OContactAccess::List allList = m_list;
388 if ( m_curr_category != -1 ){ 404 if ( m_curr_category != -1 ){
389 for ( it = allList.begin(); it != allList.end(); ++it ){ 405 for ( it = allList.begin(); it != allList.end(); ++it ){
390 if ( !contactCompare( *it, m_curr_category ) ){ 406 if ( !contactCompare( *it, m_curr_category ) ){
391 // qWarning("Removing %d", (*it).uid()); 407 // qWarning("Removing %d", (*it).uid());
392 m_list.remove( (*it).uid() ); 408 m_list.remove( (*it).uid() );
393 } 409 }
394 } 410 }
395 } 411 }
396 412
397} 413}
398 414
399bool AbView::contactCompare( const OContact &cnt, int category ) 415bool AbView::contactCompare( const OContact &cnt, int category )
400{ 416{
401 //qWarning ("bool AbView::contactCompare( const OContact &cnt, %d )", category); 417 //qWarning ("bool AbView::contactCompare( const OContact &cnt, %d )", category);
402 418
403 bool returnMe; 419 bool returnMe;
404 QArray<int> cats; 420 QArray<int> cats;
405 cats = cnt.categories(); 421 cats = cnt.categories();
406 422
407 //qWarning ("Number of categories: %d", cats.count() ); 423 //qWarning ("Number of categories: %d", cats.count() );
408 424
409 returnMe = false; 425 returnMe = false;
410 if ( cats.count() == 0 && category == 0 ) 426 if ( cats.count() == 0 && category == 0 )
411 // Contacts with no category will just shown on "All" and "Unfiled" 427 // Contacts with no category will just shown on "All" and "Unfiled"
412 returnMe = true; 428 returnMe = true;
413 else { 429 else {
414 int i; 430 int i;
415 for ( i = 0; i < int(cats.count()); i++ ) { 431 for ( i = 0; i < int(cats.count()); i++ ) {
416 // qWarning("Comparing %d with %d",cats[i],category ); 432 // qWarning("Comparing %d with %d",cats[i],category );
417 if ( cats[i] == category ) { 433 if ( cats[i] == category ) {
418 returnMe = true; 434 returnMe = true;
419 break; 435 break;
420 } 436 }
421 } 437 }
422 } 438 }
423 //qWarning ("Return: %d", returnMe); 439 //qWarning ("Return: %d", returnMe);
424 return returnMe; 440 return returnMe;
425} 441}
426 442
427// In Some rare cases we have to update all lists.. 443// In Some rare cases we have to update all lists..
428void AbView::updateListinViews() 444void AbView::updateListinViews()
429{ 445{
430 m_abTable -> setContacts( m_list ); 446 m_abTable -> setContacts( m_list );
431 m_ablabel -> setContacts( m_list ); 447 m_ablabel -> setContacts( m_list );
432} 448}
433 449
434void AbView::updateView( bool newdata ) 450void AbView::updateView( bool newdata )
435{ 451{
436 //qWarning("AbView::updateView()"); 452 //qWarning("AbView::updateView()");
437 453
438 if ( m_viewStack -> visibleWidget() ){ 454 if ( m_viewStack -> visibleWidget() ){
439 m_viewStack -> visibleWidget() -> clearFocus(); 455 m_viewStack -> visibleWidget() -> clearFocus();
440 } 456 }
441 457
442 // If we switching the view, we have to store some information 458 // If we switching the view, we have to store some information
443 if ( !newdata ){ 459 if ( !newdata ){
444 if ( m_list.count() ){ 460 if ( m_list.count() ){
445 switch ( (int) m_prev_View ) { 461 switch ( (int) m_prev_View ) {
446 case TableView: 462 case TableView:
447 m_curr_Contact = m_abTable -> currentEntry_UID(); 463 m_curr_Contact = m_abTable -> currentEntry_UID();
448 break; 464 break;
449 case CardView: 465 case CardView:
450 m_curr_Contact = m_ablabel -> currentEntry_UID(); 466 m_curr_Contact = m_ablabel -> currentEntry_UID();
451 break; 467 break;
452 } 468 }
453 }else 469 }else
454 m_curr_Contact = 0; 470 m_curr_Contact = 0;
455 } 471 }
456 472
457 // Feed all views with new lists 473 // Feed all views with new lists
458 if ( newdata ) 474 if ( newdata )
459 updateListinViews(); 475 updateListinViews();
460 476
461 // Tell the world that the view is changed 477 // Tell the world that the view is changed
462 if ( m_curr_View != m_prev_View ) 478 if ( m_curr_View != m_prev_View )
463 emit signalViewSwitched ( (int) m_curr_View ); 479 emit signalViewSwitched ( (int) m_curr_View );
464 480
465 m_prev_View = m_curr_View; 481 m_prev_View = m_curr_View;
466 482
467 // Switch to new View 483 // Switch to new View
468 switch ( (int) m_curr_View ) { 484 switch ( (int) m_curr_View ) {
469 case TableView: 485 case TableView:
470 m_abTable -> setChoiceSelection( m_orderedFields ); 486 m_abTable -> setChoiceSelection( m_orderedFields );
471 if ( m_curr_Contact != 0 ) 487 if ( m_curr_Contact != 0 )
472 m_abTable -> selectContact ( m_curr_Contact ); 488 m_abTable -> selectContact ( m_curr_Contact );
473 m_abTable -> setFocus(); 489 m_abTable -> setFocus();
474 break; 490 break;
475 case CardView: 491 case CardView:
476 if ( m_curr_Contact != 0 ) 492 if ( m_curr_Contact != 0 )
477 m_ablabel -> selectContact( m_curr_Contact ); 493 m_ablabel -> selectContact( m_curr_Contact );
478 m_ablabel -> setFocus(); 494 m_ablabel -> setFocus();
479 break; 495 break;
480 } 496 }
481 497
482 // Raise the current View 498 // Raise the current View
483 m_viewStack -> raiseWidget( m_curr_View ); 499 m_viewStack -> raiseWidget( m_curr_View );
484} 500}
485 501
486 502
diff --git a/core/pim/addressbook/abview.h b/core/pim/addressbook/abview.h
index 55c63cc..49bb4be 100644
--- a/core/pim/addressbook/abview.h
+++ b/core/pim/addressbook/abview.h
@@ -1,88 +1,89 @@
1#ifndef _ABVIEW_H_ 1#ifndef _ABVIEW_H_
2#define _ABVIEW_H_ 2#define _ABVIEW_H_
3 3
4#include <qwidget.h> 4#include <qwidget.h>
5#include <qwidgetstack.h> 5#include <qwidgetstack.h>
6 6
7#include <qpe/categories.h> 7#include <qpe/categories.h>
8#include <opie/ocontact.h> 8#include <opie/ocontact.h>
9#include <opie/ocontactaccess.h> 9#include <opie/ocontactaccess.h>
10 10
11#include "contacteditor.h" 11#include "contacteditor.h"
12#include "abtable.h" 12#include "abtable.h"
13#include "ablabel.h" 13#include "ablabel.h"
14#include "abconfig.h"
14 15
15class AbView: public QWidget 16class AbView: public QWidget
16{ 17{
17 Q_OBJECT 18 Q_OBJECT
18 19
19public: 20public:
20 enum Views{ TableView=0, CardView, PersonalView }; 21 enum Views{ TableView=0, CardView, PersonalView };
21 22
22 AbView( QWidget* parent, const QValueList<int>& ordered ); 23 AbView( QWidget* parent, const QValueList<int>& ordered );
23 ~AbView(); 24 ~AbView();
24 25
25 bool save(); 26 bool save();
26 void load(); 27 void load();
27 void reload(); 28 void reload();
28 void clear(); 29 void clear();
29 30
30 void setView( Views view ); 31 void setView( Views view );
31 void showPersonal( bool personal ); 32 void showPersonal( bool personal );
32 void setCurrentUid( int uid ); 33 void setCurrentUid( int uid );
33 void setShowByCategory( const QString& cat ); 34 void setShowByCategory( const QString& cat );
34 void setShowToView( Views view ); 35 void setShowToView( Views view );
35 void setShowByLetter( char c ); 36 void setShowByLetter( char c, AbConfig::LPSearchMode mode = AbConfig::LastName );
36 void setListOrder( const QValueList<int>& ordered ); 37 void setListOrder( const QValueList<int>& ordered );
37 38
38 // Add Entry and put to current 39 // Add Entry and put to current
39 void addEntry( const OContact &newContact ); 40 void addEntry( const OContact &newContact );
40 void removeEntry( const int UID ); 41 void removeEntry( const int UID );
41 void replaceEntry( const OContact &contact ); 42 void replaceEntry( const OContact &contact );
42 OContact currentEntry(); 43 OContact currentEntry();
43 44
44 void inSearch() { m_inSearch = true; } 45 void inSearch() { m_inSearch = true; }
45 void offSearch(); 46 void offSearch();
46 47
47 QString showCategory() const; 48 QString showCategory() const;
48 QStringList categories(); 49 QStringList categories();
49 50
50signals: 51signals:
51 void signalNotFound(); 52 void signalNotFound();
52 void signalClearLetterPicker(); 53 void signalClearLetterPicker();
53 void signalViewSwitched ( int ); 54 void signalViewSwitched ( int );
54 55
55public slots: 56public slots:
56 void slotDoFind( const QString &str, bool caseSensitive, bool useRegExp, 57 void slotDoFind( const QString &str, bool caseSensitive, bool useRegExp,
57 bool backwards, QString category = QString::null ); 58 bool backwards, QString category = QString::null );
58 void slotSwitch(); 59 void slotSwitch();
59 60
60private: 61private:
61 void updateListinViews(); 62 void updateListinViews();
62 void updateView( bool newdata = false ); 63 void updateView( bool newdata = false );
63 void clearForCategory(); 64 void clearForCategory();
64 bool contactCompare( const OContact &cnt, int category ); 65 bool contactCompare( const OContact &cnt, int category );
65 void parseName( const QString& name, QString *first, QString *middle, 66 void parseName( const QString& name, QString *first, QString *middle,
66 QString * last ); 67 QString * last );
67 68
68 Categories mCat; 69 Categories mCat;
69 bool m_inSearch; 70 bool m_inSearch;
70 bool m_inPersonal; 71 bool m_inPersonal;
71 int m_curr_category; 72 int m_curr_category;
72 Views m_curr_View; 73 Views m_curr_View;
73 Views m_prev_View; 74 Views m_prev_View;
74 int m_curr_Contact; 75 int m_curr_Contact;
75 76
76 OContactAccess* m_contactdb; 77 OContactAccess* m_contactdb;
77 OContactAccess* m_storedDB; 78 OContactAccess* m_storedDB;
78 OContactAccess::List m_list; 79 OContactAccess::List m_list;
79 80
80 QWidgetStack* m_viewStack; 81 QWidgetStack* m_viewStack;
81 AbTable* m_abTable; 82 AbTable* m_abTable;
82 AbLabel* m_ablabel; 83 AbLabel* m_ablabel;
83 84
84 QValueList<int> m_orderedFields; 85 QValueList<int> m_orderedFields;
85}; 86};
86 87
87 88
88#endif 89#endif
diff --git a/core/pim/addressbook/addressbook.cpp b/core/pim/addressbook/addressbook.cpp
index 25c6f3a..34bf7f1 100644
--- a/core/pim/addressbook/addressbook.cpp
+++ b/core/pim/addressbook/addressbook.cpp
@@ -499,553 +499,554 @@ void AddressbookWindow::slotFindOpen()
499 m_abView -> inSearch(); 499 m_abView -> inSearch();
500 searchEdit->setFocus(); 500 searchEdit->setFocus();
501} 501}
502void AddressbookWindow::slotFindClose() 502void AddressbookWindow::slotFindClose()
503{ 503{
504 searchBar->hide(); 504 searchBar->hide();
505 m_abView -> offSearch(); 505 m_abView -> offSearch();
506 // m_abView->setFocus(); 506 // m_abView->setFocus();
507} 507}
508 508
509 509
510void AddressbookWindow::slotFind() 510void AddressbookWindow::slotFind()
511{ 511{
512 m_abView->slotDoFind( searchEdit->text(), m_config.beCaseSensitive(), m_config.useRegExp(), false); 512 m_abView->slotDoFind( searchEdit->text(), m_config.beCaseSensitive(), m_config.useRegExp(), false);
513 513
514 searchEdit->clearFocus(); 514 searchEdit->clearFocus();
515 // m_abView->setFocus(); 515 // m_abView->setFocus();
516 516
517} 517}
518 518
519void AddressbookWindow::slotViewBack() 519void AddressbookWindow::slotViewBack()
520{ 520{
521 // :SX showList(); 521 // :SX showList();
522} 522}
523 523
524void AddressbookWindow::slotViewEdit() 524void AddressbookWindow::slotViewEdit()
525{ 525{
526 if(!syncing) { 526 if(!syncing) {
527 if (actionPersonal->isOn()) { 527 if (actionPersonal->isOn()) {
528 editPersonal(); 528 editPersonal();
529 } else { 529 } else {
530 editEntry( EditEntry ); 530 editEntry( EditEntry );
531 } 531 }
532 } else { 532 } else {
533 QMessageBox::warning( this, tr("Contacts"), 533 QMessageBox::warning( this, tr("Contacts"),
534 tr("Can not edit data, currently syncing") ); 534 tr("Can not edit data, currently syncing") );
535 } 535 }
536} 536}
537 537
538 538
539 539
540void AddressbookWindow::writeMail() 540void AddressbookWindow::writeMail()
541{ 541{
542 OContact c = m_abView -> currentEntry(); 542 OContact c = m_abView -> currentEntry();
543 QString name = c.fileAs(); 543 QString name = c.fileAs();
544 QString email = c.defaultEmail(); 544 QString email = c.defaultEmail();
545 545
546 // I prefer the OPIE-Environment variable before the 546 // I prefer the OPIE-Environment variable before the
547 // QPE-one.. 547 // QPE-one..
548 QString basepath = QString::fromLatin1( getenv("OPIEDIR") ); 548 QString basepath = QString::fromLatin1( getenv("OPIEDIR") );
549 if ( basepath.isEmpty() ) 549 if ( basepath.isEmpty() )
550 basepath = QString::fromLatin1( getenv("QPEDIR") ); 550 basepath = QString::fromLatin1( getenv("QPEDIR") );
551 551
552 // Try to access the preferred. If not possible, try to 552 // Try to access the preferred. If not possible, try to
553 // switch to the other one.. 553 // switch to the other one..
554 if ( m_config.useQtMail() ){ 554 if ( m_config.useQtMail() ){
555 qWarning ("Accessing: %s", (basepath + "/bin/qtmail").latin1()); 555 qWarning ("Accessing: %s", (basepath + "/bin/qtmail").latin1());
556 if ( QFile::exists( basepath + "/bin/qtmail" ) ){ 556 if ( QFile::exists( basepath + "/bin/qtmail" ) ){
557 qWarning ("QCop"); 557 qWarning ("QCop");
558 QCopEnvelope e("QPE/Application/qtmail", "writeMail(QString,QString)"); 558 QCopEnvelope e("QPE/Application/qtmail", "writeMail(QString,QString)");
559 e << name << email; 559 e << name << email;
560 return; 560 return;
561 } else 561 } else
562 m_config.setUseOpieMail( true ); 562 m_config.setUseOpieMail( true );
563 } 563 }
564 if ( m_config.useOpieMail() ){ 564 if ( m_config.useOpieMail() ){
565 qWarning ("Accessing: %s", (basepath + "/bin/mail").latin1()); 565 qWarning ("Accessing: %s", (basepath + "/bin/mail").latin1());
566 if ( QFile::exists( basepath + "/bin/mail" ) ){ 566 if ( QFile::exists( basepath + "/bin/mail" ) ){
567 qWarning ("QCop"); 567 qWarning ("QCop");
568 QCopEnvelope e("QPE/Application/mail", "writeMail(QString,QString)"); 568 QCopEnvelope e("QPE/Application/mail", "writeMail(QString,QString)");
569 e << name << email; 569 e << name << email;
570 return; 570 return;
571 } else 571 } else
572 m_config.setUseQtMail( true ); 572 m_config.setUseQtMail( true );
573 } 573 }
574 574
575} 575}
576 576
577static const char * beamfile = "/tmp/obex/contact.vcf"; 577static const char * beamfile = "/tmp/obex/contact.vcf";
578 578
579void AddressbookWindow::slotBeam() 579void AddressbookWindow::slotBeam()
580{ 580{
581 QString beamFilename; 581 QString beamFilename;
582 OContact c; 582 OContact c;
583 if ( actionPersonal->isOn() ) { 583 if ( actionPersonal->isOn() ) {
584 beamFilename = addressbookPersonalVCardName(); 584 beamFilename = addressbookPersonalVCardName();
585 if ( !QFile::exists( beamFilename ) ) 585 if ( !QFile::exists( beamFilename ) )
586 return; // can't beam a non-existent file 586 return; // can't beam a non-existent file
587 OContactAccessBackend* vcard_backend = new OContactAccessBackend_VCard( QString::null, 587 OContactAccessBackend* vcard_backend = new OContactAccessBackend_VCard( QString::null,
588 beamFilename ); 588 beamFilename );
589 OContactAccess* access = new OContactAccess ( "addressbook", QString::null , vcard_backend, true ); 589 OContactAccess* access = new OContactAccess ( "addressbook", QString::null , vcard_backend, true );
590 OContactAccess::List allList = access->allRecords(); 590 OContactAccess::List allList = access->allRecords();
591 OContactAccess::List::Iterator it = allList.begin(); // Just take first 591 OContactAccess::List::Iterator it = allList.begin(); // Just take first
592 c = *it; 592 c = *it;
593 593
594 delete access; 594 delete access;
595 } else { 595 } else {
596 unlink( beamfile ); // delete if exists 596 unlink( beamfile ); // delete if exists
597 mkdir("/tmp/obex/", 0755); 597 mkdir("/tmp/obex/", 0755);
598 c = m_abView -> currentEntry(); 598 c = m_abView -> currentEntry();
599 OContactAccessBackend* vcard_backend = new OContactAccessBackend_VCard( QString::null, 599 OContactAccessBackend* vcard_backend = new OContactAccessBackend_VCard( QString::null,
600 beamfile ); 600 beamfile );
601 OContactAccess* access = new OContactAccess ( "addressbook", QString::null , vcard_backend, true ); 601 OContactAccess* access = new OContactAccess ( "addressbook", QString::null , vcard_backend, true );
602 access->add( c ); 602 access->add( c );
603 access->save(); 603 access->save();
604 delete access; 604 delete access;
605 605
606 beamFilename = beamfile; 606 beamFilename = beamfile;
607 } 607 }
608 608
609 qWarning("Beaming: %s", beamFilename.latin1() ); 609 qWarning("Beaming: %s", beamFilename.latin1() );
610 610
611 Ir *ir = new Ir( this ); 611 Ir *ir = new Ir( this );
612 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 612 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
613 QString description = c.fullName(); 613 QString description = c.fullName();
614 ir->send( beamFilename, description, "text/x-vCard" ); 614 ir->send( beamFilename, description, "text/x-vCard" );
615} 615}
616 616
617void AddressbookWindow::beamDone( Ir *ir ) 617void AddressbookWindow::beamDone( Ir *ir )
618{ 618{
619 619
620 delete ir; 620 delete ir;
621 unlink( beamfile ); 621 unlink( beamfile );
622} 622}
623 623
624 624
625static void parseName( const QString& name, QString *first, QString *middle, 625static void parseName( const QString& name, QString *first, QString *middle,
626 QString * last ) 626 QString * last )
627{ 627{
628 628
629 int comma = name.find ( "," ); 629 int comma = name.find ( "," );
630 QString rest; 630 QString rest;
631 if ( comma > 0 ) { 631 if ( comma > 0 ) {
632 *last = name.left( comma ); 632 *last = name.left( comma );
633 comma++; 633 comma++;
634 while ( comma < int(name.length()) && name[comma] == ' ' ) 634 while ( comma < int(name.length()) && name[comma] == ' ' )
635 comma++; 635 comma++;
636 rest = name.mid( comma ); 636 rest = name.mid( comma );
637 } else { 637 } else {
638 int space = name.findRev( ' ' ); 638 int space = name.findRev( ' ' );
639 *last = name.mid( space+1 ); 639 *last = name.mid( space+1 );
640 rest = name.left( space ); 640 rest = name.left( space );
641 } 641 }
642 int space = rest.find( ' ' ); 642 int space = rest.find( ' ' );
643 if ( space <= 0 ) { 643 if ( space <= 0 ) {
644 *first = rest; 644 *first = rest;
645 } else { 645 } else {
646 *first = rest.left( space ); 646 *first = rest.left( space );
647 *middle = rest.mid( space+1 ); 647 *middle = rest.mid( space+1 );
648 } 648 }
649 649
650} 650}
651 651
652 652
653void AddressbookWindow::appMessage(const QCString &msg, const QByteArray &data) 653void AddressbookWindow::appMessage(const QCString &msg, const QByteArray &data)
654{ 654{
655 qWarning("Receiving QCop-Call with message %s", QString( msg ).latin1() ); 655 qWarning("Receiving QCop-Call with message %s", QString( msg ).latin1() );
656 656
657 if (msg == "editPersonal()") { 657 if (msg == "editPersonal()") {
658 editPersonal(); 658 editPersonal();
659 } else if (msg == "editPersonalAndClose()") { 659 } else if (msg == "editPersonalAndClose()") {
660 editPersonal(); 660 editPersonal();
661 close(); 661 close();
662 } else if ( msg == "addContact(QString,QString)" ) { 662 } else if ( msg == "addContact(QString,QString)" ) {
663 QDataStream stream(data,IO_ReadOnly); 663 QDataStream stream(data,IO_ReadOnly);
664 QString name, email; 664 QString name, email;
665 stream >> name >> email; 665 stream >> name >> email;
666 666
667 OContact cnt; 667 OContact cnt;
668 QString fn, mn, ln; 668 QString fn, mn, ln;
669 parseName( name, &fn, &mn, &ln ); 669 parseName( name, &fn, &mn, &ln );
670 // qDebug( " %s - %s - %s", fn.latin1(), mn.latin1(), ln.latin1() ); 670 // qDebug( " %s - %s - %s", fn.latin1(), mn.latin1(), ln.latin1() );
671 cnt.setFirstName( fn ); 671 cnt.setFirstName( fn );
672 cnt.setMiddleName( mn ); 672 cnt.setMiddleName( mn );
673 cnt.setLastName( ln ); 673 cnt.setLastName( ln );
674 cnt.insertEmails( email ); 674 cnt.insertEmails( email );
675 cnt.setDefaultEmail( email ); 675 cnt.setDefaultEmail( email );
676 cnt.setFileAs(); 676 cnt.setFileAs();
677 677
678 m_abView -> addEntry( cnt ); 678 m_abView -> addEntry( cnt );
679 679
680 // :SXm_abView()->init( cnt ); 680 // :SXm_abView()->init( cnt );
681 editEntry( EditEntry ); 681 editEntry( EditEntry );
682 } else if ( msg == "beamBusinessCard()" ) { 682 } else if ( msg == "beamBusinessCard()" ) {
683 QString beamFilename = addressbookPersonalVCardName(); 683 QString beamFilename = addressbookPersonalVCardName();
684 if ( !QFile::exists( beamFilename ) ) 684 if ( !QFile::exists( beamFilename ) )
685 return; // can't beam a non-existent file 685 return; // can't beam a non-existent file
686 686
687 Ir *ir = new Ir( this ); 687 Ir *ir = new Ir( this );
688 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 688 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
689 QString description = "mycard.vcf"; 689 QString description = "mycard.vcf";
690 ir->send( beamFilename, description, "text/x-vCard" ); 690 ir->send( beamFilename, description, "text/x-vCard" );
691 } else if ( msg == "show(int)" ) { 691 } else if ( msg == "show(int)" ) {
692 QDataStream stream(data,IO_ReadOnly); 692 QDataStream stream(data,IO_ReadOnly);
693 int uid; 693 int uid;
694 stream >> uid; 694 stream >> uid;
695 695
696 qWarning( "Showing uid: %d" , uid ); 696 qWarning( "Showing uid: %d" , uid );
697 697
698 // Deactivate Personal View.. 698 // Deactivate Personal View..
699 if ( actionPersonal->isOn() ){ 699 if ( actionPersonal->isOn() ){
700 actionPersonal->setOn( false ); 700 actionPersonal->setOn( false );
701 slotPersonalView(); 701 slotPersonalView();
702 } 702 }
703 703
704 // Reset category and show as card.. 704 // Reset category and show as card..
705 m_abView -> setShowByCategory( QString::null ); 705 m_abView -> setShowByCategory( QString::null );
706 m_abView -> setCurrentUid( uid ); 706 m_abView -> setCurrentUid( uid );
707 slotViewSwitched ( AbView::CardView ); 707 slotViewSwitched ( AbView::CardView );
708 708
709 showMaximized(); 709 showMaximized();
710 qApp->exec(); 710 qApp->exec();
711 711
712 } else if ( msg == "edit(int)" ) { 712 } else if ( msg == "edit(int)" ) {
713 QDataStream stream(data,IO_ReadOnly); 713 QDataStream stream(data,IO_ReadOnly);
714 int uid; 714 int uid;
715 stream >> uid; 715 stream >> uid;
716 716
717 // Deactivate Personal View.. 717 // Deactivate Personal View..
718 if ( actionPersonal->isOn() ){ 718 if ( actionPersonal->isOn() ){
719 actionPersonal->setOn( false ); 719 actionPersonal->setOn( false );
720 slotPersonalView(); 720 slotPersonalView();
721 } 721 }
722 722
723 // Reset category and edit.. 723 // Reset category and edit..
724 m_abView -> setShowByCategory( QString::null ); 724 m_abView -> setShowByCategory( QString::null );
725 m_abView -> setCurrentUid( uid ); 725 m_abView -> setCurrentUid( uid );
726 slotViewEdit(); 726 slotViewEdit();
727 } 727 }
728 728
729} 729}
730 730
731void AddressbookWindow::editEntry( EntryMode entryMode ) 731void AddressbookWindow::editEntry( EntryMode entryMode )
732{ 732{
733 OContact entry; 733 OContact entry;
734 if ( !abEditor ) { 734 if ( !abEditor ) {
735 abEditor = new ContactEditor( entry, this, "editor" ); 735 abEditor = new ContactEditor( entry, this, "editor" );
736 } 736 }
737 if ( entryMode == EditEntry ) 737 if ( entryMode == EditEntry )
738 abEditor->setEntry( m_abView -> currentEntry() ); 738 abEditor->setEntry( m_abView -> currentEntry() );
739 else if ( entryMode == NewEntry ) 739 else if ( entryMode == NewEntry )
740 abEditor->setEntry( entry ); 740 abEditor->setEntry( entry );
741 // other things may change the caption. 741 // other things may change the caption.
742 abEditor->setCaption( tr("Edit Address") ); 742 abEditor->setCaption( tr("Edit Address") );
743 743
744#if defined(Q_WS_QWS) || defined(_WS_QWS_) 744#if defined(Q_WS_QWS) || defined(_WS_QWS_)
745 abEditor->showMaximized(); 745 abEditor->showMaximized();
746#endif 746#endif
747 // fix the foxus... 747 // fix the foxus...
748 abEditor->setNameFocus(); 748 abEditor->setNameFocus();
749 if ( abEditor->exec() ) { 749 if ( abEditor->exec() ) {
750 setFocus(); 750 setFocus();
751 if ( entryMode == NewEntry ) { 751 if ( entryMode == NewEntry ) {
752 OContact insertEntry = abEditor->entry(); 752 OContact insertEntry = abEditor->entry();
753 insertEntry.assignUid(); 753 insertEntry.assignUid();
754 m_abView -> addEntry( insertEntry ); 754 m_abView -> addEntry( insertEntry );
755 m_abView -> setCurrentUid( insertEntry.uid() );
755 } else { 756 } else {
756 OContact replEntry = abEditor->entry(); 757 OContact replEntry = abEditor->entry();
757 758
758 if ( !replEntry.isValidUid() ) 759 if ( !replEntry.isValidUid() )
759 replEntry.assignUid(); 760 replEntry.assignUid();
760 761
761 m_abView -> replaceEntry( replEntry ); 762 m_abView -> replaceEntry( replEntry );
762 } 763 }
763 } 764 }
764 // populateCategories(); 765 // populateCategories();
765 766
766} 767}
767 768
768void AddressbookWindow::editPersonal() 769void AddressbookWindow::editPersonal()
769{ 770{
770 OContact entry; 771 OContact entry;
771 772
772 // Switch to personal view if not selected 773 // Switch to personal view if not selected
773 // but take care of the menu, too 774 // but take care of the menu, too
774 if ( ! actionPersonal->isOn() ){ 775 if ( ! actionPersonal->isOn() ){
775 qWarning("*** ++++"); 776 qWarning("*** ++++");
776 actionPersonal->setOn( true ); 777 actionPersonal->setOn( true );
777 slotPersonalView(); 778 slotPersonalView();
778 } 779 }
779 780
780 if ( !abEditor ) { 781 if ( !abEditor ) {
781 abEditor = new ContactEditor( entry, this, "editor" ); 782 abEditor = new ContactEditor( entry, this, "editor" );
782 } 783 }
783 784
784 abEditor->setCaption(tr("Edit My Personal Details")); 785 abEditor->setCaption(tr("Edit My Personal Details"));
785 abEditor->setPersonalView( true ); 786 abEditor->setPersonalView( true );
786 editEntry( EditEntry ); 787 editEntry( EditEntry );
787 abEditor->setPersonalView( false ); 788 abEditor->setPersonalView( false );
788 789
789} 790}
790 791
791 792
792void AddressbookWindow::slotPersonalView() 793void AddressbookWindow::slotPersonalView()
793{ 794{
794 qWarning("slotPersonalView()"); 795 qWarning("slotPersonalView()");
795 if (!actionPersonal->isOn()) { 796 if (!actionPersonal->isOn()) {
796 // we just turned it off 797 // we just turned it off
797 qWarning("slotPersonalView()-> OFF"); 798 qWarning("slotPersonalView()-> OFF");
798 setCaption( tr("Contacts") ); 799 setCaption( tr("Contacts") );
799 actionNew->setEnabled(TRUE); 800 actionNew->setEnabled(TRUE);
800 actionTrash->setEnabled(TRUE); 801 actionTrash->setEnabled(TRUE);
801 actionFind->setEnabled(TRUE); 802 actionFind->setEnabled(TRUE);
802 actionMail->setEnabled(TRUE); 803 actionMail->setEnabled(TRUE);
803 // slotUpdateToolbar(); 804 // slotUpdateToolbar();
804 805
805 m_abView->showPersonal( false ); 806 m_abView->showPersonal( false );
806 807
807 return; 808 return;
808 } 809 }
809 810
810 qWarning("slotPersonalView()-> ON"); 811 qWarning("slotPersonalView()-> ON");
811 // XXX need to disable some QActions. 812 // XXX need to disable some QActions.
812 actionNew->setEnabled(FALSE); 813 actionNew->setEnabled(FALSE);
813 actionTrash->setEnabled(FALSE); 814 actionTrash->setEnabled(FALSE);
814 actionFind->setEnabled(FALSE); 815 actionFind->setEnabled(FALSE);
815 actionMail->setEnabled(FALSE); 816 actionMail->setEnabled(FALSE);
816 817
817 setCaption( tr("Contacts - My Personal Details") ); 818 setCaption( tr("Contacts - My Personal Details") );
818 819
819 m_abView->showPersonal( true ); 820 m_abView->showPersonal( true );
820 821
821} 822}
822 823
823 824
824void AddressbookWindow::listIsEmpty( bool empty ) 825void AddressbookWindow::listIsEmpty( bool empty )
825{ 826{
826 if ( !empty ) { 827 if ( !empty ) {
827 deleteButton->setEnabled( TRUE ); 828 deleteButton->setEnabled( TRUE );
828 } 829 }
829} 830}
830 831
831void AddressbookWindow::reload() 832void AddressbookWindow::reload()
832{ 833{
833 syncing = FALSE; 834 syncing = FALSE;
834 m_abView->clear(); 835 m_abView->clear();
835 m_abView->reload(); 836 m_abView->reload();
836} 837}
837 838
838void AddressbookWindow::flush() 839void AddressbookWindow::flush()
839{ 840{
840 syncing = TRUE; 841 syncing = TRUE;
841 m_abView->save(); 842 m_abView->save();
842} 843}
843 844
844 845
845void AddressbookWindow::closeEvent( QCloseEvent *e ) 846void AddressbookWindow::closeEvent( QCloseEvent *e )
846{ 847{
847 if(active_view == AbView::CardView){ 848 if(active_view == AbView::CardView){
848 slotViewSwitched( AbView::TableView ); 849 slotViewSwitched( AbView::TableView );
849 e->ignore(); 850 e->ignore();
850 return; 851 return;
851 } 852 }
852 if(syncing) { 853 if(syncing) {
853 /* shouldn't we save, I hear you say? well its already been set 854 /* shouldn't we save, I hear you say? well its already been set
854 so that an edit can not occur during a sync, and we flushed 855 so that an edit can not occur during a sync, and we flushed
855 at the start of the sync, so there is no need to save 856 at the start of the sync, so there is no need to save
856 Saving however itself would cause problems. */ 857 Saving however itself would cause problems. */
857 e->accept(); 858 e->accept();
858 return; 859 return;
859 } 860 }
860 //################## shouldn't always save 861 //################## shouldn't always save
861 // True, but the database handles this automatically ! (se) 862 // True, but the database handles this automatically ! (se)
862 if ( save() ) 863 if ( save() )
863 e->accept(); 864 e->accept();
864 else 865 else
865 e->ignore(); 866 e->ignore();
866} 867}
867 868
868/* 869/*
869 Returns TRUE if it is OK to exit 870 Returns TRUE if it is OK to exit
870*/ 871*/
871 872
872bool AddressbookWindow::save() 873bool AddressbookWindow::save()
873{ 874{
874 if ( !m_abView->save() ) { 875 if ( !m_abView->save() ) {
875 if ( QMessageBox::critical( 0, tr( "Out of space" ), 876 if ( QMessageBox::critical( 0, tr( "Out of space" ),
876 tr("Unable to save information.\n" 877 tr("Unable to save information.\n"
877 "Free up some space\n" 878 "Free up some space\n"
878 "and try again.\n" 879 "and try again.\n"
879 "\nQuit anyway?"), 880 "\nQuit anyway?"),
880 QMessageBox::Yes|QMessageBox::Escape, 881 QMessageBox::Yes|QMessageBox::Escape,
881 QMessageBox::No|QMessageBox::Default ) 882 QMessageBox::No|QMessageBox::Default )
882 != QMessageBox::No ) 883 != QMessageBox::No )
883 return TRUE; 884 return TRUE;
884 else 885 else
885 return FALSE; 886 return FALSE;
886 } 887 }
887 return TRUE; 888 return TRUE;
888} 889}
889 890
890#ifdef __DEBUG_RELEASE 891#ifdef __DEBUG_RELEASE
891void AddressbookWindow::slotSave() 892void AddressbookWindow::slotSave()
892{ 893{
893 save(); 894 save();
894} 895}
895#endif 896#endif
896 897
897 898
898void AddressbookWindow::slotNotFound() 899void AddressbookWindow::slotNotFound()
899{ 900{
900 qWarning("Got notfound signal!"); 901 qWarning("Got notfound signal!");
901 QMessageBox::information( this, tr( "Not Found" ), 902 QMessageBox::information( this, tr( "Not Found" ),
902 tr( "Unable to find a contact for this \n search pattern!" ) ); 903 tr( "Unable to find a contact for this \n search pattern!" ) );
903 904
904 905
905} 906}
906void AddressbookWindow::slotWrapAround() 907void AddressbookWindow::slotWrapAround()
907{ 908{
908 qWarning("Got wrap signal!"); 909 qWarning("Got wrap signal!");
909 // if ( doNotifyWrapAround ) 910 // if ( doNotifyWrapAround )
910 // QMessageBox::information( this, tr( "End of list" ), 911 // QMessageBox::information( this, tr( "End of list" ),
911 // tr( "End of list. Wrap around now...!" ) + "\n" ); 912 // tr( "End of list. Wrap around now...!" ) + "\n" );
912 913
913} 914}
914 915
915void AddressbookWindow::slotSetCategory( int c ) 916void AddressbookWindow::slotSetCategory( int c )
916{ 917{
917 qWarning( "void AddressbookWindow::slotSetCategory( %d ) from %d", c, catMenu->count() ); 918 qWarning( "void AddressbookWindow::slotSetCategory( %d ) from %d", c, catMenu->count() );
918 919
919 QString cat, book; 920 QString cat, book;
920 AbView::Views view = AbView::TableView; 921 AbView::Views view = AbView::TableView;
921 922
922 if ( c <= 0 ) 923 if ( c <= 0 )
923 return; 924 return;
924 925
925 // Switch view 926 // Switch view
926 if ( c < 3 ) 927 if ( c < 3 )
927 for ( unsigned int i = 1; i < 3; i++ ){ 928 for ( unsigned int i = 1; i < 3; i++ ){
928 if ( catMenu ) 929 if ( catMenu )
929 catMenu->setItemChecked( i, c == (int)i ); 930 catMenu->setItemChecked( i, c == (int)i );
930 } 931 }
931 else 932 else
932 // Checkmark Category Menu Item Selected 933 // Checkmark Category Menu Item Selected
933 for ( unsigned int i = 3; i < catMenu->count(); i++ ) 934 for ( unsigned int i = 3; i < catMenu->count(); i++ )
934 catMenu->setItemChecked( i, c == (int)i ); 935 catMenu->setItemChecked( i, c == (int)i );
935 936
936 // Now switch to the selected category 937 // Now switch to the selected category
937 for ( unsigned int i = 1; i < catMenu->count(); i++ ) { 938 for ( unsigned int i = 1; i < catMenu->count(); i++ ) {
938 if (catMenu->isItemChecked( i )) { 939 if (catMenu->isItemChecked( i )) {
939 if ( i == 1 ){ // default List view 940 if ( i == 1 ){ // default List view
940 book = QString::null; 941 book = QString::null;
941 view = AbView::TableView; 942 view = AbView::TableView;
942 }else if ( i == 2 ){ 943 }else if ( i == 2 ){
943 book = tr( "Cards" ); 944 book = tr( "Cards" );
944 view = AbView::CardView; 945 view = AbView::CardView;
945 // }else if ( i == 3 ){ 946 // }else if ( i == 3 ){
946 // book = tr( "Personal" ); 947 // book = tr( "Personal" );
947 // view = AbView:: PersonalView; 948 // view = AbView:: PersonalView;
948 }else if ( i == 3 ){ // default All Categories 949 }else if ( i == 3 ){ // default All Categories
949 cat = QString::null; 950 cat = QString::null;
950 }else if ( i == (unsigned int)catMenu->count() - 1 ){ // last menu option (seperator is counted, too) will be Unfiled 951 }else if ( i == (unsigned int)catMenu->count() - 1 ){ // last menu option (seperator is counted, too) will be Unfiled
951 cat = "Unfiled"; 952 cat = "Unfiled";
952 qWarning ("Unfiled selected!!!"); 953 qWarning ("Unfiled selected!!!");
953 }else{ 954 }else{
954 cat = m_abView->categories()[i - 4]; 955 cat = m_abView->categories()[i - 4];
955 } 956 }
956 } 957 }
957 } 958 }
958 959
959 // Switch to the selected View 960 // Switch to the selected View
960 slotViewSwitched( view ); 961 slotViewSwitched( view );
961 962
962 // Tell the view about the selected category 963 // Tell the view about the selected category
963 m_abView -> setShowByCategory( cat ); 964 m_abView -> setShowByCategory( cat );
964 965
965 if ( book.isEmpty() ) 966 if ( book.isEmpty() )
966 book = "List"; 967 book = "List";
967 if ( cat.isEmpty() ) 968 if ( cat.isEmpty() )
968 cat = "All"; 969 cat = "All";
969 970
970 setCaption( tr( "Contacts" ) + " - " + book + " - " + tr( cat ) ); 971 setCaption( tr( "Contacts" ) + " - " + book + " - " + tr( cat ) );
971} 972}
972 973
973void AddressbookWindow::slotViewSwitched( int view ) 974void AddressbookWindow::slotViewSwitched( int view )
974{ 975{
975 qWarning( "void AddressbookWindow::slotViewSwitched( %d )", view ); 976 qWarning( "void AddressbookWindow::slotViewSwitched( %d )", view );
976 int menu = 0; 977 int menu = 0;
977 978
978 // Switch to selected view 979 // Switch to selected view
979 switch ( view ){ 980 switch ( view ){
980 case AbView::TableView: 981 case AbView::TableView:
981 menu = 1; 982 menu = 1;
982 m_tableViewButton->setOn(true); 983 m_tableViewButton->setOn(true);
983 m_cardViewButton->setOn(false); 984 m_cardViewButton->setOn(false);
984 break; 985 break;
985 case AbView::CardView: 986 case AbView::CardView:
986 menu = 2; 987 menu = 2;
987 m_tableViewButton->setOn(false); 988 m_tableViewButton->setOn(false);
988 m_cardViewButton->setOn(true); 989 m_cardViewButton->setOn(true);
989 break; 990 break;
990 } 991 }
991 for ( unsigned int i = 1; i < 3; i++ ){ 992 for ( unsigned int i = 1; i < 3; i++ ){
992 if ( catMenu ) 993 if ( catMenu )
993 catMenu->setItemChecked( i, menu == (int)i ); 994 catMenu->setItemChecked( i, menu == (int)i );
994 } 995 }
995 996
996 // Tell the view about the selected view 997 // Tell the view about the selected view
997 m_abView -> setShowToView ( (AbView::Views) view ); 998 m_abView -> setShowToView ( (AbView::Views) view );
998 active_view = view; 999 active_view = view;
999} 1000}
1000 1001
1001 1002
1002void AddressbookWindow::slotListView() 1003void AddressbookWindow::slotListView()
1003{ 1004{
1004 slotViewSwitched( AbView::TableView ); 1005 slotViewSwitched( AbView::TableView );
1005} 1006}
1006 1007
1007void AddressbookWindow::slotCardView() 1008void AddressbookWindow::slotCardView()
1008{ 1009{
1009 slotViewSwitched( AbView::CardView ); 1010 slotViewSwitched( AbView::CardView );
1010} 1011}
1011 1012
1012void AddressbookWindow::slotSetLetter( char c ) { 1013void AddressbookWindow::slotSetLetter( char c ) {
1013 1014
1014 m_abView->setShowByLetter( c ); 1015 m_abView->setShowByLetter( c, m_config.letterPickerSearch() );
1015 1016
1016} 1017}
1017 1018
1018 1019
1019void AddressbookWindow::populateCategories() 1020void AddressbookWindow::populateCategories()
1020{ 1021{
1021 catMenu->clear(); 1022 catMenu->clear();
1022 1023
1023 int id, rememberId; 1024 int id, rememberId;
1024 id = 1; 1025 id = 1;
1025 rememberId = 0; 1026 rememberId = 0;
1026 1027
1027 catMenu->insertItem( Resource::loadPixmap( "datebook/weeklst" ), tr( "List" ), id++ ); 1028 catMenu->insertItem( Resource::loadPixmap( "datebook/weeklst" ), tr( "List" ), id++ );
1028 catMenu->insertItem( Resource::loadPixmap( "day" ), tr( "Cards" ), id++ ); 1029 catMenu->insertItem( Resource::loadPixmap( "day" ), tr( "Cards" ), id++ );
1029 // catMenu->insertItem( tr( "Personal" ), id++ ); 1030 // catMenu->insertItem( tr( "Personal" ), id++ );
1030 catMenu->insertSeparator(); 1031 catMenu->insertSeparator();
1031 1032
1032 catMenu->insertItem( tr( "All" ), id++ ); 1033 catMenu->insertItem( tr( "All" ), id++ );
1033 QStringList categories = m_abView->categories(); 1034 QStringList categories = m_abView->categories();
1034 categories.append( tr( "Unfiled" ) ); 1035 categories.append( tr( "Unfiled" ) );
1035 for ( QStringList::Iterator it = categories.begin(); 1036 for ( QStringList::Iterator it = categories.begin();
1036 it != categories.end(); ++it ) { 1037 it != categories.end(); ++it ) {
1037 catMenu->insertItem( *it, id ); 1038 catMenu->insertItem( *it, id );
1038 if ( *it == m_abView -> showCategory() ) 1039 if ( *it == m_abView -> showCategory() )
1039 rememberId = id; 1040 rememberId = id;
1040 ++id; 1041 ++id;
1041 } 1042 }
1042 1043
1043 1044
1044 if ( m_abView -> showCategory().isEmpty() ) { 1045 if ( m_abView -> showCategory().isEmpty() ) {
1045 slotSetCategory( 3 ); 1046 slotSetCategory( 3 );
1046 } 1047 }
1047 else { 1048 else {
1048 slotSetCategory( rememberId ); 1049 slotSetCategory( rememberId );
1049 } 1050 }
1050} 1051}
1051 1052
diff --git a/core/pim/addressbook/configdlg_base.ui b/core/pim/addressbook/configdlg_base.ui
index 1b5ac17..f892d08 100644
--- a/core/pim/addressbook/configdlg_base.ui
+++ b/core/pim/addressbook/configdlg_base.ui
@@ -52,513 +52,513 @@
52 </property> 52 </property>
53 <property stdset="1"> 53 <property stdset="1">
54 <name>sizePolicy</name> 54 <name>sizePolicy</name>
55 <sizepolicy> 55 <sizepolicy>
56 <hsizetype>7</hsizetype> 56 <hsizetype>7</hsizetype>
57 <vsizetype>7</vsizetype> 57 <vsizetype>7</vsizetype>
58 </sizepolicy> 58 </sizepolicy>
59 </property> 59 </property>
60 <property> 60 <property>
61 <name>layoutMargin</name> 61 <name>layoutMargin</name>
62 </property> 62 </property>
63 <property> 63 <property>
64 <name>layoutSpacing</name> 64 <name>layoutSpacing</name>
65 </property> 65 </property>
66 <property> 66 <property>
67 <name>whatsThis</name> 67 <name>whatsThis</name>
68 <string>Click on tab to select one</string> 68 <string>Click on tab to select one</string>
69 </property> 69 </property>
70 <widget> 70 <widget>
71 <class>QWidget</class> 71 <class>QWidget</class>
72 <property stdset="1"> 72 <property stdset="1">
73 <name>name</name> 73 <name>name</name>
74 <cstring>Widget5</cstring> 74 <cstring>Widget5</cstring>
75 </property> 75 </property>
76 <attribute> 76 <attribute>
77 <name>title</name> 77 <name>title</name>
78 <string>Misc</string> 78 <string>Misc</string>
79 </attribute> 79 </attribute>
80 <vbox> 80 <vbox>
81 <property stdset="1"> 81 <property stdset="1">
82 <name>margin</name> 82 <name>margin</name>
83 <number>2</number> 83 <number>2</number>
84 </property> 84 </property>
85 <property stdset="1"> 85 <property stdset="1">
86 <name>spacing</name> 86 <name>spacing</name>
87 <number>6</number> 87 <number>6</number>
88 </property> 88 </property>
89 <widget> 89 <widget>
90 <class>QGroupBox</class> 90 <class>QGroupBox</class>
91 <property stdset="1"> 91 <property stdset="1">
92 <name>name</name> 92 <name>name</name>
93 <cstring>GroupBox2</cstring> 93 <cstring>GroupBox2</cstring>
94 </property> 94 </property>
95 <property stdset="1"> 95 <property stdset="1">
96 <name>title</name> 96 <name>title</name>
97 <string>Search Settings</string> 97 <string>Search Settings</string>
98 </property> 98 </property>
99 <vbox> 99 <vbox>
100 <property stdset="1"> 100 <property stdset="1">
101 <name>margin</name> 101 <name>margin</name>
102 <number>11</number> 102 <number>11</number>
103 </property> 103 </property>
104 <property stdset="1"> 104 <property stdset="1">
105 <name>spacing</name> 105 <name>spacing</name>
106 <number>6</number> 106 <number>6</number>
107 </property> 107 </property>
108 <widget> 108 <widget>
109 <class>QButtonGroup</class> 109 <class>QButtonGroup</class>
110 <property stdset="1"> 110 <property stdset="1">
111 <name>name</name> 111 <name>name</name>
112 <cstring>ButtonGroup1</cstring> 112 <cstring>ButtonGroup1</cstring>
113 </property> 113 </property>
114 <property stdset="1"> 114 <property stdset="1">
115 <name>title</name> 115 <name>title</name>
116 <string>Query Style</string> 116 <string>Query Style</string>
117 </property> 117 </property>
118 <property> 118 <property>
119 <name>whatsThis</name> 119 <name>whatsThis</name>
120 <string>Settings for the search query style</string> 120 <string>Settings for the search query style</string>
121 </property> 121 </property>
122 <vbox> 122 <vbox>
123 <property stdset="1"> 123 <property stdset="1">
124 <name>margin</name> 124 <name>margin</name>
125 <number>11</number> 125 <number>11</number>
126 </property> 126 </property>
127 <property stdset="1"> 127 <property stdset="1">
128 <name>spacing</name> 128 <name>spacing</name>
129 <number>6</number> 129 <number>6</number>
130 </property> 130 </property>
131 <widget> 131 <widget>
132 <class>QRadioButton</class> 132 <class>QRadioButton</class>
133 <property stdset="1"> 133 <property stdset="1">
134 <name>name</name> 134 <name>name</name>
135 <cstring>m_useRegExp</cstring> 135 <cstring>m_useRegExp</cstring>
136 </property> 136 </property>
137 <property stdset="1"> 137 <property stdset="1">
138 <name>text</name> 138 <name>text</name>
139 <string>Use Regular Expressions</string> 139 <string>Use Regular Expressions</string>
140 </property> 140 </property>
141 <property> 141 <property>
142 <name>whatsThis</name> 142 <name>whatsThis</name>
143 <string>Search widget expects regular expressions if selected</string> 143 <string>Search widget expects regular expressions if selected</string>
144 </property> 144 </property>
145 </widget> 145 </widget>
146 <widget> 146 <widget>
147 <class>QRadioButton</class> 147 <class>QRadioButton</class>
148 <property stdset="1"> 148 <property stdset="1">
149 <name>name</name> 149 <name>name</name>
150 <cstring>m_useWildCard</cstring> 150 <cstring>m_useWildCard</cstring>
151 </property> 151 </property>
152 <property stdset="1"> 152 <property stdset="1">
153 <name>text</name> 153 <name>text</name>
154 <string>Use Wildcards (*,?)</string> 154 <string>Use Wildcards (*,?)</string>
155 </property> 155 </property>
156 <property stdset="1"> 156 <property stdset="1">
157 <name>checked</name> 157 <name>checked</name>
158 <bool>true</bool> 158 <bool>true</bool>
159 </property> 159 </property>
160 <property> 160 <property>
161 <name>whatsThis</name> 161 <name>whatsThis</name>
162 <string>Search widget just expects simple wildcards</string> 162 <string>Search widget just expects simple wildcards</string>
163 </property> 163 </property>
164 </widget> 164 </widget>
165 </vbox> 165 </vbox>
166 </widget> 166 </widget>
167 <widget> 167 <widget>
168 <class>QCheckBox</class> 168 <class>QCheckBox</class>
169 <property stdset="1"> 169 <property stdset="1">
170 <name>name</name> 170 <name>name</name>
171 <cstring>m_useCaseSensitive</cstring> 171 <cstring>m_useCaseSensitive</cstring>
172 </property> 172 </property>
173 <property stdset="1"> 173 <property stdset="1">
174 <name>text</name> 174 <name>text</name>
175 <string>Case Sensitive</string> 175 <string>Case Sensitive</string>
176 </property> 176 </property>
177 <property> 177 <property>
178 <name>whatsThis</name> 178 <name>whatsThis</name>
179 <string>If selected, search differs between upper and lower chars</string> 179 <string>If selected, search differs between upper and lower chars</string>
180 </property> 180 </property>
181 </widget> 181 </widget>
182 </vbox> 182 </vbox>
183 </widget> 183 </widget>
184 <widget> 184 <widget>
185 <class>QButtonGroup</class> 185 <class>QButtonGroup</class>
186 <property stdset="1"> 186 <property stdset="1">
187 <name>name</name> 187 <name>name</name>
188 <cstring>ButtonGroup3</cstring> 188 <cstring>ButtonGroup3</cstring>
189 </property> 189 </property>
190 <property stdset="1"> 190 <property stdset="1">
191 <name>title</name> 191 <name>title</name>
192 <string>Font</string> 192 <string>Font</string>
193 </property> 193 </property>
194 <property> 194 <property>
195 <name>whatsThis</name> 195 <name>whatsThis</name>
196 <string></string> 196 <string></string>
197 </property> 197 </property>
198 <hbox> 198 <hbox>
199 <property stdset="1"> 199 <property stdset="1">
200 <name>margin</name> 200 <name>margin</name>
201 <number>11</number> 201 <number>11</number>
202 </property> 202 </property>
203 <property stdset="1"> 203 <property stdset="1">
204 <name>spacing</name> 204 <name>spacing</name>
205 <number>6</number> 205 <number>6</number>
206 </property> 206 </property>
207 <widget> 207 <widget>
208 <class>QRadioButton</class> 208 <class>QRadioButton</class>
209 <property stdset="1"> 209 <property stdset="1">
210 <name>name</name> 210 <name>name</name>
211 <cstring>m_smallFont</cstring> 211 <cstring>m_smallFont</cstring>
212 </property> 212 </property>
213 <property stdset="1"> 213 <property stdset="1">
214 <name>text</name> 214 <name>text</name>
215 <string>Small</string> 215 <string>Small</string>
216 </property> 216 </property>
217 <property> 217 <property>
218 <name>whatsThis</name> 218 <name>whatsThis</name>
219 <string>Font size for list- and card view</string> 219 <string>Font size for list- and card view</string>
220 </property> 220 </property>
221 </widget> 221 </widget>
222 <widget> 222 <widget>
223 <class>QRadioButton</class> 223 <class>QRadioButton</class>
224 <property stdset="1"> 224 <property stdset="1">
225 <name>name</name> 225 <name>name</name>
226 <cstring>m_normalFont</cstring> 226 <cstring>m_normalFont</cstring>
227 </property> 227 </property>
228 <property stdset="1"> 228 <property stdset="1">
229 <name>text</name> 229 <name>text</name>
230 <string>Normal</string> 230 <string>Normal</string>
231 </property> 231 </property>
232 <property stdset="1"> 232 <property stdset="1">
233 <name>checked</name> 233 <name>checked</name>
234 <bool>true</bool> 234 <bool>true</bool>
235 </property> 235 </property>
236 <property> 236 <property>
237 <name>whatsThis</name> 237 <name>whatsThis</name>
238 <string>Font size for list- and card view</string> 238 <string>Font size for list- and card view</string>
239 </property> 239 </property>
240 </widget> 240 </widget>
241 <widget> 241 <widget>
242 <class>QRadioButton</class> 242 <class>QRadioButton</class>
243 <property stdset="1"> 243 <property stdset="1">
244 <name>name</name> 244 <name>name</name>
245 <cstring>m_largeFont</cstring> 245 <cstring>m_largeFont</cstring>
246 </property> 246 </property>
247 <property stdset="1"> 247 <property stdset="1">
248 <name>text</name> 248 <name>text</name>
249 <string>Large</string> 249 <string>Large</string>
250 </property> 250 </property>
251 <property> 251 <property>
252 <name>whatsThis</name> 252 <name>whatsThis</name>
253 <string>Font size for list- and card view</string> 253 <string>Font size for list- and card view</string>
254 </property> 254 </property>
255 </widget> 255 </widget>
256 </hbox> 256 </hbox>
257 </widget> 257 </widget>
258 <widget> 258 <widget>
259 <class>QButtonGroup</class> 259 <class>QButtonGroup</class>
260 <property stdset="1"> 260 <property stdset="1">
261 <name>name</name> 261 <name>name</name>
262 <cstring>ButtonGroup4</cstring> 262 <cstring>ButtonGroup4</cstring>
263 </property> 263 </property>
264 <property stdset="1"> 264 <property stdset="1">
265 <name>title</name> 265 <name>title</name>
266 <string>Tool-/Menubar</string> 266 <string>Tool-/Menubar</string>
267 </property> 267 </property>
268 <hbox> 268 <hbox>
269 <property stdset="1"> 269 <property stdset="1">
270 <name>margin</name> 270 <name>margin</name>
271 <number>11</number> 271 <number>11</number>
272 </property> 272 </property>
273 <property stdset="1"> 273 <property stdset="1">
274 <name>spacing</name> 274 <name>spacing</name>
275 <number>6</number> 275 <number>6</number>
276 </property> 276 </property>
277 <widget> 277 <widget>
278 <class>QRadioButton</class> 278 <class>QRadioButton</class>
279 <property stdset="1"> 279 <property stdset="1">
280 <name>name</name> 280 <name>name</name>
281 <cstring>m_fixedBars</cstring> 281 <cstring>m_fixedBars</cstring>
282 </property> 282 </property>
283 <property stdset="1"> 283 <property stdset="1">
284 <name>text</name> 284 <name>text</name>
285 <string>Fixed</string> 285 <string>Fixed</string>
286 </property> 286 </property>
287 <property stdset="1"> 287 <property stdset="1">
288 <name>checked</name> 288 <name>checked</name>
289 <bool>true</bool> 289 <bool>true</bool>
290 </property> 290 </property>
291 <property> 291 <property>
292 <name>toolTip</name> 292 <name>toolTip</name>
293 <string></string> 293 <string></string>
294 </property> 294 </property>
295 <property> 295 <property>
296 <name>whatsThis</name> 296 <name>whatsThis</name>
297 <string>Switch to fixed menu-/toolbars after restarting application !</string> 297 <string>Switch to fixed menu-/toolbars after restarting application !</string>
298 </property> 298 </property>
299 </widget> 299 </widget>
300 <widget> 300 <widget>
301 <class>QRadioButton</class> 301 <class>QRadioButton</class>
302 <property stdset="1"> 302 <property stdset="1">
303 <name>name</name> 303 <name>name</name>
304 <cstring>m_moveBars</cstring> 304 <cstring>m_moveBars</cstring>
305 </property> 305 </property>
306 <property stdset="1"> 306 <property stdset="1">
307 <name>text</name> 307 <name>text</name>
308 <string>Movable</string> 308 <string>Moveable</string>
309 </property> 309 </property>
310 <property> 310 <property>
311 <name>whatsThis</name> 311 <name>whatsThis</name>
312 <string>Switch to moveable menu-/toolbars after restarting application !</string> 312 <string>Switch to moveable menu-/toolbars after restarting application !</string>
313 </property> 313 </property>
314 </widget> 314 </widget>
315 </hbox> 315 </hbox>
316 </widget> 316 </widget>
317 <spacer> 317 <spacer>
318 <property> 318 <property>
319 <name>name</name> 319 <name>name</name>
320 <cstring>Spacer3</cstring> 320 <cstring>Spacer3</cstring>
321 </property> 321 </property>
322 <property stdset="1"> 322 <property stdset="1">
323 <name>orientation</name> 323 <name>orientation</name>
324 <enum>Vertical</enum> 324 <enum>Vertical</enum>
325 </property> 325 </property>
326 <property stdset="1"> 326 <property stdset="1">
327 <name>sizeType</name> 327 <name>sizeType</name>
328 <enum>Expanding</enum> 328 <enum>Expanding</enum>
329 </property> 329 </property>
330 <property> 330 <property>
331 <name>sizeHint</name> 331 <name>sizeHint</name>
332 <size> 332 <size>
333 <width>20</width> 333 <width>20</width>
334 <height>20</height> 334 <height>20</height>
335 </size> 335 </size>
336 </property> 336 </property>
337 </spacer> 337 </spacer>
338 </vbox> 338 </vbox>
339 </widget> 339 </widget>
340 <widget> 340 <widget>
341 <class>QWidget</class> 341 <class>QWidget</class>
342 <property stdset="1"> 342 <property stdset="1">
343 <name>name</name> 343 <name>name</name>
344 <cstring>tab</cstring> 344 <cstring>tab</cstring>
345 </property> 345 </property>
346 <attribute> 346 <attribute>
347 <name>title</name> 347 <name>title</name>
348 <string>Mail</string> 348 <string>Mail</string>
349 </attribute> 349 </attribute>
350 <vbox> 350 <vbox>
351 <property stdset="1"> 351 <property stdset="1">
352 <name>margin</name> 352 <name>margin</name>
353 <number>5</number> 353 <number>5</number>
354 </property> 354 </property>
355 <property stdset="1"> 355 <property stdset="1">
356 <name>spacing</name> 356 <name>spacing</name>
357 <number>6</number> 357 <number>6</number>
358 </property> 358 </property>
359 <widget> 359 <widget>
360 <class>QButtonGroup</class> 360 <class>QButtonGroup</class>
361 <property stdset="1"> 361 <property stdset="1">
362 <name>name</name> 362 <name>name</name>
363 <cstring>ButtonGroup2</cstring> 363 <cstring>ButtonGroup2</cstring>
364 </property> 364 </property>
365 <property stdset="1"> 365 <property stdset="1">
366 <name>title</name> 366 <name>title</name>
367 <string>Mail</string> 367 <string>Mail</string>
368 </property> 368 </property>
369 <property> 369 <property>
370 <name>whatsThis</name> 370 <name>whatsThis</name>
371 <string>Fontsettings for list and card view</string> 371 <string>Fontsettings for list and card view</string>
372 </property> 372 </property>
373 <vbox> 373 <vbox>
374 <property stdset="1"> 374 <property stdset="1">
375 <name>margin</name> 375 <name>margin</name>
376 <number>11</number> 376 <number>11</number>
377 </property> 377 </property>
378 <property stdset="1"> 378 <property stdset="1">
379 <name>spacing</name> 379 <name>spacing</name>
380 <number>6</number> 380 <number>6</number>
381 </property> 381 </property>
382 <widget> 382 <widget>
383 <class>QRadioButton</class> 383 <class>QRadioButton</class>
384 <property stdset="1"> 384 <property stdset="1">
385 <name>name</name> 385 <name>name</name>
386 <cstring>m_useQtMail</cstring> 386 <cstring>m_useQtMail</cstring>
387 </property> 387 </property>
388 <property stdset="1"> 388 <property stdset="1">
389 <name>text</name> 389 <name>text</name>
390 <string>Prefer QT-Mail </string> 390 <string>Prefer QT-Mail </string>
391 </property> 391 </property>
392 <property stdset="1"> 392 <property stdset="1">
393 <name>checked</name> 393 <name>checked</name>
394 <bool>true</bool> 394 <bool>true</bool>
395 </property> 395 </property>
396 <property> 396 <property>
397 <name>whatsThis</name> 397 <name>whatsThis</name>
398 <string>Use Sharp's mail application if available</string> 398 <string>Use Sharp's mail application if available</string>
399 </property> 399 </property>
400 </widget> 400 </widget>
401 <widget> 401 <widget>
402 <class>QRadioButton</class> 402 <class>QRadioButton</class>
403 <property stdset="1"> 403 <property stdset="1">
404 <name>name</name> 404 <name>name</name>
405 <cstring>m_useOpieMail</cstring> 405 <cstring>m_useOpieMail</cstring>
406 </property> 406 </property>
407 <property stdset="1"> 407 <property stdset="1">
408 <name>text</name> 408 <name>text</name>
409 <string>Prefer Opie-Mail</string> 409 <string>Prefer Opie-Mail</string>
410 </property> 410 </property>
411 <property> 411 <property>
412 <name>whatsThis</name> 412 <name>whatsThis</name>
413 <string>Use OPIE mail if installed</string> 413 <string>Use OPIE mail if installed</string>
414 </property> 414 </property>
415 </widget> 415 </widget>
416 <widget> 416 <widget>
417 <class>QLabel</class> 417 <class>QLabel</class>
418 <property stdset="1"> 418 <property stdset="1">
419 <name>name</name> 419 <name>name</name>
420 <cstring>TextLabel1</cstring> 420 <cstring>TextLabel1</cstring>
421 </property> 421 </property>
422 <property stdset="1"> 422 <property stdset="1">
423 <name>text</name> 423 <name>text</name>
424 <string>Notice: QT-Mail is just 424 <string>Notice: QT-Mail is just
425provided in the SHARP 425provided in the SHARP
426default ROM. Opie-Mail 426default ROM. Opie-Mail
427is provided free !</string> 427is provided free !</string>
428 </property> 428 </property>
429 </widget> 429 </widget>
430 </vbox> 430 </vbox>
431 </widget> 431 </widget>
432 <spacer> 432 <spacer>
433 <property> 433 <property>
434 <name>name</name> 434 <name>name</name>
435 <cstring>Spacer2</cstring> 435 <cstring>Spacer2</cstring>
436 </property> 436 </property>
437 <property stdset="1"> 437 <property stdset="1">
438 <name>orientation</name> 438 <name>orientation</name>
439 <enum>Vertical</enum> 439 <enum>Vertical</enum>
440 </property> 440 </property>
441 <property stdset="1"> 441 <property stdset="1">
442 <name>sizeType</name> 442 <name>sizeType</name>
443 <enum>Expanding</enum> 443 <enum>Expanding</enum>
444 </property> 444 </property>
445 <property> 445 <property>
446 <name>sizeHint</name> 446 <name>sizeHint</name>
447 <size> 447 <size>
448 <width>20</width> 448 <width>20</width>
449 <height>20</height> 449 <height>20</height>
450 </size> 450 </size>
451 </property> 451 </property>
452 </spacer> 452 </spacer>
453 </vbox> 453 </vbox>
454 </widget> 454 </widget>
455 <widget> 455 <widget>
456 <class>QWidget</class> 456 <class>QWidget</class>
457 <property stdset="1"> 457 <property stdset="1">
458 <name>name</name> 458 <name>name</name>
459 <cstring>tab</cstring> 459 <cstring>tab</cstring>
460 </property> 460 </property>
461 <attribute> 461 <attribute>
462 <name>title</name> 462 <name>title</name>
463 <string>Order</string> 463 <string>Order</string>
464 </attribute> 464 </attribute>
465 <vbox> 465 <vbox>
466 <property stdset="1"> 466 <property stdset="1">
467 <name>margin</name> 467 <name>margin</name>
468 <number>2</number> 468 <number>2</number>
469 </property> 469 </property>
470 <property stdset="1"> 470 <property stdset="1">
471 <name>spacing</name> 471 <name>spacing</name>
472 <number>2</number> 472 <number>2</number>
473 </property> 473 </property>
474 <widget> 474 <widget>
475 <class>QGroupBox</class> 475 <class>QGroupBox</class>
476 <property stdset="1"> 476 <property stdset="1">
477 <name>name</name> 477 <name>name</name>
478 <cstring>GroupBox9</cstring> 478 <cstring>GroupBox9</cstring>
479 </property> 479 </property>
480 <property stdset="1"> 480 <property stdset="1">
481 <name>title</name> 481 <name>title</name>
482 <string>Select Contact Order:</string> 482 <string>Select Contact Order:</string>
483 </property> 483 </property>
484 <grid> 484 <grid>
485 <property stdset="1"> 485 <property stdset="1">
486 <name>margin</name> 486 <name>margin</name>
487 <number>11</number> 487 <number>11</number>
488 </property> 488 </property>
489 <property stdset="1"> 489 <property stdset="1">
490 <name>spacing</name> 490 <name>spacing</name>
491 <number>6</number> 491 <number>6</number>
492 </property> 492 </property>
493 <widget row="0" column="2" > 493 <widget row="0" column="2" >
494 <class>QPushButton</class> 494 <class>QPushButton</class>
495 <property stdset="1"> 495 <property stdset="1">
496 <name>name</name> 496 <name>name</name>
497 <cstring>m_upButton</cstring> 497 <cstring>m_upButton</cstring>
498 </property> 498 </property>
499 <property stdset="1"> 499 <property stdset="1">
500 <name>sizePolicy</name> 500 <name>sizePolicy</name>
501 <sizepolicy> 501 <sizepolicy>
502 <hsizetype>1</hsizetype> 502 <hsizetype>1</hsizetype>
503 <vsizetype>0</vsizetype> 503 <vsizetype>0</vsizetype>
504 </sizepolicy> 504 </sizepolicy>
505 </property> 505 </property>
506 <property stdset="1"> 506 <property stdset="1">
507 <name>text</name> 507 <name>text</name>
508 <string>Up</string> 508 <string>Up</string>
509 </property> 509 </property>
510 <property stdset="1"> 510 <property stdset="1">
511 <name>autoRepeat</name> 511 <name>autoRepeat</name>
512 <bool>true</bool> 512 <bool>true</bool>
513 </property> 513 </property>
514 <property> 514 <property>
515 <name>whatsThis</name> 515 <name>whatsThis</name>
516 <string>Move selected attribute one line up</string> 516 <string>Move selected attribute one line up</string>
517 </property> 517 </property>
518 </widget> 518 </widget>
519 <widget row="1" column="2" > 519 <widget row="1" column="2" >
520 <class>QPushButton</class> 520 <class>QPushButton</class>
521 <property stdset="1"> 521 <property stdset="1">
522 <name>name</name> 522 <name>name</name>
523 <cstring>m_downButton</cstring> 523 <cstring>m_downButton</cstring>
524 </property> 524 </property>
525 <property stdset="1"> 525 <property stdset="1">
526 <name>sizePolicy</name> 526 <name>sizePolicy</name>
527 <sizepolicy> 527 <sizepolicy>
528 <hsizetype>1</hsizetype> 528 <hsizetype>1</hsizetype>
529 <vsizetype>0</vsizetype> 529 <vsizetype>0</vsizetype>
530 </sizepolicy> 530 </sizepolicy>
531 </property> 531 </property>
532 <property stdset="1"> 532 <property stdset="1">
533 <name>text</name> 533 <name>text</name>
534 <string>Down</string> 534 <string>Down</string>
535 </property> 535 </property>
536 <property stdset="1"> 536 <property stdset="1">
537 <name>autoRepeat</name> 537 <name>autoRepeat</name>
538 <bool>true</bool> 538 <bool>true</bool>
539 </property> 539 </property>
540 <property> 540 <property>
541 <name>whatsThis</name> 541 <name>whatsThis</name>
542 <string>Move selected attribute one line down</string> 542 <string>Move selected attribute one line down</string>
543 </property> 543 </property>
544 </widget> 544 </widget>
545 <widget row="4" column="0" rowspan="1" colspan="2" > 545 <widget row="4" column="0" rowspan="1" colspan="2" >
546 <class>QListBox</class> 546 <class>QListBox</class>
547 <property stdset="1"> 547 <property stdset="1">
548 <name>name</name> 548 <name>name</name>
549 <cstring>allFieldListBox</cstring> 549 <cstring>allFieldListBox</cstring>
550 </property> 550 </property>
551 <property stdset="1"> 551 <property stdset="1">
552 <name>sizePolicy</name> 552 <name>sizePolicy</name>
553 <sizepolicy> 553 <sizepolicy>
554 <hsizetype>7</hsizetype> 554 <hsizetype>7</hsizetype>
555 <vsizetype>7</vsizetype> 555 <vsizetype>7</vsizetype>
556 </sizepolicy> 556 </sizepolicy>
557 </property> 557 </property>
558 <property> 558 <property>
559 <name>whatsThis</name> 559 <name>whatsThis</name>
560 <string>List of all available attributes</string> 560 <string>List of all available attributes</string>
561 </property> 561 </property>
562 </widget> 562 </widget>
563 <widget row="3" column="0" > 563 <widget row="3" column="0" >
564 <class>QPushButton</class> 564 <class>QPushButton</class>
diff --git a/core/pim/addressbook/contacteditor.cpp b/core/pim/addressbook/contacteditor.cpp
index f33ee0a..ce14f98 100644
--- a/core/pim/addressbook/contacteditor.cpp
+++ b/core/pim/addressbook/contacteditor.cpp
@@ -403,913 +403,925 @@ void ContactEditor::init() {
403 cmbCountry->insertItem( tr ( "Mauritania" ) ); 403 cmbCountry->insertItem( tr ( "Mauritania" ) );
404 cmbCountry->insertItem( tr ( "Mauritius" ) ); 404 cmbCountry->insertItem( tr ( "Mauritius" ) );
405 cmbCountry->insertItem( tr ( "Mayotte" ) ); 405 cmbCountry->insertItem( tr ( "Mayotte" ) );
406 cmbCountry->insertItem( tr ( "Mexico" ) ); 406 cmbCountry->insertItem( tr ( "Mexico" ) );
407 cmbCountry->insertItem( tr ( "Micronesia" ) ); 407 cmbCountry->insertItem( tr ( "Micronesia" ) );
408 cmbCountry->insertItem( tr ( "Moldova" ) ); 408 cmbCountry->insertItem( tr ( "Moldova" ) );
409 cmbCountry->insertItem( tr ( "Monaco" ) ); 409 cmbCountry->insertItem( tr ( "Monaco" ) );
410 cmbCountry->insertItem( tr ( "Mongolia" ) ); 410 cmbCountry->insertItem( tr ( "Mongolia" ) );
411 cmbCountry->insertItem( tr ( "Montserrat" ) ); 411 cmbCountry->insertItem( tr ( "Montserrat" ) );
412 cmbCountry->insertItem( tr ( "Morocco" ) ); 412 cmbCountry->insertItem( tr ( "Morocco" ) );
413 cmbCountry->insertItem( tr ( "Mozambique" ) ); 413 cmbCountry->insertItem( tr ( "Mozambique" ) );
414 cmbCountry->insertItem( tr ( "Myanmar" ) ); 414 cmbCountry->insertItem( tr ( "Myanmar" ) );
415 cmbCountry->insertItem( tr ( "Namibia" ) ); 415 cmbCountry->insertItem( tr ( "Namibia" ) );
416 cmbCountry->insertItem( tr ( "Nauru" ) ); 416 cmbCountry->insertItem( tr ( "Nauru" ) );
417 cmbCountry->insertItem( tr ( "Nepal" ) ); 417 cmbCountry->insertItem( tr ( "Nepal" ) );
418 cmbCountry->insertItem( tr ( "Netherlands" ) ); 418 cmbCountry->insertItem( tr ( "Netherlands" ) );
419 cmbCountry->insertItem( tr ( "New Caledonia" ) ); 419 cmbCountry->insertItem( tr ( "New Caledonia" ) );
420 cmbCountry->insertItem( tr ( "New Zealand" ) ); 420 cmbCountry->insertItem( tr ( "New Zealand" ) );
421 cmbCountry->insertItem( tr ( "Nicaragua" ) ); 421 cmbCountry->insertItem( tr ( "Nicaragua" ) );
422 cmbCountry->insertItem( tr ( "Niger" ) ); 422 cmbCountry->insertItem( tr ( "Niger" ) );
423 cmbCountry->insertItem( tr ( "Nigeria" ) ); 423 cmbCountry->insertItem( tr ( "Nigeria" ) );
424 cmbCountry->insertItem( tr ( "Niue" ) ); 424 cmbCountry->insertItem( tr ( "Niue" ) );
425 cmbCountry->insertItem( tr ( "Norway" ) ); 425 cmbCountry->insertItem( tr ( "Norway" ) );
426 cmbCountry->insertItem( tr ( "Oman" ) ); 426 cmbCountry->insertItem( tr ( "Oman" ) );
427 cmbCountry->insertItem( tr ( "Pakistan" ) ); 427 cmbCountry->insertItem( tr ( "Pakistan" ) );
428 cmbCountry->insertItem( tr ( "Palau" ) ); 428 cmbCountry->insertItem( tr ( "Palau" ) );
429 cmbCountry->insertItem( tr ( "Palestinian Sovereign Areas" ) ); 429 cmbCountry->insertItem( tr ( "Palestinian Sovereign Areas" ) );
430 cmbCountry->insertItem( tr ( "Panama" ) ); 430 cmbCountry->insertItem( tr ( "Panama" ) );
431 cmbCountry->insertItem( tr ( "Papua New Guinea" ) ); 431 cmbCountry->insertItem( tr ( "Papua New Guinea" ) );
432 cmbCountry->insertItem( tr ( "Paraguay" ) ); 432 cmbCountry->insertItem( tr ( "Paraguay" ) );
433 cmbCountry->insertItem( tr ( "Peru" ) ); 433 cmbCountry->insertItem( tr ( "Peru" ) );
434 cmbCountry->insertItem( tr ( "Philippines" ) ); 434 cmbCountry->insertItem( tr ( "Philippines" ) );
435 cmbCountry->insertItem( tr ( "Pitcairn Islands" ) ); 435 cmbCountry->insertItem( tr ( "Pitcairn Islands" ) );
436 cmbCountry->insertItem( tr ( "Poland" ) ); 436 cmbCountry->insertItem( tr ( "Poland" ) );
437 cmbCountry->insertItem( tr ( "Portugal" ) ); 437 cmbCountry->insertItem( tr ( "Portugal" ) );
438 cmbCountry->insertItem( tr ( "Puerto Rico" ) ); 438 cmbCountry->insertItem( tr ( "Puerto Rico" ) );
439 cmbCountry->insertItem( tr ( "Qatar" ) ); 439 cmbCountry->insertItem( tr ( "Qatar" ) );
440 cmbCountry->insertItem( tr ( "Reunion" ) ); 440 cmbCountry->insertItem( tr ( "Reunion" ) );
441 cmbCountry->insertItem( tr ( "Romania" ) ); 441 cmbCountry->insertItem( tr ( "Romania" ) );
442 cmbCountry->insertItem( tr ( "Russia" ) ); 442 cmbCountry->insertItem( tr ( "Russia" ) );
443 cmbCountry->insertItem( tr ( "Rwanda" ) ); 443 cmbCountry->insertItem( tr ( "Rwanda" ) );
444 cmbCountry->insertItem( tr ( "Saint Lucia" ) ); 444 cmbCountry->insertItem( tr ( "Saint Lucia" ) );
445 cmbCountry->insertItem( tr ( "Samoa" ) ); 445 cmbCountry->insertItem( tr ( "Samoa" ) );
446 cmbCountry->insertItem( tr ( "San Marino" ) ); 446 cmbCountry->insertItem( tr ( "San Marino" ) );
447 cmbCountry->insertItem( tr ( "Saudi Arabia" ) ); 447 cmbCountry->insertItem( tr ( "Saudi Arabia" ) );
448 cmbCountry->insertItem( tr ( "Senegal" ) ); 448 cmbCountry->insertItem( tr ( "Senegal" ) );
449 cmbCountry->insertItem( tr ( "Seychelles" ) ); 449 cmbCountry->insertItem( tr ( "Seychelles" ) );
450 cmbCountry->insertItem( tr ( "Sierra Leone" ) ); 450 cmbCountry->insertItem( tr ( "Sierra Leone" ) );
451 cmbCountry->insertItem( tr ( "Singapore" ) ); 451 cmbCountry->insertItem( tr ( "Singapore" ) );
452 cmbCountry->insertItem( tr ( "Slovakia" ) ); 452 cmbCountry->insertItem( tr ( "Slovakia" ) );
453 cmbCountry->insertItem( tr ( "Slovenia" ) ); 453 cmbCountry->insertItem( tr ( "Slovenia" ) );
454 cmbCountry->insertItem( tr ( "Solomon Islands" ) ); 454 cmbCountry->insertItem( tr ( "Solomon Islands" ) );
455 cmbCountry->insertItem( tr ( "Somalia" ) ); 455 cmbCountry->insertItem( tr ( "Somalia" ) );
456 cmbCountry->insertItem( tr ( "South Africa" ) ); 456 cmbCountry->insertItem( tr ( "South Africa" ) );
457 cmbCountry->insertItem( tr ( "Spain" ) ); 457 cmbCountry->insertItem( tr ( "Spain" ) );
458 cmbCountry->insertItem( tr ( "Sri Lanka" ) ); 458 cmbCountry->insertItem( tr ( "Sri Lanka" ) );
459 cmbCountry->insertItem( tr ( "St. Helena" ) ); 459 cmbCountry->insertItem( tr ( "St. Helena" ) );
460 cmbCountry->insertItem( tr ( "Sudan" ) ); 460 cmbCountry->insertItem( tr ( "Sudan" ) );
461 cmbCountry->insertItem( tr ( "Suriname" ) ); 461 cmbCountry->insertItem( tr ( "Suriname" ) );
462 cmbCountry->insertItem( tr ( "Swaziland" ) ); 462 cmbCountry->insertItem( tr ( "Swaziland" ) );
463 cmbCountry->insertItem( tr ( "Sweden" ) ); 463 cmbCountry->insertItem( tr ( "Sweden" ) );
464 cmbCountry->insertItem( tr ( "Switzerland" ) ); 464 cmbCountry->insertItem( tr ( "Switzerland" ) );
465 cmbCountry->insertItem( tr ( "Taiwan" ) ); 465 cmbCountry->insertItem( tr ( "Taiwan" ) );
466 cmbCountry->insertItem( tr ( "Tajikistan" ) ); 466 cmbCountry->insertItem( tr ( "Tajikistan" ) );
467 cmbCountry->insertItem( tr ( "Tanzania" ) ); 467 cmbCountry->insertItem( tr ( "Tanzania" ) );
468 cmbCountry->insertItem( tr ( "Thailand" ) ); 468 cmbCountry->insertItem( tr ( "Thailand" ) );
469 cmbCountry->insertItem( tr ( "Togo" ) ); 469 cmbCountry->insertItem( tr ( "Togo" ) );
470 cmbCountry->insertItem( tr ( "Tokelau" ) ); 470 cmbCountry->insertItem( tr ( "Tokelau" ) );
471 cmbCountry->insertItem( tr ( "Tonga" ) ); 471 cmbCountry->insertItem( tr ( "Tonga" ) );
472 cmbCountry->insertItem( tr ( "Tunisia" ) ); 472 cmbCountry->insertItem( tr ( "Tunisia" ) );
473 cmbCountry->insertItem( tr ( "Turkey" ) ); 473 cmbCountry->insertItem( tr ( "Turkey" ) );
474 cmbCountry->insertItem( tr ( "Turkmenistan" ) ); 474 cmbCountry->insertItem( tr ( "Turkmenistan" ) );
475 cmbCountry->insertItem( tr ( "Tuvalu" ) ); 475 cmbCountry->insertItem( tr ( "Tuvalu" ) );
476 cmbCountry->insertItem( tr ( "Uganda" ) ); 476 cmbCountry->insertItem( tr ( "Uganda" ) );
477 cmbCountry->insertItem( tr ( "Ukraine" ) ); 477 cmbCountry->insertItem( tr ( "Ukraine" ) );
478 cmbCountry->insertItem( tr ( "Uruguay" ) ); 478 cmbCountry->insertItem( tr ( "Uruguay" ) );
479 cmbCountry->insertItem( tr ( "Uzbekistan" ) ); 479 cmbCountry->insertItem( tr ( "Uzbekistan" ) );
480 cmbCountry->insertItem( tr ( "Vanuatu" ) ); 480 cmbCountry->insertItem( tr ( "Vanuatu" ) );
481 cmbCountry->insertItem( tr ( "Venezuela" ) ); 481 cmbCountry->insertItem( tr ( "Venezuela" ) );
482 cmbCountry->insertItem( tr ( "Vietnam" ) ); 482 cmbCountry->insertItem( tr ( "Vietnam" ) );
483 cmbCountry->insertItem( tr ( "Virgin Islands" ) ); 483 cmbCountry->insertItem( tr ( "Virgin Islands" ) );
484 cmbCountry->insertItem( tr ( "Western Sahara" ) ); 484 cmbCountry->insertItem( tr ( "Western Sahara" ) );
485 cmbCountry->insertItem( tr ( "Yemen" ) ); 485 cmbCountry->insertItem( tr ( "Yemen" ) );
486 cmbCountry->insertItem( tr ( "Yugoslavia" ) ); 486 cmbCountry->insertItem( tr ( "Yugoslavia" ) );
487 cmbCountry->insertItem( tr ( "Zambia" ) ); 487 cmbCountry->insertItem( tr ( "Zambia" ) );
488 cmbCountry->insertItem( tr ( "Zimbabwe" ) ); 488 cmbCountry->insertItem( tr ( "Zimbabwe" ) );
489 if (cmbCountry->listBox()!=0) 489 if (cmbCountry->listBox()!=0)
490 cmbCountry->listBox()->sort(); 490 cmbCountry->listBox()->sort();
491 491
492 cmbCountry->setMaximumWidth( 135 ); 492 cmbCountry->setMaximumWidth( 135 );
493 493
494 gl->addMultiCellWidget( cmbCountry, 5, 5, 1, 2 ); 494 gl->addMultiCellWidget( cmbCountry, 5, 5, 1, 2 );
495 495
496 // Chooser 4 496 // Chooser 4
497 cmbChooserField4 = new QComboBox( FALSE, container ); 497 cmbChooserField4 = new QComboBox( FALSE, container );
498 cmbChooserField4->setMaximumWidth( 90 ); 498 cmbChooserField4->setMaximumWidth( 90 );
499 gl->addWidget( cmbChooserField4, 6, 0 ); 499 gl->addWidget( cmbChooserField4, 6, 0 );
500 // Textfield for chooser 2 500 // Textfield for chooser 2
501 // Now use WidgetStack to contain the textfield and the default-email combo! 501 // Now use WidgetStack to contain the textfield and the default-email combo!
502 m_widgetStack4 = new QWidgetStack( container ); 502 m_widgetStack4 = new QWidgetStack( container );
503 txtChooserField4 = new QLineEdit( m_widgetStack4 ); 503 txtChooserField4 = new QLineEdit( m_widgetStack4 );
504 m_widgetStack4 -> addWidget( txtChooserField4, TextField ); 504 m_widgetStack4 -> addWidget( txtChooserField4, TextField );
505 gl->addMultiCellWidget( m_widgetStack4, 6, 6, 1, 2 ); 505 gl->addMultiCellWidget( m_widgetStack4, 6, 6, 1, 2 );
506 m_widgetStack4 -> raiseWidget( TextField ); 506 m_widgetStack4 -> raiseWidget( TextField );
507 507
508 QSpacerItem *space = new QSpacerItem(1,1, 508 QSpacerItem *space = new QSpacerItem(1,1,
509 QSizePolicy::Maximum, 509 QSizePolicy::Maximum,
510 QSizePolicy::MinimumExpanding ); 510 QSizePolicy::MinimumExpanding );
511 gl->addItem( space, 7, 0 ); 511 gl->addItem( space, 7, 0 );
512 512
513 tabMain->insertTab( tabViewport, tr( "Address" ) ); 513 tabMain->insertTab( tabViewport, tr( "Address" ) );
514 514
515 tabViewport = new QWidget ( tabMain ); 515 tabViewport = new QWidget ( tabMain );
516 516
517 vb = new QVBoxLayout( tabViewport ); 517 vb = new QVBoxLayout( tabViewport );
518 518
519 svDetails = new QScrollView( tabViewport ); 519 svDetails = new QScrollView( tabViewport );
520 vb->addWidget( svDetails, 0, 0 ); 520 vb->addWidget( svDetails, 0, 0 );
521 svDetails->setResizePolicy( QScrollView::AutoOneFit ); 521 svDetails->setResizePolicy( QScrollView::AutoOneFit );
522 svDetails->setFrameStyle( QFrame::NoFrame ); 522 svDetails->setFrameStyle( QFrame::NoFrame );
523 523
524 container = new QWidget( svDetails->viewport() ); 524 container = new QWidget( svDetails->viewport() );
525 svDetails->addChild( container ); 525 svDetails->addChild( container );
526 526
527 gl = new QGridLayout( container, 1, 2, 2, 4 ); 527 gl = new QGridLayout( container, 1, 2, 2, 4 );
528 528
529 int counter = 0; 529 int counter = 0;
530 530
531 // Birthday 531 // Birthday
532 QHBox* hBox = new QHBox( container ); 532 QHBox* hBox = new QHBox( container );
533 l = new QLabel( tr("Birthday"), container ); 533 l = new QLabel( tr("Birthday"), container );
534 gl->addWidget( l, counter, 0 ); 534 gl->addWidget( l, counter, 0 );
535 535
536 QPopupMenu* m1 = new QPopupMenu( container ); 536 QPopupMenu* m1 = new QPopupMenu( container );
537 birthdayPicker = new DateBookMonth( m1, 0, TRUE ); 537 birthdayPicker = new DateBookMonth( m1, 0, TRUE );
538 m1->insertItem( birthdayPicker ); 538 m1->insertItem( birthdayPicker );
539 539
540 birthdayButton= new QToolButton( hBox, "buttonStart" ); 540 birthdayButton= new QToolButton( hBox, "buttonStart" );
541 birthdayButton->setPopup( m1 ); 541 birthdayButton->setPopup( m1 );
542 birthdayButton->setPopupDelay(0); 542 birthdayButton->setPopupDelay(0);
543 543
544 QPushButton* deleteButton = new QPushButton( QIconSet( Resource::loadPixmap( "trash" ) ), 544 QPushButton* deleteButton = new QPushButton( QIconSet( Resource::loadPixmap( "trash" ) ),
545 tr( "Delete" ), 545 tr( "Delete" ),
546 hBox, 0 ); 546 hBox, 0 );
547 547
548 gl->addWidget( hBox, counter , 1 ); 548 gl->addWidget( hBox, counter , 1 );
549 549
550 connect( birthdayPicker, SIGNAL( dateClicked( int, int, int ) ), 550 connect( birthdayPicker, SIGNAL( dateClicked( int, int, int ) ),
551 this, SLOT( slotBirthdayDateChanged( int, int, int ) ) ); 551 this, SLOT( slotBirthdayDateChanged( int, int, int ) ) );
552 connect( deleteButton, SIGNAL( clicked() ), this, SLOT( slotRemoveBirthday() ) ); 552 connect( deleteButton, SIGNAL( clicked() ), this, SLOT( slotRemoveBirthday() ) );
553 553
554 ++counter; 554 ++counter;
555 555
556 // Anniversary 556 // Anniversary
557 hBox = new QHBox( container ); 557 hBox = new QHBox( container );
558 l = new QLabel( tr("Anniversary"), container ); 558 l = new QLabel( tr("Anniversary"), container );
559 gl->addWidget( l, counter, 0 ); 559 gl->addWidget( l, counter, 0 );
560 560
561 m1 = new QPopupMenu( container ); 561 m1 = new QPopupMenu( container );
562 anniversaryPicker = new DateBookMonth( m1, 0, TRUE ); 562 anniversaryPicker = new DateBookMonth( m1, 0, TRUE );
563 m1->insertItem( anniversaryPicker ); 563 m1->insertItem( anniversaryPicker );
564 564
565 anniversaryButton= new QToolButton( hBox, "buttonStart" ); 565 anniversaryButton= new QToolButton( hBox, "buttonStart" );
566 anniversaryButton->setPopup( m1 ); 566 anniversaryButton->setPopup( m1 );
567 anniversaryButton->setPopupDelay(0); 567 anniversaryButton->setPopupDelay(0);
568 568
569 deleteButton = new QPushButton( QIconSet( Resource::loadPixmap( "trash" ) ), 569 deleteButton = new QPushButton( QIconSet( Resource::loadPixmap( "trash" ) ),
570 tr( "Delete" ), 570 tr( "Delete" ),
571 hBox, 0 ); 571 hBox, 0 );
572 gl->addWidget( hBox, counter , 1 ); 572 gl->addWidget( hBox, counter , 1 );
573 573
574 connect( anniversaryPicker, SIGNAL( dateClicked( int, int, int ) ), 574 connect( anniversaryPicker, SIGNAL( dateClicked( int, int, int ) ),
575 this, SLOT( slotAnniversaryDateChanged( int, int, int ) ) ); 575 this, SLOT( slotAnniversaryDateChanged( int, int, int ) ) );
576 connect( deleteButton, SIGNAL( clicked() ), this, SLOT( slotRemoveAnniversary() ) ); 576 connect( deleteButton, SIGNAL( clicked() ), this, SLOT( slotRemoveAnniversary() ) );
577 577
578 ++counter; 578 ++counter;
579 579
580 // Gender 580 // Gender
581 l = new QLabel( tr("Gender"), container ); 581 l = new QLabel( tr("Gender"), container );
582 gl->addWidget( l, counter, 0 ); 582 gl->addWidget( l, counter, 0 );
583 cmbGender = new QComboBox( container ); 583 cmbGender = new QComboBox( container );
584 cmbGender->insertItem( "", 0 ); 584 cmbGender->insertItem( "", 0 );
585 cmbGender->insertItem( tr("Male"), 1); 585 cmbGender->insertItem( tr("Male"), 1);
586 cmbGender->insertItem( tr("Female"), 2); 586 cmbGender->insertItem( tr("Female"), 2);
587 gl->addWidget( cmbGender, counter, 1 ); 587 gl->addWidget( cmbGender, counter, 1 );
588 588
589 ++counter; 589 ++counter;
590 590
591 // Create Labels and lineedit fields for every dynamic entry 591 // Create Labels and lineedit fields for every dynamic entry
592 QStringList::ConstIterator it = slDynamicEntries.begin(); 592 QStringList::ConstIterator it = slDynamicEntries.begin();
593 QMap<QString, int> mapStrToID = OContactFields::untrFieldsToId(); 593 QMap<QString, int> mapStrToID = OContactFields::untrFieldsToId();
594 QMap<int, QString> mapIdToStr = OContactFields::idToTrFields(); 594 QMap<int, QString> mapIdToStr = OContactFields::idToTrFields();
595 for (i = counter; it != slDynamicEntries.end(); i++, ++it ) { 595 for (i = counter; it != slDynamicEntries.end(); i++, ++it ) {
596 596
597 if (((*it) == "Anniversary") || 597 if (((*it) == "Anniversary") ||
598 ((*it) == "Birthday")|| ((*it) == "Gender")) continue; 598 ((*it) == "Birthday")|| ((*it) == "Gender")) continue;
599 599
600 l = new QLabel( mapIdToStr[mapStrToID[*it]].utf8() , container ); 600 l = new QLabel( mapIdToStr[mapStrToID[*it]].utf8() , container );
601 listName.append( l ); 601 listName.append( l );
602 gl->addWidget( l, i, 0 ); 602 gl->addWidget( l, i, 0 );
603 QLineEdit *e = new QLineEdit( container ); 603 QLineEdit *e = new QLineEdit( container );
604 listValue.append( e ); 604 listValue.append( e );
605 gl->addWidget( e, i, 1); 605 gl->addWidget( e, i, 1);
606 } 606 }
607 // Fill labels with names.. 607 // Fill labels with names..
608 //loadFields(); 608 //loadFields();
609 609
610 610
611 tabMain->insertTab( tabViewport, tr( "Details" ) ); 611 tabMain->insertTab( tabViewport, tr( "Details" ) );
612 612
613 dlgNote = new QDialog( this, "Note Dialog", TRUE ); 613 dlgNote = new QDialog( this, "Note Dialog", TRUE );
614 dlgNote->setCaption( tr("Enter Note") ); 614 dlgNote->setCaption( tr("Enter Note") );
615 QVBoxLayout *vbNote = new QVBoxLayout( dlgNote ); 615 QVBoxLayout *vbNote = new QVBoxLayout( dlgNote );
616 txtNote = new QMultiLineEdit( dlgNote ); 616 txtNote = new QMultiLineEdit( dlgNote );
617 vbNote->addWidget( txtNote ); 617 vbNote->addWidget( txtNote );
618 connect( btnNote, SIGNAL(clicked()), this, SLOT(slotNote()) ); 618 connect( btnNote, SIGNAL(clicked()), this, SLOT(slotNote()) );
619 619
620 dlgName = new QDialog( this, "Name Dialog", TRUE ); 620 dlgName = new QDialog( this, "Name Dialog", TRUE );
621 dlgName->setCaption( tr("Edit Name") ); 621 dlgName->setCaption( tr("Edit Name") );
622 gl = new QGridLayout( dlgName, 5, 2, 2, 3 ); 622 gl = new QGridLayout( dlgName, 5, 2, 2, 3 );
623 623
624 l = new QLabel( tr("First Name"), dlgName ); 624 l = new QLabel( tr("First Name"), dlgName );
625 gl->addWidget( l, 0, 0 ); 625 gl->addWidget( l, 0, 0 );
626 txtFirstName = new QLineEdit( dlgName ); 626 txtFirstName = new QLineEdit( dlgName );
627 gl->addWidget( txtFirstName, 0, 1 ); 627 gl->addWidget( txtFirstName, 0, 1 );
628 628
629 l = new QLabel( tr("Middle Name"), dlgName ); 629 l = new QLabel( tr("Middle Name"), dlgName );
630 gl->addWidget( l, 1, 0 ); 630 gl->addWidget( l, 1, 0 );
631 txtMiddleName = new QLineEdit( dlgName ); 631 txtMiddleName = new QLineEdit( dlgName );
632 gl->addWidget( txtMiddleName, 1, 1 ); 632 gl->addWidget( txtMiddleName, 1, 1 );
633 633
634 l = new QLabel( tr("Last Name"), dlgName ); 634 l = new QLabel( tr("Last Name"), dlgName );
635 gl->addWidget( l, 2, 0 ); 635 gl->addWidget( l, 2, 0 );
636 txtLastName = new QLineEdit( dlgName ); 636 txtLastName = new QLineEdit( dlgName );
637 gl->addWidget( txtLastName, 2, 1 ); 637 gl->addWidget( txtLastName, 2, 1 );
638 638
639 // l = new QLabel( tr("Suffix"), dlgName ); 639 // l = new QLabel( tr("Suffix"), dlgName );
640 // gl->addWidget( l, 3, 0 ); 640 // gl->addWidget( l, 3, 0 );
641 // txtSuffix = new QLineEdit( dlgName ); 641 // txtSuffix = new QLineEdit( dlgName );
642 // gl->addWidget( txtSuffix, 3, 1 ); 642 // gl->addWidget( txtSuffix, 3, 1 );
643 space = new QSpacerItem(1,1, 643 space = new QSpacerItem(1,1,
644 QSizePolicy::Maximum, 644 QSizePolicy::Maximum,
645 QSizePolicy::MinimumExpanding ); 645 QSizePolicy::MinimumExpanding );
646 gl->addItem( space, 4, 0 ); 646 gl->addItem( space, 4, 0 );
647 647
648 cmbChooserField1->insertStringList( trlChooserNames ); 648 cmbChooserField1->insertStringList( trlChooserNames );
649 cmbChooserField2->insertStringList( trlChooserNames ); 649 cmbChooserField2->insertStringList( trlChooserNames );
650 cmbChooserField3->insertStringList( trlChooserNames ); 650 cmbChooserField3->insertStringList( trlChooserNames );
651 cmbChooserField4->insertStringList( trlChooserNames ); 651 cmbChooserField4->insertStringList( trlChooserNames );
652 652
653 cmbChooserField1->setCurrentItem( 0 ); 653 cmbChooserField1->setCurrentItem( 0 );
654 cmbChooserField2->setCurrentItem( 1 ); 654 cmbChooserField2->setCurrentItem( 1 );
655 cmbChooserField3->setCurrentItem( 2 ); 655 cmbChooserField3->setCurrentItem( 2 );
656 656
657 connect( btnFullName, SIGNAL(clicked()), this, SLOT(slotName()) ); 657 connect( btnFullName, SIGNAL(clicked()), this, SLOT(slotName()) );
658 658
659 connect( txtFullName, SIGNAL(textChanged(const QString &)), this, SLOT(slotFullNameChange(const QString &)) ); 659 connect( txtFullName, SIGNAL(textChanged(const QString &)),
660 660 this, SLOT(slotFullNameChange(const QString &)) );
661 connect( txtSuffix, SIGNAL(textChanged(const QString &)), this, SLOT(slotSuffixChange(const QString &)) ); 661 connect( txtSuffix, SIGNAL(textChanged(const QString &)),
662 662 this, SLOT(slotSuffixChange(const QString &)) );
663 connect( txtOrganization, SIGNAL(textChanged(const QString &)),
664 this, SLOT(slotOrganizationChange(const QString &)) );
663 connect( txtChooserField1, SIGNAL(textChanged(const QString &)), 665 connect( txtChooserField1, SIGNAL(textChanged(const QString &)),
664 this, SLOT(slotChooser1Change(const QString &)) ); 666 this, SLOT(slotChooser1Change(const QString &)) );
665 connect( txtChooserField2, SIGNAL(textChanged(const QString &)), 667 connect( txtChooserField2, SIGNAL(textChanged(const QString &)),
666 this, SLOT(slotChooser2Change(const QString &)) ); 668 this, SLOT(slotChooser2Change(const QString &)) );
667 connect( txtChooserField3, SIGNAL(textChanged(const QString &)), 669 connect( txtChooserField3, SIGNAL(textChanged(const QString &)),
668 this, SLOT(slotChooser3Change(const QString &)) ); 670 this, SLOT(slotChooser3Change(const QString &)) );
669 connect( txtChooserField4, SIGNAL(textChanged(const QString &)), 671 connect( txtChooserField4, SIGNAL(textChanged(const QString &)),
670 this, SLOT(slotChooser4Change(const QString &)) ); 672 this, SLOT(slotChooser4Change(const QString &)) );
671 connect( txtAddress, SIGNAL(textChanged(const QString &)), 673 connect( txtAddress, SIGNAL(textChanged(const QString &)),
672 this, SLOT(slotAddressChange(const QString &)) ); 674 this, SLOT(slotAddressChange(const QString &)) );
673 connect( txtCity, SIGNAL(textChanged(const QString &)), 675 connect( txtCity, SIGNAL(textChanged(const QString &)),
674 this, SLOT(slotCityChange(const QString &)) ); 676 this, SLOT(slotCityChange(const QString &)) );
675 connect( txtState, SIGNAL(textChanged(const QString &)), 677 connect( txtState, SIGNAL(textChanged(const QString &)),
676 this, SLOT(slotStateChange(const QString &)) ); 678 this, SLOT(slotStateChange(const QString &)) );
677 connect( txtZip, SIGNAL(textChanged(const QString &)), 679 connect( txtZip, SIGNAL(textChanged(const QString &)),
678 this, SLOT(slotZipChange(const QString &)) ); 680 this, SLOT(slotZipChange(const QString &)) );
679 connect( cmbCountry, SIGNAL(textChanged(const QString &)), 681 connect( cmbCountry, SIGNAL(textChanged(const QString &)),
680 this, SLOT(slotCountryChange(const QString &)) ); 682 this, SLOT(slotCountryChange(const QString &)) );
681 connect( cmbCountry, SIGNAL(activated(const QString &)), 683 connect( cmbCountry, SIGNAL(activated(const QString &)),
682 this, SLOT(slotCountryChange(const QString &)) ); 684 this, SLOT(slotCountryChange(const QString &)) );
683 connect( cmbChooserField1, SIGNAL(activated(int)), 685 connect( cmbChooserField1, SIGNAL(activated(int)),
684 this, SLOT(slotCmbChooser1Change(int)) ); 686 this, SLOT(slotCmbChooser1Change(int)) );
685 connect( cmbChooserField2, SIGNAL(activated(int)), 687 connect( cmbChooserField2, SIGNAL(activated(int)),
686 this, SLOT(slotCmbChooser2Change(int)) ); 688 this, SLOT(slotCmbChooser2Change(int)) );
687 connect( cmbChooserField3, SIGNAL(activated(int)), 689 connect( cmbChooserField3, SIGNAL(activated(int)),
688 this, SLOT(slotCmbChooser3Change(int)) ); 690 this, SLOT(slotCmbChooser3Change(int)) );
689 connect( cmbChooserField4, SIGNAL(activated(int)), 691 connect( cmbChooserField4, SIGNAL(activated(int)),
690 this, SLOT(slotCmbChooser4Change(int)) ); 692 this, SLOT(slotCmbChooser4Change(int)) );
691 connect( cmbAddress, SIGNAL(activated(int)), 693 connect( cmbAddress, SIGNAL(activated(int)),
692 this, SLOT(slotAddressTypeChange(int)) ); 694 this, SLOT(slotAddressTypeChange(int)) );
693 695
694 new QPEDialogListener(this); 696 new QPEDialogListener(this);
695 697
696 setPersonalView ( m_personalView ); 698 setPersonalView ( m_personalView );
697 699
698 qWarning("init() END"); 700 qWarning("init() END");
699} 701}
700 702
701void ContactEditor::defaultEmailChanged(int i){ 703void ContactEditor::defaultEmailChanged(int i){
702 qDebug("defaultEmailChanged"); 704 qDebug("defaultEmailChanged");
703 705
704 // was sollte das ? (se) 706 // was sollte das ? (se)
705 // int index = cmbChooserField1->currentItem(); 707 // int index = cmbChooserField1->currentItem();
706 // slChooserValues[index] = cmbDefaultEmail->text(i); 708 // slChooserValues[index] = cmbDefaultEmail->text(i);
707 709
708 defaultEmail = cmbDefaultEmail->text(i); 710 defaultEmail = cmbDefaultEmail->text(i);
709 qDebug ("Changed to: %s", defaultEmail.latin1()); 711 qDebug ("Changed to: %s", defaultEmail.latin1());
710 712
711} 713}
712 714
713void ContactEditor::populateDefaultEmailCmb(){ 715void ContactEditor::populateDefaultEmailCmb(){
714 716
715 // if the default-email combo was not selected and therfore not created 717 // if the default-email combo was not selected and therfore not created
716 // we get a lot of trouble.. Therfore create an invisible one.. 718 // we get a lot of trouble.. Therfore create an invisible one..
717 if ( !cmbDefaultEmail ){ 719 if ( !cmbDefaultEmail ){
718 cmbDefaultEmail = new QComboBox(this); 720 cmbDefaultEmail = new QComboBox(this);
719 cmbDefaultEmail -> hide(); 721 cmbDefaultEmail -> hide();
720 } 722 }
721 cmbDefaultEmail->clear(); 723 cmbDefaultEmail->clear();
722 cmbDefaultEmail->insertStringList( emails ); 724 cmbDefaultEmail->insertStringList( emails );
723 // cmbDefaultEmail->show(); 725 // cmbDefaultEmail->show();
724 726
725 // Select default email in combo.. 727 // Select default email in combo..
726 bool found = false; 728 bool found = false;
727 for ( int i = 0; i < cmbDefaultEmail->count(); i++){ 729 for ( int i = 0; i < cmbDefaultEmail->count(); i++){
728 qDebug(" populateDefaultEmailCmb text >%s< defaultEmail >%s<", 730 qDebug(" populateDefaultEmailCmb text >%s< defaultEmail >%s<",
729 cmbDefaultEmail->text( i ).latin1(), defaultEmail.latin1()); 731 cmbDefaultEmail->text( i ).latin1(), defaultEmail.latin1());
730 732
731 if ( cmbDefaultEmail->text( i ).stripWhiteSpace() == defaultEmail.stripWhiteSpace() ){ 733 if ( cmbDefaultEmail->text( i ).stripWhiteSpace() == defaultEmail.stripWhiteSpace() ){
732 cmbDefaultEmail->setCurrentItem( i ); 734 cmbDefaultEmail->setCurrentItem( i );
733 qDebug("set"); 735 qDebug("set");
734 found = true; 736 found = true;
735 } 737 }
736 } 738 }
737 739
738 // If the current default email is not found in the list, we choose the 740 // If the current default email is not found in the list, we choose the
739 // first one.. 741 // first one..
740 if ( !found ) 742 if ( !found )
741 defaultEmail = cmbDefaultEmail->text(0); 743 defaultEmail = cmbDefaultEmail->text(0);
742} 744}
743 745
744// Called when any combobox was changed. 746// Called when any combobox was changed.
745// "true" returned if the change was chandled by this function, else it should 747// "true" returned if the change was chandled by this function, else it should
746// be handled by something else.. 748// be handled by something else..
747bool ContactEditor::cmbChooserChange( int index, QWidgetStack* inputStack, int widgetPos ) { 749bool ContactEditor::cmbChooserChange( int index, QWidgetStack* inputStack, int widgetPos ) {
748 QString type = slChooserNames[index]; 750 QString type = slChooserNames[index];
749 qWarning("ContactEditor::cmbChooserChange -> Type: %s, WidgetPos: %d", type.latin1(), widgetPos ); 751 qWarning("ContactEditor::cmbChooserChange -> Type: %s, WidgetPos: %d", type.latin1(), widgetPos );
750 752
751 if ( !initializing ) 753 if ( !initializing )
752 contactfields.setFieldOrder( widgetPos-1, index ); 754 contactfields.setFieldOrder( widgetPos-1, index );
753 755
754 // Create and connect combobox for selecting the default email 756 // Create and connect combobox for selecting the default email
755 if ( type == "Default Email"){ 757 if ( type == "Default Email"){
756 qWarning("Choosing default-email (defaultEmailChooserPosition= %d) ", defaultEmailChooserPosition); 758 qWarning("Choosing default-email (defaultEmailChooserPosition= %d) ", defaultEmailChooserPosition);
757 759
758 // More than one default-email chooser is not allowed ! 760 // More than one default-email chooser is not allowed !
759 if ( ( defaultEmailChooserPosition != -1 ) && 761 if ( ( defaultEmailChooserPosition != -1 ) &&
760 defaultEmailChooserPosition != widgetPos && !initializing){ 762 defaultEmailChooserPosition != widgetPos && !initializing){
761 chooserError( widgetPos ); 763 chooserError( widgetPos );
762 return true; 764 return true;
763 } 765 }
764 766
765 QComboBox* cmbo = ( QComboBox* ) inputStack -> widget( Combo ); 767 QComboBox* cmbo = ( QComboBox* ) inputStack -> widget( Combo );
766 if ( cmbo ){ 768 if ( cmbo ){
767 inputStack->raiseWidget( TextField ); 769 inputStack->raiseWidget( TextField );
768 inputStack -> removeWidget( cmbo ); 770 inputStack -> removeWidget( cmbo );
769 delete cmbo; 771 delete cmbo;
770 } 772 }
771 cmbo = new QComboBox( inputStack ); 773 cmbo = new QComboBox( inputStack );
772 cmbo -> insertStringList( emails ); 774 cmbo -> insertStringList( emails );
773 775
774 inputStack -> addWidget( cmbo, Combo ); 776 inputStack -> addWidget( cmbo, Combo );
775 inputStack -> raiseWidget( Combo ); 777 inputStack -> raiseWidget( Combo );
776 778
777 defaultEmailChooserPosition = widgetPos; 779 defaultEmailChooserPosition = widgetPos;
778 cmbDefaultEmail = cmbo; 780 cmbDefaultEmail = cmbo;
779 781
780 connect( cmbo,SIGNAL( activated(int) ), 782 connect( cmbo,SIGNAL( activated(int) ),
781 SLOT( defaultEmailChanged(int) ) ); 783 SLOT( defaultEmailChanged(int) ) );
782 784
783 // Set current default email 785 // Set current default email
784 populateDefaultEmailCmb(); 786 populateDefaultEmailCmb();
785 787
786 788
787 } else { 789 } else {
788 // Something else was selected: Hide combo.. 790 // Something else was selected: Hide combo..
789 qWarning(" Hiding default-email combo" ); 791 qWarning(" Hiding default-email combo" );
790 if ( defaultEmailChooserPosition == widgetPos ){ 792 if ( defaultEmailChooserPosition == widgetPos ){
791 defaultEmailChooserPosition = -1; 793 defaultEmailChooserPosition = -1;
792 } 794 }
793 QComboBox* cmbo = ( QComboBox* ) inputStack -> widget( Combo ); 795 QComboBox* cmbo = ( QComboBox* ) inputStack -> widget( Combo );
794 if ( cmbo ){ 796 if ( cmbo ){
795 inputStack->raiseWidget( TextField ); 797 inputStack->raiseWidget( TextField );
796 inputStack -> removeWidget( cmbo ); 798 inputStack -> removeWidget( cmbo );
797 cmbDefaultEmail = 0l; 799 cmbDefaultEmail = 0l;
798 delete cmbo; 800 delete cmbo;
799 } 801 }
800 802
801 // Caller should initialize the responsible textfield, therefore 803 // Caller should initialize the responsible textfield, therefore
802 // "false" is returned 804 // "false" is returned
803 return false; 805 return false;
804 } 806 }
805 807
806 // Everything is worked off .. 808 // Everything is worked off ..
807 return true; 809 return true;
808 810
809} 811}
810 812
811// Currently accessed when we select default-email more than once ! 813// Currently accessed when we select default-email more than once !
812void ContactEditor::chooserError( int index ) 814void ContactEditor::chooserError( int index )
813{ 815{
814 qWarning("ContactEditor::chooserError( %d )", index); 816 qWarning("ContactEditor::chooserError( %d )", index);
815 QMessageBox::warning( this, "Chooser Error", 817 QMessageBox::warning( this, "Chooser Error",
816 "Multiple selection of this\n" 818 "Multiple selection of this\n"
817 "Item is not allowed !\n\n" 819 "Item is not allowed !\n\n"
818 "First deselect the previous one !", 820 "First deselect the previous one !",
819 "&OK", 0, 0, 821 "&OK", 0, 0,
820 0, 0 ); 822 0, 0 );
821 823
822 // Reset the selected Chooser. Unfortunately the chooser 824 // Reset the selected Chooser. Unfortunately the chooser
823 // generates no signal, therfore we have to 825 // generates no signal, therfore we have to
824 // call the cmbChooserChange function manually.. 826 // call the cmbChooserChange function manually..
825 switch( index ){ 827 switch( index ){
826 case 1: 828 case 1:
827 cmbChooserField1 -> setCurrentItem( 0 ); 829 cmbChooserField1 -> setCurrentItem( 0 );
828 slotCmbChooser1Change( 0 ); 830 slotCmbChooser1Change( 0 );
829 break; 831 break;
830 case 2: 832 case 2:
831 cmbChooserField2 -> setCurrentItem( 0 ); 833 cmbChooserField2 -> setCurrentItem( 0 );
832 slotCmbChooser2Change( 0 ); 834 slotCmbChooser2Change( 0 );
833 break; 835 break;
834 case 3: 836 case 3:
835 cmbChooserField3 -> setCurrentItem( 0 ); 837 cmbChooserField3 -> setCurrentItem( 0 );
836 slotCmbChooser3Change( 0 ); 838 slotCmbChooser3Change( 0 );
837 break; 839 break;
838 case 4: 840 case 4:
839 cmbChooserField4 -> setCurrentItem( 0 ); 841 cmbChooserField4 -> setCurrentItem( 0 );
840 slotCmbChooser4Change( 0 ); 842 slotCmbChooser4Change( 0 );
841 break; 843 break;
842 } 844 }
843} 845}
844 846
845// Called when something was changed in a textfield (shouldn't it called textchanged? (se)) 847// Called when something was changed in a textfield (shouldn't it called textchanged? (se))
846void ContactEditor::chooserChange( const QString &textChanged, int index, 848void ContactEditor::chooserChange( const QString &textChanged, int index,
847 QLineEdit* , int widgetPos ) { 849 QLineEdit* , int widgetPos ) {
848 850
849 QString type = slChooserNames[index]; // :SX 851 QString type = slChooserNames[index]; // :SX
850 qDebug("ContactEditor::chooserChange( type=>%s<, textChanged=>%s< index=%i, widgetPos=%i", 852 qDebug("ContactEditor::chooserChange( type=>%s<, textChanged=>%s< index=%i, widgetPos=%i",
851 type.latin1(),textChanged.latin1(), index, widgetPos ); 853 type.latin1(),textChanged.latin1(), index, widgetPos );
852 854
853 if ( type == "Default Email"){ 855 if ( type == "Default Email"){
854 qWarning ("??? Wozu??: %s", textChanged.latin1()); 856 qWarning ("??? Wozu??: %s", textChanged.latin1());
855 defaultEmail = textChanged; 857 defaultEmail = textChanged;
856 858
857 populateDefaultEmailCmb(); 859 populateDefaultEmailCmb();
858 860
859 }else if (type == "Emails"){ 861 }else if (type == "Emails"){
860 qDebug("emails"); 862 qDebug("emails");
861 863
862 QString de; 864 QString de;
863 emails = QStringList::split (",", textChanged ); 865 emails = QStringList::split (",", textChanged );
864 866
865 populateDefaultEmailCmb(); 867 populateDefaultEmailCmb();
866 } 868 }
867 869
868 slChooserValues[index] = textChanged; 870 slChooserValues[index] = textChanged;
869 871
870} 872}
871 873
872void ContactEditor::slotChooser1Change( const QString &textChanged ) { 874void ContactEditor::slotChooser1Change( const QString &textChanged ) {
873 qWarning("ContactEditor::slotChooser1Change( %s )", textChanged.latin1()); 875 qWarning("ContactEditor::slotChooser1Change( %s )", textChanged.latin1());
874 chooserChange( textChanged, cmbChooserField1->currentItem(), txtChooserField1, 1); 876 chooserChange( textChanged, cmbChooserField1->currentItem(), txtChooserField1, 1);
875} 877}
876 878
877void ContactEditor::slotChooser2Change( const QString &textChanged ) { 879void ContactEditor::slotChooser2Change( const QString &textChanged ) {
878 qWarning("ContactEditor::slotChooser2Change( %s )", textChanged.latin1()); 880 qWarning("ContactEditor::slotChooser2Change( %s )", textChanged.latin1());
879 chooserChange( textChanged, cmbChooserField2->currentItem(), txtChooserField2, 2); 881 chooserChange( textChanged, cmbChooserField2->currentItem(), txtChooserField2, 2);
880 882
881} 883}
882 884
883void ContactEditor::slotChooser3Change( const QString &textChanged ) { 885void ContactEditor::slotChooser3Change( const QString &textChanged ) {
884 qWarning("ContactEditor::slotChooser3Change( %s )", textChanged.latin1()); 886 qWarning("ContactEditor::slotChooser3Change( %s )", textChanged.latin1());
885 chooserChange( textChanged, cmbChooserField3->currentItem(), txtChooserField3, 3); 887 chooserChange( textChanged, cmbChooserField3->currentItem(), txtChooserField3, 3);
886} 888}
887 889
888void ContactEditor::slotChooser4Change( const QString &textChanged ) { 890void ContactEditor::slotChooser4Change( const QString &textChanged ) {
889 qWarning("ContactEditor::slotChooser4Change( %s )", textChanged.latin1()); 891 qWarning("ContactEditor::slotChooser4Change( %s )", textChanged.latin1());
890 chooserChange( textChanged, cmbChooserField4->currentItem(), txtChooserField4, 4); 892 chooserChange( textChanged, cmbChooserField4->currentItem(), txtChooserField4, 4);
891} 893}
892 894
893void ContactEditor::slotAddressChange( const QString &textChanged ) { 895void ContactEditor::slotAddressChange( const QString &textChanged ) {
894 896
895 if ( cmbAddress->currentItem() == 0 ) { 897 if ( cmbAddress->currentItem() == 0 ) {
896 slBusinessAddress[0] = textChanged; 898 slBusinessAddress[0] = textChanged;
897 } else { 899 } else {
898 slHomeAddress[0] = textChanged; 900 slHomeAddress[0] = textChanged;
899 } 901 }
900} 902}
901 903
902void ContactEditor::slotAddress2Change( const QString &textChanged ) { 904void ContactEditor::slotAddress2Change( const QString &textChanged ) {
903 905
904 if ( cmbAddress->currentItem() == 0 ) { 906 if ( cmbAddress->currentItem() == 0 ) {
905 slBusinessAddress[1] = textChanged; 907 slBusinessAddress[1] = textChanged;
906 } else { 908 } else {
907 slHomeAddress[1] = textChanged; 909 slHomeAddress[1] = textChanged;
908 } 910 }
909} 911}
910 912
911void ContactEditor::slotPOBoxChange( const QString &textChanged ) { 913void ContactEditor::slotPOBoxChange( const QString &textChanged ) {
912 914
913 if ( cmbAddress->currentItem() == 0 ) { 915 if ( cmbAddress->currentItem() == 0 ) {
914 slBusinessAddress[2] = textChanged; 916 slBusinessAddress[2] = textChanged;
915 } else { 917 } else {
916 slHomeAddress[2] = textChanged; 918 slHomeAddress[2] = textChanged;
917 } 919 }
918} 920}
919 921
920void ContactEditor::slotCityChange( const QString &textChanged ) { 922void ContactEditor::slotCityChange( const QString &textChanged ) {
921 923
922 if ( cmbAddress->currentItem() == 0 ) { 924 if ( cmbAddress->currentItem() == 0 ) {
923 slBusinessAddress[3] = textChanged; 925 slBusinessAddress[3] = textChanged;
924 } else { 926 } else {
925 slHomeAddress[3] = textChanged; 927 slHomeAddress[3] = textChanged;
926 } 928 }
927} 929}
928 930
929void ContactEditor::slotStateChange( const QString &textChanged ) { 931void ContactEditor::slotStateChange( const QString &textChanged ) {
930 932
931 933
932 if ( cmbAddress->currentItem() == 0 ) { 934 if ( cmbAddress->currentItem() == 0 ) {
933 slBusinessAddress[4] = textChanged; 935 slBusinessAddress[4] = textChanged;
934 } else { 936 } else {
935 slHomeAddress[4] = textChanged; 937 slHomeAddress[4] = textChanged;
936 } 938 }
937} 939}
938 940
939void ContactEditor::slotZipChange( const QString &textChanged ) { 941void ContactEditor::slotZipChange( const QString &textChanged ) {
940 942
941 if ( cmbAddress->currentItem() == 0 ) { 943 if ( cmbAddress->currentItem() == 0 ) {
942 slBusinessAddress[5] = textChanged; 944 slBusinessAddress[5] = textChanged;
943 } else { 945 } else {
944 slHomeAddress[5] = textChanged; 946 slHomeAddress[5] = textChanged;
945 } 947 }
946} 948}
947 949
948void ContactEditor::slotCountryChange( const QString &textChanged ) { 950void ContactEditor::slotCountryChange( const QString &textChanged ) {
949 951
950 if ( cmbAddress->currentItem() == 0 ) { 952 if ( cmbAddress->currentItem() == 0 ) {
951 slBusinessAddress[6] = textChanged; 953 slBusinessAddress[6] = textChanged;
952 } else { 954 } else {
953 slHomeAddress[6] = textChanged; 955 slHomeAddress[6] = textChanged;
954 } 956 }
955} 957}
956 958
957 959
958void ContactEditor::slotCmbChooser1Change( int index ) { 960void ContactEditor::slotCmbChooser1Change( int index ) {
959 qWarning("ContactEditor::slotCmbChooser1Change( %d )", index); 961 qWarning("ContactEditor::slotCmbChooser1Change( %d )", index);
960 if ( !cmbChooserChange( cmbChooserField1->currentItem(), m_widgetStack1, 1) ){ 962 if ( !cmbChooserChange( cmbChooserField1->currentItem(), m_widgetStack1, 1) ){
961 963
962 txtChooserField1->setText( slChooserValues[index] ); 964 txtChooserField1->setText( slChooserValues[index] );
963 txtChooserField1->setFocus(); 965 txtChooserField1->setFocus();
964 966
965 } 967 }
966 968
967} 969}
968 970
969void ContactEditor::slotCmbChooser2Change( int index ) { 971void ContactEditor::slotCmbChooser2Change( int index ) {
970 qWarning("ContactEditor::slotCmbChooser2Change( %d )", index); 972 qWarning("ContactEditor::slotCmbChooser2Change( %d )", index);
971 973
972 if ( !cmbChooserChange( cmbChooserField2->currentItem(), m_widgetStack2, 2) ){ 974 if ( !cmbChooserChange( cmbChooserField2->currentItem(), m_widgetStack2, 2) ){
973 975
974 txtChooserField2->setText( slChooserValues[index] ); 976 txtChooserField2->setText( slChooserValues[index] );
975 txtChooserField2->setFocus(); 977 txtChooserField2->setFocus();
976 978
977 } 979 }
978} 980}
979 981
980void ContactEditor::slotCmbChooser3Change( int index ) { 982void ContactEditor::slotCmbChooser3Change( int index ) {
981 qWarning("ContactEditor::slotCmbChooser3Change( %d )", index); 983 qWarning("ContactEditor::slotCmbChooser3Change( %d )", index);
982 984
983 if ( !cmbChooserChange( cmbChooserField3->currentItem(), m_widgetStack3, 3) ){ 985 if ( !cmbChooserChange( cmbChooserField3->currentItem(), m_widgetStack3, 3) ){
984 986
985 txtChooserField3->setText( slChooserValues[index] ); 987 txtChooserField3->setText( slChooserValues[index] );
986 txtChooserField3->setFocus(); 988 txtChooserField3->setFocus();
987 989
988 } 990 }
989} 991}
990 992
991void ContactEditor::slotCmbChooser4Change( int index ) { 993void ContactEditor::slotCmbChooser4Change( int index ) {
992 qWarning("ContactEditor::slotCmbChooser4Change( %d )", index); 994 qWarning("ContactEditor::slotCmbChooser4Change( %d )", index);
993 995
994 if ( !cmbChooserChange( cmbChooserField4->currentItem(), m_widgetStack4, 4) ){ 996 if ( !cmbChooserChange( cmbChooserField4->currentItem(), m_widgetStack4, 4) ){
995 997
996 txtChooserField4->setText( slChooserValues[index] ); 998 txtChooserField4->setText( slChooserValues[index] );
997 txtChooserField4->setFocus(); 999 txtChooserField4->setFocus();
998 1000
999 } 1001 }
1000} 1002}
1001 1003
1002void ContactEditor::slotAddressTypeChange( int index ) { 1004void ContactEditor::slotAddressTypeChange( int index ) {
1003 1005
1004 1006
1005 if ( !initializing ) 1007 if ( !initializing )
1006 contactfields.setFieldOrder( 4, index ); 1008 contactfields.setFieldOrder( 4, index );
1007 1009
1008 1010
1009 if ( index == 0 ) { 1011 if ( index == 0 ) {
1010 1012
1011 txtAddress->setText( slBusinessAddress[0] ); 1013 txtAddress->setText( slBusinessAddress[0] );
1012 //txtAddress2->setText( (*slBusinessAddress)[1] ); 1014 //txtAddress2->setText( (*slBusinessAddress)[1] );
1013 //txtPOBox->setText( (*slBusinessAddress)[2] ); 1015 //txtPOBox->setText( (*slBusinessAddress)[2] );
1014 txtCity->setText( slBusinessAddress[3] ); 1016 txtCity->setText( slBusinessAddress[3] );
1015 txtState->setText( slBusinessAddress[4] ); 1017 txtState->setText( slBusinessAddress[4] );
1016 txtZip->setText( slBusinessAddress[5] ); 1018 txtZip->setText( slBusinessAddress[5] );
1017 QLineEdit *txtTmp = cmbCountry->lineEdit(); 1019 QLineEdit *txtTmp = cmbCountry->lineEdit();
1018 txtTmp->setText( slBusinessAddress[6] ); 1020 txtTmp->setText( slBusinessAddress[6] );
1019 1021
1020 } else { 1022 } else {
1021 1023
1022 txtAddress->setText( slHomeAddress[0] ); 1024 txtAddress->setText( slHomeAddress[0] );
1023 //txtAddress2->setText( (*slHomeAddress)[1] ); 1025 //txtAddress2->setText( (*slHomeAddress)[1] );
1024 //txtPOBox->setText( (*slHomeAddress)[2] ); 1026 //txtPOBox->setText( (*slHomeAddress)[2] );
1025 txtCity->setText( slHomeAddress[3] ); 1027 txtCity->setText( slHomeAddress[3] );
1026 txtState->setText( slHomeAddress[4] ); 1028 txtState->setText( slHomeAddress[4] );
1027 txtZip->setText( slHomeAddress[5] ); 1029 txtZip->setText( slHomeAddress[5] );
1028 QLineEdit *txtTmp = cmbCountry->lineEdit(); 1030 QLineEdit *txtTmp = cmbCountry->lineEdit();
1029 txtTmp->setText( slHomeAddress[6] ); 1031 txtTmp->setText( slHomeAddress[6] );
1030 1032
1031 } 1033 }
1032 1034
1033} 1035}
1034 1036
1035void ContactEditor::slotFullNameChange( const QString &textChanged ) { 1037void ContactEditor::slotFullNameChange( const QString &textChanged ) {
1036 1038
1037 qWarning( "ContactEditor::slotFullNameChange( %s )", textChanged.latin1() ); 1039 qWarning( "ContactEditor::slotFullNameChange( %s )", textChanged.latin1() );
1038 1040
1039 int index = cmbFileAs->currentItem(); 1041 int index = cmbFileAs->currentItem();
1040 1042
1041 cmbFileAs->clear(); 1043 cmbFileAs->clear();
1042 1044
1043 cmbFileAs->insertItem( parseName( textChanged, NAME_LF ) ); 1045 cmbFileAs->insertItem( parseName( textChanged, NAME_LF ) );
1044 cmbFileAs->insertItem( parseName( textChanged, NAME_LFM ) ); 1046 cmbFileAs->insertItem( parseName( textChanged, NAME_LFM ) );
1045 cmbFileAs->insertItem( parseName( textChanged, NAME_FL ) ); 1047 cmbFileAs->insertItem( parseName( textChanged, NAME_FL ) );
1046 cmbFileAs->insertItem( parseName( textChanged, NAME_FML ) ); 1048 cmbFileAs->insertItem( parseName( textChanged, NAME_FML ) );
1047 if ( ! txtSuffix->text().isEmpty() ) 1049 if ( ! txtSuffix->text().isEmpty() )
1048 cmbFileAs->insertItem( parseName( textChanged, NAME_FML ) + " " + txtSuffix->text() ); 1050 cmbFileAs->insertItem( parseName( textChanged, NAME_FML ) + " " + txtSuffix->text() );
1049 1051
1050 cmbFileAs->setCurrentItem( index ); 1052 cmbFileAs->setCurrentItem( index );
1051 1053
1052 1054
1053} 1055}
1054 1056
1055void ContactEditor::slotSuffixChange( const QString& ) { 1057void ContactEditor::slotSuffixChange( const QString& ) {
1056 // Just want to update the FileAs combo if the suffix was changed.. 1058 // Just want to update the FileAs combo if the suffix was changed..
1057 slotFullNameChange( txtFullName->text() ); 1059 slotFullNameChange( txtFullName->text() );
1058} 1060}
1059 1061
1062void ContactEditor::slotOrganizationChange( const QString &textChanged ){
1063 qWarning( "ContactEditor::slotOrganizationChange( %s )", textChanged.latin1() );
1064 // Special handling for storing Companies:
1065 // If no Fullname is given, we store the Company-Name as lastname
1066 // to handle it like a person..
1067 if ( txtFullName->text() == txtOrganization->text().left( txtFullName->text().length() ) )
1068 txtFullName->setText( textChanged );
1069
1070}
1071
1060void ContactEditor::accept() { 1072void ContactEditor::accept() {
1061 1073
1062 if ( isEmpty() ) { 1074 if ( isEmpty() ) {
1063 cleanupFields(); 1075 cleanupFields();
1064 reject(); 1076 reject();
1065 } else { 1077 } else {
1066 saveEntry(); 1078 saveEntry();
1067 cleanupFields(); 1079 cleanupFields();
1068 QDialog::accept(); 1080 QDialog::accept();
1069 } 1081 }
1070 1082
1071} 1083}
1072 1084
1073void ContactEditor::slotNote() { 1085void ContactEditor::slotNote() {
1074 1086
1075 dlgNote->showMaximized(); 1087 dlgNote->showMaximized();
1076 if ( !dlgNote->exec() ) { 1088 if ( !dlgNote->exec() ) {
1077 txtNote->setText( ent.notes() ); 1089 txtNote->setText( ent.notes() );
1078 } 1090 }
1079} 1091}
1080 1092
1081void ContactEditor::slotName() { 1093void ContactEditor::slotName() {
1082 1094
1083 QString tmpName; 1095 QString tmpName;
1084 1096
1085 txtFirstName->setText( parseName(txtFullName->text(), NAME_F) ); 1097 txtFirstName->setText( parseName(txtFullName->text(), NAME_F) );
1086 txtMiddleName->setText( parseName(txtFullName->text(), NAME_M) ); 1098 txtMiddleName->setText( parseName(txtFullName->text(), NAME_M) );
1087 txtLastName->setText( parseName(txtFullName->text(), NAME_L) ); 1099 txtLastName->setText( parseName(txtFullName->text(), NAME_L) );
1088 // txtSuffix->setText( parseName(txtFullName->text(), NAME_S) ); 1100 // txtSuffix->setText( parseName(txtFullName->text(), NAME_S) );
1089 1101
1090 dlgName->showMaximized(); 1102 dlgName->showMaximized();
1091 if ( dlgName->exec() ) { 1103 if ( dlgName->exec() ) {
1092 if ( txtLastName->text().contains( ' ', TRUE ) ) 1104 if ( txtLastName->text().contains( ' ', TRUE ) )
1093 tmpName = txtLastName->text() + ", " + txtFirstName->text() + " " + txtMiddleName->text(); 1105 tmpName = txtLastName->text() + ", " + txtFirstName->text() + " " + txtMiddleName->text();
1094 else 1106 else
1095 tmpName = txtFirstName->text() + " " + txtMiddleName->text() + " " + txtLastName->text(); 1107 tmpName = txtFirstName->text() + " " + txtMiddleName->text() + " " + txtLastName->text();
1096 1108
1097 txtFullName->setText( tmpName.simplifyWhiteSpace() ); 1109 txtFullName->setText( tmpName.simplifyWhiteSpace() );
1098 slotFullNameChange( txtFullName->text() ); 1110 slotFullNameChange( txtFullName->text() );
1099 } 1111 }
1100 1112
1101} 1113}
1102 1114
1103void ContactEditor::setNameFocus() { 1115void ContactEditor::setNameFocus() {
1104 1116
1105 txtFullName->setFocus(); 1117 txtFullName->setFocus();
1106 1118
1107} 1119}
1108 1120
1109bool ContactEditor::isEmpty() { 1121bool ContactEditor::isEmpty() {
1110 // Test and see if the record should be saved. 1122 // Test and see if the record should be saved.
1111 // More strict than the original qtopia, needs name or fileas to save 1123 // More strict than the original qtopia, needs name or fileas to save
1112 1124
1113 QString t = txtFullName->text(); 1125 QString t = txtFullName->text();
1114 if ( !t.isEmpty() && containsAlphaNum( t ) ) 1126 if ( !t.isEmpty() && containsAlphaNum( t ) )
1115 return false; 1127 return false;
1116 1128
1117 t = cmbFileAs->currentText(); 1129 t = cmbFileAs->currentText();
1118 if ( !t.isEmpty() && containsAlphaNum( t ) ) 1130 if ( !t.isEmpty() && containsAlphaNum( t ) )
1119 return false; 1131 return false;
1120 1132
1121 return true; 1133 return true;
1122 1134
1123} 1135}
1124 1136
1125QString ContactEditor::parseName( const QString fullName, int type ) { 1137QString ContactEditor::parseName( const QString fullName, int type ) {
1126 1138
1127 QString simplifiedName( fullName.simplifyWhiteSpace() ); 1139 QString simplifiedName( fullName.simplifyWhiteSpace() );
1128 QString strFirstName; 1140 QString strFirstName;
1129 QString strMiddleName; 1141 QString strMiddleName;
1130 QString strLastName; 1142 QString strLastName;
1131 QString strTitle; 1143 QString strTitle;
1132 int commapos; 1144 int commapos;
1133 bool haveLastName = false; 1145 bool haveLastName = false;
1134 1146
1135 qWarning("Fullname: %s", simplifiedName.latin1()); 1147 qWarning("Fullname: %s", simplifiedName.latin1());
1136 1148
1137 commapos = simplifiedName.find( ',', 0, TRUE); 1149 commapos = simplifiedName.find( ',', 0, TRUE);
1138 if ( commapos >= 0 ) { 1150 if ( commapos >= 0 ) {
1139 qWarning(" Commapos: %d", commapos ); 1151 qWarning(" Commapos: %d", commapos );
1140 1152
1141 // A comma (",") separates the lastname from one or 1153 // A comma (",") separates the lastname from one or
1142 // many first names. Thus, remove the lastname from the 1154 // many first names. Thus, remove the lastname from the
1143 // String and parse the firstnames. 1155 // String and parse the firstnames.
1144 1156
1145 strLastName = simplifiedName.left( commapos ); 1157 strLastName = simplifiedName.left( commapos );
1146 simplifiedName= simplifiedName.mid( commapos + 1 ); 1158 simplifiedName= simplifiedName.mid( commapos + 1 );
1147 haveLastName = true; 1159 haveLastName = true;
1148 qWarning("Fullname without ',': %s", simplifiedName.latin1()); 1160 qWarning("Fullname without ',': %s", simplifiedName.latin1());
1149 1161
1150 // If we have any lastname, we should now split all first names. 1162 // If we have any lastname, we should now split all first names.
1151 // The first one will be the used as first, the rest as "middle names" 1163 // The first one will be the used as first, the rest as "middle names"
1152 1164
1153 QStringList allFirstNames = QStringList::split(" ", simplifiedName); 1165 QStringList allFirstNames = QStringList::split(" ", simplifiedName);
1154 QStringList::Iterator it = allFirstNames.begin(); 1166 QStringList::Iterator it = allFirstNames.begin();
1155 strFirstName = *it++; 1167 strFirstName = *it++;
1156 QStringList allSecondNames; 1168 QStringList allSecondNames;
1157 for ( ; it != allFirstNames.end(); ++it ) 1169 for ( ; it != allFirstNames.end(); ++it )
1158 allSecondNames.append( *it ); 1170 allSecondNames.append( *it );
1159 1171
1160 strMiddleName = allSecondNames.join(" "); 1172 strMiddleName = allSecondNames.join(" ");
1161 1173
1162 } else { 1174 } else {
1163 1175
1164 // No comma separator used: We use the first word as firstname, the 1176 // No comma separator used: We use the first word as firstname, the
1165 // last as second/lastname and everything in the middle as middlename 1177 // last as second/lastname and everything in the middle as middlename
1166 1178
1167 QStringList allNames = QStringList::split(" ", simplifiedName); 1179 QStringList allNames = QStringList::split(" ", simplifiedName);
1168 QStringList::Iterator it = allNames.begin(); 1180 QStringList::Iterator it = allNames.begin();
1169 strFirstName = *it++; 1181 strFirstName = *it++;
1170 QStringList allSecondNames; 1182 QStringList allSecondNames;
1171 for ( ; it != --allNames.end(); ++it ) 1183 for ( ; it != --allNames.end(); ++it )
1172 allSecondNames.append( *it ); 1184 allSecondNames.append( *it );
1173 1185
1174 strMiddleName = allSecondNames.join(" "); 1186 strMiddleName = allSecondNames.join(" ");
1175 strLastName = *(--allNames.end()); 1187 strLastName = *(--allNames.end());
1176 1188
1177 } 1189 }
1178 1190
1179 if ( strFirstName == strLastName ) 1191 if ( strFirstName == strLastName )
1180 strFirstName = ""; 1192 strFirstName = "";
1181 1193
1182 qWarning(" strFirstName: %s", strFirstName.latin1()); 1194 qWarning(" strFirstName: %s", strFirstName.latin1());
1183 qWarning(" strMiddleName: %s", strMiddleName.latin1()); 1195 qWarning(" strMiddleName: %s", strMiddleName.latin1());
1184 qWarning(" strLastName: %s", strLastName.latin1()); 1196 qWarning(" strLastName: %s", strLastName.latin1());
1185 qWarning(" strTitle: %s", strTitle.latin1()); 1197 qWarning(" strTitle: %s", strTitle.latin1());
1186 1198
1187 switch (type) { 1199 switch (type) {
1188 case NAME_FL: 1200 case NAME_FL:
1189 return strFirstName + " " + strLastName; 1201 return strFirstName + " " + strLastName;
1190 1202
1191 case NAME_LF: 1203 case NAME_LF:
1192 return strLastName + ", " + strFirstName; 1204 return strLastName + ", " + strFirstName;
1193 1205
1194 case NAME_LFM: 1206 case NAME_LFM:
1195 return strLastName + ", " + strFirstName + " " + strMiddleName; 1207 return strLastName + ", " + strFirstName + " " + strMiddleName;
1196 1208
1197 case NAME_FML: 1209 case NAME_FML:
1198 return strFirstName + " " + strMiddleName + " " + strLastName ; 1210 return strFirstName + " " + strMiddleName + " " + strLastName ;
1199 1211
1200 case NAME_F: 1212 case NAME_F:
1201 return strFirstName; 1213 return strFirstName;
1202 1214
1203 case NAME_M: 1215 case NAME_M:
1204 return strMiddleName; 1216 return strMiddleName;
1205 1217
1206 case NAME_L: 1218 case NAME_L:
1207 return strLastName; 1219 return strLastName;
1208 1220
1209 case NAME_S: 1221 case NAME_S:
1210 return txtSuffix->text(); 1222 return txtSuffix->text();
1211 1223
1212 } 1224 }
1213 return QString::null; 1225 return QString::null;
1214} 1226}
1215 1227
1216void ContactEditor::cleanupFields() { 1228void ContactEditor::cleanupFields() {
1217 QStringList::Iterator it = slChooserValues.begin(); 1229 QStringList::Iterator it = slChooserValues.begin();
1218 1230
1219 for ( int i = 0; it != slChooserValues.end(); i++, ++it ) { 1231 for ( int i = 0; it != slChooserValues.end(); i++, ++it ) {
1220 (*it) = ""; 1232 (*it) = "";
1221 } 1233 }
1222 1234
1223 for ( int i = 0; i < 7; i++ ) { 1235 for ( int i = 0; i < 7; i++ ) {
1224 slHomeAddress[i] = ""; 1236 slHomeAddress[i] = "";
1225 slBusinessAddress[i] = ""; 1237 slBusinessAddress[i] = "";
1226 } 1238 }
1227 1239
1228 QListIterator<QLineEdit> itLV( listValue ); 1240 QListIterator<QLineEdit> itLV( listValue );
1229 for ( ; itLV.current(); ++itLV ) { 1241 for ( ; itLV.current(); ++itLV ) {
1230 (*itLV)->setText( "" ); 1242 (*itLV)->setText( "" );
1231 } 1243 }
1232 1244
1233 txtFirstName->setText(""); 1245 txtFirstName->setText("");
1234 txtMiddleName->setText(""); 1246 txtMiddleName->setText("");
1235 txtLastName->setText(""); 1247 txtLastName->setText("");
1236 txtSuffix->setText(""); 1248 txtSuffix->setText("");
1237 txtNote->setText(""); 1249 txtNote->setText("");
1238 txtFullName->setText(""); 1250 txtFullName->setText("");
1239 txtJobTitle->setText(""); 1251 txtJobTitle->setText("");
1240 txtOrganization->setText(""); 1252 txtOrganization->setText("");
1241 txtChooserField1->setText(""); 1253 txtChooserField1->setText("");
1242 txtChooserField2->setText(""); 1254 txtChooserField2->setText("");
1243 txtChooserField3->setText(""); 1255 txtChooserField3->setText("");
1244 txtAddress->setText(""); 1256 txtAddress->setText("");
1245 txtCity->setText(""); 1257 txtCity->setText("");
1246 txtState->setText(""); 1258 txtState->setText("");
1247 txtZip->setText(""); 1259 txtZip->setText("");
1248 QLineEdit *txtTmp = cmbCountry->lineEdit(); 1260 QLineEdit *txtTmp = cmbCountry->lineEdit();
1249 txtTmp->setText(""); 1261 txtTmp->setText("");
1250 txtTmp = cmbFileAs->lineEdit(); 1262 txtTmp = cmbFileAs->lineEdit();
1251 txtTmp->setText(""); 1263 txtTmp->setText("");
1252 1264
1253} 1265}
1254 1266
1255void ContactEditor::setEntry( const OContact &entry ) { 1267void ContactEditor::setEntry( const OContact &entry ) {
1256 1268
1257 initializing = true; 1269 initializing = true;
1258 1270
1259 // Cleanup and activate the general Page .. 1271 // Cleanup and activate the general Page ..
1260 cleanupFields(); 1272 cleanupFields();
1261 tabMain->setCurrentPage( 0 ); 1273 tabMain->setCurrentPage( 0 );
1262 1274
1263 ent = entry; 1275 ent = entry;
1264 1276
1265 emails = QStringList(ent.emailList()); 1277 emails = QStringList(ent.emailList());
1266 defaultEmail = ent.defaultEmail(); 1278 defaultEmail = ent.defaultEmail();
1267 if (defaultEmail.isEmpty()) defaultEmail = emails[0]; 1279 if (defaultEmail.isEmpty()) defaultEmail = emails[0];
1268 qDebug("default email=%s",defaultEmail.latin1()); 1280 qDebug("default email=%s",defaultEmail.latin1());
1269 1281
1270 txtFirstName->setText( ent.firstName() ); 1282 txtFirstName->setText( ent.firstName() );
1271 txtMiddleName->setText( ent.middleName() ); 1283 txtMiddleName->setText( ent.middleName() );
1272 txtLastName->setText( ent.lastName() ); 1284 txtLastName->setText( ent.lastName() );
1273 txtSuffix->setText( ent.suffix() ); 1285 txtSuffix->setText( ent.suffix() );
1274 1286
1275 // QString *tmpString = new QString; 1287 // QString *tmpString = new QString;
1276 // *tmpString = ent.firstName() + " " + ent.middleName() + 1288 // *tmpString = ent.firstName() + " " + ent.middleName() +
1277 // + " " + ent.lastName() + " " + ent.suffix(); 1289 // + " " + ent.lastName() + " " + ent.suffix();
1278 //txtFullName->setText( tmpString->simplifyWhiteSpace() ); 1290 //txtFullName->setText( tmpString->simplifyWhiteSpace() );
1279 1291
1280 if ( !ent.isEmpty() ){ 1292 if ( !ent.isEmpty() ){
1281 // Lastnames with multiple words need to be protected by a comma ! 1293 // Lastnames with multiple words need to be protected by a comma !
1282 if ( ent.lastName().contains( ' ', TRUE ) ) 1294 if ( ent.lastName().contains( ' ', TRUE ) )
1283 txtFullName->setText( ent.lastName() + ", " + ent.firstName() + " " + ent.middleName() ); 1295 txtFullName->setText( ent.lastName() + ", " + ent.firstName() + " " + ent.middleName() );
1284 else 1296 else
1285 txtFullName->setText( ent.firstName() + " " + ent.middleName() + " " + ent.lastName() ); 1297 txtFullName->setText( ent.firstName() + " " + ent.middleName() + " " + ent.lastName() );
1286 } 1298 }
1287 1299
1288 cmbFileAs->setEditText( ent.fileAs() ); 1300 cmbFileAs->setEditText( ent.fileAs() );
1289 1301
1290 //if (hasTitle) 1302 //if (hasTitle)
1291 txtJobTitle->setText( ent.jobTitle() ); 1303 txtJobTitle->setText( ent.jobTitle() );
1292 1304
1293 //if (hasCompany) 1305 //if (hasCompany)
1294 txtOrganization->setText( ent.company() ); 1306 txtOrganization->setText( ent.company() );
1295 1307
1296 //if (hasNotes) 1308 //if (hasNotes)
1297 txtNote->setText( ent.notes() ); 1309 txtNote->setText( ent.notes() );
1298 1310
1299 //if (hasStreet) { 1311 //if (hasStreet) {
1300 slHomeAddress[0] = ent.homeStreet(); 1312 slHomeAddress[0] = ent.homeStreet();
1301 slBusinessAddress[0] = ent.businessStreet(); 1313 slBusinessAddress[0] = ent.businessStreet();
1302 //} 1314 //}
1303 1315
1304 //if (hasCity) { 1316 //if (hasCity) {
1305 slHomeAddress[3] = ent.homeCity(); 1317 slHomeAddress[3] = ent.homeCity();
1306 slBusinessAddress[3] = ent.businessCity(); 1318 slBusinessAddress[3] = ent.businessCity();
1307 //} 1319 //}
1308 1320
1309 //if (hasState) { 1321 //if (hasState) {
1310 slHomeAddress[4] = ent.homeState(); 1322 slHomeAddress[4] = ent.homeState();
1311 slBusinessAddress[4] = ent.businessState(); 1323 slBusinessAddress[4] = ent.businessState();
1312 //} 1324 //}
1313 1325
1314 //if (hasZip) { 1326 //if (hasZip) {
1315 slHomeAddress[5] = ent.homeZip(); 1327 slHomeAddress[5] = ent.homeZip();
diff --git a/core/pim/addressbook/contacteditor.h b/core/pim/addressbook/contacteditor.h
index c6fa48f..e7432ee 100644
--- a/core/pim/addressbook/contacteditor.h
+++ b/core/pim/addressbook/contacteditor.h
@@ -1,191 +1,192 @@
1/* 1/*
2 * Copyright (c) 2002 Michael R. Crawford <mike@tuxnami.org> 2 * Copyright (c) 2002 Michael R. Crawford <mike@tuxnami.org>
3 * 3 *
4 * This file is an add-on for the OPIE Palmtop Environment 4 * This file is an add-on for the OPIE 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 pacakaging 8 * Foundation and appearing in the file LICENSE.GPL included in the pacakaging
9 * of this file. 9 * 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 * 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> 26#include <qpe/datebookmonth.h>
27 27
28#include <qdialog.h> 28#include <qdialog.h>
29#include <qlist.h> 29#include <qlist.h>
30#include <qmap.h> 30#include <qmap.h>
31#include <qstringlist.h> 31#include <qstringlist.h>
32#include <qwidgetstack.h> 32#include <qwidgetstack.h>
33 33
34#include "ocontactfields.h" 34#include "ocontactfields.h"
35 35
36const int NAME_LF = 0; 36const int NAME_LF = 0;
37const int NAME_LFM = 1; 37const int NAME_LFM = 1;
38const int NAME_FL = 2; 38const int NAME_FL = 2;
39const int NAME_FML = 3; 39const int NAME_FML = 3;
40 40
41const int NAME_F = 4; 41const int NAME_F = 4;
42const int NAME_M = 5; 42const int NAME_M = 5;
43const int NAME_L = 6; 43const int NAME_L = 6;
44const int NAME_S = 7; 44const int NAME_S = 7;
45 45
46 46
47class QScrollView; 47class QScrollView;
48class QTabWidget; 48class QTabWidget;
49class QMultiLineEdit; 49class QMultiLineEdit;
50class QLineEdit; 50class QLineEdit;
51class QComboBox; 51class QComboBox;
52class QPushButton; 52class QPushButton;
53class CategorySelect; 53class CategorySelect;
54class QLabel; 54class QLabel;
55 55
56class ContactEditor : public QDialog { 56class ContactEditor : public QDialog {
57 Q_OBJECT 57 Q_OBJECT
58 58
59 public: 59 public:
60 ContactEditor(const OContact &entry, 60 ContactEditor(const OContact &entry,
61 QWidget *parent = 0, 61 QWidget *parent = 0,
62 const char *name = 0, 62 const char *name = 0,
63 WFlags fl = 0 ); 63 WFlags fl = 0 );
64 ~ContactEditor(); 64 ~ContactEditor();
65 void setNameFocus(); 65 void setNameFocus();
66 void setPersonalView( bool personal = true ); 66 void setPersonalView( bool personal = true );
67 OContact entry() const { return ent; } 67 OContact entry() const { return ent; }
68 68
69 public slots: 69 public slots:
70 void slotNote(); 70 void slotNote();
71 void slotName(); 71 void slotName();
72 void setEntry(const OContact &entry); 72 void setEntry(const OContact &entry);
73 73
74 protected slots: 74 protected slots:
75 void accept(); 75 void accept();
76 76
77 private: 77 private:
78 void init(); 78 void init();
79 void saveEntry(); 79 void saveEntry();
80 bool isEmpty(); 80 bool isEmpty();
81 void cleanupFields(); 81 void cleanupFields();
82 void updateDatePicker(); 82 void updateDatePicker();
83 QString parseName( QString fullName, int type ); 83 QString parseName( QString fullName, int type );
84 void chooserError( int index ); 84 void chooserError( int index );
85 private slots: 85 private slots:
86 void slotChooser1Change( const QString &textChanged ); 86 void slotChooser1Change( const QString &textChanged );
87 void slotChooser2Change( const QString &textChanged ); 87 void slotChooser2Change( const QString &textChanged );
88 void slotChooser3Change( const QString &textChanged ); 88 void slotChooser3Change( const QString &textChanged );
89 void slotChooser4Change( const QString &textChanged ); 89 void slotChooser4Change( const QString &textChanged );
90 void slotCmbChooser1Change( int index ); 90 void slotCmbChooser1Change( int index );
91 void slotCmbChooser2Change( int index ); 91 void slotCmbChooser2Change( int index );
92 void slotCmbChooser3Change( int index ); 92 void slotCmbChooser3Change( int index );
93 void slotCmbChooser4Change( int index ); 93 void slotCmbChooser4Change( int index );
94 void slotAddressTypeChange( int index ); 94 void slotAddressTypeChange( int index );
95 void slotAddressChange( const QString &textChanged ); 95 void slotAddressChange( const QString &textChanged );
96 void slotAddress2Change( const QString &textChanged ); 96 void slotAddress2Change( const QString &textChanged );
97 void slotPOBoxChange( const QString &textChanged ); 97 void slotPOBoxChange( const QString &textChanged );
98 void slotCityChange( const QString &textChanged ); 98 void slotCityChange( const QString &textChanged );
99 void slotStateChange( const QString &textChanged ); 99 void slotStateChange( const QString &textChanged );
100 void slotZipChange( const QString &textChanged ); 100 void slotZipChange( const QString &textChanged );
101 void slotCountryChange( const QString &textChanged ); 101 void slotCountryChange( const QString &textChanged );
102 void slotFullNameChange( const QString &textChanged ); 102 void slotFullNameChange( const QString &textChanged );
103 void slotSuffixChange( const QString &textChanged ); 103 void slotSuffixChange( const QString &textChanged );
104 void slotOrganizationChange( const QString &textChanged );
104 void slotAnniversaryDateChanged( int year, int month, int day); 105 void slotAnniversaryDateChanged( int year, int month, int day);
105 void slotBirthdayDateChanged( int year, int month, int day); 106 void slotBirthdayDateChanged( int year, int month, int day);
106 void slotRemoveBirthday(); 107 void slotRemoveBirthday();
107 void slotRemoveAnniversary(); 108 void slotRemoveAnniversary();
108 void defaultEmailChanged(int); 109 void defaultEmailChanged(int);
109 110
110 private: 111 private:
111 enum StackWidgets { TextField = 1, Combo }; 112 enum StackWidgets { TextField = 1, Combo };
112 int defaultEmailChooserPosition; 113 int defaultEmailChooserPosition;
113 void populateDefaultEmailCmb(); 114 void populateDefaultEmailCmb();
114 void chooserChange( const QString&, int , QLineEdit*, int ); 115 void chooserChange( const QString&, int , QLineEdit*, int );
115 bool cmbChooserChange( int , QWidgetStack*, int ); 116 bool cmbChooserChange( int , QWidgetStack*, int );
116 OContactFields contactfields; 117 OContactFields contactfields;
117 118
118 OContact ent; 119 OContact ent;
119 120
120 QDialog *dlgNote; 121 QDialog *dlgNote;
121 QDialog *dlgName; 122 QDialog *dlgName;
122 123
123 QList<QLineEdit> listValue; 124 QList<QLineEdit> listValue;
124 QList<QLabel> listName; 125 QList<QLabel> listName;
125 126
126 QStringList slDynamicEntries; 127 QStringList slDynamicEntries;
127 QStringList trlDynamicEntries; 128 QStringList trlDynamicEntries;
128 129
129 bool m_personalView; 130 bool m_personalView;
130 131
131 QStringList slHomeAddress; 132 QStringList slHomeAddress;
132 QStringList slBusinessAddress; 133 QStringList slBusinessAddress;
133 QStringList slChooserNames; 134 QStringList slChooserNames;
134 QStringList slChooserValues; 135 QStringList slChooserValues;
135 QStringList emails; 136 QStringList emails;
136 QString defaultEmail; 137 QString defaultEmail;
137 138
138 QMultiLineEdit *txtNote; 139 QMultiLineEdit *txtNote;
139 QLabel *lblNote; 140 QLabel *lblNote;
140 141
141 //QLineEdit *txtTitle; 142 //QLineEdit *txtTitle;
142 QLineEdit *txtFirstName; 143 QLineEdit *txtFirstName;
143 QLineEdit *txtMiddleName; 144 QLineEdit *txtMiddleName;
144 QLineEdit *txtLastName; 145 QLineEdit *txtLastName;
145 QLineEdit *txtSuffix; 146 QLineEdit *txtSuffix;
146 147
147 QTabWidget *tabMain; 148 QTabWidget *tabMain;
148 QScrollView *svGeneral; 149 QScrollView *svGeneral;
149 QPushButton *btnFullName; 150 QPushButton *btnFullName;
150 QPushButton *btnNote; 151 QPushButton *btnNote;
151 QLineEdit *txtFullName; 152 QLineEdit *txtFullName;
152 QLineEdit *txtJobTitle; 153 QLineEdit *txtJobTitle;
153 QLineEdit *txtOrganization; 154 QLineEdit *txtOrganization;
154 QLineEdit *txtChooserField1; 155 QLineEdit *txtChooserField1;
155 QLineEdit *txtChooserField2; 156 QLineEdit *txtChooserField2;
156 QLineEdit *txtChooserField3; 157 QLineEdit *txtChooserField3;
157 QLineEdit *txtChooserField4; 158 QLineEdit *txtChooserField4;
158 QWidgetStack* m_widgetStack1; 159 QWidgetStack* m_widgetStack1;
159 QWidgetStack* m_widgetStack2; 160 QWidgetStack* m_widgetStack2;
160 QWidgetStack* m_widgetStack3; 161 QWidgetStack* m_widgetStack3;
161 QWidgetStack* m_widgetStack4; 162 QWidgetStack* m_widgetStack4;
162 QComboBox *cmbChooserField1; 163 QComboBox *cmbChooserField1;
163 QComboBox *cmbChooserField2; 164 QComboBox *cmbChooserField2;
164 QComboBox *cmbChooserField3; 165 QComboBox *cmbChooserField3;
165 QComboBox *cmbChooserField4; 166 QComboBox *cmbChooserField4;
166 QComboBox *cmbDefaultEmail; 167 QComboBox *cmbDefaultEmail;
167 QComboBox *cmbFileAs; 168 QComboBox *cmbFileAs;
168 CategorySelect *cmbCat; 169 CategorySelect *cmbCat;
169 QLabel *labCat; 170 QLabel *labCat;
170 171
171 QScrollView *svAddress; 172 QScrollView *svAddress;
172 QLineEdit *txtAddress; 173 QLineEdit *txtAddress;
173 //QLineEdit *txtAddress2; 174 //QLineEdit *txtAddress2;
174 //QLineEdit *txtPOBox; 175 //QLineEdit *txtPOBox;
175 QLineEdit *txtCity; 176 QLineEdit *txtCity;
176 QLineEdit *txtState; 177 QLineEdit *txtState;
177 QLineEdit *txtZip; 178 QLineEdit *txtZip;
178 QComboBox *cmbAddress; 179 QComboBox *cmbAddress;
179 QComboBox *cmbCountry; 180 QComboBox *cmbCountry;
180 181
181 QScrollView *svDetails; 182 QScrollView *svDetails;
182 QComboBox *cmbGender; 183 QComboBox *cmbGender;
183 DateBookMonth* birthdayPicker; 184 DateBookMonth* birthdayPicker;
184 QToolButton* birthdayButton; 185 QToolButton* birthdayButton;
185 DateBookMonth* anniversaryPicker; 186 DateBookMonth* anniversaryPicker;
186 QToolButton* anniversaryButton; 187 QToolButton* anniversaryButton;
187 188
188 bool initializing; 189 bool initializing;
189 }; 190 };
190 191
191#endif 192#endif
diff --git a/core/pim/addressbook/version.h b/core/pim/addressbook/version.h
index c0465b5..4c93584 100644
--- a/core/pim/addressbook/version.h
+++ b/core/pim/addressbook/version.h
@@ -1,10 +1,10 @@
1#ifndef _VERSION_H_ 1#ifndef _VERSION_H_
2#define _VERSION_H_ 2#define _VERSION_H_
3 3
4#define MAINVERSION "0" 4#define MAINVERSION "0"
5#define SUBVERSION "9" 5#define SUBVERSION "9"
6#define PATCHVERSION "4" 6#define PATCHVERSION "5"
7 7
8#define APPNAME "OPIE_ADDRESSBOOK" 8#define APPNAME "OPIE_ADDRESSBOOK"
9 9
10#endif 10#endif