summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/addressbook/TODO16
-rw-r--r--core/pim/addressbook/abtable.cpp40
-rw-r--r--core/pim/addressbook/abview.cpp48
-rw-r--r--core/pim/addressbook/contacteditor.cpp75
-rw-r--r--core/pim/addressbook/contacteditor.h5
-rw-r--r--core/pim/addressbook/ocontactfields.cpp101
-rw-r--r--core/pim/addressbook/ocontactfields.h34
-rw-r--r--core/pim/addressbook/version.h4
8 files changed, 251 insertions, 72 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
@@ -1,72 +1,70 @@
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 incase 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- 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))
25 26
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
67- Advanced handling of cursor keys (search..) 65- Advanced handling of cursor keys (search..)
68- Mail-Icon is missing 66- Mail-Icon is missing
69- Use opie-mail insted of qt-mail if possible. 67- Use opie-mail insted of qt-mail if possible.
70- Font menu is invisible using german translation 68- Font menu is invisible using german translation
71- Personal contact editor: Disable categories 69- Personal contact editor: Disable categories
72- "Nonenglish" translation bug has to be fixed. 70- "Nonenglish" translation bug has to be fixed.
@@ -101,12 +99,16 @@ Fixed:
101 zu lange.. 99 zu lange..
102- VCARD: Import of Anniversary does not work correctly (currently disabled) 100- VCARD: Import of Anniversary does not work correctly (currently disabled)
103- Name order selected in "contacteditor" not used in list view. 101- Name order selected in "contacteditor" not used in list view.
104- OK-Key does not switch from Detailview (ablable) to Listview 102- OK-Key does not switch from Detailview (ablable) to Listview
105- Receiving of beams should open a dialog 103- Receiving of beams should open a dialog
106- Fix start of opie-mail 104- Fix start of opie-mail
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
@@ -117,56 +117,56 @@ void AbPickItem::setContentFromEditor( QWidget *w )
117 \brief QTable based class for showing a list of entries 117 \brief QTable based class for showing a list of entries
118*/ 118*/
119 119
120AbTable::AbTable( const QValueList<int> order, QWidget *parent, const char *name ) 120AbTable::AbTable( const QValueList<int> order, QWidget *parent, const char *name )
121 : QTable( parent, name ), 121 : QTable( parent, name ),
122 lastSortCol( -1 ), 122 lastSortCol( -1 ),
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
145void AbTable::init() 145void AbTable::init()
146{ 146{
147 // :SX showChar = '\0'; 147 // :SX showChar = '\0';
148 setNumRows( 0 ); 148 setNumRows( 0 );
149 setNumCols( 2 ); 149 setNumCols( 2 );
150 150
151 horizontalHeader()->setLabel( 0, tr( "Full Name" )); 151 horizontalHeader()->setLabel( 0, tr( "Full Name" ));
152 horizontalHeader()->setLabel( 1, tr( "Contact" )); 152 horizontalHeader()->setLabel( 1, tr( "Contact" ));
153 setLeftMargin( 0 ); 153 setLeftMargin( 0 );
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 );
167 167
168 OContactAccess::List::Iterator it; 168 OContactAccess::List::Iterator it;
169 setNumRows( m_viewList.count() ); 169 setNumRows( m_viewList.count() );
170 int row = 0; 170 int row = 0;
171 for ( it = m_viewList.begin(); it != m_viewList.end(); ++it ) 171 for ( it = m_viewList.begin(); it != m_viewList.end(); ++it )
172 insertIntoTable( *it, row++ ); 172 insertIntoTable( *it, row++ );
@@ -174,25 +174,25 @@ void AbTable::setContacts( const OContactAccess::List& viewList )
174 setSorting( true ); 174 setSorting( true );
175 175
176 resort(); 176 resort();
177 177
178 updateVisible(); 178 updateVisible();
179 179
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 );
193 for ( int r = 0; r < rows; ++r ) { 193 for ( int r = 0; r < rows; ++r ) {
194 abi = static_cast<AbTableItem*>( item(r, 0) ); 194 abi = static_cast<AbTableItem*>( item(r, 0) );
195 foundContact = &contactList[abi]; 195 foundContact = &contactList[abi];
196 if ( foundContact -> uid() == UID ){ 196 if ( foundContact -> uid() == UID ){
197 ensureCellVisible( r, 0 ); 197 ensureCellVisible( r, 0 );
198 setCurrentCell( r, 0 ); 198 setCurrentCell( r, 0 );
@@ -204,25 +204,25 @@ bool AbTable::selectContact( int UID )
204 if ( !found ){ 204 if ( !found ){
205 ensureCellVisible( 0,0 ); 205 ensureCellVisible( 0,0 );
206 setCurrentCell( 0, 0 ); 206 setCurrentCell( 0, 0 );
207 } 207 }
208 208
209 setPaintingEnabled( TRUE ); 209 setPaintingEnabled( TRUE );
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
223 AbTableItem *ati; 223 AbTableItem *ati;
224 ati = new AbTableItem( this, QTableItem::Never, strName, strContact); 224 ati = new AbTableItem( this, QTableItem::Never, strName, strContact);
225 contactList.insert( ati, cnt ); 225 contactList.insert( ati, cnt );
226 setItem( row, 0, ati ); 226 setItem( row, 0, ati );
227 ati = new AbTableItem( this, QTableItem::Never, strContact, strName); 227 ati = new AbTableItem( this, QTableItem::Never, strContact, strName);
228 setItem( row, 1, ati ); 228 setItem( row, 1, ati );
@@ -245,97 +245,97 @@ void AbTable::columnClicked( int col )
245 if ( col == lastSortCol ) { 245 if ( col == lastSortCol ) {
246 asc = !asc; 246 asc = !asc;
247 } else { 247 } else {
248 lastSortCol = col; 248 lastSortCol = col;
249 asc = TRUE; 249 asc = TRUE;
250 } 250 }
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" );
264 updateVisible(); 264 updateVisible();
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()];
278 } 278 }
279 return cnt; 279 return cnt;
280} 280}
281 281
282int AbTable::currentEntry_UID() 282int 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 ) )
296 clearCellWidget( r, c ); 296 clearCellWidget( r, c );
297 clearCell( r, c ); 297 clearCell( r, c );
298 } 298 }
299 } 299 }
300 setNumRows( 0 ); 300 setNumRows( 0 );
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 ) {
314 abi = static_cast<AbTableItem*>( item(r, 0) ); 314 abi = static_cast<AbTableItem*>( item(r, 0) );
315 value = findContactContact( contactList[abi], r ); 315 value = findContactContact( contactList[abi], r );
316 static_cast<AbTableItem*>( item(r, 1) )->setItem( value, abi->text() ); 316 static_cast<AbTableItem*>( item(r, 1) )->setItem( value, abi->text() );
317 } 317 }
318 resort(); 318 resort();
319 setPaintingEnabled( TRUE ); 319 setPaintingEnabled( TRUE );
320} 320}
321 321
322void AbTable::keyPressEvent( QKeyEvent *e ) 322void 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;
336 // case Qt::Key_Up: 336 // case Qt::Key_Up:
337 // qWarning("a"); 337 // qWarning("a");
338 // emit signalKeyUp(); 338 // emit signalKeyUp();
339 // break; 339 // break;
340 // case Qt::Key_Down: 340 // case Qt::Key_Down:
341 // qWarning("b"); 341 // qWarning("b");
@@ -402,25 +402,25 @@ void AbTable::resizeRows() {
402 if (numRows()) { 402 if (numRows()) {
403 for (int i = 0; i < numRows(); i++) { 403 for (int i = 0; i < numRows(); i++) {
404 setRowHeight( i, size ); 404 setRowHeight( i, size );
405 } 405 }
406 } 406 }
407 updateVisible(); 407 updateVisible();
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
421 setPaintingEnabled( TRUE ); 421 setPaintingEnabled( TRUE );
422 422
423} 423}
424 424
425 425
426 426
@@ -452,75 +452,75 @@ void QTable::paintEmptyArea( QPainter *p, int cx, int cy, int cw, int ch )
452// return 18*row; 452// return 18*row;
453// } 453// }
454 454
455// int AbTable::rowAt( int pos ) const 455// int AbTable::rowAt( int pos ) const
456// { 456// {
457// return QMIN( pos/18, numRows()-1 ); 457// return QMIN( pos/18, numRows()-1 );
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{
495 choicenames = list; 495 choicenames = list;
496 if ( choicenames.isEmpty() ) { 496 if ( choicenames.isEmpty() ) {
497 // hide pick column 497 // hide pick column
498 setNumCols( 2 ); 498 setNumCols( 2 );
499 } else { 499 } else {
500 // show pick column 500 // show pick column
501 setNumCols( 3 ); 501 setNumCols( 3 );
502 setColumnWidth( 2, fontMetrics().width(tr( "Pick" ))+8 ); 502 setColumnWidth( 2, fontMetrics().width(tr( "Pick" ))+8 );
503 horizontalHeader()->setLabel( 2, tr( "Pick" )); 503 horizontalHeader()->setLabel( 2, tr( "Pick" ));
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{
521 return choicenames; 521 return choicenames;
522} 522}
523 523
524void AbTable::setChoiceSelection( const QValueList<int>& list ) 524void AbTable::setChoiceSelection( const QValueList<int>& list )
525{ 525{
526 intFields = list; 526 intFields = list;
@@ -539,25 +539,25 @@ QStringList AbTable::choiceSelection(int /*index*/) const
539 } 539 }
540 } 540 }
541 541
542 */ 542 */
543 return r; 543 return r;
544} 544}
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
558 visible = 0; 558 visible = 0;
559 559
560 setPaintingEnabled( FALSE ); 560 setPaintingEnabled( FALSE );
561 561
562 realignTable(); 562 realignTable();
563 563
@@ -577,45 +577,45 @@ void AbTable::updateVisible()
577 577
578 if ( !visible ) 578 if ( !visible )
579 setCurrentCell( -1, 0 ); 579 setCurrentCell( -1, 0 );
580 580
581 setPaintingEnabled( TRUE ); 581 setPaintingEnabled( TRUE );
582 582
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 );
596 enablePainting = true; 596 enablePainting = true;
597 rowHeightChanged( 0 ); 597 rowHeightChanged( 0 );
598 viewport()->update(); 598 viewport()->update();
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
616void AbTable::rowHeightChanged( int row ) 616void AbTable::rowHeightChanged( int row )
617{ 617{
618 if ( enablePainting ) 618 if ( enablePainting )
619 QTable::rowHeightChanged( row ); 619 QTable::rowHeightChanged( row );
620} 620}
621QString AbTable::findContactContact( const OContact &entry, int /* row */ ) 621QString AbTable::findContactContact( const OContact &entry, int /* row */ )
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
@@ -86,150 +86,150 @@ AbView::~AbView()
86 m_contactdb -> save(); 86 m_contactdb -> save();
87 delete m_contactdb; 87 delete m_contactdb;
88 88
89 if ( m_storedDB ){ 89 if ( m_storedDB ){
90 m_storedDB -> save(); 90 m_storedDB -> save();
91 delete m_storedDB; 91 delete m_storedDB;
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()
126{ 126{
127 OContact currentContact; 127 OContact currentContact;
128 128
129 switch ( (int) m_curr_View ) { 129 switch ( (int) m_curr_View ) {
130 case TableView: 130 case TableView:
131 currentContact = m_abTable -> currentEntry(); 131 currentContact = m_abTable -> currentEntry();
132 break; 132 break;
133 case CardView: 133 case CardView:
134 currentContact = m_ablabel -> currentEntry(); 134 currentContact = m_ablabel -> currentEntry();
135 break; 135 break;
136 } 136 }
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
230 // ignore the request .. 230 // ignore the request ..
231 if ( ! m_contactdb->hasQuerySettings( OContactAccess::WildCards | OContactAccess::IgnoreCase ) ){ 231 if ( ! m_contactdb->hasQuerySettings( OContactAccess::WildCards | OContactAccess::IgnoreCase ) ){
232 return; 232 return;
233 } 233 }
234 234
235 query.setLastName( QString("%1*").arg(c) ); 235 query.setLastName( QString("%1*").arg(c) );
@@ -245,25 +245,25 @@ void AbView::setListOrder( const QValueList<int>& ordered )
245 m_orderedFields = ordered; 245 m_orderedFields = ordered;
246 updateView(); 246 updateView();
247} 247}
248 248
249 249
250QString AbView::showCategory() const 250QString 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
264 // Now switch to vCard Backend and load data. 264 // Now switch to vCard Backend and load data.
265 // The current default backend will be stored 265 // The current default backend will be stored
266 // to avoid unneeded load/stores. 266 // to avoid unneeded load/stores.
267 m_storedDB = m_contactdb; 267 m_storedDB = m_contactdb;
268 268
269 OContactAccessBackend* vcard_backend = new OContactAccessBackend_VCard( QString::null, 269 OContactAccessBackend* vcard_backend = new OContactAccessBackend_VCard( QString::null,
@@ -294,71 +294,71 @@ void AbView::showPersonal( bool personal )
294 294
295QStringList AbView::categories() 295QStringList AbView::categories()
296{ 296{
297 mCat.load( categoryFileName() ); 297 mCat.load( categoryFileName() );
298 QStringList categoryList = mCat.labels( "Contacts" ); 298 QStringList categoryList = mCat.labels( "Contacts" );
299 return categoryList; 299 return categoryList;
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;
313 313
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)
336 // This algorithm is a litte bit ineffective, but 336 // This algorithm is a litte bit ineffective, but
337 // we will not have a lot of matching entries.. 337 // we will not have a lot of matching entries..
338 clearForCategory(); 338 clearForCategory();
339 339
340 // Now show all found entries 340 // Now show all found entries
341 updateView( true ); 341 updateView( true );
342} 342}
343 343
344void AbView::offSearch() 344void AbView::offSearch()
345{ 345{
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;
359 break; 359 break;
360 case CardView: 360 case CardView:
361 qWarning("Switching to TableView"); 361 qWarning("Switching to TableView");
362 m_curr_View = TableView; 362 m_curr_View = TableView;
363 break; 363 break;
364 } 364 }
@@ -368,70 +368,70 @@ void AbView::slotSwitch(){
368 368
369// END: Slots 369// END: Slots
370 370
371void AbView::clearForCategory() 371void AbView::clearForCategory()
372{ 372{
373 OContactAccess::List::Iterator it; 373 OContactAccess::List::Iterator it;
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
432 if ( !newdata ){ 432 if ( !newdata ){
433 if ( m_list.count() ){ 433 if ( m_list.count() ){
434 switch ( (int) m_prev_View ) { 434 switch ( (int) m_prev_View ) {
435 case TableView: 435 case TableView:
436 m_curr_Contact = m_abTable -> currentEntry_UID(); 436 m_curr_Contact = m_abTable -> currentEntry_UID();
437 break; 437 break;
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
@@ -58,38 +58,45 @@ static inline bool constainsWhiteSpace( const QString &str );
58void parseEmailFrom( const QString &txt, QString &strDefaultEmail, 58void parseEmailFrom( const QString &txt, QString &strDefaultEmail,
59 QString &strAll ); 59 QString &strAll );
60 60
61// helper convert from file format to comma delimited... 61// helper convert from file format to comma delimited...
62void parseEmailTo( const QString &strDefaultEmail, 62void parseEmailTo( const QString &strDefaultEmail,
63 const QString &strOtherEmail, QString &strBack ); 63 const QString &strOtherEmail, QString &strBack );
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;
90 97
91 for (i = 0; i <= 6; i++) { 98 for (i = 0; i <= 6; i++) {
92 slHomeAddress.append( "" ); 99 slHomeAddress.append( "" );
93 slBusinessAddress.append( "" ); 100 slBusinessAddress.append( "" );
94 } 101 }
95 102
@@ -591,27 +598,27 @@ void ContactEditor::init() {
591 txtSuffix = new QLineEdit( dlgName ); 598 txtSuffix = new QLineEdit( dlgName );
592 gl->addWidget( txtSuffix, 3, 1 ); 599 gl->addWidget( txtSuffix, 3, 1 );
593 space = new QSpacerItem(1,1, 600 space = new QSpacerItem(1,1,
594 QSizePolicy::Maximum, 601 QSizePolicy::Maximum,
595 QSizePolicy::MinimumExpanding ); 602 QSizePolicy::MinimumExpanding );
596 gl->addItem( space, 4, 0 ); 603 gl->addItem( space, 4, 0 );
597 604
598 cmbChooserField1->insertStringList( trlChooserNames ); 605 cmbChooserField1->insertStringList( trlChooserNames );
599 cmbChooserField2->insertStringList( trlChooserNames ); 606 cmbChooserField2->insertStringList( trlChooserNames );
600 cmbChooserField3->insertStringList( trlChooserNames ); 607 cmbChooserField3->insertStringList( trlChooserNames );
601 cmbChooserField4->insertStringList( trlChooserNames ); 608 cmbChooserField4->insertStringList( trlChooserNames );
602 609
603 cmbChooserField1->setCurrentItem( 0 ); 610 cmbChooserField1->setCurrentItem( 0 );
604 cmbChooserField2->setCurrentItem( 1 ); 611 cmbChooserField2->setCurrentItem( 1 );
605 cmbChooserField3->setCurrentItem( 2 ); 612 cmbChooserField3->setCurrentItem( 2 );
606 613
607 connect( btnFullName, SIGNAL(clicked()), this, SLOT(slotName()) ); 614 connect( btnFullName, SIGNAL(clicked()), this, SLOT(slotName()) );
608 615
609 connect( txtFullName, SIGNAL(textChanged(const QString &)), this, SLOT(slotFullNameChange(const QString &)) ); 616 connect( txtFullName, SIGNAL(textChanged(const QString &)), this, SLOT(slotFullNameChange(const QString &)) );
610 617
611 connect( txtChooserField1, SIGNAL(textChanged(const QString &)), 618 connect( txtChooserField1, SIGNAL(textChanged(const QString &)),
612 this, SLOT(slotChooser1Change(const QString &)) ); 619 this, SLOT(slotChooser1Change(const QString &)) );
613 connect( txtChooserField2, SIGNAL(textChanged(const QString &)), 620 connect( txtChooserField2, SIGNAL(textChanged(const QString &)),
614 this, SLOT(slotChooser2Change(const QString &)) ); 621 this, SLOT(slotChooser2Change(const QString &)) );
615 connect( txtChooserField3, SIGNAL(textChanged(const QString &)), 622 connect( txtChooserField3, SIGNAL(textChanged(const QString &)),
616 this, SLOT(slotChooser3Change(const QString &)) ); 623 this, SLOT(slotChooser3Change(const QString &)) );
617 connect( txtChooserField4, SIGNAL(textChanged(const QString &)), 624 connect( txtChooserField4, SIGNAL(textChanged(const QString &)),
@@ -633,24 +640,26 @@ void ContactEditor::init() {
633 connect( cmbChooserField2, SIGNAL(activated(int)), 640 connect( cmbChooserField2, SIGNAL(activated(int)),
634 this, SLOT(slotCmbChooser2Change(int)) ); 641 this, SLOT(slotCmbChooser2Change(int)) );
635 connect( cmbChooserField3, SIGNAL(activated(int)), 642 connect( cmbChooserField3, SIGNAL(activated(int)),
636 this, SLOT(slotCmbChooser3Change(int)) ); 643 this, SLOT(slotCmbChooser3Change(int)) );
637 connect( cmbChooserField4, SIGNAL(activated(int)), 644 connect( cmbChooserField4, SIGNAL(activated(int)),
638 this, SLOT(slotCmbChooser4Change(int)) ); 645 this, SLOT(slotCmbChooser4Change(int)) );
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)
651 // int index = cmbChooserField1->currentItem(); 660 // int index = cmbChooserField1->currentItem();
652 // slChooserValues[index] = cmbDefaultEmail->text(i); 661 // slChooserValues[index] = cmbDefaultEmail->text(i);
653 662
654 defaultEmail = cmbDefaultEmail->text(i); 663 defaultEmail = cmbDefaultEmail->text(i);
655 qDebug ("Changed to: %s", defaultEmail.latin1()); 664 qDebug ("Changed to: %s", defaultEmail.latin1());
656 665
@@ -683,43 +692,52 @@ void ContactEditor::populateDefaultEmailCmb(){
683 692
684 // If the current default email is not found in the list, we choose the 693 // If the current default email is not found in the list, we choose the
685 // first one.. 694 // first one..
686 if ( !found ) 695 if ( !found )
687 defaultEmail = cmbDefaultEmail->text(0); 696 defaultEmail = cmbDefaultEmail->text(0);
688} 697}
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 );
720 cmbDefaultEmail->show(); 738 cmbDefaultEmail->show();
721 739
722 defaultEmailChooserPosition = widgetPos; 740 defaultEmailChooserPosition = widgetPos;
723 741
724 // Set current default email 742 // Set current default email
725 populateDefaultEmailCmb(); 743 populateDefaultEmailCmb();
@@ -935,24 +953,29 @@ void ContactEditor::slotCmbChooser4Change( int index ) {
935 qWarning("ContactEditor::slotCmbChooser4Change( %d )", index); 953 qWarning("ContactEditor::slotCmbChooser4Change( %d )", index);
936 954
937 if ( !cmbChooserChange( cmbChooserField4->currentItem(), txtChooserField4, 4) ){ 955 if ( !cmbChooserChange( cmbChooserField4->currentItem(), txtChooserField4, 4) ){
938 956
939 txtChooserField4->setText( slChooserValues[index] ); 957 txtChooserField4->setText( slChooserValues[index] );
940 txtChooserField4->setFocus(); 958 txtChooserField4->setFocus();
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] );
953 txtState->setText( slBusinessAddress[4] ); 976 txtState->setText( slBusinessAddress[4] );
954 txtZip->setText( slBusinessAddress[5] ); 977 txtZip->setText( slBusinessAddress[5] );
955 QLineEdit *txtTmp = cmbCountry->lineEdit(); 978 QLineEdit *txtTmp = cmbCountry->lineEdit();
956 txtTmp->setText( slBusinessAddress[6] ); 979 txtTmp->setText( slBusinessAddress[6] );
957 980
958 } else { 981 } else {
@@ -1267,30 +1290,30 @@ void ContactEditor::cleanupFields() {
1267 txtCity->setText(""); 1290 txtCity->setText("");
1268 txtState->setText(""); 1291 txtState->setText("");
1269 txtZip->setText(""); 1292 txtZip->setText("");
1270 QLineEdit *txtTmp = cmbCountry->lineEdit(); 1293 QLineEdit *txtTmp = cmbCountry->lineEdit();
1271 txtTmp->setText(""); 1294 txtTmp->setText("");
1272 txtTmp = cmbFileAs->lineEdit(); 1295 txtTmp = cmbFileAs->lineEdit();
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;
1291 txtFirstName->setText( ent.firstName() ); 1314 txtFirstName->setText( ent.firstName() );
1292 txtMiddleName->setText( ent.middleName() ); 1315 txtMiddleName->setText( ent.middleName() );
1293 txtLastName->setText( ent.lastName() ); 1316 txtLastName->setText( ent.lastName() );
1294 txtSuffix->setText( ent.suffix() ); 1317 txtSuffix->setText( ent.suffix() );
1295 1318
1296 QString *tmpString = new QString; 1319 QString *tmpString = new QString;
@@ -1446,53 +1469,73 @@ void ContactEditor::setEntry( const OContact &entry ) {
1446 1469
1447 1470
1448 } 1471 }
1449 1472
1450 1473
1451 cmbCat->setCategories( ent.categories(), "Contacts", tr("Contacts") ); 1474 cmbCat->setCategories( ent.categories(), "Contacts", tr("Contacts") );
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() ) );
1472 birthdayPicker->setDate( ent.birthday() ); 1513 birthdayPicker->setDate( ent.birthday() );
1473 } else 1514 } else
1474 birthdayButton->setText( tr ("Unknown") ); 1515 birthdayButton->setText( tr ("Unknown") );
1475 1516
1476 if ( !ent.anniversary().isNull() ){ 1517 if ( !ent.anniversary().isNull() ){
1477 anniversaryButton->setText( TimeString::numberDateString( ent.anniversary() ) ); 1518 anniversaryButton->setText( TimeString::numberDateString( ent.anniversary() ) );
1478 anniversaryPicker->setDate( ent.anniversary() ); 1519 anniversaryPicker->setDate( ent.anniversary() );
1479 } else 1520 } else
1480 anniversaryButton->setText( tr ("Unknown") ); 1521 anniversaryButton->setText( tr ("Unknown") );
1481 1522
1482} 1523}
1483 1524
1484void ContactEditor::saveEntry() { 1525void ContactEditor::saveEntry() {
1485 1526
1486 1527 // Store current combo into contact
1528 contactfields.saveToRecord( ent );
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 ) );
1492 1535
1493 useFullName = false; 1536 useFullName = false;
1494 } 1537 }
1495 1538
1496 ent.setFirstName( txtFirstName->text() ); 1539 ent.setFirstName( txtFirstName->text() );
1497 ent.setLastName( txtLastName->text() ); 1540 ent.setLastName( txtLastName->text() );
1498 ent.setMiddleName( txtMiddleName->text() ); 1541 ent.setMiddleName( txtMiddleName->text() );
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
@@ -21,24 +21,26 @@
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 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;
39const int NAME_M = 5; 41const int NAME_M = 5;
40const int NAME_L = 6; 42const int NAME_L = 6;
41const int NAME_S = 7; 43const int NAME_S = 7;
42 44
43 45
44class QScrollView; 46class QScrollView;
@@ -99,24 +101,25 @@ class ContactEditor : public QDialog {
99 void slotFullNameChange( const QString &textChanged ); 101 void slotFullNameChange( const QString &textChanged );
100 void slotAnniversaryDateChanged( int year, int month, int day); 102 void slotAnniversaryDateChanged( int year, int month, int day);
101 void slotBirthdayDateChanged( int year, int month, int day); 103 void slotBirthdayDateChanged( int year, int month, int day);
102 void slotRemoveBirthday(); 104 void slotRemoveBirthday();
103 void slotRemoveAnniversary(); 105 void slotRemoveAnniversary();
104 void defaultEmailChanged(int); 106 void defaultEmailChanged(int);
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;
117 QDialog *dlgName; 120 QDialog *dlgName;
118 121
119 QList<QLineEdit> listValue; 122 QList<QLineEdit> listValue;
120 QList<QLabel> listName; 123 QList<QLabel> listName;
121 124
122 QStringList slDynamicEntries; 125 QStringList slDynamicEntries;
@@ -167,15 +170,17 @@ class ContactEditor : public QDialog {
167 QLineEdit *txtCity; 170 QLineEdit *txtCity;
168 QLineEdit *txtState; 171 QLineEdit *txtState;
169 QLineEdit *txtZip; 172 QLineEdit *txtZip;
170 QComboBox *cmbAddress; 173 QComboBox *cmbAddress;
171 QComboBox *cmbCountry; 174 QComboBox *cmbCountry;
172 175
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
@@ -1,20 +1,22 @@
1 1
2#include "ocontactfields.h" 2#include "ocontactfields.h"
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 )
15{ 17{
16 QStringList list; 18 QStringList list;
17 19
18 list.append( "Office" ); 20 list.append( "Office" );
19 list.append( "Profession" ); 21 list.append( "Profession" );
20 list.append( "Assistant" ); 22 list.append( "Assistant" );
@@ -190,25 +192,25 @@ QStringList OContactFields::untrfields( bool sorted )
190 list += untrdetailsfields( sorted ); 192 list += untrdetailsfields( sorted );
191 193
192 list.append( "Notes" ); 194 list.append( "Notes" );
193 list.append( "Groups" ); 195 list.append( "Groups" );
194 196
195 if (sorted) list.sort(); 197 if (sorted) list.sort();
196 198
197 return list; 199 return list;
198} 200}
199QMap<int, QString> OContactFields::idToTrFields() 201QMap<int, QString> OContactFields::idToTrFields()
200{ 202{
201 QMap<int, QString> ret_map; 203 QMap<int, QString> ret_map;
202 204
203 ret_map.insert( Qtopia::Title, QObject::tr( "Name Title") ); 205 ret_map.insert( Qtopia::Title, QObject::tr( "Name Title") );
204 ret_map.insert( Qtopia::FirstName, QObject::tr( "First Name" ) ); 206 ret_map.insert( Qtopia::FirstName, QObject::tr( "First Name" ) );
205 ret_map.insert( Qtopia::MiddleName, QObject::tr( "Middle Name" ) ); 207 ret_map.insert( Qtopia::MiddleName, QObject::tr( "Middle Name" ) );
206 ret_map.insert( Qtopia::LastName, QObject::tr( "Last Name" ) ); 208 ret_map.insert( Qtopia::LastName, QObject::tr( "Last Name" ) );
207 ret_map.insert( Qtopia::Suffix, QObject::tr( "Suffix" )); 209 ret_map.insert( Qtopia::Suffix, QObject::tr( "Suffix" ));
208 ret_map.insert( Qtopia::FileAs, QObject::tr( "File As" ) ); 210 ret_map.insert( Qtopia::FileAs, QObject::tr( "File As" ) );
209 211
210 ret_map.insert( Qtopia::JobTitle, QObject::tr( "Job Title" ) ); 212 ret_map.insert( Qtopia::JobTitle, QObject::tr( "Job Title" ) );
211 ret_map.insert( Qtopia::Department, QObject::tr( "Department" ) ); 213 ret_map.insert( Qtopia::Department, QObject::tr( "Department" ) );
212 ret_map.insert( Qtopia::Company, QObject::tr( "Company" ) ); 214 ret_map.insert( Qtopia::Company, QObject::tr( "Company" ) );
213 ret_map.insert( Qtopia::BusinessPhone, QObject::tr( "Business Phone" ) ); 215 ret_map.insert( Qtopia::BusinessPhone, QObject::tr( "Business Phone" ) );
214 ret_map.insert( Qtopia::BusinessFax, QObject::tr( "Business Fax" ) ); 216 ret_map.insert( Qtopia::BusinessFax, QObject::tr( "Business Fax" ) );
@@ -245,30 +247,123 @@ QMap<int, QString> OContactFields::idToTrFields()
245 ret_map.insert( Qtopia::HomeWebPage, QObject::tr( "Home Web Page" ) ); 247 ret_map.insert( Qtopia::HomeWebPage, QObject::tr( "Home Web Page" ) );
246 248
247 //personal 249 //personal
248 ret_map.insert( Qtopia::Spouse, QObject::tr( "Spouse" ) ); 250 ret_map.insert( Qtopia::Spouse, QObject::tr( "Spouse" ) );
249 ret_map.insert( Qtopia::Gender, QObject::tr( "Gender" ) ); 251 ret_map.insert( Qtopia::Gender, QObject::tr( "Gender" ) );
250 ret_map.insert( Qtopia::Birthday, QObject::tr( "Birthday" ) ); 252 ret_map.insert( Qtopia::Birthday, QObject::tr( "Birthday" ) );
251 ret_map.insert( Qtopia::Anniversary, QObject::tr( "Anniversary" ) ); 253 ret_map.insert( Qtopia::Anniversary, QObject::tr( "Anniversary" ) );
252 ret_map.insert( Qtopia::Nickname, QObject::tr( "Nickname" ) ); 254 ret_map.insert( Qtopia::Nickname, QObject::tr( "Nickname" ) );
253 ret_map.insert( Qtopia::Children, QObject::tr( "Children" ) ); 255 ret_map.insert( Qtopia::Children, QObject::tr( "Children" ) );
254 256
255 // other 257 // other
256 ret_map.insert( Qtopia::Notes, QObject::tr( "Notes" ) ); 258 ret_map.insert( Qtopia::Notes, QObject::tr( "Notes" ) );
257 259
258 260
259 return ret_map; 261 return ret_map;
260} 262}
261 263
262QMap<QString, int> OContactFields::trFieldsToId() 264QMap<QString, int> OContactFields::trFieldsToId()
263{ 265{
264 QMap<int, QString> idtostr = idToTrFields(); 266 QMap<int, QString> idtostr = idToTrFields();
265 QMap<QString, int> ret_map; 267 QMap<QString, int> ret_map;
266 268
267 269
268 QMap<int, QString>::Iterator it; 270 QMap<int, QString>::Iterator it;
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
@@ -1,23 +1,57 @@
1#ifndef OPIE_CONTACTS_FIELDS 1#ifndef OPIE_CONTACTS_FIELDS
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>
8 9
10#define CONTACT_FIELD_ORDER_NAME "opie-contactfield-order"
11#define DEFAULT_FIELD_ORDER "__________"
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 );
18 52
19 static QMap<int, QString> idToTrFields(); 53 static QMap<int, QString> idToTrFields();
20 static QMap<QString, int> trFieldsToId(); 54 static QMap<QString, int> trFieldsToId();
21 55
22}; 56};
23 57
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