summaryrefslogtreecommitdiff
path: root/core
authoreilers <eilers>2003-01-31 13:51:13 (UTC)
committer eilers <eilers>2003-01-31 13:51:13 (UTC)
commit6f5a127080c50eb901ac6a332ac76d9948f91bd5 (patch) (unidiff)
tree8021e7597b9bc8e527b2fddac1e03dc0959434c9 /core
parent84bd32181af3922ccba35fcaed9b404d1e4deed8 (diff)
downloadopie-6f5a127080c50eb901ac6a332ac76d9948f91bd5.zip
opie-6f5a127080c50eb901ac6a332ac76d9948f91bd5.tar.gz
opie-6f5a127080c50eb901ac6a332ac76d9948f91bd5.tar.bz2
Removed a lot of debug output.. Therefore it should speed up..
The settings of the combo-boxes in the contacteditor are now stored globally and individual for a contact ( I fear this will not survive any synchronizing! ). Thanks to tille for his assistance ! I hope there isn't any new bug in the contacteditor.. It is very ugly and hard to debug..
Diffstat (limited to 'core') (more/less context) (show whitespace changes)
-rw-r--r--core/pim/addressbook/TODO14
-rw-r--r--core/pim/addressbook/abtable.cpp40
-rw-r--r--core/pim/addressbook/abview.cpp48
-rw-r--r--core/pim/addressbook/contacteditor.cpp67
-rw-r--r--core/pim/addressbook/contacteditor.h5
-rw-r--r--core/pim/addressbook/ocontactfields.cpp95
-rw-r--r--core/pim/addressbook/ocontactfields.h34
-rw-r--r--core/pim/addressbook/version.h4
8 files changed, 243 insertions, 64 deletions
diff --git a/core/pim/addressbook/TODO b/core/pim/addressbook/TODO
index 76247c1..c600d20 100644
--- a/core/pim/addressbook/TODO
+++ b/core/pim/addressbook/TODO
@@ -7,18 +7,19 @@ Feature requests:
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 incase it's installed and there's no mobile 9- dial with dtmfdial incase 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- Plugin for Today for Birthdays and Anniversaries
14- 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 15
16Known Bugs: 16Known Bugs:
17----------- 17-----------
18 18- Email-button: A lot of problems.. :(
19- Default Email-Button: Sometimes not hiding the textfields completely
19 20
20Bugs but not in addressbook: 21Bugs but not in addressbook:
21----------------------------- 22-----------------------------
22- VCARD: If umlaut (äöüß) in address, the parser gets confused.. 23- VCARD: If umlaut (äöüß) in address, the parser gets confused..
23 24
24- Exporting and reimporting of Jobtitle was reported to fail (Could not reproduce this ! (se)) 25- Exporting and reimporting of Jobtitle was reported to fail (Could not reproduce this ! (se))
@@ -26,41 +27,38 @@ Bugs but not in addressbook:
26 27
27Urgent: 28Urgent:
28-------- 29--------
29ContactEditor: 30ContactEditor:
30- Contact-Editor is temporarely reenabled. Wait for replacement. 31- Contact-Editor is temporarely reenabled. Wait for replacement.
31- Redesign of Contacteditor 32- Redesign of Contacteditor
32- Store last settings of combo-boxes
33- Category is on the wrong position after changing to personal and back to normal 33- Category is on the wrong position after changing to personal and back to normal
34 ( Temporarily workaround: Category is never deactivated.. :S ) 34 ( Temporarily workaround: Category is never deactivated.. :S )
35 35
36- Personal and Business Web-page is not editable 36- Personal and Business Web-page is not editable
37 37
38Important: 38Important:
39---------- 39----------
40 40
41- If new contact is added (contacteditor closed): focus (table, card) to 41- If new contact is added (contacteditor closed): focus (table, card) to
42 this entry ! 42 this entry !
43- Implement a picker/combo for the default email.
44- After search (Started with Return): KeyFocus should be on Tabelle 43- After search (Started with Return): KeyFocus should be on Tabelle
45 44
46- "What's this" should be added (Deleyed after Feature Freeze) 45- "What's this" should be added (Deleyed after Feature Freeze)
47 46
48Less important: 47Less important:
49--------------- 48---------------
50- Reload if contacts were changed externally 49- Reload if contacts were changed externally
51- Overview window cleanup needed..
52- The picker (alphabetical sort widget) should be 50- The picker (alphabetical sort widget) should be
53 placed verticaly or horizontally (configurable) 51 placed verticaly or horizontally (configurable)
54- Find a smart solution for activating/deactivating the "send email" event 52- Find a smart solution for activating/deactivating the "send email" event
55 53
56Should be Fixed (not absolute sure, need further validation): 54Should be Fixed (not absolute sure, need further validation):
57------------------------------------------------------------- 55-------------------------------------------------------------
58 56
59 57
60Fixed: 58Fixed/Ready:
61------- 59-------
62- Syncing: abtable not reloaded after sync. 60- Syncing: abtable not reloaded after sync.
63- Find widget should be replaced by something like 61- Find widget should be replaced by something like
64 qpdf has. 62 qpdf has.
65- Adding a configuration dialog 63- Adding a configuration dialog
66- Picker: Activated letter schould be more visible 64- Picker: Activated letter schould be more visible
@@ -107,6 +105,10 @@ Fixed:
107- Implement Button Pics 105- Implement Button Pics
108- Add a dialog to accept and optionally edit received contacts by IRDA. 106- Add a dialog to accept and optionally edit received contacts by IRDA.
109- Language not English (tested with german opie-translation): 107- Language not English (tested with german opie-translation):
110 1. Configure nicht übersetzt (alles leer). 108 1. Configure nicht übersetzt (alles leer).
111 2. Contacteditor nur teilweise übersetzt. 109 2. Contacteditor nur teilweise übersetzt.
112 3. Kategorie-Picker geht nicht. 110 3. Kategorie-Picker geht nicht.
111- Plugin for Today for Birthdays and Anniversaries
112- Implement a picker/combo for the default email.
113- Overview window cleanup needed..
114- Store last settings of combo-boxes
diff --git a/core/pim/addressbook/abtable.cpp b/core/pim/addressbook/abtable.cpp
index 00335ae..aec390d 100644
--- a/core/pim/addressbook/abtable.cpp
+++ b/core/pim/addressbook/abtable.cpp
@@ -123,22 +123,22 @@ AbTable::AbTable( const QValueList<int> order, QWidget *parent, const char *name
123 asc( TRUE ), 123 asc( TRUE ),
124 intFields( order ), 124 intFields( order ),
125 enablePainting( true ), 125 enablePainting( true ),
126 columnVisible( true ), 126 columnVisible( true ),
127 countNested( 0 ) 127 countNested( 0 )
128{ 128{
129 qWarning("C'tor start"); 129 //qWarning("C'tor start");
130 130
131 setSelectionMode( NoSelection ); 131 setSelectionMode( NoSelection );
132 init(); 132 init();
133 setSorting( TRUE ); 133 setSorting( TRUE );
134 connect( this, SIGNAL(clicked(int,int,int,const QPoint &)), 134 connect( this, SIGNAL(clicked(int,int,int,const QPoint &)),
135 this, SLOT(itemClicked(int,int)) ); 135 this, SLOT(itemClicked(int,int)) );
136 136
137 contactList.clear(); 137 contactList.clear();
138 qWarning("C'tor end"); 138 //qWarning("C'tor end");
139} 139}
140 140
141AbTable::~AbTable() 141AbTable::~AbTable()
142{ 142{
143} 143}
144 144
@@ -154,13 +154,13 @@ void AbTable::init()
154 verticalHeader()->hide(); 154 verticalHeader()->hide();
155 columnVisible = true; 155 columnVisible = true;
156} 156}
157 157
158void AbTable::setContacts( const OContactAccess::List& viewList ) 158void AbTable::setContacts( const OContactAccess::List& viewList )
159{ 159{
160 qWarning("AbTable::setContacts()"); 160 //qWarning("AbTable::setContacts()");
161 161
162 clear(); 162 clear();
163 m_viewList = viewList; 163 m_viewList = viewList;
164 164
165 setSorting( false ); 165 setSorting( false );
166 setPaintingEnabled( FALSE ); 166 setPaintingEnabled( FALSE );
@@ -180,13 +180,13 @@ void AbTable::setContacts( const OContactAccess::List& viewList )
180 setPaintingEnabled( TRUE ); 180 setPaintingEnabled( TRUE );
181 181
182} 182}
183 183
184bool AbTable::selectContact( int UID ) 184bool AbTable::selectContact( int UID )
185{ 185{
186 qWarning( "AbTable::selectContact( %d )", UID ); 186 //qWarning( "AbTable::selectContact( %d )", UID );
187 int rows = numRows(); 187 int rows = numRows();
188 AbTableItem *abi; 188 AbTableItem *abi;
189 OContact* foundContact = 0l; 189 OContact* foundContact = 0l;
190 bool found = false; 190 bool found = false;
191 191
192 setPaintingEnabled( FALSE ); 192 setPaintingEnabled( FALSE );
@@ -210,13 +210,13 @@ bool AbTable::selectContact( int UID )
210 210
211 return true; 211 return true;
212} 212}
213 213
214void AbTable::insertIntoTable( const OContact& cnt, int row ) 214void AbTable::insertIntoTable( const OContact& cnt, int row )
215{ 215{
216 qWarning( "void AbTable::insertIntoTable( const OContact& cnt, %d )", row ); 216 //qWarning( "void AbTable::insertIntoTable( const OContact& cnt, %d )", row );
217 QString strName, 217 QString strName,
218 strContact; 218 strContact;
219 219
220 strName = findContactName( cnt ); 220 strName = findContactName( cnt );
221 strContact = findContactContact( cnt, row ); 221 strContact = findContactContact( cnt, row );
222 222
@@ -251,13 +251,13 @@ void AbTable::columnClicked( int col )
251 //QMessageBox::information( this, "resort", "columnClicked" ); 251 //QMessageBox::information( this, "resort", "columnClicked" );
252 resort(); 252 resort();
253} 253}
254 254
255void AbTable::resort() 255void AbTable::resort()
256{ 256{
257 qWarning( "void AbTable::resort()" ); 257 //qWarning( "void AbTable::resort()" );
258 setPaintingEnabled( FALSE ); 258 setPaintingEnabled( FALSE );
259 if ( sorting() ) { 259 if ( sorting() ) {
260 if ( lastSortCol == -1 ) 260 if ( lastSortCol == -1 )
261 lastSortCol = 0; 261 lastSortCol = 0;
262 sortColumn( lastSortCol, asc, TRUE ); 262 sortColumn( lastSortCol, asc, TRUE );
263 //QMessageBox::information( this, "resort", "resort" ); 263 //QMessageBox::information( this, "resort", "resort" );
@@ -265,13 +265,13 @@ void AbTable::resort()
265 } 265 }
266 setPaintingEnabled( TRUE ); 266 setPaintingEnabled( TRUE );
267} 267}
268 268
269OContact AbTable::currentEntry() 269OContact AbTable::currentEntry()
270{ 270{
271 qWarning( "OContact AbTable::currentEntry()" ); 271 //qWarning( "OContact AbTable::currentEntry()" );
272 OContact cnt; 272 OContact cnt;
273 AbTableItem *abItem; 273 AbTableItem *abItem;
274 abItem = static_cast<AbTableItem*>(item( currentRow(), 0 )); 274 abItem = static_cast<AbTableItem*>(item( currentRow(), 0 ));
275 if ( abItem ) { 275 if ( abItem ) {
276 cnt = contactList[abItem]; 276 cnt = contactList[abItem];
277 //cnt = contactList[currentRow()]; 277 //cnt = contactList[currentRow()];
@@ -283,13 +283,13 @@ int AbTable::currentEntry_UID()
283{ 283{
284 return ( currentEntry().uid() ); 284 return ( currentEntry().uid() );
285} 285}
286 286
287void AbTable::clear() 287void AbTable::clear()
288{ 288{
289 qWarning( "void AbTable::clear()" ); 289 //qWarning( "void AbTable::clear()" );
290 contactList.clear(); 290 contactList.clear();
291 291
292 setPaintingEnabled( FALSE ); 292 setPaintingEnabled( FALSE );
293 for ( int r = 0; r < numRows(); ++r ) { 293 for ( int r = 0; r < numRows(); ++r ) {
294 for ( int c = 0; c < numCols(); ++c ) { 294 for ( int c = 0; c < numCols(); ++c ) {
295 if ( cellWidget( r, c ) ) 295 if ( cellWidget( r, c ) )
@@ -301,13 +301,13 @@ void AbTable::clear()
301 setPaintingEnabled( TRUE ); 301 setPaintingEnabled( TRUE );
302} 302}
303 303
304// Refresh updates column 2 if the contactsettings changed 304// Refresh updates column 2 if the contactsettings changed
305void AbTable::refresh() 305void AbTable::refresh()
306{ 306{
307 qWarning( "void AbTable::refresh()" ); 307 //qWarning( "void AbTable::refresh()" );
308 int rows = numRows(); 308 int rows = numRows();
309 QString value; 309 QString value;
310 AbTableItem *abi; 310 AbTableItem *abi;
311 311
312 setPaintingEnabled( FALSE ); 312 setPaintingEnabled( FALSE );
313 for ( int r = 0; r < rows; ++r ) { 313 for ( int r = 0; r < rows; ++r ) {
@@ -323,13 +323,13 @@ void AbTable::keyPressEvent( QKeyEvent *e )
323{ 323{
324 char key = toupper( e->ascii() ); 324 char key = toupper( e->ascii() );
325 325
326 if ( key >= 'A' && key <= 'Z' ) 326 if ( key >= 'A' && key <= 'Z' )
327 moveTo( key ); 327 moveTo( key );
328 328
329 qWarning("Received key .."); 329 //qWarning("Received key ..");
330 switch( e->key() ) { 330 switch( e->key() ) {
331 case Qt::Key_Space: 331 case Qt::Key_Space:
332 case Qt::Key_Return: 332 case Qt::Key_Return:
333 case Qt::Key_Enter: 333 case Qt::Key_Enter:
334 emit signalSwitch(); 334 emit signalSwitch();
335 break; 335 break;
@@ -408,13 +408,13 @@ void AbTable::resizeRows() {
408 */ 408 */
409} 409}
410 410
411 411
412void AbTable::realignTable() 412void AbTable::realignTable()
413{ 413{
414 qWarning( "void AbTable::realignTable()" ); 414 //qWarning( "void AbTable::realignTable()" );
415 415
416 setPaintingEnabled( FALSE ); 416 setPaintingEnabled( FALSE );
417 417
418 resizeRows(); 418 resizeRows();
419 fitColumns(); 419 fitColumns();
420 420
@@ -458,37 +458,37 @@ void QTable::paintEmptyArea( QPainter *p, int cx, int cy, int cw, int ch )
458// } 458// }
459 459
460 460
461 461
462void AbTable::fitColumns() 462void AbTable::fitColumns()
463{ 463{
464 qWarning( "void AbTable::fitColumns()" ); 464 //qWarning( "void AbTable::fitColumns()" );
465 int contentsWidth = visibleWidth() / 2; // :SX Why too low 465 int contentsWidth = visibleWidth() / 2; // :SX Why too low
466 // Fix to better value 466 // Fix to better value
467 // contentsWidth = 130; 467 // contentsWidth = 130;
468 468
469 setPaintingEnabled( FALSE ); 469 setPaintingEnabled( FALSE );
470 470
471 if ( columnVisible == false ){ 471 if ( columnVisible == false ){
472 showColumn(0); 472 showColumn(0);
473 columnVisible = true; 473 columnVisible = true;
474 } 474 }
475 475
476 qWarning("Width: %d", contentsWidth); 476 //qWarning("Width: %d", contentsWidth);
477 477
478 setColumnWidth( 0, contentsWidth ); 478 setColumnWidth( 0, contentsWidth );
479 adjustColumn(1); 479 adjustColumn(1);
480 if ( columnWidth(1) < contentsWidth ) 480 if ( columnWidth(1) < contentsWidth )
481 setColumnWidth( 1, contentsWidth ); 481 setColumnWidth( 1, contentsWidth );
482 482
483 setPaintingEnabled( TRUE ); 483 setPaintingEnabled( TRUE );
484} 484}
485 485
486void AbTable::show() 486void AbTable::show()
487{ 487{
488 qWarning( "void AbTable::show()" ); 488 //qWarning( "void AbTable::show()" );
489 realignTable(); 489 realignTable();
490 QTable::show(); 490 QTable::show();
491} 491}
492 492
493void AbTable::setChoiceNames( const QStringList& list) 493void AbTable::setChoiceNames( const QStringList& list)
494{ 494{
@@ -504,17 +504,17 @@ void AbTable::setChoiceNames( const QStringList& list)
504 } 504 }
505 fitColumns(); 505 fitColumns();
506} 506}
507 507
508void AbTable::itemClicked(int,int col) 508void AbTable::itemClicked(int,int col)
509{ 509{
510 qWarning( "AbTable::itemClicked(int, col:%d)", col); 510 //qWarning( "AbTable::itemClicked(int, col:%d)", col);
511 if ( col == 2 ) { 511 if ( col == 2 ) {
512 return; 512 return;
513 } else { 513 } else {
514 qWarning ("Emitting signalSwitch()"); 514 // qWarning ("Emitting signalSwitch()");
515 emit signalSwitch(); 515 emit signalSwitch();
516 } 516 }
517} 517}
518 518
519QStringList AbTable::choiceNames() const 519QStringList AbTable::choiceNames() const
520{ 520{
@@ -545,13 +545,13 @@ QStringList AbTable::choiceSelection(int /*index*/) const
545 545
546 546
547 547
548 548
549void AbTable::updateVisible() 549void AbTable::updateVisible()
550{ 550{
551 qWarning("void AbTable::updateVisible()"); 551 //qWarning("void AbTable::updateVisible()");
552 552
553 int visible, 553 int visible,
554 totalRows, 554 totalRows,
555 row, 555 row,
556 selectedRow = 0; 556 selectedRow = 0;
557 557
@@ -583,13 +583,13 @@ void AbTable::updateVisible()
583 583
584} 584}
585 585
586 586
587void AbTable::setPaintingEnabled( bool e ) 587void AbTable::setPaintingEnabled( bool e )
588{ 588{
589 qWarning("IN void AbTable::setPaintingEnabled( %d )->Nested: %d", e, countNested ); 589 //qWarning("IN void AbTable::setPaintingEnabled( %d )->Nested: %d", e, countNested );
590 590
591 if ( e ) { 591 if ( e ) {
592 if ( countNested > 0 ) 592 if ( countNested > 0 )
593 --countNested; 593 --countNested;
594 if ( ! countNested ){ 594 if ( ! countNested ){
595 setUpdatesEnabled( true ); 595 setUpdatesEnabled( true );
@@ -599,17 +599,17 @@ void AbTable::setPaintingEnabled( bool e )
599 } 599 }
600 } else { 600 } else {
601 ++countNested; 601 ++countNested;
602 enablePainting = false; 602 enablePainting = false;
603 setUpdatesEnabled( false ); 603 setUpdatesEnabled( false );
604 } 604 }
605 qWarning("OUT void AbTable::setPaintingEnabled( %d )->Nested: %d", e, countNested ); 605 //qWarning("OUT void AbTable::setPaintingEnabled( %d )->Nested: %d", e, countNested );
606} 606}
607 607
608void AbTable::viewportPaintEvent( QPaintEvent* e ) { 608void AbTable::viewportPaintEvent( QPaintEvent* e ) {
609 qWarning(" void AbTable::viewportPaintEvent( QPaintEvent* e ) -> %d", enablePainting); 609 //qWarning(" void AbTable::viewportPaintEvent( QPaintEvent* e ) -> %d", enablePainting);
610 if ( enablePainting ) 610 if ( enablePainting )
611 QTable::viewportPaintEvent( e ); 611 QTable::viewportPaintEvent( e );
612} 612}
613 613
614 614
615 615
diff --git a/core/pim/addressbook/abview.cpp b/core/pim/addressbook/abview.cpp
index 93e57ca..7da0992 100644
--- a/core/pim/addressbook/abview.cpp
+++ b/core/pim/addressbook/abview.cpp
@@ -92,34 +92,34 @@ AbView::~AbView()
92 } 92 }
93} 93}
94 94
95 95
96void AbView::setView( Views view ) 96void AbView::setView( Views view )
97{ 97{
98 qWarning("AbView::setView( Views view )"); 98 //qWarning("AbView::setView( Views view )");
99 m_curr_View = view; 99 m_curr_View = view;
100 load(); 100 load();
101} 101}
102 102
103void AbView::addEntry( const OContact &newContact ) 103void AbView::addEntry( const OContact &newContact )
104{ 104{
105 qWarning("abview:AddContact"); 105 //qWarning("abview:AddContact");
106 m_contactdb->add ( newContact ); 106 m_contactdb->add ( newContact );
107 load(); 107 load();
108 108
109} 109}
110void AbView::removeEntry( const int UID ) 110void AbView::removeEntry( const int UID )
111{ 111{
112 qWarning("abview:RemoveContact"); 112 //qWarning("abview:RemoveContact");
113 m_contactdb->remove( UID ); 113 m_contactdb->remove( UID );
114 load(); 114 load();
115} 115}
116 116
117void AbView::replaceEntry( const OContact &contact ) 117void AbView::replaceEntry( const OContact &contact )
118{ 118{
119 qWarning("abview:ReplaceContact"); 119 //qWarning("abview:ReplaceContact");
120 m_contactdb->replace( contact ); 120 m_contactdb->replace( contact );
121 load(); 121 load();
122 122
123} 123}
124 124
125OContact AbView::currentEntry() 125OContact AbView::currentEntry()
@@ -137,93 +137,93 @@ OContact AbView::currentEntry()
137 m_curr_Contact = currentContact.uid(); 137 m_curr_Contact = currentContact.uid();
138 return currentContact; 138 return currentContact;
139} 139}
140 140
141bool AbView::save() 141bool AbView::save()
142{ 142{
143 qWarning("abView:Save data"); 143 //qWarning("abView:Save data");
144 144
145 return m_contactdb->save(); 145 return m_contactdb->save();
146} 146}
147 147
148void AbView::load() 148void AbView::load()
149{ 149{
150 qWarning("abView:Load data"); 150 //qWarning("abView:Load data");
151 151
152 // Letter Search is stopped at this place 152 // Letter Search is stopped at this place
153 emit signalClearLetterPicker(); 153 emit signalClearLetterPicker();
154 154
155 if ( m_inPersonal ) 155 if ( m_inPersonal )
156 // VCard Backend does not sort.. 156 // VCard Backend does not sort..
157 m_list = m_contactdb->allRecords(); 157 m_list = m_contactdb->allRecords();
158 else{ 158 else{
159 m_list = m_contactdb->sorted( true, 0, 0, 0 ); 159 m_list = m_contactdb->sorted( true, 0, 0, 0 );
160 clearForCategory(); 160 clearForCategory();
161 } 161 }
162 162
163 qWarning ("Number of contacts: %d", m_list.count()); 163 //qWarning ("Number of contacts: %d", m_list.count());
164 164
165 updateView( true ); 165 updateView( true );
166 166
167} 167}
168 168
169void AbView::reload() 169void AbView::reload()
170{ 170{
171 qWarning( "void AbView::reload()" ); 171 //qWarning( "void AbView::reload()" );
172 172
173 m_contactdb->reload(); 173 m_contactdb->reload();
174 load(); 174 load();
175} 175}
176 176
177void AbView::clear() 177void AbView::clear()
178{ 178{
179 // :SX 179 // :SX
180} 180}
181 181
182void AbView::setShowByCategory( const QString& cat ) 182void AbView::setShowByCategory( const QString& cat )
183{ 183{
184 qWarning("AbView::setShowCategory( const QString& cat )"); 184 //qWarning("AbView::setShowCategory( const QString& cat )");
185 185
186 int intCat = 0; 186 int intCat = 0;
187 187
188 // All (cat == NULL) will be stored as -1 188 // All (cat == NULL) will be stored as -1
189 if ( cat.isNull() ) 189 if ( cat.isNull() )
190 intCat = -1; 190 intCat = -1;
191 else 191 else
192 intCat = mCat.id("Contacts", cat ); 192 intCat = mCat.id("Contacts", cat );
193 193
194 // Just do anything if we really change the category 194 // Just do anything if we really change the category
195 if ( intCat != m_curr_category ){ 195 if ( intCat != m_curr_category ){
196 qWarning ("Categories: Selected %s.. Number: %d", cat.latin1(), m_curr_category); 196 // qWarning ("Categories: Selected %s.. Number: %d", cat.latin1(), m_curr_category);
197 197
198 m_curr_category = intCat; 198 m_curr_category = intCat;
199 emit signalClearLetterPicker(); 199 emit signalClearLetterPicker();
200 200
201 load(); 201 load();
202 } 202 }
203 203
204} 204}
205 205
206void AbView::setShowToView( Views view ) 206void AbView::setShowToView( Views view )
207{ 207{
208 qWarning("void AbView::setShowToView( View %d )", view); 208 //qWarning("void AbView::setShowToView( View %d )", view);
209 209
210 qWarning ("Change the View (Category is: %d)", m_curr_category); 210 //qWarning ("Change the View (Category is: %d)", m_curr_category);
211 211
212 if ( m_curr_View != view ){ 212 if ( m_curr_View != view ){
213 m_prev_View = m_curr_View; 213 m_prev_View = m_curr_View;
214 m_curr_View = view; 214 m_curr_View = view;
215 215
216 updateView(); 216 updateView();
217 } 217 }
218 218
219} 219}
220 220
221void AbView::setShowByLetter( char c ) 221void AbView::setShowByLetter( char c )
222{ 222{
223 qWarning("void AbView::setShowByLetter( %c )", c ); 223 //qWarning("void AbView::setShowByLetter( %c )", c );
224 OContact query; 224 OContact query;
225 if ( c == 0 ){ 225 if ( c == 0 ){
226 load(); 226 load();
227 return; 227 return;
228 }else{ 228 }else{
229 // If the current Backend is unable to solve the query, we will 229 // If the current Backend is unable to solve the query, we will
@@ -251,13 +251,13 @@ QString AbView::showCategory() const
251{ 251{
252 return mCat.label( "Contacts", m_curr_category ); 252 return mCat.label( "Contacts", m_curr_category );
253} 253}
254 254
255void AbView::showPersonal( bool personal ) 255void AbView::showPersonal( bool personal )
256{ 256{
257 qWarning ("void AbView::showPersonal( %d )", personal); 257 //qWarning ("void AbView::showPersonal( %d )", personal);
258 258
259 if ( personal ){ 259 if ( personal ){
260 260
261 if ( m_inPersonal ) 261 if ( m_inPersonal )
262 return; 262 return;
263 263
@@ -300,13 +300,13 @@ QStringList AbView::categories()
300} 300}
301 301
302// BEGIN: Slots 302// BEGIN: Slots
303void AbView::slotDoFind( const QString &str, bool caseSensitive, bool useRegExp, 303void AbView::slotDoFind( const QString &str, bool caseSensitive, bool useRegExp,
304 bool , QString cat ) 304 bool , QString cat )
305{ 305{
306 qWarning( "void AbView::slotDoFind" ); 306 //qWarning( "void AbView::slotDoFind" );
307 307
308 // We reloading the data: Deselect Letterpicker 308 // We reloading the data: Deselect Letterpicker
309 emit signalClearLetterPicker(); 309 emit signalClearLetterPicker();
310 310
311 // Use the current Category if nothing else selected 311 // Use the current Category if nothing else selected
312 int category = 0; 312 int category = 0;
@@ -314,22 +314,22 @@ void AbView::slotDoFind( const QString &str, bool caseSensitive, bool useRegExp,
314 if ( cat.isEmpty() ) 314 if ( cat.isEmpty() )
315 category = m_curr_category; 315 category = m_curr_category;
316 else{ 316 else{
317 category = mCat.id("Contacts", cat ); 317 category = mCat.id("Contacts", cat );
318 } 318 }
319 319
320 qWarning ("Find in Category %d", category); 320 //qWarning ("Find in Category %d", category);
321 321
322 QRegExp r( str ); 322 QRegExp r( str );
323 r.setCaseSensitive( caseSensitive ); 323 r.setCaseSensitive( caseSensitive );
324 r.setWildcard( !useRegExp ); 324 r.setWildcard( !useRegExp );
325 325
326 // Get all matching entries out of the database 326 // Get all matching entries out of the database
327 m_list = m_contactdb->matchRegexp( r ); 327 m_list = m_contactdb->matchRegexp( r );
328 328
329 qWarning( "found: %d", m_list.count() ); 329 //qWarning( "found: %d", m_list.count() );
330 if ( m_list.count() == 0 ){ 330 if ( m_list.count() == 0 ){
331 emit signalNotFound(); 331 emit signalNotFound();
332 return; 332 return;
333 } 333 }
334 334
335 // Now remove all contacts with wrong category (if any selected) 335 // Now remove all contacts with wrong category (if any selected)
@@ -346,13 +346,13 @@ void AbView::offSearch()
346 m_inSearch = false; 346 m_inSearch = false;
347 347
348 load(); 348 load();
349} 349}
350 350
351void AbView::slotSwitch(){ 351void AbView::slotSwitch(){
352 qWarning("AbView::slotSwitch()"); 352 //qWarning("AbView::slotSwitch()");
353 353
354 m_prev_View = m_curr_View; 354 m_prev_View = m_curr_View;
355 switch ( (int) m_curr_View ){ 355 switch ( (int) m_curr_View ){
356 case TableView: 356 case TableView:
357 qWarning("Switching to CardView"); 357 qWarning("Switching to CardView");
358 m_curr_View = CardView; 358 m_curr_View = CardView;
@@ -374,58 +374,58 @@ void AbView::clearForCategory()
374 // Now remove all contacts with wrong category if any category selected 374 // Now remove all contacts with wrong category if any category selected
375 375
376 OContactAccess::List allList = m_list; 376 OContactAccess::List allList = m_list;
377 if ( m_curr_category != -1 ){ 377 if ( m_curr_category != -1 ){
378 for ( it = allList.begin(); it != allList.end(); ++it ){ 378 for ( it = allList.begin(); it != allList.end(); ++it ){
379 if ( !contactCompare( *it, m_curr_category ) ){ 379 if ( !contactCompare( *it, m_curr_category ) ){
380 qWarning("Removing %d", (*it).uid()); 380 // qWarning("Removing %d", (*it).uid());
381 m_list.remove( (*it).uid() ); 381 m_list.remove( (*it).uid() );
382 } 382 }
383 } 383 }
384 } 384 }
385 385
386} 386}
387 387
388bool AbView::contactCompare( const OContact &cnt, int category ) 388bool AbView::contactCompare( const OContact &cnt, int category )
389{ 389{
390 qWarning ("bool AbView::contactCompare( const OContact &cnt, %d )", category); 390 //qWarning ("bool AbView::contactCompare( const OContact &cnt, %d )", category);
391 391
392 bool returnMe; 392 bool returnMe;
393 QArray<int> cats; 393 QArray<int> cats;
394 cats = cnt.categories(); 394 cats = cnt.categories();
395 395
396 qWarning ("Number of categories: %d", cats.count() ); 396 //qWarning ("Number of categories: %d", cats.count() );
397 397
398 returnMe = false; 398 returnMe = false;
399 if ( cats.count() == 0 && category == 0 ) 399 if ( cats.count() == 0 && category == 0 )
400 // Contacts with no category will just shown on "All" and "Unfiled" 400 // Contacts with no category will just shown on "All" and "Unfiled"
401 returnMe = true; 401 returnMe = true;
402 else { 402 else {
403 int i; 403 int i;
404 for ( i = 0; i < int(cats.count()); i++ ) { 404 for ( i = 0; i < int(cats.count()); i++ ) {
405 qWarning("Comparing %d with %d",cats[i],category ); 405 // qWarning("Comparing %d with %d",cats[i],category );
406 if ( cats[i] == category ) { 406 if ( cats[i] == category ) {
407 returnMe = true; 407 returnMe = true;
408 break; 408 break;
409 } 409 }
410 } 410 }
411 } 411 }
412 qWarning ("Return: %d", returnMe); 412 //qWarning ("Return: %d", returnMe);
413 return returnMe; 413 return returnMe;
414} 414}
415 415
416// In Some rare cases we have to update all lists.. 416// In Some rare cases we have to update all lists..
417void AbView::updateListinViews() 417void AbView::updateListinViews()
418{ 418{
419 m_abTable -> setContacts( m_list ); 419 m_abTable -> setContacts( m_list );
420 m_ablabel -> setContacts( m_list ); 420 m_ablabel -> setContacts( m_list );
421} 421}
422 422
423void AbView::updateView( bool newdata ) 423void AbView::updateView( bool newdata )
424{ 424{
425 qWarning("AbView::updateView()"); 425 //qWarning("AbView::updateView()");
426 426
427 if ( m_viewStack -> visibleWidget() ){ 427 if ( m_viewStack -> visibleWidget() ){
428 m_viewStack -> visibleWidget() -> clearFocus(); 428 m_viewStack -> visibleWidget() -> clearFocus();
429 } 429 }
430 430
431 // If we switching the view, we have to store some information 431 // If we switching the view, we have to store some information
diff --git a/core/pim/addressbook/contacteditor.cpp b/core/pim/addressbook/contacteditor.cpp
index d14ac51..d830ad3 100644
--- a/core/pim/addressbook/contacteditor.cpp
+++ b/core/pim/addressbook/contacteditor.cpp
@@ -64,26 +64,33 @@ void parseEmailTo( const QString &strDefaultEmail,
64 64
65 ContactEditor::ContactEditor(const OContact &entry, 65 ContactEditor::ContactEditor(const OContact &entry,
66 QWidget *parent, 66 QWidget *parent,
67 const char *name, 67 const char *name,
68 WFlags fl ) 68 WFlags fl )
69 : QDialog( parent, name, TRUE, fl ), 69 : QDialog( parent, name, TRUE, fl ),
70 m_personalView ( false ) 70 defaultEmailChooserPosition( -1 ),
71 71 m_personalView ( false ),
72 cmbDefaultEmail( 0 ),
73 initializing ( false )
72{ 74{
73 75
76 initializing = true;
77
74 init(); 78 init();
75 setEntry( entry ); 79 setEntry( entry );
76 cmbDefaultEmail = 0; 80 // cmbDefaultEmail = 0;
77 defaultEmailChooserPosition = -1; 81 // defaultEmailChooserPosition = -1;
82
83 initializing = false;
78} 84}
79 85
80ContactEditor::~ContactEditor() { 86ContactEditor::~ContactEditor() {
81} 87}
82 88
83void ContactEditor::init() { 89void ContactEditor::init() {
90 qWarning("init() START");
84 91
85 useFullName = true; 92 useFullName = true;
86 93
87 uint i = 0; 94 uint i = 0;
88 95
89 QStringList trlChooserNames; 96 QStringList trlChooserNames;
@@ -639,12 +646,14 @@ void ContactEditor::init() {
639 connect( cmbAddress, SIGNAL(activated(int)), 646 connect( cmbAddress, SIGNAL(activated(int)),
640 this, SLOT(slotAddressTypeChange(int)) ); 647 this, SLOT(slotAddressTypeChange(int)) );
641 648
642 new QPEDialogListener(this); 649 new QPEDialogListener(this);
643 650
644 setPersonalView ( m_personalView ); 651 setPersonalView ( m_personalView );
652
653 qWarning("init() END");
645} 654}
646 655
647void ContactEditor::defaultEmailChanged(int i){ 656void ContactEditor::defaultEmailChanged(int i){
648 qDebug("defaultEmailChanged"); 657 qDebug("defaultEmailChanged");
649 658
650 // was sollte das ? (se) 659 // was sollte das ? (se)
@@ -689,31 +698,40 @@ void ContactEditor::populateDefaultEmailCmb(){
689 698
690// Called when any combobox was changed. 699// Called when any combobox was changed.
691// "true" returned if the change was chandled by this function, else it should 700// "true" returned if the change was chandled by this function, else it should
692// be handled by something else.. 701// be handled by something else..
693bool ContactEditor::cmbChooserChange( int index, QLineEdit *inputWid, int widgetPos ) { 702bool ContactEditor::cmbChooserChange( int index, QLineEdit *inputWid, int widgetPos ) {
694 QString type = slChooserNames[index]; 703 QString type = slChooserNames[index];
695 qWarning("ContactEditor::cmbChooserChange -> Type: %s", type.latin1() ); 704 qWarning("ContactEditor::cmbChooserChange -> Type: %s, WidgetPos: %d", type.latin1(), widgetPos );
705
706 if ( !initializing )
707 contactfields.setFieldOrder( widgetPos-1, index );
696 708
697 // Create and connect combobox for selecting the default email 709 // Create and connect combobox for selecting the default email
698 if ( type == "Default Email"){ 710 if ( type == "Default Email"){
699 qWarning("Choosing default-email "); 711 qWarning("Choosing default-email (defaultEmailChooserPosition= %d) ", defaultEmailChooserPosition);
700 712
701 // More than one defaul-email chooser is not allowed ! 713 // More than one defaul-email chooser is not allowed !
702 if ( ( defaultEmailChooserPosition != -1 ) && 714 if ( ( defaultEmailChooserPosition != -1 ) &&
703 defaultEmailChooserPosition != widgetPos ){ 715 defaultEmailChooserPosition != widgetPos && !initializing){
704 chooserError( widgetPos ); 716 chooserError( widgetPos );
705 return true; 717 return true;
706 } 718 }
707 719
708 if ( cmbDefaultEmail ){ 720 if ( cmbDefaultEmail ){
709 delete cmbDefaultEmail; 721 delete cmbDefaultEmail;
710 cmbDefaultEmail = 0l; 722 cmbDefaultEmail = 0l;
711 } 723 }
712 cmbDefaultEmail = new QComboBox(inputWid->parentWidget()); 724 cmbDefaultEmail = new QComboBox(inputWid->parentWidget());
713 cmbDefaultEmail->setGeometry(inputWid->frameGeometry()); 725 cmbDefaultEmail->setGeometry(inputWid->frameGeometry()); /* :SX */
726
727 QRect rect = inputWid->frameGeometry();
728 qWarning("Geometrie: X=%d, Y=%d, Left=%d, Top=%d, Right=%d, Bottom=%d",
729 rect.x(), rect.y(), rect.left(), rect.top(), rect.right(), rect.bottom());
730 QPoint pnt = inputWid->pos();
731 qWarning("Position : X=%d, Y=%d", pnt.x(), pnt.y() );
714 732
715 connect( cmbDefaultEmail,SIGNAL( activated(int) ), 733 connect( cmbDefaultEmail,SIGNAL( activated(int) ),
716 SLOT( defaultEmailChanged(int) ) ); 734 SLOT( defaultEmailChanged(int) ) );
717 735
718 cmbDefaultEmail->clear(); 736 cmbDefaultEmail->clear();
719 cmbDefaultEmail->insertStringList( emails ); 737 cmbDefaultEmail->insertStringList( emails );
@@ -941,12 +959,17 @@ void ContactEditor::slotCmbChooser4Change( int index ) {
941 959
942 } 960 }
943} 961}
944 962
945void ContactEditor::slotAddressTypeChange( int index ) { 963void ContactEditor::slotAddressTypeChange( int index ) {
946 964
965
966 if ( !initializing )
967 contactfields.setFieldOrder( 4, index );
968
969
947 if ( index == 0 ) { 970 if ( index == 0 ) {
948 971
949 txtAddress->setText( slBusinessAddress[0] ); 972 txtAddress->setText( slBusinessAddress[0] );
950 //txtAddress2->setText( (*slBusinessAddress)[1] ); 973 //txtAddress2->setText( (*slBusinessAddress)[1] );
951 //txtPOBox->setText( (*slBusinessAddress)[2] ); 974 //txtPOBox->setText( (*slBusinessAddress)[2] );
952 txtCity->setText( slBusinessAddress[3] ); 975 txtCity->setText( slBusinessAddress[3] );
@@ -1273,18 +1296,18 @@ void ContactEditor::cleanupFields() {
1273 txtTmp->setText(""); 1296 txtTmp->setText("");
1274 1297
1275} 1298}
1276 1299
1277void ContactEditor::setEntry( const OContact &entry ) { 1300void ContactEditor::setEntry( const OContact &entry ) {
1278 1301
1302 initializing = true;
1303
1279 cleanupFields(); 1304 cleanupFields();
1280 1305
1281 ent = entry; 1306 ent = entry;
1282 1307
1283
1284
1285 emails = QStringList(ent.emailList()); 1308 emails = QStringList(ent.emailList());
1286 defaultEmail = ent.defaultEmail(); 1309 defaultEmail = ent.defaultEmail();
1287 if (defaultEmail.isEmpty()) defaultEmail = emails[0]; 1310 if (defaultEmail.isEmpty()) defaultEmail = emails[0];
1288 qDebug("default email=%s",defaultEmail.latin1()); 1311 qDebug("default email=%s",defaultEmail.latin1());
1289 1312
1290 useFullName = false; 1313 useFullName = false;
@@ -1452,20 +1475,38 @@ void ContactEditor::setEntry( const OContact &entry ) {
1452 1475
1453 QString gender = ent.gender(); 1476 QString gender = ent.gender();
1454 cmbGender->setCurrentItem( gender.toInt() ); 1477 cmbGender->setCurrentItem( gender.toInt() );
1455 1478
1456 txtNote->setText( ent.notes() ); 1479 txtNote->setText( ent.notes() );
1457 1480
1481 slotAddressTypeChange( cmbAddress->currentItem() );
1482
1483 // Calling "show()" to arrange all widgets. Otherwise we will get
1484 // a wrong position of the textfields and are unable to put our
1485 // default-email combo over it.. This is very ugly !
1486 // Does anybody has a better solution ?
1487 // Basically we should rethink the strategy to hide
1488 // a textfield with overwriting.. (se)
1489 show();
1490
1491 // Get combo-settings from contact and set preset..
1492 contactfields.loadFromRecord( ent );
1493 cmbChooserField1->setCurrentItem( contactfields.getFieldOrder(0, 0) );
1494 cmbChooserField2->setCurrentItem( contactfields.getFieldOrder(1, 1) );
1495 cmbChooserField3->setCurrentItem( contactfields.getFieldOrder(2, 2) );
1496 cmbChooserField4->setCurrentItem( contactfields.getFieldOrder(3, 5) );
1497 cmbAddress->setCurrentItem( contactfields.getFieldOrder(4, 1) );
1458 slotCmbChooser1Change( cmbChooserField1->currentItem() ); 1498 slotCmbChooser1Change( cmbChooserField1->currentItem() );
1459 slotCmbChooser2Change( cmbChooserField2->currentItem() ); 1499 slotCmbChooser2Change( cmbChooserField2->currentItem() );
1460 slotCmbChooser3Change( cmbChooserField3->currentItem() ); 1500 slotCmbChooser3Change( cmbChooserField3->currentItem() );
1461 1501 slotCmbChooser4Change( cmbChooserField4->currentItem() );
1462 slotAddressTypeChange( cmbAddress->currentItem() ); 1502 slotAddressTypeChange( cmbAddress->currentItem() );
1463 1503
1464 // loadFields(); :SX
1465 updateDatePicker(); 1504 updateDatePicker();
1505
1506 initializing = false;
1466} 1507}
1467void ContactEditor::updateDatePicker() 1508void ContactEditor::updateDatePicker()
1468{ 1509{
1469 // Set DatePicker 1510 // Set DatePicker
1470 if ( !ent.birthday().isNull() ){ 1511 if ( !ent.birthday().isNull() ){
1471 birthdayButton->setText( TimeString::numberDateString( ent.birthday() ) ); 1512 birthdayButton->setText( TimeString::numberDateString( ent.birthday() ) );
@@ -1480,12 +1521,14 @@ void ContactEditor::updateDatePicker()
1480 anniversaryButton->setText( tr ("Unknown") ); 1521 anniversaryButton->setText( tr ("Unknown") );
1481 1522
1482} 1523}
1483 1524
1484void ContactEditor::saveEntry() { 1525void ContactEditor::saveEntry() {
1485 1526
1527 // Store current combo into contact
1528 contactfields.saveToRecord( ent );
1486 1529
1487 if ( useFullName ) { 1530 if ( useFullName ) {
1488 txtFirstName->setText( parseName( txtFullName->text(), NAME_F ) ); 1531 txtFirstName->setText( parseName( txtFullName->text(), NAME_F ) );
1489 txtMiddleName->setText( parseName( txtFullName->text(), NAME_M ) ); 1532 txtMiddleName->setText( parseName( txtFullName->text(), NAME_M ) );
1490 txtLastName->setText( parseName( txtFullName->text(), NAME_L ) ); 1533 txtLastName->setText( parseName( txtFullName->text(), NAME_L ) );
1491 txtSuffix->setText( parseName( txtFullName->text(), NAME_S ) ); 1534 txtSuffix->setText( parseName( txtFullName->text(), NAME_S ) );
diff --git a/core/pim/addressbook/contacteditor.h b/core/pim/addressbook/contacteditor.h
index 4fa48d1..95f9f2d 100644
--- a/core/pim/addressbook/contacteditor.h
+++ b/core/pim/addressbook/contacteditor.h
@@ -27,12 +27,14 @@
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 32
33#include "ocontactfields.h"
34
33const int NAME_LF = 0; 35const int NAME_LF = 0;
34const int NAME_LFM = 1; 36const int NAME_LFM = 1;
35const int NAME_FL = 2; 37const int NAME_FL = 2;
36const int NAME_FMLS = 3; 38const int NAME_FMLS = 3;
37 39
38const int NAME_F = 4; 40const int NAME_F = 4;
@@ -105,12 +107,13 @@ class ContactEditor : public QDialog {
105 107
106 private: 108 private:
107 int defaultEmailChooserPosition; 109 int defaultEmailChooserPosition;
108 void populateDefaultEmailCmb(); 110 void populateDefaultEmailCmb();
109 void chooserChange( const QString&, int , QLineEdit*, int ); 111 void chooserChange( const QString&, int , QLineEdit*, int );
110 bool cmbChooserChange( int , QLineEdit*, int ); 112 bool cmbChooserChange( int , QLineEdit*, int );
113 OContactFields contactfields;
111 114
112 bool useFullName; 115 bool useFullName;
113 116
114 OContact ent; 117 OContact ent;
115 118
116 QDialog *dlgNote; 119 QDialog *dlgNote;
@@ -173,9 +176,11 @@ class ContactEditor : public QDialog {
173 QScrollView *svDetails; 176 QScrollView *svDetails;
174 QComboBox *cmbGender; 177 QComboBox *cmbGender;
175 DateBookMonth* birthdayPicker; 178 DateBookMonth* birthdayPicker;
176 QToolButton* birthdayButton; 179 QToolButton* birthdayButton;
177 DateBookMonth* anniversaryPicker; 180 DateBookMonth* anniversaryPicker;
178 QToolButton* anniversaryButton; 181 QToolButton* anniversaryButton;
182
183 bool initializing;
179 }; 184 };
180 185
181#endif 186#endif
diff --git a/core/pim/addressbook/ocontactfields.cpp b/core/pim/addressbook/ocontactfields.cpp
index 0da6a4f..75a7641 100644
--- a/core/pim/addressbook/ocontactfields.cpp
+++ b/core/pim/addressbook/ocontactfields.cpp
@@ -3,12 +3,14 @@
3 3
4#include <qstringlist.h> 4#include <qstringlist.h>
5#include <qobject.h> 5#include <qobject.h>
6 6
7// We should use our own enum in the future .. 7// We should use our own enum in the future ..
8#include <qpe/recordfields.h> 8#include <qpe/recordfields.h>
9#include <qpe/config.h>
10#include <opie/ocontact.h>
9 11
10/*! 12/*!
11 \internal 13 \internal
12 Returns a list of details field names for a contact. 14 Returns a list of details field names for a contact.
13*/ 15*/
14QStringList OContactFields::untrdetailsfields( bool sorted ) 16QStringList OContactFields::untrdetailsfields( bool sorted )
@@ -269,6 +271,99 @@ QMap<QString, int> OContactFields::trFieldsToId()
269 for( it = idtostr.begin(); it != idtostr.end(); ++it ) 271 for( it = idtostr.begin(); it != idtostr.end(); ++it )
270 ret_map.insert( *it, it.key() ); 272 ret_map.insert( *it, it.key() );
271 273
272 274
273 return ret_map; 275 return ret_map;
274} 276}
277
278OContactFields::OContactFields():
279 fieldOrder( DEFAULT_FIELD_ORDER ),
280 changedFieldOrder( false )
281{
282 // Get the global field order from the config file and
283 // use it as a start pattern
284 Config cfg ( "AddressBook" );
285 cfg.setGroup( "ContactFieldOrder" );
286 globalFieldOrder = cfg.readEntry( "General", DEFAULT_FIELD_ORDER );
287}
288
289OContactFields::~OContactFields(){
290
291 // We will store the fieldorder into the config file
292 // to reuse it for the future..
293 if ( changedFieldOrder ){
294 Config cfg ( "AddressBook" );
295 cfg.setGroup( "ContactFieldOrder" );
296 cfg.writeEntry( "General", globalFieldOrder );
297 }
298}
299
300
301
302void OContactFields::saveToRecord( OContact &cnt ){
303
304 qDebug("ocontactfields saveToRecord: >%s<",fieldOrder.latin1());
305
306 // Store fieldorder into this contact.
307 cnt.setCustomField( CONTACT_FIELD_ORDER_NAME, fieldOrder );
308
309 globalFieldOrder = fieldOrder;
310 changedFieldOrder = true;
311
312}
313
314void OContactFields::loadFromRecord( const OContact &cnt ){
315 qDebug("ocontactfields loadFromRecord");
316 qDebug("loading >%s<",cnt.fullName().latin1());
317
318 // Get fieldorder for this contact. If none is defined,
319 // we will use the global one from the config file..
320
321 fieldOrder = cnt.customField( CONTACT_FIELD_ORDER_NAME );
322
323 qDebug("fieldOrder from contact>%s<",fieldOrder.latin1());
324
325 if (fieldOrder.isEmpty()){
326 fieldOrder = globalFieldOrder;
327 }
328
329
330 qDebug("effective fieldOrder in loadFromRecord >%s<",fieldOrder.latin1());
331}
332
333void OContactFields::setFieldOrder( int num, int index ){
334 qDebug("qcontactfields setfieldorder pos %i -> %i",num,index);
335
336 fieldOrder[num] = QString::number( index )[0];
337
338 // We will store this new fieldorder globally to
339 // remember it for contacts which have none
340 globalFieldOrder = fieldOrder;
341 changedFieldOrder = true;
342
343 qDebug("fieldOrder >%s<",fieldOrder.latin1());
344}
345
346int OContactFields::getFieldOrder( int num, int defIndex ){
347 qDebug("ocontactfields getFieldOrder");
348 qDebug("fieldOrder >%s<",fieldOrder.latin1());
349
350 // Get index of combo as char..
351 QChar poschar = fieldOrder[num];
352
353 bool ok;
354 int ret = 0;
355 // Convert char to number..
356 if ( !( poschar == QChar::null ) )
357 ret = QString( poschar ).toInt(&ok, 10);
358 else
359 ok = false;
360
361 // Return default value if index for
362 // num was not set or if anything else happened..
363 if ( !ok ) ret = defIndex;
364
365 qDebug("returning >%i<",ret);
366
367 return ret;
368
369}
diff --git a/core/pim/addressbook/ocontactfields.h b/core/pim/addressbook/ocontactfields.h
index 796bc0a..bf3a7f5 100644
--- a/core/pim/addressbook/ocontactfields.h
+++ b/core/pim/addressbook/ocontactfields.h
@@ -2,16 +2,50 @@
2#define OPIE_CONTACTS_FIELDS 2#define OPIE_CONTACTS_FIELDS
3 3
4class QStringList; 4class QStringList;
5 5
6#include <qmap.h> 6#include <qmap.h>
7#include <qstring.h> 7#include <qstring.h>
8#include <opie/ocontact.h>
9
10#define CONTACT_FIELD_ORDER_NAME "opie-contactfield-order"
11#define DEFAULT_FIELD_ORDER "__________"
8 12
9class OContactFields{ 13class OContactFields{
10 14
11 public: 15 public:
16 OContactFields();
17 ~OContactFields();
18 /** Set the index for combo boxes.
19 * Sets the <b>index</b> of combo <b>num</b>.
20 * @param num selects the number of the combo
21 * @param index sets the index in the combo
22 */
23 void setFieldOrder( int num, int index );
24
25 /** Get the index for combo boxes.
26 * Returns the index of combo <b>num</b> or defindex
27 * if none was defined..
28 * @param num Selects the number of the combo
29 * @param defIndex will be returned if none was defined (either
30 * globally in the config file, nor by the contact which was used
31 * by loadFromRecord() )
32 */
33 int getFieldOrder( int num, int defIndex);
34
35 /** Store fieldorder to contact. */
36 void saveToRecord( OContact& );
37 /** Get Fieldorder from contact. */
38 void loadFromRecord( const OContact& );
39
40 private:
41 QString fieldOrder;
42 QString globalFieldOrder;
43 bool changedFieldOrder;
44
45 public:
12 static QStringList trphonefields( bool sorted = true ); 46 static QStringList trphonefields( bool sorted = true );
13 static QStringList untrphonefields( bool sorted = true ); 47 static QStringList untrphonefields( bool sorted = true );
14 static QStringList trdetailsfields( bool sorted = true ); 48 static QStringList trdetailsfields( bool sorted = true );
15 static QStringList untrdetailsfields( bool sorted = true ); 49 static QStringList untrdetailsfields( bool sorted = true );
16 static QStringList trfields( bool sorted = true ); 50 static QStringList trfields( bool sorted = true );
17 static QStringList untrfields( bool sorted = true ); 51 static QStringList untrfields( bool sorted = true );
diff --git a/core/pim/addressbook/version.h b/core/pim/addressbook/version.h
index b740326..e716fe4 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 "1" 5#define SUBVERSION "2"
6#define PATCHVERSION "1" 6#define PATCHVERSION "0"
7 7
8#define APPNAME "OPIE_ADDRESSBOOK" 8#define APPNAME "OPIE_ADDRESSBOOK"
9 9
10#endif 10#endif