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
@@ -2,50 +2,50 @@ Stuff 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
@@ -101,12 +101,15 @@ Fixed/Ready:
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
@@ -3,24 +3,25 @@
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}
@@ -51,24 +52,29 @@ QValueList<int> AbConfig::orderList() const
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{
@@ -100,35 +106,42 @@ void AbConfig::setOrderList( const QValueList<int>& list )
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 );
@@ -150,24 +163,25 @@ void AbConfig::load()
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");
@@ -185,14 +199,15 @@ void AbConfig::save()
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
@@ -13,24 +13,26 @@
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
@@ -151,25 +153,25 @@ void AbView::load()
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}
@@ -209,39 +211,53 @@ void AbView::setShowToView( Views 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 );
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
@@ -2,46 +2,47 @@
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;
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
@@ -743,24 +743,25 @@ void AddressbookWindow::editEntry( EntryMode entryMode )
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}
@@ -1002,25 +1003,25 @@ void AddressbookWindow::slotViewSwitched( int view )
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
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
@@ -296,25 +296,25 @@
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>
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
@@ -647,28 +647,30 @@ void ContactEditor::init() {
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 &)) );
@@ -1048,24 +1050,34 @@ void ContactEditor::slotFullNameChange( const QString &textChanged ) {
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}
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
@@ -92,24 +92,25 @@ class ContactEditor : public QDialog {
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 );
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