summaryrefslogtreecommitdiff
authoreilers <eilers>2002-10-20 12:24:37 (UTC)
committer eilers <eilers>2002-10-20 12:24:37 (UTC)
commit4b27ac49b4027ffd59d2606f1aceea313446aede (patch) (unidiff)
treec03c578b727fbb95ffd0e2f2b8a2b6275ca781d5
parent82689364fd558ccd28253961204e6b3eb9e32b03 (diff)
downloadopie-4b27ac49b4027ffd59d2606f1aceea313446aede.zip
opie-4b27ac49b4027ffd59d2606f1aceea313446aede.tar.gz
opie-4b27ac49b4027ffd59d2606f1aceea313446aede.tar.bz2
Connected configuration to search engine
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/addressbook/TODO18
-rw-r--r--core/pim/addressbook/abtable.cpp3
-rw-r--r--core/pim/addressbook/abtable.h2
-rw-r--r--core/pim/addressbook/addressbook.cpp2
4 files changed, 14 insertions, 11 deletions
diff --git a/core/pim/addressbook/TODO b/core/pim/addressbook/TODO
index 0accd87..4daa2a8 100644
--- a/core/pim/addressbook/TODO
+++ b/core/pim/addressbook/TODO
@@ -1,31 +1,33 @@
1Stuff todo: 1Stuff todo until OPIE 1.0 :
2 2
3Urgent: 3Urgent:
4 4
5- Font menu is invisible using german translation 5- Font menu is invisible using german translation
6 6
7Important: 7Important:
8 8
9- Finishing of new View functions (List, Phonebook...) 9- Picker: Activated letter schould be more visible
10- Reload if contacts were changed externally
11- "What's this" should be added 10- "What's this" should be added
12- The names of the countries are sorted by there english names, only..
13 Even if they are translated.. :S
14- Store last settings of combo-boxes 11- Store last settings of combo-boxes
15- Mail-Icon is missing 12- Mail-Icon is missing
13- Finishing of new View functions (List, Phonebook...)
14- The names of the countries are sorted by there english names, only..
15 Even if they are translated.. :S
16- Reload if contacts were changed externally
16 17
17Less important: 18Less important:
18 19
19- Find widget should be replaced by something like
20 qpdf has.
21- The picker (alphabetical sort widget) should be 20- The picker (alphabetical sort widget) should be
22 placed verticaly or horizontally (configurable) 21 placed verticaly or horizontally (configurable)
23- Use advanced database functions in abtable to decrease 22- Use advanced database functions in abtable to decrease
24 memory footprint and to make everything more easy ! 23 memory footprint and to make everything more easy !
25 (abtable should store Iterator for selected Category) 24 (abtable should store Iterator for selected Category)
26 25
27Should be Fixed (not absolute sure, need validation): 26Should be Fixed (not absolute sure, need further validation):
28- "Nonenglish" translation bug has to be fixed. 27- "Nonenglish" translation bug has to be fixed.
29 28
30Fixed: 29Fixed:
31- Syncing: abtable not reloaded after sync. 30- Syncing: abtable not reloaded after sync.
31- Find widget should be replaced by something like
32 qpdf has.
33- Adding a configuration dialog \ No newline at end of file
diff --git a/core/pim/addressbook/abtable.cpp b/core/pim/addressbook/abtable.cpp
index 97f4a8f..d4dcf7b 100644
--- a/core/pim/addressbook/abtable.cpp
+++ b/core/pim/addressbook/abtable.cpp
@@ -445,406 +445,407 @@ QString AbTable::findContactContact( const OContact &entry, int /* row */ )
445} 445}
446 446
447void AbTable::addEntry( const OContact &newCnt ) 447void AbTable::addEntry( const OContact &newCnt )
448{ 448{
449 int row = numRows(); 449 int row = numRows();
450 450
451 setNumRows( row + 1 ); 451 setNumRows( row + 1 );
452 insertIntoTable( newCnt, row ); 452 insertIntoTable( newCnt, row );
453 453
454 qWarning("abtable:AddContact"); 454 qWarning("abtable:AddContact");
455 m_contactdb.add ( newCnt ); 455 m_contactdb.add ( newCnt );
456 456
457 setCurrentCell( row, 0 ); 457 setCurrentCell( row, 0 );
458 // updateVisible(); 458 // updateVisible();
459} 459}
460 460
461void AbTable::resizeRows() { 461void AbTable::resizeRows() {
462 /* 462 /*
463 if (numRows()) { 463 if (numRows()) {
464 for (int i = 0; i < numRows(); i++) { 464 for (int i = 0; i < numRows(); i++) {
465 setRowHeight( i, size ); 465 setRowHeight( i, size );
466 } 466 }
467 } 467 }
468 updateVisible(); 468 updateVisible();
469 */ 469 */
470} 470}
471 471
472 472
473bool AbTable::save() 473bool AbTable::save()
474{ 474{
475 // QTime t; 475 // QTime t;
476 // t.start(); 476 // t.start();
477 qWarning("abtable:Save data"); 477 qWarning("abtable:Save data");
478 478
479 return m_contactdb.save(); 479 return m_contactdb.save();
480} 480}
481 481
482void AbTable::load() 482void AbTable::load()
483{ 483{
484 setSorting( false ); 484 setSorting( false );
485 setUpdatesEnabled( FALSE ); 485 setUpdatesEnabled( FALSE );
486 486
487 qWarning("abtable:Load data"); 487 qWarning("abtable:Load data");
488 488
489 OContactAccess::List list = m_contactdb.allRecords(); 489 OContactAccess::List list = m_contactdb.allRecords();
490 OContactAccess::List::Iterator it; 490 OContactAccess::List::Iterator it;
491 setNumRows( list.count() ); 491 setNumRows( list.count() );
492 int row = 0; 492 int row = 0;
493 for ( it = list.begin(); it != list.end(); ++it ) 493 for ( it = list.begin(); it != list.end(); ++it )
494 insertIntoTable( *it, row++ ); 494 insertIntoTable( *it, row++ );
495 495
496 setUpdatesEnabled( TRUE ); 496 setUpdatesEnabled( TRUE );
497 497
498 setSorting( true ); 498 setSorting( true );
499 resort(); 499 resort();
500} 500}
501 501
502 502
503void AbTable::reload() 503void AbTable::reload()
504{ 504{
505 m_contactdb.reload(); 505 m_contactdb.reload();
506 load(); 506 load();
507} 507}
508 508
509void AbTable::realignTable( int row ) 509void AbTable::realignTable( int row )
510{ 510{
511 QTableItem *ti1, 511 QTableItem *ti1,
512 *ti2; 512 *ti2;
513 int totalRows = numRows(); 513 int totalRows = numRows();
514 for ( int curr = row; curr < totalRows - 1; curr++ ) { 514 for ( int curr = row; curr < totalRows - 1; curr++ ) {
515 // the same info from the todo list still applies, but I 515 // the same info from the todo list still applies, but I
516 // don't think it is _too_ bad. 516 // don't think it is _too_ bad.
517 ti1 = item( curr + 1, 0 ); 517 ti1 = item( curr + 1, 0 );
518 ti2 = item( curr + 1, 1 ); 518 ti2 = item( curr + 1, 1 );
519 takeItem( ti1 ); 519 takeItem( ti1 );
520 takeItem( ti2 ); 520 takeItem( ti2 );
521 setItem( curr, 0, ti1 ); 521 setItem( curr, 0, ti1 );
522 setItem( curr, 1, ti2 ); 522 setItem( curr, 1, ti2 );
523 } 523 }
524 setNumRows( totalRows - 1 ); 524 setNumRows( totalRows - 1 );
525 resort(); 525 resort();
526} 526}
527 527
528// Add contact into table. 528// Add contact into table.
529void AbTable::insertIntoTable( const OContact &cnt, int row ) 529void AbTable::insertIntoTable( const OContact &cnt, int row )
530{ 530{
531 QString strName, 531 QString strName,
532 strContact; 532 strContact;
533 533
534 strName = findContactName( cnt ); 534 strName = findContactName( cnt );
535 strContact = findContactContact( cnt, row ); 535 strContact = findContactContact( cnt, row );
536 536
537 AbTableItem *ati; 537 AbTableItem *ati;
538 ati = new AbTableItem( this, QTableItem::Never, strName, strContact); 538 ati = new AbTableItem( this, QTableItem::Never, strName, strContact);
539 contactList.insert( ati, cnt ); 539 contactList.insert( ati, cnt );
540 setItem( row, 0, ati ); 540 setItem( row, 0, ati );
541 ati = new AbTableItem( this, QTableItem::Never, strContact, strName); 541 ati = new AbTableItem( this, QTableItem::Never, strContact, strName);
542 setItem( row, 1, ati ); 542 setItem( row, 1, ati );
543 543
544 //### cannot do this; table only has two columns at this point 544 //### cannot do this; table only has two columns at this point
545 // setItem( row, 2, new AbPickItem( this ) ); 545 // setItem( row, 2, new AbPickItem( this ) );
546 546
547 // resort at some point? 547 // resort at some point?
548} 548}
549 549
550 550
551// Replace or add an entry 551// Replace or add an entry
552void AbTable::journalFreeReplace( const OContact &cnt, int row ) 552void AbTable::journalFreeReplace( const OContact &cnt, int row )
553{ 553{
554 QString strName, 554 QString strName,
555 strContact; 555 strContact;
556 AbTableItem *ati = 0l; 556 AbTableItem *ati = 0l;
557 557
558 strName = findContactName( cnt ); 558 strName = findContactName( cnt );
559 strContact = findContactContact( cnt, row ); 559 strContact = findContactContact( cnt, row );
560 ati = static_cast<AbTableItem*>(item(row, 0)); 560 ati = static_cast<AbTableItem*>(item(row, 0));
561 561
562 // Replace element if found in row "row" 562 // Replace element if found in row "row"
563 // or add this element if not. 563 // or add this element if not.
564 if ( ati != 0 ) { // replace 564 if ( ati != 0 ) { // replace
565 // :SX db access -> replace 565 // :SX db access -> replace
566 qWarning ("Replace Contact in DB ! UID: %d", contactList[ati].uid() ); 566 qWarning ("Replace Contact in DB ! UID: %d", contactList[ati].uid() );
567 m_contactdb.replace ( cnt ); 567 m_contactdb.replace ( cnt );
568 568
569 contactList.remove( ati ); 569 contactList.remove( ati );
570 ati->setItem( strName, strContact ); 570 ati->setItem( strName, strContact );
571 contactList.insert( ati, cnt ); 571 contactList.insert( ati, cnt );
572 572
573 ati = static_cast<AbTableItem*>(item(row, 1)); 573 ati = static_cast<AbTableItem*>(item(row, 1));
574 ati->setItem( strContact, strName ); 574 ati->setItem( strContact, strName );
575 575
576 }else{ // add 576 }else{ // add
577 int myrows = numRows(); 577 int myrows = numRows();
578 setNumRows( myrows + 1 ); 578 setNumRows( myrows + 1 );
579 insertIntoTable( cnt, myrows ); 579 insertIntoTable( cnt, myrows );
580 // gets deleted when returning -- Why ? (se) 580 // gets deleted when returning -- Why ? (se)
581 // :SX db access -> add 581 // :SX db access -> add
582 qWarning ("Are you sure to add to database ? -> Currently disabled !!"); 582 qWarning ("Are you sure to add to database ? -> Currently disabled !!");
583 // m_contactdb.add( cnt ); 583 // m_contactdb.add( cnt );
584 } 584 }
585} 585}
586 586
587// Remove entry 587// Remove entry
588void AbTable::journalFreeRemove( int row ) 588void AbTable::journalFreeRemove( int row )
589{ 589{
590 AbTableItem *ati; 590 AbTableItem *ati;
591 ati = static_cast<AbTableItem*>(item(row, 0)); 591 ati = static_cast<AbTableItem*>(item(row, 0));
592 if ( !ati ) 592 if ( !ati )
593 return; 593 return;
594 594
595 // :SX db access -> remove 595 // :SX db access -> remove
596 qWarning ("Remove Contact from DB ! UID: %d",contactList[ati].uid() ); 596 qWarning ("Remove Contact from DB ! UID: %d",contactList[ati].uid() );
597 m_contactdb.remove( contactList[ati].uid() ); 597 m_contactdb.remove( contactList[ati].uid() );
598 598
599 contactList.remove( ati ); 599 contactList.remove( ati );
600 600
601 realignTable( row ); 601 realignTable( row );
602 602
603} 603}
604 604
605#if QT_VERSION <= 230 605#if QT_VERSION <= 230
606#ifndef SINGLE_APP 606#ifndef SINGLE_APP
607void QTable::paintEmptyArea( QPainter *p, int cx, int cy, int cw, int ch ) 607void QTable::paintEmptyArea( QPainter *p, int cx, int cy, int cw, int ch )
608{ 608{
609 // Region of the rect we should draw 609 // Region of the rect we should draw
610 QRegion reg( QRect( cx, cy, cw, ch ) ); 610 QRegion reg( QRect( cx, cy, cw, ch ) );
611 // Subtract the table from it 611 // Subtract the table from it
612 reg = reg.subtract( QRect( QPoint( 0, 0 ), tableSize() ) ); 612 reg = reg.subtract( QRect( QPoint( 0, 0 ), tableSize() ) );
613 // And draw the rectangles (transformed as needed) 613 // And draw the rectangles (transformed as needed)
614 QArray<QRect> r = reg.rects(); 614 QArray<QRect> r = reg.rects();
615 for (unsigned int i=0; i<r.count(); i++) 615 for (unsigned int i=0; i<r.count(); i++)
616 p->fillRect( r[i], colorGroup().brush( QColorGroup::Base ) ); 616 p->fillRect( r[i], colorGroup().brush( QColorGroup::Base ) );
617} 617}
618#endif 618#endif
619#endif 619#endif
620 620
621 621
622// int AbTable::rowHeight( int ) const 622// int AbTable::rowHeight( int ) const
623// { 623// {
624// return 18; 624// return 18;
625// } 625// }
626 626
627// int AbTable::rowPos( int row ) const 627// int AbTable::rowPos( int row ) const
628// { 628// {
629// return 18*row; 629// return 18*row;
630// } 630// }
631 631
632// int AbTable::rowAt( int pos ) const 632// int AbTable::rowAt( int pos ) const
633// { 633// {
634// return QMIN( pos/18, numRows()-1 ); 634// return QMIN( pos/18, numRows()-1 );
635// } 635// }
636 636
637void AbTable::slotDoFind( const QString &findString, bool caseSensitive, 637void AbTable::slotDoFind( const QString &findString, bool caseSensitive, bool useRegExp,
638 bool backwards, QString cat /* int category */ ) 638 bool backwards, QString cat /* int category */ )
639{ 639{
640 int category = 0; 640 int category = 0;
641 641
642 // Use the current Category if nothing else selected 642 // Use the current Category if nothing else selected
643 if ( cat.isEmpty() ) 643 if ( cat.isEmpty() )
644 category = mCat.id( "Contacts", showCat ); 644 category = mCat.id( "Contacts", showCat );
645 else{ 645 else{
646 category = mCat.id("Contacts", cat ); 646 category = mCat.id("Contacts", cat );
647 } 647 }
648 648
649 qWarning ("Found in Category %d", category); 649 qWarning ("Found in Category %d", category);
650 650
651 if ( currFindRow < -1 ) 651 if ( currFindRow < -1 )
652 currFindRow = - 1; 652 currFindRow = - 1;
653 653
654 clearSelection( TRUE ); 654 clearSelection( TRUE );
655 int rows, row; 655 int rows, row;
656 AbTableItem *ati; 656 AbTableItem *ati;
657 QRegExp r( findString ); 657 QRegExp r( findString );
658 r.setCaseSensitive( caseSensitive ); 658 r.setCaseSensitive( caseSensitive );
659 r.setWildcard( !useRegExp );
659 rows = numRows(); 660 rows = numRows();
660 static bool wrapAround = true; 661 static bool wrapAround = true;
661 662
662 if ( !backwards ) { 663 if ( !backwards ) {
663 for ( row = currFindRow + 1; row < rows; row++ ) { 664 for ( row = currFindRow + 1; row < rows; row++ ) {
664 ati = static_cast<AbTableItem*>( item(row, 0) ); 665 ati = static_cast<AbTableItem*>( item(row, 0) );
665 if ( contactCompare( contactList[ati], r, category ) ) 666 if ( contactCompare( contactList[ati], r, category ) )
666 break; 667 break;
667 } 668 }
668 } else { 669 } else {
669 for ( row = currFindRow - 1; row > -1; row-- ) { 670 for ( row = currFindRow - 1; row > -1; row-- ) {
670 ati = static_cast<AbTableItem*>( item(row, 0) ); 671 ati = static_cast<AbTableItem*>( item(row, 0) );
671 if ( contactCompare( contactList[ati], r, category ) ) 672 if ( contactCompare( contactList[ati], r, category ) )
672 break; 673 break;
673 } 674 }
674 } 675 }
675 if ( row >= rows || row < 0 ) { 676 if ( row >= rows || row < 0 ) {
676 if ( row < 0 ) 677 if ( row < 0 )
677 currFindRow = rows; 678 currFindRow = rows;
678 else 679 else
679 currFindRow = -1; 680 currFindRow = -1;
680 681
681 if ( wrapAround ) 682 if ( wrapAround )
682 emit signalWrapAround(); 683 emit signalWrapAround();
683 else 684 else
684 emit signalNotFound(); 685 emit signalNotFound();
685 686
686 wrapAround = !wrapAround; 687 wrapAround = !wrapAround;
687 } else { 688 } else {
688 currFindRow = row; 689 currFindRow = row;
689 QTableSelection foundSelection; 690 QTableSelection foundSelection;
690 foundSelection.init( currFindRow, 0 ); 691 foundSelection.init( currFindRow, 0 );
691 foundSelection.expandTo( currFindRow, numCols() - 1 ); 692 foundSelection.expandTo( currFindRow, numCols() - 1 );
692 addSelection( foundSelection ); 693 addSelection( foundSelection );
693 setCurrentCell( currFindRow, 0 /* numCols() - 1 */ ); 694 setCurrentCell( currFindRow, 0 /* numCols() - 1 */ );
694 wrapAround = true; 695 wrapAround = true;
695 } 696 }
696} 697}
697 698
698static bool contactCompare( const OContact &cnt, const QRegExp &r, int category ) 699static bool contactCompare( const OContact &cnt, const QRegExp &r, int category )
699{ 700{
700 bool returnMe; 701 bool returnMe;
701 QArray<int> cats; 702 QArray<int> cats;
702 cats = cnt.categories(); 703 cats = cnt.categories();
703 704
704 returnMe = false; 705 returnMe = false;
705 if ( (cats.count() == 0) || (category == 0) ) 706 if ( (cats.count() == 0) || (category == 0) )
706 returnMe = cnt.match( r ); 707 returnMe = cnt.match( r );
707 else { 708 else {
708 int i; 709 int i;
709 for ( i = 0; i < int(cats.count()); i++ ) { 710 for ( i = 0; i < int(cats.count()); i++ ) {
710 if ( cats[i] == category ) { 711 if ( cats[i] == category ) {
711 returnMe = cnt.match( r ); 712 returnMe = cnt.match( r );
712 break; 713 break;
713 } 714 }
714 } 715 }
715 } 716 }
716 717
717 return returnMe; 718 return returnMe;
718} 719}
719 720
720void AbTable::fitColumns() 721void AbTable::fitColumns()
721{ 722{
722 int contentsWidth = visibleWidth() / 2; 723 int contentsWidth = visibleWidth() / 2;
723 724
724 if ( showBk == "Cards" ) { 725 if ( showBk == "Cards" ) {
725 showColumn(1); 726 showColumn(1);
726 //adjustColumn(1); 727 //adjustColumn(1);
727 setColumnWidth( 1, visibleWidth() ); 728 setColumnWidth( 1, visibleWidth() );
728 columnVisible = false; 729 columnVisible = false;
729 } else { 730 } else {
730 if ( columnVisible == false ){ 731 if ( columnVisible == false ){
731 showColumn(0); 732 showColumn(0);
732 columnVisible = true; 733 columnVisible = true;
733 } 734 }
734 setColumnWidth( 0, contentsWidth ); 735 setColumnWidth( 0, contentsWidth );
735 adjustColumn(1); 736 adjustColumn(1);
736 if ( columnWidth(1) < contentsWidth ) 737 if ( columnWidth(1) < contentsWidth )
737 setColumnWidth( 1, contentsWidth ); 738 setColumnWidth( 1, contentsWidth );
738 } 739 }
739} 740}
740 741
741void AbTable::show() 742void AbTable::show()
742{ 743{
743 fitColumns(); 744 fitColumns();
744 QTable::show(); 745 QTable::show();
745} 746}
746 747
747void AbTable::setChoiceNames( const QStringList& list) 748void AbTable::setChoiceNames( const QStringList& list)
748{ 749{
749 choicenames = list; 750 choicenames = list;
750 if ( choicenames.isEmpty() ) { 751 if ( choicenames.isEmpty() ) {
751 // hide pick column 752 // hide pick column
752 setNumCols( 2 ); 753 setNumCols( 2 );
753 } else { 754 } else {
754 // show pick column 755 // show pick column
755 setNumCols( 3 ); 756 setNumCols( 3 );
756 setColumnWidth( 2, fontMetrics().width(tr( "Pick" ))+8 ); 757 setColumnWidth( 2, fontMetrics().width(tr( "Pick" ))+8 );
757 horizontalHeader()->setLabel( 2, tr( "Pick" )); 758 horizontalHeader()->setLabel( 2, tr( "Pick" ));
758 } 759 }
759 fitColumns(); 760 fitColumns();
760} 761}
761 762
762void AbTable::itemClicked(int,int col) 763void AbTable::itemClicked(int,int col)
763{ 764{
764 if ( col == 2 ) { 765 if ( col == 2 ) {
765 return; 766 return;
766 } else { 767 } else {
767 emit details(); 768 emit details();
768 } 769 }
769} 770}
770 771
771QStringList AbTable::choiceNames() const 772QStringList AbTable::choiceNames() const
772{ 773{
773 return choicenames; 774 return choicenames;
774} 775}
775 776
776void AbTable::setChoiceSelection(int /*index*/, const QStringList& /*list*/) 777void AbTable::setChoiceSelection(int /*index*/, const QStringList& /*list*/)
777{ 778{
778 /* ###### 779 /* ######
779 780
780 QString selname = choicenames.at(index); 781 QString selname = choicenames.at(index);
781 for (each row) { 782 for (each row) {
782 OContact *c = contactForRow(row); 783 OContact *c = contactForRow(row);
783 if ( list.contains(c->email) ) { 784 if ( list.contains(c->email) ) {
784 list.remove(c->email); 785 list.remove(c->email);
785 setText(row, 2, selname); 786 setText(row, 2, selname);
786 } 787 }
787 } 788 }
788 for (remaining list items) { 789 for (remaining list items) {
789 OContact *c = new contact(item); 790 OContact *c = new contact(item);
790 setText(newrow, 2, selname); 791 setText(newrow, 2, selname);
791 } 792 }
792 793
793 */ 794 */
794} 795}
795 796
796QStringList AbTable::choiceSelection(int /*index*/) const 797QStringList AbTable::choiceSelection(int /*index*/) const
797{ 798{
798 QStringList r; 799 QStringList r;
799 /* ###### 800 /* ######
800 801
801 QString selname = choicenames.at(index); 802 QString selname = choicenames.at(index);
802 for (each row) { 803 for (each row) {
803 OContact *c = contactForRow(row); 804 OContact *c = contactForRow(row);
804 if ( text(row,2) == selname ) { 805 if ( text(row,2) == selname ) {
805 r.append(c->email); 806 r.append(c->email);
806 } 807 }
807 } 808 }
808 809
809 */ 810 */
810 return r; 811 return r;
811} 812}
812 813
813void AbTable::setShowCategory( const QString &b, const QString &c ) 814void AbTable::setShowCategory( const QString &b, const QString &c )
814{ 815{
815 showBk = b; 816 showBk = b;
816 showCat = c; 817 showCat = c;
817 //QMessageBox::information( this, "setShowCategory", "setShowCategory" ); 818 //QMessageBox::information( this, "setShowCategory", "setShowCategory" );
818 //updateVisible(); 819 //updateVisible();
819 refresh(); 820 refresh();
820 ensureCellVisible( currentRow(), 0 ); 821 ensureCellVisible( currentRow(), 0 );
821 updateVisible(); // :SX 822 updateVisible(); // :SX
822} 823}
823 824
824void AbTable::setShowByLetter( char c ) 825void AbTable::setShowByLetter( char c )
825{ 826{
826 showChar = tolower(c); 827 showChar = tolower(c);
827 updateVisible(); 828 updateVisible();
828} 829}
829 830
830QString AbTable::showCategory() const 831QString AbTable::showCategory() const
831{ 832{
832 return showCat; 833 return showCat;
833} 834}
834 835
835QString AbTable::showBook() const 836QString AbTable::showBook() const
836{ 837{
837 return showBk; 838 return showBk;
838} 839}
839 840
840QStringList AbTable::categories() 841QStringList AbTable::categories()
841{ 842{
842 mCat.load( categoryFileName() ); 843 mCat.load( categoryFileName() );
843 QStringList categoryList = mCat.labels( "Contacts" ); 844 QStringList categoryList = mCat.labels( "Contacts" );
844 return categoryList; 845 return categoryList;
845} 846}
846 847
847void AbTable::updateVisible() 848void AbTable::updateVisible()
848{ 849{
849 int visible, 850 int visible,
850 totalRows, 851 totalRows,
diff --git a/core/pim/addressbook/abtable.h b/core/pim/addressbook/abtable.h
index 1039e66..b445874 100644
--- a/core/pim/addressbook/abtable.h
+++ b/core/pim/addressbook/abtable.h
@@ -1,154 +1,154 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#ifndef ABTABLE_H 21#ifndef ABTABLE_H
22#define ABTABLE_H 22#define ABTABLE_H
23 23
24#include <qpe/categories.h> 24#include <qpe/categories.h>
25#include <opie/ocontact.h> 25#include <opie/ocontact.h>
26 26
27#include <qmap.h> 27#include <qmap.h>
28#include <qtable.h> 28#include <qtable.h>
29#include <qstringlist.h> 29#include <qstringlist.h>
30#include <qcombobox.h> 30#include <qcombobox.h>
31 31
32#include <opie/ocontactaccess.h> 32#include <opie/ocontactaccess.h>
33 33
34class AbTableItem : public QTableItem 34class AbTableItem : public QTableItem
35{ 35{
36public: 36public:
37 AbTableItem( QTable *t, EditType et, const QString &s, 37 AbTableItem( QTable *t, EditType et, const QString &s,
38 const QString &secondSortKey); 38 const QString &secondSortKey);
39 QString entryKey() const; 39 QString entryKey() const;
40 void setEntryKey( const QString & k ); 40 void setEntryKey( const QString & k );
41 virtual int alignment() const; 41 virtual int alignment() const;
42 virtual QString key() const; 42 virtual QString key() const;
43 void setItem( const QString &txt, const QString &secondKey ); 43 void setItem( const QString &txt, const QString &secondKey );
44 44
45private: 45private:
46 QString sortKey; 46 QString sortKey;
47}; 47};
48 48
49class AbPickItem : public QTableItem 49class AbPickItem : public QTableItem
50{ 50{
51public: 51public:
52 AbPickItem( QTable *t ); 52 AbPickItem( QTable *t );
53 53
54 QWidget *createEditor() const; 54 QWidget *createEditor() const;
55 void setContentFromEditor( QWidget *w ); 55 void setContentFromEditor( QWidget *w );
56 56
57private: 57private:
58 QGuardedPtr<QComboBox> cb; 58 QGuardedPtr<QComboBox> cb;
59}; 59};
60 60
61class AbTable : public QTable 61class AbTable : public QTable
62{ 62{
63 Q_OBJECT 63 Q_OBJECT
64 64
65public: 65public:
66 AbTable( const QValueList<int> *ordered, QWidget *parent, const char *name=0 ); 66 AbTable( const QValueList<int> *ordered, QWidget *parent, const char *name=0 );
67 ~AbTable(); 67 ~AbTable();
68 // NEW 68 // NEW
69 void addEntry( const OContact &newContact ); 69 void addEntry( const OContact &newContact );
70 OContact currentEntry(); 70 OContact currentEntry();
71 void replaceCurrentEntry( const OContact &newContact ); 71 void replaceCurrentEntry( const OContact &newContact );
72 72
73 void init(); 73 void init();
74 74
75 void deleteCurrentEntry(); 75 void deleteCurrentEntry();
76 void clear(); 76 void clear();
77 void clearFindRow() { currFindRow = -1; } 77 void clearFindRow() { currFindRow = -1; }
78 void loadFields(); 78 void loadFields();
79 void refresh(); 79 void refresh();
80 bool save(); 80 bool save();
81 void load(); 81 void load();
82 void reload(); 82 void reload();
83 83
84 // addresspicker mode 84 // addresspicker mode
85 void setChoiceNames( const QStringList& list); 85 void setChoiceNames( const QStringList& list);
86 QStringList choiceNames() const; 86 QStringList choiceNames() const;
87 void setChoiceSelection(int index, const QStringList& list); 87 void setChoiceSelection(int index, const QStringList& list);
88 QStringList choiceSelection(int index) const; 88 QStringList choiceSelection(int index) const;
89 void setShowCategory( const QString &b, const QString &c ); 89 void setShowCategory( const QString &b, const QString &c );
90 void setShowByLetter( char c ); 90 void setShowByLetter( char c );
91 QString showCategory() const; 91 QString showCategory() const;
92 QStringList categories(); 92 QStringList categories();
93 93
94 void resizeRows(); 94 void resizeRows();
95 95
96 void show(); 96 void show();
97 void setPaintingEnabled( bool e ); 97 void setPaintingEnabled( bool e );
98 98
99 QString showBook() const; 99 QString showBook() const;
100 100
101public slots: 101public slots:
102 void slotDoFind( const QString &str, bool caseSensitive, bool backwards, 102 void slotDoFind( const QString &str, bool caseSensitive, bool useRegExp, bool backwards,
103 QString category = QString::null ); 103 QString category = QString::null );
104signals: 104signals:
105 void empty( bool ); 105 void empty( bool );
106 void details(); 106 void details();
107 void signalNotFound(); 107 void signalNotFound();
108 void signalWrapAround(); 108 void signalWrapAround();
109 109
110protected: 110protected:
111 virtual void keyPressEvent( QKeyEvent *e ); 111 virtual void keyPressEvent( QKeyEvent *e );
112 112
113// int rowHeight( int ) const; 113// int rowHeight( int ) const;
114// int rowPos( int row ) const; 114// int rowPos( int row ) const;
115// virtual int rowAt( int pos ) const; 115// virtual int rowAt( int pos ) const;
116 116
117 117
118protected slots: 118protected slots:
119 void moveTo( char ); 119 void moveTo( char );
120 virtual void columnClicked( int col ); 120 virtual void columnClicked( int col );
121 void itemClicked(int,int col); 121 void itemClicked(int,int col);
122 void rowHeightChanged( int row ); 122 void rowHeightChanged( int row );
123 123
124private: 124private:
125 void loadFile( const QString &strFile, bool journalFile ); 125 void loadFile( const QString &strFile, bool journalFile );
126 void fitColumns(); 126 void fitColumns();
127 void resort(); 127 void resort();
128 void updateJournal( const OContact &contact, OContact::journal_action action, 128 void updateJournal( const OContact &contact, OContact::journal_action action,
129 int row = -1 ); 129 int row = -1 );
130 void insertIntoTable( const OContact &contact, int row ); 130 void insertIntoTable( const OContact &contact, int row );
131 QString findContactName( const OContact &entry ); 131 QString findContactName( const OContact &entry );
132 QString findContactContact( const OContact &entry, int row ); 132 QString findContactContact( const OContact &entry, int row );
133 void journalFreeReplace( const OContact &cnt, int row ); 133 void journalFreeReplace( const OContact &cnt, int row );
134 void journalFreeRemove( int row ); 134 void journalFreeRemove( int row );
135 void realignTable( int ); 135 void realignTable( int );
136 void updateVisible(); 136 void updateVisible();
137 int lastSortCol; 137 int lastSortCol;
138 bool asc; 138 bool asc;
139 char showChar; 139 char showChar;
140 QMap<AbTableItem*, OContact> contactList; 140 QMap<AbTableItem*, OContact> contactList;
141 const QValueList<int> *intFields; 141 const QValueList<int> *intFields;
142 int currFindRow; 142 int currFindRow;
143 QString showCat; 143 QString showCat;
144 QStringList choicenames; 144 QStringList choicenames;
145 bool enablePainting; 145 bool enablePainting;
146 Categories mCat; 146 Categories mCat;
147 147
148 QString showBk; 148 QString showBk;
149 bool columnVisible; 149 bool columnVisible;
150 150
151 OContactAccess m_contactdb; 151 OContactAccess m_contactdb;
152 152
153}; 153};
154#endif // ABTABLE_H 154#endif // ABTABLE_H
diff --git a/core/pim/addressbook/addressbook.cpp b/core/pim/addressbook/addressbook.cpp
index 84e66fb..f7e4c95 100644
--- a/core/pim/addressbook/addressbook.cpp
+++ b/core/pim/addressbook/addressbook.cpp
@@ -755,302 +755,302 @@ void AddressbookWindow::closeEvent( QCloseEvent *e )
755 e->ignore(); 755 e->ignore();
756 return; 756 return;
757 } 757 }
758 758
759 if(syncing) { 759 if(syncing) {
760 /* shouldn't we save, I hear you say? well its already been set 760 /* shouldn't we save, I hear you say? well its already been set
761 so that an edit can not occur during a sync, and we flushed 761 so that an edit can not occur during a sync, and we flushed
762 at the start of the sync, so there is no need to save 762 at the start of the sync, so there is no need to save
763 Saving however itself would cause problems. */ 763 Saving however itself would cause problems. */
764 e->accept(); 764 e->accept();
765 return; 765 return;
766 } 766 }
767 //################## shouldn't always save 767 //################## shouldn't always save
768 // True, but the database handles this automatically ! (se) 768 // True, but the database handles this automatically ! (se)
769 if ( save() ) 769 if ( save() )
770 e->accept(); 770 e->accept();
771 else 771 else
772 e->ignore(); 772 e->ignore();
773} 773}
774 774
775/* 775/*
776 Returns TRUE if it is OK to exit 776 Returns TRUE if it is OK to exit
777*/ 777*/
778 778
779bool AddressbookWindow::save() 779bool AddressbookWindow::save()
780{ 780{
781 if ( !abList->save() ) { 781 if ( !abList->save() ) {
782 if ( QMessageBox::critical( 0, tr( "Out of space" ), 782 if ( QMessageBox::critical( 0, tr( "Out of space" ),
783 tr("Unable to save information.\n" 783 tr("Unable to save information.\n"
784 "Free up some space\n" 784 "Free up some space\n"
785 "and try again.\n" 785 "and try again.\n"
786 "\nQuit anyway?"), 786 "\nQuit anyway?"),
787 QMessageBox::Yes|QMessageBox::Escape, 787 QMessageBox::Yes|QMessageBox::Escape,
788 QMessageBox::No|QMessageBox::Default ) 788 QMessageBox::No|QMessageBox::Default )
789 != QMessageBox::No ) 789 != QMessageBox::No )
790 return TRUE; 790 return TRUE;
791 else 791 else
792 return FALSE; 792 return FALSE;
793 } 793 }
794 return TRUE; 794 return TRUE;
795} 795}
796 796
797#ifdef __DEBUG_RELEASE 797#ifdef __DEBUG_RELEASE
798void AddressbookWindow::slotSave() 798void AddressbookWindow::slotSave()
799{ 799{
800 save(); 800 save();
801} 801}
802#endif 802#endif
803 803
804void AddressbookWindow::slotSettings() 804void AddressbookWindow::slotSettings()
805{ 805{
806 AddressSettings frmSettings( this ); 806 AddressSettings frmSettings( this );
807#if defined(Q_WS_QWS) || defined(_WS_QWS_) 807#if defined(Q_WS_QWS) || defined(_WS_QWS_)
808 frmSettings.showMaximized(); 808 frmSettings.showMaximized();
809#endif 809#endif
810 810
811 if ( frmSettings.exec() ) { 811 if ( frmSettings.exec() ) {
812 allFields.clear(); 812 allFields.clear();
813 orderedFields.clear(); 813 orderedFields.clear();
814 slOrderedFields.clear(); 814 slOrderedFields.clear();
815 initFields(); 815 initFields();
816 if ( abEditor ) 816 if ( abEditor )
817 abEditor->loadFields(); 817 abEditor->loadFields();
818 abList->refresh(); 818 abList->refresh();
819 } 819 }
820} 820}
821 821
822 822
823void AddressbookWindow::initFields() 823void AddressbookWindow::initFields()
824{ 824{
825 // we really don't need the things from the configuration, anymore 825 // we really don't need the things from the configuration, anymore
826 // only thing that is important are the important categories. So, 826 // only thing that is important are the important categories. So,
827 // Call the contact functions that correspond to these old functions... 827 // Call the contact functions that correspond to these old functions...
828 828
829 QStringList xmlFields = OContact::fields(); 829 QStringList xmlFields = OContact::fields();
830 QStringList visibleFields = OContact::untrfields(); 830 QStringList visibleFields = OContact::untrfields();
831 // QStringList trFields = OContact::trfields(); 831 // QStringList trFields = OContact::trfields();
832 832
833 xmlFields.remove( "Title" ); 833 xmlFields.remove( "Title" );
834 visibleFields.remove( "Name Title" ); 834 visibleFields.remove( "Name Title" );
835 visibleFields.remove( "Notes" ); 835 visibleFields.remove( "Notes" );
836 836
837 int i, version; 837 int i, version;
838 Config cfg( "AddressBook" ); 838 Config cfg( "AddressBook" );
839 QString zn; 839 QString zn;
840 840
841 // ### Write a function to keep this from happening again... 841 // ### Write a function to keep this from happening again...
842 QStringList::ConstIterator it; 842 QStringList::ConstIterator it;
843 for ( i = 0, it = xmlFields.begin(); it != xmlFields.end(); ++it, i++ ) { 843 for ( i = 0, it = xmlFields.begin(); it != xmlFields.end(); ++it, i++ ) {
844 allFields.append( i + 3 ); 844 allFields.append( i + 3 );
845 } 845 }
846 846
847 cfg.setGroup( "Version" ); 847 cfg.setGroup( "Version" );
848 version = cfg.readNumEntry( "version" ); 848 version = cfg.readNumEntry( "version" );
849 i = 0; 849 i = 0;
850 startFontSize = 1; 850 startFontSize = 1;
851 851
852 if ( version >= ADDRESSVERSION ) { 852 if ( version >= ADDRESSVERSION ) {
853 853
854 cfg.setGroup( "ImportantCategory" ); 854 cfg.setGroup( "ImportantCategory" );
855 855
856 zn = cfg.readEntry( "Category" + QString::number(i), QString::null ); 856 zn = cfg.readEntry( "Category" + QString::number(i), QString::null );
857 while ( !zn.isNull() ) { 857 while ( !zn.isNull() ) {
858 if ( zn.contains( "Work" ) || zn.contains( "Mb" ) ) { 858 if ( zn.contains( "Work" ) || zn.contains( "Mb" ) ) {
859 slOrderedFields.clear(); 859 slOrderedFields.clear();
860 break; 860 break;
861 } 861 }
862 slOrderedFields.append( zn ); 862 slOrderedFields.append( zn );
863 zn = cfg.readEntry( "Category" + QString::number(++i), QString::null ); 863 zn = cfg.readEntry( "Category" + QString::number(++i), QString::null );
864 } 864 }
865 cfg.setGroup( "Font" ); 865 cfg.setGroup( "Font" );
866 startFontSize = cfg.readNumEntry( "fontSize", 1 ); 866 startFontSize = cfg.readNumEntry( "fontSize", 1 );
867 867
868 868
869 } else { 869 } else {
870 QString str; 870 QString str;
871 str = getenv("HOME"); 871 str = getenv("HOME");
872 str += "/Settings/AddressBook.conf"; 872 str += "/Settings/AddressBook.conf";
873 QFile::remove( str ); 873 QFile::remove( str );
874 } 874 }
875 875
876 if ( slOrderedFields.count() > 0 ) { 876 if ( slOrderedFields.count() > 0 ) {
877 for( QStringList::ConstIterator it = slOrderedFields.begin(); 877 for( QStringList::ConstIterator it = slOrderedFields.begin();
878 it != slOrderedFields.end(); ++it ) { 878 it != slOrderedFields.end(); ++it ) {
879 QValueList<int>::ConstIterator itVl; 879 QValueList<int>::ConstIterator itVl;
880 QStringList::ConstIterator itVis; 880 QStringList::ConstIterator itVis;
881 itVl = allFields.begin(); 881 itVl = allFields.begin();
882 for ( itVis = visibleFields.begin(); 882 for ( itVis = visibleFields.begin();
883 itVis != visibleFields.end() && itVl != allFields.end(); 883 itVis != visibleFields.end() && itVl != allFields.end();
884 ++itVis, ++itVl ) { 884 ++itVis, ++itVl ) {
885 if ( *it == *itVis && itVl != allFields.end() ) { 885 if ( *it == *itVis && itVl != allFields.end() ) {
886 orderedFields.append( *itVl ); 886 orderedFields.append( *itVl );
887 } 887 }
888 } 888 }
889 } 889 }
890 } else { 890 } else {
891 QValueList<int>::ConstIterator it; 891 QValueList<int>::ConstIterator it;
892 for ( it = allFields.begin(); it != allFields.end(); ++it ) 892 for ( it = allFields.begin(); it != allFields.end(); ++it )
893 orderedFields.append( *it ); 893 orderedFields.append( *it );
894 894
895 slOrderedFields = visibleFields; 895 slOrderedFields = visibleFields;
896 orderedFields.remove( Qtopia::AddressUid ); 896 orderedFields.remove( Qtopia::AddressUid );
897 orderedFields.remove( Qtopia::Title ); 897 orderedFields.remove( Qtopia::Title );
898 orderedFields.remove( Qtopia::Groups ); 898 orderedFields.remove( Qtopia::Groups );
899 orderedFields.remove( Qtopia::AddressCategory ); 899 orderedFields.remove( Qtopia::AddressCategory );
900 orderedFields.remove( Qtopia::FirstName ); 900 orderedFields.remove( Qtopia::FirstName );
901 orderedFields.remove( Qtopia::LastName ); 901 orderedFields.remove( Qtopia::LastName );
902 orderedFields.remove( Qtopia::DefaultEmail ); 902 orderedFields.remove( Qtopia::DefaultEmail );
903 orderedFields.remove( Qtopia::FileAs ); 903 orderedFields.remove( Qtopia::FileAs );
904 orderedFields.remove( Qtopia::Notes ); 904 orderedFields.remove( Qtopia::Notes );
905 orderedFields.remove( Qtopia::Gender ); 905 orderedFields.remove( Qtopia::Gender );
906 slOrderedFields.remove( "Name Title" ); 906 slOrderedFields.remove( "Name Title" );
907 slOrderedFields.remove( "First Name" ); 907 slOrderedFields.remove( "First Name" );
908 slOrderedFields.remove( "Last Name" ); 908 slOrderedFields.remove( "Last Name" );
909 slOrderedFields.remove( "File As" ); 909 slOrderedFields.remove( "File As" );
910 slOrderedFields.remove( "Default Email" ); 910 slOrderedFields.remove( "Default Email" );
911 slOrderedFields.remove( "Notes" ); 911 slOrderedFields.remove( "Notes" );
912 slOrderedFields.remove( "Gender" ); 912 slOrderedFields.remove( "Gender" );
913 913
914 } 914 }
915} 915}
916 916
917 917
918AbLabel *AddressbookWindow::abView() 918AbLabel *AddressbookWindow::abView()
919{ 919{
920 if ( !mView ) { 920 if ( !mView ) {
921 mView = new AbLabel( this, "viewer" ); 921 mView = new AbLabel( this, "viewer" );
922 mView->init( OContact() ); 922 mView->init( OContact() );
923 connect( mView, SIGNAL( okPressed() ), this, SLOT( slotListView() ) ); 923 connect( mView, SIGNAL( okPressed() ), this, SLOT( slotListView() ) );
924 } 924 }
925 return mView; 925 return mView;
926} 926}
927 927
928void AddressbookWindow::slotFindOpen() 928void AddressbookWindow::slotFindOpen()
929{ 929{
930 searchBar->show(); 930 searchBar->show();
931 searchEdit->setFocus(); 931 searchEdit->setFocus();
932} 932}
933void AddressbookWindow::slotFindClose() 933void AddressbookWindow::slotFindClose()
934{ 934{
935 searchBar->hide(); 935 searchBar->hide();
936 abList->setFocus(); 936 abList->setFocus();
937} 937}
938void AddressbookWindow::slotFindNext() 938void AddressbookWindow::slotFindNext()
939{ 939{
940 if ( centralWidget() == abView() ) 940 if ( centralWidget() == abView() )
941 showList(); 941 showList();
942 942
943 // Maybe we should react on Wraparound and notfound ? 943 // Maybe we should react on Wraparound and notfound ?
944 // QObject::connect( abList, SIGNAL(signalNotFound()), &frmFind, SLOT(slotNotFound()) ); 944 // QObject::connect( abList, SIGNAL(signalNotFound()), &frmFind, SLOT(slotNotFound()) );
945 // QObject::connect( abList, SIGNAL(signalWrapAround()), &frmFind, SLOT(slotWrapAround()) ); 945 // QObject::connect( abList, SIGNAL(signalWrapAround()), &frmFind, SLOT(slotWrapAround()) );
946 946
947 abList->slotDoFind( searchEdit->text(), false, false); 947 abList->slotDoFind( searchEdit->text(), caseSensitive, useRegExp, false);
948 948
949 949
950 if ( abList->numSelections() ) 950 if ( abList->numSelections() )
951 abList->clearSelection(); 951 abList->clearSelection();
952 952
953} 953}
954 954
955void AddressbookWindow::slotFind() 955void AddressbookWindow::slotFind()
956{ 956{
957 957
958 abList->clearFindRow(); 958 abList->clearFindRow();
959 slotFindNext(); 959 slotFindNext();
960} 960}
961 961
962void AddressbookWindow::slotSetCategory( int c ) 962void AddressbookWindow::slotSetCategory( int c )
963{ 963{
964 964
965 QString cat, book; 965 QString cat, book;
966 966
967 if ( c <= 0 ) 967 if ( c <= 0 )
968 return; 968 return;
969 969
970 // Set checkItem for selected one 970 // Set checkItem for selected one
971 for ( unsigned int i = 1; i < catMenu->count(); i++ ) 971 for ( unsigned int i = 1; i < catMenu->count(); i++ )
972 catMenu->setItemChecked( i, c == (int)i ); 972 catMenu->setItemChecked( i, c == (int)i );
973 973
974 for ( unsigned int i = 1; i < catMenu->count(); i++ ) { 974 for ( unsigned int i = 1; i < catMenu->count(); i++ ) {
975 if (catMenu->isItemChecked( i )) { 975 if (catMenu->isItemChecked( i )) {
976 if ( i == 1 ) // default List view 976 if ( i == 1 ) // default List view
977 book = QString::null; 977 book = QString::null;
978 else if ( i == 2 ) 978 else if ( i == 2 )
979 book = "Phone"; 979 book = "Phone";
980 else if ( i == 3 ) 980 else if ( i == 3 )
981 book = "Company"; 981 book = "Company";
982 else if ( i == 4 ) 982 else if ( i == 4 )
983 book = "Email"; 983 book = "Email";
984 else if ( i == 5 ) 984 else if ( i == 5 )
985 book = "Cards"; 985 book = "Cards";
986 else if ( i == 6 ) // default All Categories 986 else if ( i == 6 ) // default All Categories
987 cat = QString::null; 987 cat = QString::null;
988 else if ( i == (unsigned int)catMenu->count() ) // last menu option will be Unfiled 988 else if ( i == (unsigned int)catMenu->count() ) // last menu option will be Unfiled
989 cat = "Unfiled"; 989 cat = "Unfiled";
990 else 990 else
991 cat = abList->categories()[i - 7]; 991 cat = abList->categories()[i - 7];
992 } 992 }
993 } 993 }
994 994
995 abList->setShowCategory( book, cat ); 995 abList->setShowCategory( book, cat );
996 996
997 if ( book.isEmpty() ) 997 if ( book.isEmpty() )
998 book = "List"; 998 book = "List";
999 if ( cat.isEmpty() ) 999 if ( cat.isEmpty() )
1000 cat = "All"; 1000 cat = "All";
1001 1001
1002 setCaption( tr( "Contacts" ) + " - " + tr( book ) + " - " + tr( cat ) ); 1002 setCaption( tr( "Contacts" ) + " - " + tr( book ) + " - " + tr( cat ) );
1003} 1003}
1004 1004
1005void AddressbookWindow::slotSetLetter( char c ) { 1005void AddressbookWindow::slotSetLetter( char c ) {
1006 1006
1007 abList->setShowByLetter( c ); 1007 abList->setShowByLetter( c );
1008 1008
1009} 1009}
1010 1010
1011void AddressbookWindow::populateCategories() 1011void AddressbookWindow::populateCategories()
1012{ 1012{
1013 catMenu->clear(); 1013 catMenu->clear();
1014 1014
1015 int id, rememberId; 1015 int id, rememberId;
1016 id = 1; 1016 id = 1;
1017 rememberId = 0; 1017 rememberId = 0;
1018 1018
1019 catMenu->insertItem( tr( "List" ), id++ ); 1019 catMenu->insertItem( tr( "List" ), id++ );
1020 catMenu->insertItem( tr( "Phone Book" ), id++ ); 1020 catMenu->insertItem( tr( "Phone Book" ), id++ );
1021 catMenu->insertItem( tr( "Company Book" ), id++ ); 1021 catMenu->insertItem( tr( "Company Book" ), id++ );
1022 catMenu->insertItem( tr( "Email Book" ), id++ ); 1022 catMenu->insertItem( tr( "Email Book" ), id++ );
1023 catMenu->insertItem( tr( "Cards" ), id++ ); 1023 catMenu->insertItem( tr( "Cards" ), id++ );
1024 catMenu->insertSeparator(); 1024 catMenu->insertSeparator();
1025 1025
1026 catMenu->insertItem( tr( "All" ), id++ ); 1026 catMenu->insertItem( tr( "All" ), id++ );
1027 QStringList categories = abList->categories(); 1027 QStringList categories = abList->categories();
1028 categories.append( tr( "Unfiled" ) ); 1028 categories.append( tr( "Unfiled" ) );
1029 for ( QStringList::Iterator it = categories.begin(); 1029 for ( QStringList::Iterator it = categories.begin();
1030 it != categories.end(); ++it ) { 1030 it != categories.end(); ++it ) {
1031 catMenu->insertItem( *it, id ); 1031 catMenu->insertItem( *it, id );
1032 if ( *it == abList->showCategory() ) 1032 if ( *it == abList->showCategory() )
1033 rememberId = id; 1033 rememberId = id;
1034 ++id; 1034 ++id;
1035 } 1035 }
1036 1036
1037 if ( abList->showBook().isEmpty() ) { 1037 if ( abList->showBook().isEmpty() ) {
1038 catMenu->setItemChecked( 1, true ); 1038 catMenu->setItemChecked( 1, true );
1039 } else if ( abList->showBook() == "Phone" ) { 1039 } else if ( abList->showBook() == "Phone" ) {
1040 catMenu->setItemChecked( 2, true ); 1040 catMenu->setItemChecked( 2, true );
1041 } else if ( abList->showBook() == "Company" ) { 1041 } else if ( abList->showBook() == "Company" ) {
1042 catMenu->setItemChecked( 3, true ); 1042 catMenu->setItemChecked( 3, true );
1043 } else if ( abList->showBook() == "Email" ) { 1043 } else if ( abList->showBook() == "Email" ) {
1044 catMenu->setItemChecked( 4, true ); 1044 catMenu->setItemChecked( 4, true );
1045 } else if ( abList->showBook() == "Cards" ) { 1045 } else if ( abList->showBook() == "Cards" ) {
1046 catMenu->setItemChecked( 5, true ); 1046 catMenu->setItemChecked( 5, true );
1047 } 1047 }
1048 1048
1049 if ( abList->showCategory().isEmpty() ) { 1049 if ( abList->showCategory().isEmpty() ) {
1050 slotSetCategory( 6 ); 1050 slotSetCategory( 6 );
1051 } 1051 }
1052 else { 1052 else {
1053 slotSetCategory( rememberId ); 1053 slotSetCategory( rememberId );
1054 } 1054 }
1055} 1055}
1056 1056