summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/addressbook/TODO7
-rw-r--r--core/pim/addressbook/abtable.cpp76
-rw-r--r--core/pim/addressbook/addressbook.cpp47
-rw-r--r--core/pim/addressbook/addressbook.h3
-rw-r--r--core/pim/addressbook/configdlg.cpp16
-rw-r--r--core/pim/addressbook/configdlg.h4
-rw-r--r--core/pim/addressbook/configdlg_base.ui105
-rw-r--r--core/pim/addressbook/opie-addressbook.control2
-rw-r--r--core/pim/addressbook/picker.cpp12
9 files changed, 227 insertions, 45 deletions
diff --git a/core/pim/addressbook/TODO b/core/pim/addressbook/TODO
index 796dc49..80ec2d9 100644
--- a/core/pim/addressbook/TODO
+++ b/core/pim/addressbook/TODO
@@ -1,36 +1,39 @@
1Stuff todo until OPIE 1.0 : 1Stuff todo until OPIE 1.0 :
2 2
3Pending bugfixes from previous work:
4
3Urgent: 5Urgent:
4 6
5- Font menu is invisible using german translation 7- Font menu is invisible using german translation
6 8
7Important: 9Important:
8 10
11- Overview window cleanup needed..
9- Cursor keys should work in detail-view (ablabel) 12- Cursor keys should work in detail-view (ablabel)
10- "What's this" should be added 13- "What's this" should be added
11- Store last settings of combo-boxes 14- Store last settings of combo-boxes
12- Mail-Icon is missing
13- Overview window cleanup needed..
14- Finishing of new View functions (List, Phonebook...) 15- Finishing of new View functions (List, Phonebook...)
15- The names of the countries are sorted by there english names, only.. 16- The names of the countries are sorted by there english names, only..
16 Even if they are translated.. :S 17 Even if they are translated.. :S
17- Reload if contacts were changed externally 18- Reload if contacts were changed externally
18 19
19Less important: 20Less important:
20 21
21- The picker (alphabetical sort widget) should be 22- The picker (alphabetical sort widget) should be
22 placed verticaly or horizontally (configurable) 23 placed verticaly or horizontally (configurable)
23- Use advanced database functions in abtable to decrease 24- Use advanced database functions in abtable to decrease
24 memory footprint and to make everything more easy ! 25 memory footprint and to make everything more easy !
25 (abtable should store Iterator for selected Category) 26 (abtable should store Iterator for selected Category)
26 27
27Should be Fixed (not absolute sure, need further validation): 28Should be Fixed (not absolute sure, need further validation):
28- "Nonenglish" translation bug has to be fixed. 29- "Nonenglish" translation bug has to be fixed.
29 30
30Fixed: 31Fixed:
31- Syncing: abtable not reloaded after sync. 32- Syncing: abtable not reloaded after sync.
32- Find widget should be replaced by something like 33- Find widget should be replaced by something like
33 qpdf has. 34 qpdf has.
34- Adding a configuration dialog 35- Adding a configuration dialog
35- Picker: Activated letter schould be more visible 36- Picker: Activated letter schould be more visible
36- Advanced handling of cursor keys (search..) 37- Advanced handling of cursor keys (search..)
38- Mail-Icon is missing
39- Use opie-mail insted of qt-mail if possible.
diff --git a/core/pim/addressbook/abtable.cpp b/core/pim/addressbook/abtable.cpp
index 97b26db..4feadeb 100644
--- a/core/pim/addressbook/abtable.cpp
+++ b/core/pim/addressbook/abtable.cpp
@@ -497,419 +497,431 @@ void AbTable::resizeRows() {
497} 497}
498 498
499 499
500bool AbTable::save() 500bool AbTable::save()
501{ 501{
502 // QTime t; 502 // QTime t;
503 // t.start(); 503 // t.start();
504 qWarning("abtable:Save data"); 504 qWarning("abtable:Save data");
505 505
506 return m_contactdb.save(); 506 return m_contactdb.save();
507} 507}
508 508
509void AbTable::load() 509void AbTable::load()
510{ 510{
511 setSorting( false ); 511 setSorting( false );
512 setUpdatesEnabled( FALSE ); 512 setUpdatesEnabled( FALSE );
513 513
514 qWarning("abtable:Load data"); 514 qWarning("abtable:Load data");
515 515
516 OContactAccess::List list = m_contactdb.allRecords(); 516 OContactAccess::List list = m_contactdb.allRecords();
517 OContactAccess::List::Iterator it; 517 OContactAccess::List::Iterator it;
518 setNumRows( list.count() ); 518 setNumRows( list.count() );
519 int row = 0; 519 int row = 0;
520 for ( it = list.begin(); it != list.end(); ++it ) 520 for ( it = list.begin(); it != list.end(); ++it )
521 insertIntoTable( *it, row++ ); 521 insertIntoTable( *it, row++ );
522 522
523 setUpdatesEnabled( TRUE ); 523 setUpdatesEnabled( TRUE );
524 524
525 setSorting( true ); 525 setSorting( true );
526 resort(); 526 resort();
527} 527}
528 528
529 529
530void AbTable::reload() 530void AbTable::reload()
531{ 531{
532 m_contactdb.reload(); 532 m_contactdb.reload();
533 load(); 533 load();
534} 534}
535 535
536void AbTable::realignTable( int row ) 536void AbTable::realignTable( int row )
537{ 537{
538 QTableItem *ti1, 538 QTableItem *ti1,
539 *ti2; 539 *ti2;
540 int totalRows = numRows(); 540 int totalRows = numRows();
541 for ( int curr = row; curr < totalRows - 1; curr++ ) { 541 for ( int curr = row; curr < totalRows - 1; curr++ ) {
542 // the same info from the todo list still applies, but I 542 // the same info from the todo list still applies, but I
543 // don't think it is _too_ bad. 543 // don't think it is _too_ bad.
544 ti1 = item( curr + 1, 0 ); 544 ti1 = item( curr + 1, 0 );
545 ti2 = item( curr + 1, 1 ); 545 ti2 = item( curr + 1, 1 );
546 takeItem( ti1 ); 546 takeItem( ti1 );
547 takeItem( ti2 ); 547 takeItem( ti2 );
548 setItem( curr, 0, ti1 ); 548 setItem( curr, 0, ti1 );
549 setItem( curr, 1, ti2 ); 549 setItem( curr, 1, ti2 );
550 } 550 }
551 setNumRows( totalRows - 1 ); 551 setNumRows( totalRows - 1 );
552 resort(); 552 resort();
553} 553}
554 554
555// Add contact into table. 555// Add contact into table.
556void AbTable::insertIntoTable( const OContact &cnt, int row ) 556void AbTable::insertIntoTable( const OContact &cnt, int row )
557{ 557{
558 QString strName, 558 QString strName,
559 strContact; 559 strContact;
560 560
561 strName = findContactName( cnt ); 561 strName = findContactName( cnt );
562 strContact = findContactContact( cnt, row ); 562 strContact = findContactContact( cnt, row );
563 563
564 AbTableItem *ati; 564 AbTableItem *ati;
565 ati = new AbTableItem( this, QTableItem::Never, strName, strContact); 565 ati = new AbTableItem( this, QTableItem::Never, strName, strContact);
566 contactList.insert( ati, cnt ); 566 contactList.insert( ati, cnt );
567 setItem( row, 0, ati ); 567 setItem( row, 0, ati );
568 ati = new AbTableItem( this, QTableItem::Never, strContact, strName); 568 ati = new AbTableItem( this, QTableItem::Never, strContact, strName);
569 setItem( row, 1, ati ); 569 setItem( row, 1, ati );
570 570
571 //### cannot do this; table only has two columns at this point 571 //### cannot do this; table only has two columns at this point
572 // setItem( row, 2, new AbPickItem( this ) ); 572 // setItem( row, 2, new AbPickItem( this ) );
573 573
574 // resort at some point? 574 // resort at some point?
575} 575}
576 576
577 577
578// Replace or add an entry 578// Replace or add an entry
579void AbTable::journalFreeReplace( const OContact &cnt, int row ) 579void AbTable::journalFreeReplace( const OContact &cnt, int row )
580{ 580{
581 QString strName, 581 QString strName,
582 strContact; 582 strContact;
583 AbTableItem *ati = 0l; 583 AbTableItem *ati = 0l;
584 584
585 strName = findContactName( cnt ); 585 strName = findContactName( cnt );
586 strContact = findContactContact( cnt, row ); 586 strContact = findContactContact( cnt, row );
587 ati = static_cast<AbTableItem*>(item(row, 0)); 587 ati = static_cast<AbTableItem*>(item(row, 0));
588 588
589 // Replace element if found in row "row" 589 // Replace element if found in row "row"
590 // or add this element if not. 590 // or add this element if not.
591 if ( ati != 0 ) { // replace 591 if ( ati != 0 ) { // replace
592 // :SX db access -> replace 592 // :SX db access -> replace
593 qWarning ("Replace Contact in DB ! UID: %d", contactList[ati].uid() ); 593 qWarning ("Replace Contact in DB ! UID: %d", contactList[ati].uid() );
594 m_contactdb.replace ( cnt ); 594 m_contactdb.replace ( cnt );
595 595
596 contactList.remove( ati ); 596 contactList.remove( ati );
597 ati->setItem( strName, strContact ); 597 ati->setItem( strName, strContact );
598 contactList.insert( ati, cnt ); 598 contactList.insert( ati, cnt );
599 599
600 ati = static_cast<AbTableItem*>(item(row, 1)); 600 ati = static_cast<AbTableItem*>(item(row, 1));
601 ati->setItem( strContact, strName ); 601 ati->setItem( strContact, strName );
602 602
603 }else{ // add 603 }else{ // add
604 int myrows = numRows(); 604 int myrows = numRows();
605 setNumRows( myrows + 1 ); 605 setNumRows( myrows + 1 );
606 insertIntoTable( cnt, myrows ); 606 insertIntoTable( cnt, myrows );
607 // gets deleted when returning -- Why ? (se) 607 // gets deleted when returning -- Why ? (se)
608 // :SX db access -> add 608 // :SX db access -> add
609 qWarning ("Are you sure to add to database ? -> Currently disabled !!"); 609 qWarning ("Are you sure to add to database ? -> Currently disabled !!");
610 // m_contactdb.add( cnt ); 610 // m_contactdb.add( cnt );
611 } 611 }
612} 612}
613 613
614// Remove entry 614// Remove entry
615void AbTable::journalFreeRemove( int row ) 615void AbTable::journalFreeRemove( int row )
616{ 616{
617 AbTableItem *ati; 617 AbTableItem *ati;
618 ati = static_cast<AbTableItem*>(item(row, 0)); 618 ati = static_cast<AbTableItem*>(item(row, 0));
619 if ( !ati ) 619 if ( !ati )
620 return; 620 return;
621 621
622 // :SX db access -> remove 622 // :SX db access -> remove
623 qWarning ("Remove Contact from DB ! UID: %d",contactList[ati].uid() ); 623 qWarning ("Remove Contact from DB ! UID: %d",contactList[ati].uid() );
624 m_contactdb.remove( contactList[ati].uid() ); 624 m_contactdb.remove( contactList[ati].uid() );
625 625
626 contactList.remove( ati ); 626 contactList.remove( ati );
627 627
628 realignTable( row ); 628 realignTable( row );
629 629
630} 630}
631 631
632#if QT_VERSION <= 230 632#if QT_VERSION <= 230
633#ifndef SINGLE_APP 633#ifndef SINGLE_APP
634void QTable::paintEmptyArea( QPainter *p, int cx, int cy, int cw, int ch ) 634void QTable::paintEmptyArea( QPainter *p, int cx, int cy, int cw, int ch )
635{ 635{
636 // Region of the rect we should draw 636 // Region of the rect we should draw
637 QRegion reg( QRect( cx, cy, cw, ch ) ); 637 QRegion reg( QRect( cx, cy, cw, ch ) );
638 // Subtract the table from it 638 // Subtract the table from it
639 reg = reg.subtract( QRect( QPoint( 0, 0 ), tableSize() ) ); 639 reg = reg.subtract( QRect( QPoint( 0, 0 ), tableSize() ) );
640 // And draw the rectangles (transformed as needed) 640 // And draw the rectangles (transformed as needed)
641 QArray<QRect> r = reg.rects(); 641 QArray<QRect> r = reg.rects();
642 for (unsigned int i=0; i<r.count(); i++) 642 for (unsigned int i=0; i<r.count(); i++)
643 p->fillRect( r[i], colorGroup().brush( QColorGroup::Base ) ); 643 p->fillRect( r[i], colorGroup().brush( QColorGroup::Base ) );
644} 644}
645#endif 645#endif
646#endif 646#endif
647 647
648 648
649// int AbTable::rowHeight( int ) const 649// int AbTable::rowHeight( int ) const
650// { 650// {
651// return 18; 651// return 18;
652// } 652// }
653 653
654// int AbTable::rowPos( int row ) const 654// int AbTable::rowPos( int row ) const
655// { 655// {
656// return 18*row; 656// return 18*row;
657// } 657// }
658 658
659// int AbTable::rowAt( int pos ) const 659// int AbTable::rowAt( int pos ) const
660// { 660// {
661// return QMIN( pos/18, numRows()-1 ); 661// return QMIN( pos/18, numRows()-1 );
662// } 662// }
663 663
664void AbTable::slotDoFind( const QString &findString, bool caseSensitive, bool useRegExp, 664void AbTable::slotDoFind( const QString &findString, bool caseSensitive, bool useRegExp,
665 bool backwards, QString cat /* int category */ ) 665 bool backwards, QString cat /* int category */ )
666{ 666{
667 int category = 0; 667 int category = 0;
668 668
669 // Use the current Category if nothing else selected 669 // Use the current Category if nothing else selected
670 if ( cat.isEmpty() ) 670 if ( cat.isEmpty() )
671 category = mCat.id( "Contacts", showCat ); 671 category = mCat.id( "Contacts", showCat );
672 else{ 672 else{
673 category = mCat.id("Contacts", cat ); 673 category = mCat.id("Contacts", cat );
674 } 674 }
675 675
676 qWarning ("Found in Category %d", category); 676 qWarning ("Found in Category %d", category);
677 677
678 if ( currFindRow < -1 ) 678 if ( currFindRow < -1 )
679 currFindRow = - 1; 679 currFindRow = - 1;
680 680
681 clearSelection( TRUE ); 681 clearSelection( TRUE );
682 int rows, row; 682 int rows, row;
683 AbTableItem *ati; 683 AbTableItem *ati;
684 QRegExp r( findString ); 684 QRegExp r( findString );
685 r.setCaseSensitive( caseSensitive ); 685 r.setCaseSensitive( caseSensitive );
686 r.setWildcard( !useRegExp ); 686 r.setWildcard( !useRegExp );
687 rows = numRows(); 687 rows = numRows();
688 static bool wrapAround = true; 688 static bool wrapAround = true;
689 bool try_again = false;
689 690
690 if ( !backwards ) { 691 // We will loop until we found an entry or found nothing.
691 for ( row = currFindRow + 1; row < rows; row++ ) { 692 do {
692 ati = static_cast<AbTableItem*>( item(row, 0) ); 693 if ( !backwards ) {
693 if ( contactCompare( contactList[ati], r, category ) ) 694 for ( row = currFindRow + 1; row < rows; row++ ) {
694 break; 695 ati = static_cast<AbTableItem*>( item(row, 0) );
696 if ( contactCompare( contactList[ati], r, category ) ){
697 try_again = false;
698 break;
699 }
700 }
701 } else {
702 for ( row = currFindRow - 1; row > -1; row-- ) {
703 ati = static_cast<AbTableItem*>( item(row, 0) );
704 if ( contactCompare( contactList[ati], r, category ) ){
705 try_again = false;
706 break;
707 }
708 }
695 } 709 }
696 } else { 710 if ( row >= rows || row < 0 ) {
697 for ( row = currFindRow - 1; row > -1; row-- ) { 711 if ( row < 0 )
698 ati = static_cast<AbTableItem*>( item(row, 0) ); 712 currFindRow = rows;
699 if ( contactCompare( contactList[ati], r, category ) ) 713 else
700 break; 714 currFindRow = -1;
715
716 if ( wrapAround ){
717 emit signalWrapAround();
718 try_again = true;
719 }else{
720 emit signalNotFound();
721 try_again = false;
722 }
723
724 wrapAround = !wrapAround;
725 } else {
726 currFindRow = row;
727 QTableSelection foundSelection;
728 foundSelection.init( currFindRow, 0 );
729 foundSelection.expandTo( currFindRow, numCols() - 1 );
730 addSelection( foundSelection );
731 setCurrentCell( currFindRow, 0 /* numCols() - 1 */ );
732 wrapAround = true;
733 try_again = false;
701 } 734 }
702 } 735 } while ( try_again );
703 if ( row >= rows || row < 0 ) {
704 if ( row < 0 )
705 currFindRow = rows;
706 else
707 currFindRow = -1;
708
709 if ( wrapAround )
710 emit signalWrapAround();
711 else
712 emit signalNotFound();
713
714 wrapAround = !wrapAround;
715 } else {
716 currFindRow = row;
717 QTableSelection foundSelection;
718 foundSelection.init( currFindRow, 0 );
719 foundSelection.expandTo( currFindRow, numCols() - 1 );
720 addSelection( foundSelection );
721 setCurrentCell( currFindRow, 0 /* numCols() - 1 */ );
722 wrapAround = true;
723 }
724} 736}
725 737
726static bool contactCompare( const OContact &cnt, const QRegExp &r, int category ) 738static bool contactCompare( const OContact &cnt, const QRegExp &r, int category )
727{ 739{
728 bool returnMe; 740 bool returnMe;
729 QArray<int> cats; 741 QArray<int> cats;
730 cats = cnt.categories(); 742 cats = cnt.categories();
731 743
732 returnMe = false; 744 returnMe = false;
733 if ( (cats.count() == 0) || (category == 0) ) 745 if ( (cats.count() == 0) || (category == 0) )
734 returnMe = cnt.match( r ); 746 returnMe = cnt.match( r );
735 else { 747 else {
736 int i; 748 int i;
737 for ( i = 0; i < int(cats.count()); i++ ) { 749 for ( i = 0; i < int(cats.count()); i++ ) {
738 if ( cats[i] == category ) { 750 if ( cats[i] == category ) {
739 returnMe = cnt.match( r ); 751 returnMe = cnt.match( r );
740 break; 752 break;
741 } 753 }
742 } 754 }
743 } 755 }
744 756
745 return returnMe; 757 return returnMe;
746} 758}
747 759
748void AbTable::fitColumns() 760void AbTable::fitColumns()
749{ 761{
750 int contentsWidth = visibleWidth() / 2; 762 int contentsWidth = visibleWidth() / 2;
751 763
752 if ( showBk == "Cards" ) { 764 if ( showBk == "Cards" ) {
753 showColumn(1); 765 showColumn(1);
754 //adjustColumn(1); 766 //adjustColumn(1);
755 setColumnWidth( 1, visibleWidth() ); 767 setColumnWidth( 1, visibleWidth() );
756 columnVisible = false; 768 columnVisible = false;
757 } else { 769 } else {
758 if ( columnVisible == false ){ 770 if ( columnVisible == false ){
759 showColumn(0); 771 showColumn(0);
760 columnVisible = true; 772 columnVisible = true;
761 } 773 }
762 setColumnWidth( 0, contentsWidth ); 774 setColumnWidth( 0, contentsWidth );
763 adjustColumn(1); 775 adjustColumn(1);
764 if ( columnWidth(1) < contentsWidth ) 776 if ( columnWidth(1) < contentsWidth )
765 setColumnWidth( 1, contentsWidth ); 777 setColumnWidth( 1, contentsWidth );
766 } 778 }
767} 779}
768 780
769void AbTable::show() 781void AbTable::show()
770{ 782{
771 fitColumns(); 783 fitColumns();
772 QTable::show(); 784 QTable::show();
773} 785}
774 786
775void AbTable::setChoiceNames( const QStringList& list) 787void AbTable::setChoiceNames( const QStringList& list)
776{ 788{
777 choicenames = list; 789 choicenames = list;
778 if ( choicenames.isEmpty() ) { 790 if ( choicenames.isEmpty() ) {
779 // hide pick column 791 // hide pick column
780 setNumCols( 2 ); 792 setNumCols( 2 );
781 } else { 793 } else {
782 // show pick column 794 // show pick column
783 setNumCols( 3 ); 795 setNumCols( 3 );
784 setColumnWidth( 2, fontMetrics().width(tr( "Pick" ))+8 ); 796 setColumnWidth( 2, fontMetrics().width(tr( "Pick" ))+8 );
785 horizontalHeader()->setLabel( 2, tr( "Pick" )); 797 horizontalHeader()->setLabel( 2, tr( "Pick" ));
786 } 798 }
787 fitColumns(); 799 fitColumns();
788} 800}
789 801
790void AbTable::itemClicked(int,int col) 802void AbTable::itemClicked(int,int col)
791{ 803{
792 if ( col == 2 ) { 804 if ( col == 2 ) {
793 return; 805 return;
794 } else { 806 } else {
795 emit details(); 807 emit details();
796 } 808 }
797} 809}
798 810
799QStringList AbTable::choiceNames() const 811QStringList AbTable::choiceNames() const
800{ 812{
801 return choicenames; 813 return choicenames;
802} 814}
803 815
804void AbTable::setChoiceSelection(int /*index*/, const QStringList& /*list*/) 816void AbTable::setChoiceSelection(int /*index*/, const QStringList& /*list*/)
805{ 817{
806 /* ###### 818 /* ######
807 819
808 QString selname = choicenames.at(index); 820 QString selname = choicenames.at(index);
809 for (each row) { 821 for (each row) {
810 OContact *c = contactForRow(row); 822 OContact *c = contactForRow(row);
811 if ( list.contains(c->email) ) { 823 if ( list.contains(c->email) ) {
812 list.remove(c->email); 824 list.remove(c->email);
813 setText(row, 2, selname); 825 setText(row, 2, selname);
814 } 826 }
815 } 827 }
816 for (remaining list items) { 828 for (remaining list items) {
817 OContact *c = new contact(item); 829 OContact *c = new contact(item);
818 setText(newrow, 2, selname); 830 setText(newrow, 2, selname);
819 } 831 }
820 832
821 */ 833 */
822} 834}
823 835
824QStringList AbTable::choiceSelection(int /*index*/) const 836QStringList AbTable::choiceSelection(int /*index*/) const
825{ 837{
826 QStringList r; 838 QStringList r;
827 /* ###### 839 /* ######
828 840
829 QString selname = choicenames.at(index); 841 QString selname = choicenames.at(index);
830 for (each row) { 842 for (each row) {
831 OContact *c = contactForRow(row); 843 OContact *c = contactForRow(row);
832 if ( text(row,2) == selname ) { 844 if ( text(row,2) == selname ) {
833 r.append(c->email); 845 r.append(c->email);
834 } 846 }
835 } 847 }
836 848
837 */ 849 */
838 return r; 850 return r;
839} 851}
840 852
841void AbTable::setShowCategory( const QString &b, const QString &c ) 853void AbTable::setShowCategory( const QString &b, const QString &c )
842{ 854{
843 showBk = b; 855 showBk = b;
844 showCat = c; 856 showCat = c;
845 //QMessageBox::information( this, "setShowCategory", "setShowCategory" ); 857 //QMessageBox::information( this, "setShowCategory", "setShowCategory" );
846 //updateVisible(); 858 //updateVisible();
847 refresh(); 859 refresh();
848 ensureCellVisible( currentRow(), 0 ); 860 ensureCellVisible( currentRow(), 0 );
849 updateVisible(); // :SX 861 updateVisible(); // :SX
850} 862}
851 863
852void AbTable::setShowByLetter( char c ) 864void AbTable::setShowByLetter( char c )
853{ 865{
854 showChar = tolower(c); 866 showChar = tolower(c);
855 updateVisible(); 867 updateVisible();
856} 868}
857 869
858QString AbTable::showCategory() const 870QString AbTable::showCategory() const
859{ 871{
860 return showCat; 872 return showCat;
861} 873}
862 874
863QString AbTable::showBook() const 875QString AbTable::showBook() const
864{ 876{
865 return showBk; 877 return showBk;
866} 878}
867 879
868QStringList AbTable::categories() 880QStringList AbTable::categories()
869{ 881{
870 mCat.load( categoryFileName() ); 882 mCat.load( categoryFileName() );
871 QStringList categoryList = mCat.labels( "Contacts" ); 883 QStringList categoryList = mCat.labels( "Contacts" );
872 return categoryList; 884 return categoryList;
873} 885}
874 886
875void AbTable::updateVisible() 887void AbTable::updateVisible()
876{ 888{
877 int visible, 889 int visible,
878 totalRows, 890 totalRows,
879 id, 891 id,
880 totalCats, 892 totalCats,
881 it, 893 it,
882 row; 894 row;
883 bool hide; 895 bool hide;
884 AbTableItem *ati; 896 AbTableItem *ati;
885 OContact *cnt; 897 OContact *cnt;
886 QString fileAsName; 898 QString fileAsName;
887 QString tmpStr; 899 QString tmpStr;
888 visible = 0; 900 visible = 0;
889 901
890 setPaintingEnabled( FALSE ); 902 setPaintingEnabled( FALSE );
891 903
892 totalRows = numRows(); 904 totalRows = numRows();
893 id = mCat.id( "Contacts", showCat ); 905 id = mCat.id( "Contacts", showCat );
894 QArray<int> cats; 906 QArray<int> cats;
895 for ( row = 0; row < totalRows; row++ ) { 907 for ( row = 0; row < totalRows; row++ ) {
896 ati = static_cast<AbTableItem*>( item(row, 0) ); 908 ati = static_cast<AbTableItem*>( item(row, 0) );
897 cnt = &contactList[ati]; 909 cnt = &contactList[ati];
898 cats = cnt->categories(); 910 cats = cnt->categories();
899 fileAsName = cnt->fileAs(); 911 fileAsName = cnt->fileAs();
900 hide = false; 912 hide = false;
901 if ( !showCat.isEmpty() ) { 913 if ( !showCat.isEmpty() ) {
902 if ( showCat == tr( "Unfiled" ) ) { 914 if ( showCat == tr( "Unfiled" ) ) {
903 if ( cats.count() > 0 ) 915 if ( cats.count() > 0 )
904 hide = true; 916 hide = true;
905 } else { 917 } else {
906 // do some comparing 918 // do some comparing
907 if ( !hide ) { 919 if ( !hide ) {
908 hide = true; 920 hide = true;
909 totalCats = int(cats.count()); 921 totalCats = int(cats.count());
910 for ( it = 0; it < totalCats; it++ ) { 922 for ( it = 0; it < totalCats; it++ ) {
911 if ( cats[it] == id ) { 923 if ( cats[it] == id ) {
912 hide = false; 924 hide = false;
913 break; 925 break;
914 } 926 }
915 } 927 }
diff --git a/core/pim/addressbook/addressbook.cpp b/core/pim/addressbook/addressbook.cpp
index 3466801..39d8321 100644
--- a/core/pim/addressbook/addressbook.cpp
+++ b/core/pim/addressbook/addressbook.cpp
@@ -1,690 +1,731 @@
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** OContact info@trolltech.com if any conditions of this licensing are 16** OContact 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#define QTOPIA_INTERNAL_FD 21#define QTOPIA_INTERNAL_FD
22 22
23#include "contacteditor.h" 23#include "contacteditor.h"
24#include "ablabel.h" 24#include "ablabel.h"
25#include "abtable.h" 25#include "abtable.h"
26#include "addresssettings.h" 26#include "addresssettings.h"
27#include "addressbook.h" 27#include "addressbook.h"
28 28
29 29
30#include <opie/ofileselector.h> 30#include <opie/ofileselector.h>
31#include <opie/ofiledialog.h> 31#include <opie/ofiledialog.h>
32#include <qpe/qpeapplication.h> 32#include <qpe/qpeapplication.h>
33#include <qpe/config.h> 33#include <qpe/config.h>
34#include <opie/ocontact.h> 34#include <opie/ocontact.h>
35 35
36#include <qpe/global.h> 36#include <qpe/global.h>
37#include <qpe/resource.h> 37#include <qpe/resource.h>
38#include <qpe/ir.h> 38#include <qpe/ir.h>
39#include <qpe/qpemessagebox.h> 39#include <qpe/qpemessagebox.h>
40#include <qpe/qcopenvelope_qws.h> 40#include <qpe/qcopenvelope_qws.h>
41 41
42#include <qaction.h> 42#include <qaction.h>
43#include <qdialog.h> 43#include <qdialog.h>
44#include <qdir.h> 44#include <qdir.h>
45#include <qfile.h> 45#include <qfile.h>
46#include <qimage.h> 46#include <qimage.h>
47#include <qlayout.h> 47#include <qlayout.h>
48#include <qpe/qpemenubar.h> 48#include <qpe/qpemenubar.h>
49#include <qmessagebox.h> 49#include <qmessagebox.h>
50#include <qpixmap.h> 50#include <qpixmap.h>
51#include <qpopupmenu.h> 51#include <qpopupmenu.h>
52#include <qpe/qpetoolbar.h> 52#include <qpe/qpetoolbar.h>
53#include <qstringlist.h> 53#include <qstringlist.h>
54#include <qtoolbutton.h> 54#include <qtoolbutton.h>
55#include <qwhatsthis.h> 55#include <qwhatsthis.h>
56 56
57#include <stdlib.h> 57#include <stdlib.h>
58#include <sys/stat.h> 58#include <sys/stat.h>
59#include <sys/types.h> 59#include <sys/types.h>
60#include <fcntl.h> 60#include <fcntl.h>
61#include <unistd.h> 61#include <unistd.h>
62 62
63#include <qdatetime.h> 63#include <qdatetime.h>
64 64
65#include "picker.h" 65#include "picker.h"
66#include "configdlg.h" 66#include "configdlg.h"
67 67
68static QString addressbookPersonalVCardName() 68static QString addressbookPersonalVCardName()
69{ 69{
70 QString filename = Global::applicationFileName("addressbook", 70 QString filename = Global::applicationFileName("addressbook",
71 "businesscard.vcf"); 71 "businesscard.vcf");
72 return filename; 72 return filename;
73} 73}
74 74
75 75
76AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name, 76AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name,
77 WFlags f ) 77 WFlags f )
78 : QMainWindow( parent, name, f ), 78 : QMainWindow( parent, name, f ),
79 abEditor(0), 79 abEditor(0),
80 useRegExp(false), 80 useRegExp(false),
81 doNotifyWrapAround(true), 81 doNotifyWrapAround(true),
82 caseSensitive(false), 82 caseSensitive(false),
83 m_useQtMail(true),
84 m_useOpieMail(false),
83 bAbEditFirstTime(TRUE), 85 bAbEditFirstTime(TRUE),
84 syncing(FALSE) 86 syncing(FALSE)
85{ 87{
86 isLoading = true; 88 isLoading = true;
87 89
88 // Read Config settings 90 // Read Config settings
89 Config cfg("AddressBook"); 91 Config cfg("AddressBook");
90 cfg.setGroup("Search"); 92 cfg.setGroup("Search");
91 useRegExp = cfg.readBoolEntry( "useRegExp" ); 93 useRegExp = cfg.readBoolEntry( "useRegExp" );
92 caseSensitive = cfg.readBoolEntry( "caseSensitive" ); 94 caseSensitive = cfg.readBoolEntry( "caseSensitive" );
93 doNotifyWrapAround = cfg.readBoolEntry( "doNotifyWrapAround" ); 95 doNotifyWrapAround = cfg.readBoolEntry( "doNotifyWrapAround" );
96 cfg.setGroup("Mail");
97 m_useQtMail = cfg.readBoolEntry( "useQtMail" );
98 m_useOpieMail=cfg.readBoolEntry( "useOpieMail" );
99
94 100
95 initFields(); 101 initFields();
96 102
97 setCaption( tr("Contacts") ); 103 setCaption( tr("Contacts") );
98 setIcon( Resource::loadPixmap( "AddressBook" ) ); 104 setIcon( Resource::loadPixmap( "AddressBook" ) );
99 105
100 setToolBarsMovable( FALSE ); 106 setToolBarsMovable( FALSE );
101 107
102 // Create Toolbars 108 // Create Toolbars
103 109
104 QPEToolBar *bar = new QPEToolBar( this ); 110 QPEToolBar *bar = new QPEToolBar( this );
105 bar->setHorizontalStretchable( TRUE ); 111 bar->setHorizontalStretchable( TRUE );
106 112
107 QPEMenuBar *mbList = new QPEMenuBar( bar ); 113 QPEMenuBar *mbList = new QPEMenuBar( bar );
108 mbList->setMargin( 0 ); 114 mbList->setMargin( 0 );
109 115
110 QPopupMenu *edit = new QPopupMenu( this ); 116 QPopupMenu *edit = new QPopupMenu( this );
111 mbList->insertItem( tr( "Contact" ), edit ); 117 mbList->insertItem( tr( "Contact" ), edit );
112 118
113 listTools = new QPEToolBar( this, "list operations" ); 119 listTools = new QPEToolBar( this, "list operations" );
114 120
115 121
116 QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 122 QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null,
117 0, this, 0 ); 123 0, this, 0 );
118 actionNew = a; 124 actionNew = a;
119 connect( a, SIGNAL( activated() ), this, SLOT( slotListNew() ) ); 125 connect( a, SIGNAL( activated() ), this, SLOT( slotListNew() ) );
120 a->addTo( edit ); 126 a->addTo( edit );
121 a->addTo( listTools ); 127 a->addTo( listTools );
122 128
123 a = new QAction( tr( "Edit" ), Resource::loadPixmap( "edit" ), QString::null, 129 a = new QAction( tr( "Edit" ), Resource::loadPixmap( "edit" ), QString::null,
124 0, this, 0 ); 130 0, this, 0 );
125 actionEdit = a; 131 actionEdit = a;
126 connect( a, SIGNAL( activated() ), this, SLOT( slotViewEdit() ) ); 132 connect( a, SIGNAL( activated() ), this, SLOT( slotViewEdit() ) );
127 a->addTo( edit ); 133 a->addTo( edit );
128 a->addTo( listTools ); 134 a->addTo( listTools );
129 135
130 a = new QAction( tr( "Delete" ), Resource::loadPixmap( "trash" ), QString::null, 136 a = new QAction( tr( "Delete" ), Resource::loadPixmap( "trash" ), QString::null,
131 0, this, 0 ); 137 0, this, 0 );
132 actionTrash = a; 138 actionTrash = a;
133 connect( a, SIGNAL( activated() ), this, SLOT( slotListDelete() ) ); 139 connect( a, SIGNAL( activated() ), this, SLOT( slotListDelete() ) );
134 a->addTo( edit ); 140 a->addTo( edit );
135 a->addTo( listTools ); 141 a->addTo( listTools );
136 142
137 143
138 // make it possible to go directly to businesscard via qcop call 144 // make it possible to go directly to businesscard via qcop call
139#if defined(Q_WS_QWS) 145#if defined(Q_WS_QWS)
140#if !defined(QT_NO_COP) 146#if !defined(QT_NO_COP)
141 QCopChannel *addressChannel = new QCopChannel("QPE/Addressbook" , this ); 147 QCopChannel *addressChannel = new QCopChannel("QPE/Addressbook" , this );
142 connect (addressChannel, SIGNAL( received(const QCString &, const QByteArray &)), 148 connect (addressChannel, SIGNAL( received(const QCString &, const QByteArray &)),
143 this, SLOT ( appMessage(const QCString &, const QByteArray &) ) ); 149 this, SLOT ( appMessage(const QCString &, const QByteArray &) ) );
144#endif 150#endif
145#endif 151#endif
146 a = new QAction( tr( "Find" ), Resource::loadPixmap( "mag" ), 152 a = new QAction( tr( "Find" ), Resource::loadPixmap( "mag" ),
147 QString::null, 0, this, 0 ); 153 QString::null, 0, this, 0 );
148 actionFind = a; 154 actionFind = a;
149 connect( a, SIGNAL(activated()), this, SLOT( slotFindOpen()) ); 155 connect( a, SIGNAL(activated()), this, SLOT( slotFindOpen()) );
150 a->addTo( edit ); 156 a->addTo( edit );
151 a->addTo( listTools ); 157 a->addTo( listTools );
152 158
153 // Much better search widget, taken from QTReader.. (se) 159 // Much better search widget, taken from QTReader.. (se)
154 searchBar = new OFloatBar( "Search", this, QMainWindow::Top, TRUE ); 160 searchBar = new OFloatBar( "Search", this, QMainWindow::Top, TRUE );
155 searchBar->setHorizontalStretchable( TRUE ); 161 searchBar->setHorizontalStretchable( TRUE );
156 searchBar->hide(); 162 searchBar->hide();
157 searchEdit = new QLineEdit( searchBar, "searchEdit" ); 163 searchEdit = new QLineEdit( searchBar, "searchEdit" );
158// QFont f("unifont", 16 /*, QFont::Bold*/); 164// QFont f("unifont", 16 /*, QFont::Bold*/);
159// searchEdit->setFont( f ); 165// searchEdit->setFont( f );
160 searchBar->setStretchableWidget( searchEdit ); 166 searchBar->setStretchableWidget( searchEdit );
161 connect( searchEdit, SIGNAL( returnPressed( ) ), 167 connect( searchEdit, SIGNAL( returnPressed( ) ),
162 this, SLOT( slotFind( ) ) ); 168 this, SLOT( slotFind( ) ) );
163 169
164 a = new QAction( tr( "Find Next" ), Resource::loadPixmap( "next" ), QString::null, 0, this, 0 ); 170 a = new QAction( tr( "Find Next" ), Resource::loadPixmap( "next" ), QString::null, 0, this, 0 );
165 connect( a, SIGNAL( activated() ), this, SLOT( slotFindNext() ) ); 171 connect( a, SIGNAL( activated() ), this, SLOT( slotFindNext() ) );
166 a->addTo( searchBar ); 172 a->addTo( searchBar );
167 173
168 a = new QAction( tr( "Close Find" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); 174 a = new QAction( tr( "Close Find" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 );
169 connect( a, SIGNAL( activated() ), this, SLOT( slotFindClose() ) ); 175 connect( a, SIGNAL( activated() ), this, SLOT( slotFindClose() ) );
170 a->addTo( searchBar ); 176 a->addTo( searchBar );
171 177
172 a = new QAction( tr( "Write Mail To" ), Resource::loadPixmap( "qtmail/reply" ), 178 a = new QAction( tr( "Write Mail To" ), Resource::loadPixmap( "mail/sendmail" ),
173 QString::null, 0, this, 0 ); 179 QString::null, 0, this, 0 );
174 //a->setEnabled( FALSE ); we got support for it now :) zecke 180 //a->setEnabled( FALSE ); we got support for it now :) zecke
175 actionMail = a; 181 actionMail = a;
176 connect( a, SIGNAL( activated() ), this, SLOT( writeMail() ) ); 182 connect( a, SIGNAL( activated() ), this, SLOT( writeMail() ) );
177 a->addTo( edit ); 183 a->addTo( edit );
178 a->addTo( listTools ); 184 a->addTo( listTools );
179 185
180 186
181 187
182 if ( Ir::supported() ) { 188 if ( Ir::supported() ) {
183 a = new QAction( tr ("Beam Entry" ), Resource::loadPixmap( "beam" ), QString::null, 189 a = new QAction( tr ("Beam Entry" ), Resource::loadPixmap( "beam" ), QString::null,
184 0, this, 0 ); 190 0, this, 0 );
185 actionBeam = a; 191 actionBeam = a;
186 connect( a, SIGNAL( activated() ), this, SLOT( slotBeam() ) ); 192 connect( a, SIGNAL( activated() ), this, SLOT( slotBeam() ) );
187 a->addTo( edit ); 193 a->addTo( edit );
188 a->addTo( listTools ); 194 a->addTo( listTools );
189 } 195 }
190 196
191 edit->insertSeparator(); 197 edit->insertSeparator();
192 198
193 a = new QAction( tr("Import vCard"), QString::null, 0, 0, 0, TRUE ); 199 a = new QAction( tr("Import vCard"), QString::null, 0, 0, 0, TRUE );
194 actionPersonal = a; 200 actionPersonal = a;
195 connect( a, SIGNAL( activated() ), this, SLOT( importvCard() ) ); 201 connect( a, SIGNAL( activated() ), this, SLOT( importvCard() ) );
196 a->addTo( edit ); 202 a->addTo( edit );
197 203
198 edit->insertSeparator(); 204 edit->insertSeparator();
199 205
200 a = new QAction( tr("My Personal Details"), QString::null, 0, 0, 0, TRUE ); 206 a = new QAction( tr("My Personal Details"), QString::null, 0, 0, 0, TRUE );
201 actionPersonal = a; 207 actionPersonal = a;
202 connect( a, SIGNAL( activated() ), this, SLOT( slotPersonalView() ) ); 208 connect( a, SIGNAL( activated() ), this, SLOT( slotPersonalView() ) );
203 a->addTo( edit ); 209 a->addTo( edit );
204 210
205 // Do we need this function ? (se) 211 // Do we need this function ? (se)
206 // a = new QAction( tr( "Arrange Edit Fields"), QString::null, 0, 0 ); 212 // a = new QAction( tr( "Arrange Edit Fields"), QString::null, 0, 0 );
207 // connect( a, SIGNAL( activated() ), this, SLOT( slotSettings() ) ); 213 // connect( a, SIGNAL( activated() ), this, SLOT( slotSettings() ) );
208 // a->addTo( edit ); 214 // a->addTo( edit );
209 215
210 216
211#ifdef __DEBUG_RELEASE 217#ifdef __DEBUG_RELEASE
212 // Remove this function for public Release ! This is only 218 // Remove this function for public Release ! This is only
213 // for debug purposes .. 219 // for debug purposes ..
214 a = new QAction( tr( "Save all Data"), QString::null, 0, 0 ); 220 a = new QAction( tr( "Save all Data"), QString::null, 0, 0 );
215 connect( a, SIGNAL( activated() ), this , SLOT( slotSave() ) ); 221 connect( a, SIGNAL( activated() ), this , SLOT( slotSave() ) );
216 a->addTo( edit ); 222 a->addTo( edit );
217#endif 223#endif
218 a = new QAction( tr( "Config" ), Resource::loadPixmap( "today/config" ), QString::null, 224 a = new QAction( tr( "Config" ), Resource::loadPixmap( "today/config" ), QString::null,
219 0, this, 0 ); 225 0, this, 0 );
220 connect( a, SIGNAL( activated() ), this, SLOT( slotConfig() ) ); 226 connect( a, SIGNAL( activated() ), this, SLOT( slotConfig() ) );
221 a->addTo( edit ); 227 a->addTo( edit );
222 228
223 // Create Views 229 // Create Views
224 listContainer = new QWidget( this ); 230 listContainer = new QWidget( this );
225 231
226 QVBoxLayout *vb = new QVBoxLayout( listContainer ); 232 QVBoxLayout *vb = new QVBoxLayout( listContainer );
227 233
228 abList = new AbTable( &orderedFields, listContainer, "table" ); 234 abList = new AbTable( &orderedFields, listContainer, "table" );
229 vb->addWidget(abList); 235 vb->addWidget(abList);
230 // abList->setHScrollBarMode( QScrollView::AlwaysOff ); 236 // abList->setHScrollBarMode( QScrollView::AlwaysOff );
231 connect( abList, SIGNAL( empty( bool ) ), this, SLOT( listIsEmpty( bool ) ) ); 237 connect( abList, SIGNAL( empty( bool ) ), this, SLOT( listIsEmpty( bool ) ) );
232 connect( abList, SIGNAL( details() ), this, SLOT( slotListView() ) ); 238 connect( abList, SIGNAL( details() ), this, SLOT( slotListView() ) );
233 connect( abList, SIGNAL( currentChanged(int,int) ), this, SLOT( slotUpdateToolbar() ) ); 239 connect( abList, SIGNAL( currentChanged(int,int) ), this, SLOT( slotUpdateToolbar() ) );
234 connect( abList, SIGNAL( signalSearchNext() ), this, SLOT( slotFindNext() ) ); 240 connect( abList, SIGNAL( signalSearchNext() ), this, SLOT( slotFindNext() ) );
235 connect( abList, SIGNAL( signalSearchBackward() ), this, SLOT( slotFindPrevious() ) ); 241 connect( abList, SIGNAL( signalSearchBackward() ), this, SLOT( slotFindPrevious() ) );
236 242
237 // Maybe we should react on Wraparound and notfound ? 243 // Maybe we should react on Wraparound and notfound ?
238 QObject::connect( abList, SIGNAL(signalNotFound()), this, SLOT(slotNotFound()) ); 244 QObject::connect( abList, SIGNAL(signalNotFound()), this, SLOT(slotNotFound()) );
239 QObject::connect( abList, SIGNAL(signalWrapAround()), this, SLOT(slotWrapAround()) ); 245 QObject::connect( abList, SIGNAL(signalWrapAround()), this, SLOT(slotWrapAround()) );
240 246
241 mView = 0; 247 mView = 0;
242 248
243 abList->load(); 249 abList->load();
244 250
245 pLabel = new LetterPicker( listContainer ); 251 pLabel = new LetterPicker( listContainer );
246 connect(pLabel, SIGNAL(letterClicked(char)), this, SLOT(slotSetLetter(char))); 252 connect(pLabel, SIGNAL(letterClicked(char)), this, SLOT(slotSetLetter(char)));
247 vb->addWidget(pLabel); 253 vb->addWidget(pLabel);
248 catMenu = new QPopupMenu( this ); 254 catMenu = new QPopupMenu( this );
249 catMenu->setCheckable( TRUE ); 255 catMenu->setCheckable( TRUE );
250 connect( catMenu, SIGNAL(activated(int)), this, SLOT(slotSetCategory(int)) ); 256 connect( catMenu, SIGNAL(activated(int)), this, SLOT(slotSetCategory(int)) );
251 populateCategories(); 257 populateCategories();
252 258
253 mbList->insertItem( tr("View"), catMenu ); 259 mbList->insertItem( tr("View"), catMenu );
254 // setCentralWidget( listContainer ); 260 // setCentralWidget( listContainer );
255 261
256 fontMenu = new QPopupMenu(this); 262 fontMenu = new QPopupMenu(this);
257 fontMenu->setCheckable( true ); 263 fontMenu->setCheckable( true );
258 connect( fontMenu, SIGNAL(activated(int)), this, SLOT(slotSetFont(int))); 264 connect( fontMenu, SIGNAL(activated(int)), this, SLOT(slotSetFont(int)));
259 265
260 fontMenu->insertItem(tr( "Small" ), 0); 266 fontMenu->insertItem(tr( "Small" ), 0);
261 fontMenu->insertItem(tr( "Normal" ), 1); 267 fontMenu->insertItem(tr( "Normal" ), 1);
262 fontMenu->insertItem(tr( "Large" ), 2); 268 fontMenu->insertItem(tr( "Large" ), 2);
263 269
264 defaultFont = new QFont( abList->font() ); 270 defaultFont = new QFont( abList->font() );
265 271
266 slotSetFont(startFontSize); 272 slotSetFont(startFontSize);
267 273
268 mbList->insertItem( tr("Font"), fontMenu); 274 mbList->insertItem( tr("Font"), fontMenu);
269 setCentralWidget(listContainer); 275 setCentralWidget(listContainer);
270 276
271 // qDebug("adressbook contrsuction: t=%d", t.elapsed() ); 277 // qDebug("adressbook contrsuction: t=%d", t.elapsed() );
272 278
273 abList->setCurrentCell( 0, 0 ); 279 abList->setCurrentCell( 0, 0 );
274 280
275 isLoading = false; 281 isLoading = false;
276} 282}
277 283
278 284
279void AddressbookWindow::slotConfig() 285void AddressbookWindow::slotConfig()
280{ 286{
281 ConfigDlg* dlg = new ConfigDlg( this, "Config" ); 287 ConfigDlg* dlg = new ConfigDlg( this, "Config" );
282 dlg -> setUseRegExp ( useRegExp ); 288 dlg -> setUseRegExp ( useRegExp );
283 dlg -> setBeCaseSensitive( caseSensitive ); 289 dlg -> setBeCaseSensitive( caseSensitive );
284 dlg -> setSignalWrapAround( doNotifyWrapAround ); 290 dlg -> setSignalWrapAround( doNotifyWrapAround );
291 dlg -> setQtMail ( m_useQtMail );
292 dlg -> setOpieMail ( m_useOpieMail );
285 dlg -> showMaximized(); 293 dlg -> showMaximized();
286 if ( dlg -> exec() ) { 294 if ( dlg -> exec() ) {
287 qWarning ("Config Dialog accepted !"); 295 qWarning ("Config Dialog accepted !");
288 useRegExp = dlg -> useRegExp(); 296 useRegExp = dlg -> useRegExp();
289 caseSensitive = dlg -> beCaseSensitive(); 297 caseSensitive = dlg -> beCaseSensitive();
290 doNotifyWrapAround = dlg -> signalWrapAround(); 298 doNotifyWrapAround = dlg -> signalWrapAround();
299 m_useQtMail = dlg -> useQtMail();
300 m_useOpieMail= dlg -> useOpieMail();
291 } 301 }
292 302
293 delete dlg; 303 delete dlg;
294} 304}
295 305
296 306
297void AddressbookWindow::slotSetFont( int size ) { 307void AddressbookWindow::slotSetFont( int size ) {
298 308
299 if (size > 2 || size < 0) 309 if (size > 2 || size < 0)
300 size = 1; 310 size = 1;
301 311
302 startFontSize = size; 312 startFontSize = size;
303 313
304 QFont *currentFont; 314 QFont *currentFont;
305 315
306 switch (size) { 316 switch (size) {
307 case 0: 317 case 0:
308 fontMenu->setItemChecked(0, true); 318 fontMenu->setItemChecked(0, true);
309 fontMenu->setItemChecked(1, false); 319 fontMenu->setItemChecked(1, false);
310 fontMenu->setItemChecked(2, false); 320 fontMenu->setItemChecked(2, false);
311 abList->setFont( QFont( defaultFont->family(), defaultFont->pointSize() - 2 ) ); 321 abList->setFont( QFont( defaultFont->family(), defaultFont->pointSize() - 2 ) );
312 currentFont = new QFont (abList->font()); 322 currentFont = new QFont (abList->font());
313 // abList->resizeRows(currentFont->pixelSize() + 7); 323 // abList->resizeRows(currentFont->pixelSize() + 7);
314 abList->resizeRows(); 324 abList->resizeRows();
315 break; 325 break;
316 case 1: 326 case 1:
317 fontMenu->setItemChecked(0, false); 327 fontMenu->setItemChecked(0, false);
318 fontMenu->setItemChecked(1, true); 328 fontMenu->setItemChecked(1, true);
319 fontMenu->setItemChecked(2, false); 329 fontMenu->setItemChecked(2, false);
320 abList->setFont( *defaultFont ); 330 abList->setFont( *defaultFont );
321 currentFont = new QFont (abList->font()); 331 currentFont = new QFont (abList->font());
322 // abList->resizeRows(currentFont->pixelSize() + 7); 332 // abList->resizeRows(currentFont->pixelSize() + 7);
323 abList->resizeRows(); 333 abList->resizeRows();
324 break; 334 break;
325 case 2: 335 case 2:
326 fontMenu->setItemChecked(0, false); 336 fontMenu->setItemChecked(0, false);
327 fontMenu->setItemChecked(1, false); 337 fontMenu->setItemChecked(1, false);
328 fontMenu->setItemChecked(2, true); 338 fontMenu->setItemChecked(2, true);
329 abList->setFont( QFont( defaultFont->family(), defaultFont->pointSize() + 2 ) ); 339 abList->setFont( QFont( defaultFont->family(), defaultFont->pointSize() + 2 ) );
330 currentFont = new QFont (abList->font()); 340 currentFont = new QFont (abList->font());
331 //abList->resizeRows(currentFont->pixelSize() + 7); 341 //abList->resizeRows(currentFont->pixelSize() + 7);
332 abList->resizeRows(); 342 abList->resizeRows();
333 break; 343 break;
334 } 344 }
335} 345}
336 346
337 347
338 348
339void AddressbookWindow::importvCard() { 349void AddressbookWindow::importvCard() {
340 QString str = OFileDialog::getOpenFileName( 1,"/");//,"", "*", this ); 350 QString str = OFileDialog::getOpenFileName( 1,"/");//,"", "*", this );
341 if(!str.isEmpty() ) 351 if(!str.isEmpty() )
342 setDocument((const QString&) str ); 352 setDocument((const QString&) str );
343 353
344} 354}
345 355
346void AddressbookWindow::setDocument( const QString &filename ) 356void AddressbookWindow::setDocument( const QString &filename )
347{ 357{
348 if ( filename.find(".vcf") != int(filename.length()) - 4 ) 358 if ( filename.find(".vcf") != int(filename.length()) - 4 )
349 return; 359 return;
350 360
351 QValueList<OContact> cl = OContact::readVCard( filename ); 361 QValueList<OContact> cl = OContact::readVCard( filename );
352 for( QValueList<OContact>::Iterator it = cl.begin(); it != cl.end(); ++it ) { 362 for( QValueList<OContact>::Iterator it = cl.begin(); it != cl.end(); ++it ) {
353 // QString msg = tr("You received a vCard for\n%1.\nDo You want to add it to your\naddressbook?") 363 // QString msg = tr("You received a vCard for\n%1.\nDo You want to add it to your\naddressbook?")
354 // .arg( (*it).fullName() ); 364 // .arg( (*it).fullName() );
355 // if ( QMessageBox::information( this, tr("received contact"), msg, QMessageBox::Ok, QMessageBox::Cancel ) == 365 // if ( QMessageBox::information( this, tr("received contact"), msg, QMessageBox::Ok, QMessageBox::Cancel ) ==
356 // QMessageBox::Ok ) { 366 // QMessageBox::Ok ) {
357 abList->addEntry( *it ); 367 abList->addEntry( *it );
358 // } 368 // }
359 } 369 }
360 370
361} 371}
362 372
363void AddressbookWindow::resizeEvent( QResizeEvent *e ) 373void AddressbookWindow::resizeEvent( QResizeEvent *e )
364{ 374{
365 QMainWindow::resizeEvent( e ); 375 QMainWindow::resizeEvent( e );
366 376
367 if ( centralWidget() == listContainer ) 377 if ( centralWidget() == listContainer )
368 showList(); 378 showList();
369 else if ( centralWidget() == mView ) 379 else if ( centralWidget() == mView )
370 showView(); 380 showView();
371} 381}
372 382
373AddressbookWindow::~AddressbookWindow() 383AddressbookWindow::~AddressbookWindow()
374{ 384{
375 Config cfg("AddressBook"); 385 Config cfg("AddressBook");
376 cfg.setGroup("Font"); 386 cfg.setGroup("Font");
377 cfg.writeEntry("fontSize", startFontSize); 387 cfg.writeEntry("fontSize", startFontSize);
378 388
379 cfg.setGroup("Search"); 389 cfg.setGroup("Search");
380 cfg.writeEntry("useRegExp", useRegExp); 390 cfg.writeEntry("useRegExp", useRegExp);
381 cfg.writeEntry("caseSensitive", caseSensitive); 391 cfg.writeEntry("caseSensitive", caseSensitive);
382 cfg.writeEntry("doNotifyWrapAround", doNotifyWrapAround); 392 cfg.writeEntry("doNotifyWrapAround", doNotifyWrapAround);
393 cfg.setGroup("Mail");
394 cfg.writeEntry( "useQtMail", m_useQtMail );
395 cfg.writeEntry( "useOpieMail", m_useOpieMail);
383} 396}
384 397
385void AddressbookWindow::slotUpdateToolbar() 398void AddressbookWindow::slotUpdateToolbar()
386{ 399{
387 OContact ce = abList->currentEntry(); 400 OContact ce = abList->currentEntry();
388 actionMail->setEnabled( !ce.defaultEmail().isEmpty() ); 401 actionMail->setEnabled( !ce.defaultEmail().isEmpty() );
389} 402}
390 403
391void AddressbookWindow::showList() 404void AddressbookWindow::showList()
392{ 405{
393 bool visiblemView; 406 bool visiblemView;
394 407
395 visiblemView = false; 408 visiblemView = false;
396 if ( mView ) { 409 if ( mView ) {
397 mView->hide(); 410 mView->hide();
398 visiblemView = true; 411 visiblemView = true;
399 } 412 }
400 setCentralWidget( listContainer ); 413 setCentralWidget( listContainer );
401 listContainer->show(); 414 listContainer->show();
402 // update our focues... (or use a stack widget!); 415 // update our focues... (or use a stack widget!);
403 abList->setFocus(); 416 abList->setFocus();
404 417
405 // This makes sure we are scrolled all the way to the left 418 // This makes sure we are scrolled all the way to the left
406 abList->setContentsPos( 0, abList->contentsY() ); 419 abList->setContentsPos( 0, abList->contentsY() );
407 420
408 //if ( visiblemView && abList->showBook() == "Cards" ) 421 //if ( visiblemView && abList->showBook() == "Cards" )
409 //abList->setShowCategory( abList->showBook(), abList->showCategory() ); 422 //abList->setShowCategory( abList->showBook(), abList->showCategory() );
410 423
411} 424}
412 425
413void AddressbookWindow::showView() 426void AddressbookWindow::showView()
414{ 427{
415 if ( abList->numRows() > 0 ) { 428 if ( abList->numRows() > 0 ) {
416 listContainer->hide(); 429 listContainer->hide();
417 setCentralWidget( abView() ); 430 setCentralWidget( abView() );
418 mView->show(); 431 mView->show();
419 mView->setFocus(); 432 mView->setFocus();
420 } 433 }
421} 434}
422 435
423void AddressbookWindow::slotListNew() 436void AddressbookWindow::slotListNew()
424{ 437{
425 OContact cnt; 438 OContact cnt;
426 if( !syncing ) { 439 if( !syncing ) {
427 if ( abEditor ) 440 if ( abEditor )
428 abEditor->setEntry( cnt ); 441 abEditor->setEntry( cnt );
429 abView()->init( cnt ); 442 abView()->init( cnt );
430 editEntry( NewEntry ); 443 editEntry( NewEntry );
431 } else { 444 } else {
432 QMessageBox::warning(this, tr("OContacts"), 445 QMessageBox::warning(this, tr("OContacts"),
433 tr("Can not edit data, currently syncing")); 446 tr("Can not edit data, currently syncing"));
434 } 447 }
435} 448}
436 449
437void AddressbookWindow::slotListView() 450void AddressbookWindow::slotListView()
438{ 451{
439 abView()->init( abList->currentEntry() ); 452 abView()->init( abList->currentEntry() );
440 mView->sync(); 453 mView->sync();
441 showView(); 454 showView();
442} 455}
443 456
444void AddressbookWindow::slotListDelete() 457void AddressbookWindow::slotListDelete()
445{ 458{
446 if(!syncing) { 459 if(!syncing) {
447 OContact tmpEntry = abList->currentEntry(); 460 OContact tmpEntry = abList->currentEntry();
448 461
449 // get a name, do the best we can... 462 // get a name, do the best we can...
450 QString strName = tmpEntry.fullName(); 463 QString strName = tmpEntry.fullName();
451 if ( strName.isEmpty() ) { 464 if ( strName.isEmpty() ) {
452 strName = tmpEntry.company(); 465 strName = tmpEntry.company();
453 if ( strName.isEmpty() ) 466 if ( strName.isEmpty() )
454 strName = "No Name"; 467 strName = "No Name";
455 } 468 }
456 469
457 470
458 if ( QPEMessageBox::confirmDelete( this, tr( "Contacts" ), 471 if ( QPEMessageBox::confirmDelete( this, tr( "Contacts" ),
459 strName ) ) { 472 strName ) ) {
460 abList->deleteCurrentEntry(); 473 abList->deleteCurrentEntry();
461 showList(); 474 showList();
462 } 475 }
463 } else { 476 } else {
464 QMessageBox::warning( this, tr("Contacts"), 477 QMessageBox::warning( this, tr("Contacts"),
465 tr("Can not edit data, currently syncing") ); 478 tr("Can not edit data, currently syncing") );
466 } 479 }
467} 480}
468 481
469void AddressbookWindow::slotViewBack() 482void AddressbookWindow::slotViewBack()
470{ 483{
471 showList(); 484 showList();
472} 485}
473 486
474void AddressbookWindow::slotViewEdit() 487void AddressbookWindow::slotViewEdit()
475{ 488{
476 if(!syncing) { 489 if(!syncing) {
477 if (actionPersonal->isOn()) { 490 if (actionPersonal->isOn()) {
478 editPersonal(); 491 editPersonal();
479 } else { 492 } else {
480 if ( !bAbEditFirstTime ) 493 if ( !bAbEditFirstTime )
481 abEditor->setEntry( abList->currentEntry() ); 494 abEditor->setEntry( abList->currentEntry() );
482 editEntry( EditEntry ); 495 editEntry( EditEntry );
483 } 496 }
484 } else { 497 } else {
485 QMessageBox::warning( this, tr("Contacts"), 498 QMessageBox::warning( this, tr("Contacts"),
486 tr("Can not edit data, currently syncing") ); 499 tr("Can not edit data, currently syncing") );
487 } 500 }
488} 501}
489 502
490 503
491 504
492void AddressbookWindow::writeMail() 505void AddressbookWindow::writeMail()
493{ 506{
494 OContact c = abList->currentEntry(); 507 OContact c = abList->currentEntry();
495 QString name = c.fileAs(); 508 QString name = c.fileAs();
496 QString email = c.defaultEmail(); 509 QString email = c.defaultEmail();
497 QCopEnvelope e("QPE/Application/qtmail", "writeMail(QString,QString)"); 510
498 e << name << email; 511 // I prefer the OPIE-Environment variable before the
512 // QPE-one..
513 QString basepath = QString::fromLatin1( getenv("OPIEDIR") );
514 if ( basepath.isEmpty() )
515 basepath = QString::fromLatin1( getenv("QPEDIR") );
516
517 // Try to access the preferred. If not possible, try to
518 // switch to the other one..
519 if ( m_useQtMail ){
520 qWarning ("Accessing: %s", (basepath + "/bin/qtmail").latin1());
521 if ( QFile::exists( basepath + "/bin/qtmail" ) ){
522 qWarning ("QCop");
523 QCopEnvelope e("QPE/Application/qtmail", "writeMail(QString,QString)");
524 e << name << email;
525 return;
526 } else
527 m_useOpieMail = true;
528 }
529 if ( m_useOpieMail ){
530 qWarning ("Accessing: %s", (basepath + "/bin/mail").latin1());
531 if ( QFile::exists( basepath + "/bin/mail" ) ){
532 qWarning ("QCop");
533 QCopEnvelope e("QPE/Application/mail", "writeMail(QString,QString)");
534 e << name << email;
535 return;
536 } else
537 m_useQtMail = true;
538 }
539
499} 540}
500 541
501static const char * beamfile = "/tmp/obex/contact.vcf"; 542static const char * beamfile = "/tmp/obex/contact.vcf";
502 543
503void AddressbookWindow::slotBeam() 544void AddressbookWindow::slotBeam()
504{ 545{
505 QString filename; 546 QString filename;
506 OContact c; 547 OContact c;
507 if ( actionPersonal->isOn() ) { 548 if ( actionPersonal->isOn() ) {
508 filename = addressbookPersonalVCardName(); 549 filename = addressbookPersonalVCardName();
509 if (!QFile::exists(filename)) 550 if (!QFile::exists(filename))
510 return; // can't beam a non-existent file 551 return; // can't beam a non-existent file
511 c = OContact::readVCard( filename )[0]; 552 c = OContact::readVCard( filename )[0];
512 } else { 553 } else {
513 unlink( beamfile ); // delete if exists 554 unlink( beamfile ); // delete if exists
514 c = abList->currentEntry(); 555 c = abList->currentEntry();
515 mkdir("/tmp/obex/", 0755); 556 mkdir("/tmp/obex/", 0755);
516 OContact::writeVCard( beamfile, c ); 557 OContact::writeVCard( beamfile, c );
517 filename = beamfile; 558 filename = beamfile;
518 } 559 }
519 Ir *ir = new Ir( this ); 560 Ir *ir = new Ir( this );
520 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 561 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
521 QString description = c.fullName(); 562 QString description = c.fullName();
522 ir->send( filename, description, "text/x-vCard" ); 563 ir->send( filename, description, "text/x-vCard" );
523} 564}
524 565
525void AddressbookWindow::beamDone( Ir *ir ) 566void AddressbookWindow::beamDone( Ir *ir )
526{ 567{
527 delete ir; 568 delete ir;
528 unlink( beamfile ); 569 unlink( beamfile );
529} 570}
530 571
531 572
532static void parseName( const QString& name, QString *first, QString *middle, 573static void parseName( const QString& name, QString *first, QString *middle,
533 QString * last ) 574 QString * last )
534{ 575{
535 576
536 int comma = name.find ( "," ); 577 int comma = name.find ( "," );
537 QString rest; 578 QString rest;
538 if ( comma > 0 ) { 579 if ( comma > 0 ) {
539 *last = name.left( comma ); 580 *last = name.left( comma );
540 comma++; 581 comma++;
541 while ( comma < int(name.length()) && name[comma] == ' ' ) 582 while ( comma < int(name.length()) && name[comma] == ' ' )
542 comma++; 583 comma++;
543 rest = name.mid( comma ); 584 rest = name.mid( comma );
544 } else { 585 } else {
545 int space = name.findRev( ' ' ); 586 int space = name.findRev( ' ' );
546 *last = name.mid( space+1 ); 587 *last = name.mid( space+1 );
547 rest = name.left( space ); 588 rest = name.left( space );
548 } 589 }
549 int space = rest.find( ' ' ); 590 int space = rest.find( ' ' );
550 if ( space <= 0 ) { 591 if ( space <= 0 ) {
551 *first = rest; 592 *first = rest;
552 } else { 593 } else {
553 *first = rest.left( space ); 594 *first = rest.left( space );
554 *middle = rest.mid( space+1 ); 595 *middle = rest.mid( space+1 );
555 } 596 }
556 597
557} 598}
558 599
559 600
560void AddressbookWindow::appMessage(const QCString &msg, const QByteArray &data) 601void AddressbookWindow::appMessage(const QCString &msg, const QByteArray &data)
561{ 602{
562 if (msg == "editPersonal()") { 603 if (msg == "editPersonal()") {
563 editPersonal(); 604 editPersonal();
564 } else if (msg == "editPersonalAndClose()") { 605 } else if (msg == "editPersonalAndClose()") {
565 editPersonal(); 606 editPersonal();
566 close(); 607 close();
567 } else if ( msg == "addContact(QString,QString)" ) { 608 } else if ( msg == "addContact(QString,QString)" ) {
568 QDataStream stream(data,IO_ReadOnly); 609 QDataStream stream(data,IO_ReadOnly);
569 QString name, email; 610 QString name, email;
570 stream >> name >> email; 611 stream >> name >> email;
571 612
572 OContact cnt; 613 OContact cnt;
573 QString fn, mn, ln; 614 QString fn, mn, ln;
574 parseName( name, &fn, &mn, &ln ); 615 parseName( name, &fn, &mn, &ln );
575 // qDebug( " %s - %s - %s", fn.latin1(), mn.latin1(), ln.latin1() ); 616 // qDebug( " %s - %s - %s", fn.latin1(), mn.latin1(), ln.latin1() );
576 cnt.setFirstName( fn ); 617 cnt.setFirstName( fn );
577 cnt.setMiddleName( mn ); 618 cnt.setMiddleName( mn );
578 cnt.setLastName( ln ); 619 cnt.setLastName( ln );
579 cnt.insertEmails( email ); 620 cnt.insertEmails( email );
580 cnt.setDefaultEmail( email ); 621 cnt.setDefaultEmail( email );
581 cnt.setFileAs(); 622 cnt.setFileAs();
582 623
583 if ( bAbEditFirstTime ) { 624 if ( bAbEditFirstTime ) {
584 abEditor = new ContactEditor( cnt, &orderedFields, &slOrderedFields, 625 abEditor = new ContactEditor( cnt, &orderedFields, &slOrderedFields,
585 this, "editor" ); 626 this, "editor" );
586 bAbEditFirstTime = FALSE; 627 bAbEditFirstTime = FALSE;
587 } else { 628 } else {
588 abEditor->setEntry( cnt ); 629 abEditor->setEntry( cnt );
589 } 630 }
590 abView()->init( cnt ); 631 abView()->init( cnt );
591 editEntry( NewEntry ); 632 editEntry( NewEntry );
592 633
593 634
594 635
595 } 636 }
596#if 0 637#if 0
597 else if (msg == "pickAddresses(QCString,QCString,QStringList,...)" ) { 638 else if (msg == "pickAddresses(QCString,QCString,QStringList,...)" ) {
598 QDataStream stream(data,IO_ReadOnly); 639 QDataStream stream(data,IO_ReadOnly);
599 QCString ch,m; 640 QCString ch,m;
600 QStringList types; 641 QStringList types;
601 stream >> ch >> m >> types; 642 stream >> ch >> m >> types;
602 AddressPicker picker(abList,this,0,TRUE); 643 AddressPicker picker(abList,this,0,TRUE);
603 picker.showMaximized(); 644 picker.showMaximized();
604 picker.setChoiceNames(types); 645 picker.setChoiceNames(types);
605 int i=0; 646 int i=0;
606 for (QStringList::ConstIterator it = types.begin(); it!=types.end(); ++it) { 647 for (QStringList::ConstIterator it = types.begin(); it!=types.end(); ++it) {
607 QStringList sel; 648 QStringList sel;
608 stream >> sel; 649 stream >> sel;
609 picker.setSelection(i++,sel); 650 picker.setSelection(i++,sel);
610 } 651 }
611 picker.showMaximized(); 652 picker.showMaximized();
612 picker.exec(); 653 picker.exec();
613 654
614 // ###### note: contacts may have been added - save here! 655 // ###### note: contacts may have been added - save here!
615 656
616 setCentralWidget(abList); 657 setCentralWidget(abList);
617 QCopEnvelope e(ch,m); 658 QCopEnvelope e(ch,m);
618 i=0; 659 i=0;
619 for (QStringList::ConstIterator it = types.begin(); it!=types.end(); ++it) { 660 for (QStringList::ConstIterator it = types.begin(); it!=types.end(); ++it) {
620 QStringList sel = picker.selection(i++); 661 QStringList sel = picker.selection(i++);
621 e << sel; 662 e << sel;
622 } 663 }
623 } 664 }
624#endif 665#endif
625 666
626} 667}
627 668
628void AddressbookWindow::editPersonal() 669void AddressbookWindow::editPersonal()
629{ 670{
630 QString filename = addressbookPersonalVCardName(); 671 QString filename = addressbookPersonalVCardName();
631 OContact me; 672 OContact me;
632 if (QFile::exists(filename)) 673 if (QFile::exists(filename))
633 me = OContact::readVCard( filename )[0]; 674 me = OContact::readVCard( filename )[0];
634 if (bAbEditFirstTime) { 675 if (bAbEditFirstTime) {
635 abEditor = new ContactEditor( me, &orderedFields, &slOrderedFields, 676 abEditor = new ContactEditor( me, &orderedFields, &slOrderedFields,
636 this, "editor" ); 677 this, "editor" );
637 // don't create a new editor every time 678 // don't create a new editor every time
638 bAbEditFirstTime = FALSE; 679 bAbEditFirstTime = FALSE;
639 } else 680 } else
640 abEditor->setEntry( me ); 681 abEditor->setEntry( me );
641 682
642 abEditor->setCaption(tr("Edit My Personal Details")); 683 abEditor->setCaption(tr("Edit My Personal Details"));
643 abEditor->showMaximized(); 684 abEditor->showMaximized();
644 685
645 // fix the foxus... 686 // fix the foxus...
646 abEditor->setNameFocus(); 687 abEditor->setNameFocus();
647 if ( abEditor->exec() ) { 688 if ( abEditor->exec() ) {
648 setFocus(); 689 setFocus();
649 OContact new_personal = abEditor->entry(); 690 OContact new_personal = abEditor->entry();
650 QString fname = addressbookPersonalVCardName(); 691 QString fname = addressbookPersonalVCardName();
651 OContact::writeVCard( fname, new_personal ); 692 OContact::writeVCard( fname, new_personal );
652 abView()->init(new_personal); 693 abView()->init(new_personal);
653 abView()->sync(); 694 abView()->sync();
654 } 695 }
655 abEditor->setCaption( tr("Edit Address") ); 696 abEditor->setCaption( tr("Edit Address") );
656} 697}
657 698
658void AddressbookWindow::slotPersonalView() 699void AddressbookWindow::slotPersonalView()
659{ 700{
660 if (!actionPersonal->isOn()) { 701 if (!actionPersonal->isOn()) {
661 // we just turned it off 702 // we just turned it off
662 setCaption( tr("Contacts") ); 703 setCaption( tr("Contacts") );
663 actionNew->setEnabled(TRUE); 704 actionNew->setEnabled(TRUE);
664 actionTrash->setEnabled(TRUE); 705 actionTrash->setEnabled(TRUE);
665 actionFind->setEnabled(TRUE); 706 actionFind->setEnabled(TRUE);
666 slotUpdateToolbar(); // maybe some of the above could be moved there 707 slotUpdateToolbar(); // maybe some of the above could be moved there
667 showList(); 708 showList();
668 return; 709 return;
669 } 710 }
670 711
671 // XXX need to disable some QActions. 712 // XXX need to disable some QActions.
672 actionNew->setEnabled(FALSE); 713 actionNew->setEnabled(FALSE);
673 actionTrash->setEnabled(FALSE); 714 actionTrash->setEnabled(FALSE);
674#ifndef MAKE_FOR_SHARP_ROM 715#ifndef MAKE_FOR_SHARP_ROM
675 actionFind->setEnabled(FALSE); 716 actionFind->setEnabled(FALSE);
676#endif 717#endif
677 actionMail->setEnabled(FALSE); 718 actionMail->setEnabled(FALSE);
678 719
679 setCaption( tr("Contacts - My Personal Details") ); 720 setCaption( tr("Contacts - My Personal Details") );
680 QString filename = addressbookPersonalVCardName(); 721 QString filename = addressbookPersonalVCardName();
681 OContact me; 722 OContact me;
682 if (QFile::exists(filename)) 723 if (QFile::exists(filename))
683 me = OContact::readVCard( filename )[0]; 724 me = OContact::readVCard( filename )[0];
684 725
685 abView()->init( me ); 726 abView()->init( me );
686 abView()->sync(); 727 abView()->sync();
687 listContainer->hide(); 728 listContainer->hide();
688 setCentralWidget( abView() ); 729 setCentralWidget( abView() );
689 mView->show(); 730 mView->show();
690 mView->setFocus(); 731 mView->setFocus();
diff --git a/core/pim/addressbook/addressbook.h b/core/pim/addressbook/addressbook.h
index 299ed70..8027ccf 100644
--- a/core/pim/addressbook/addressbook.h
+++ b/core/pim/addressbook/addressbook.h
@@ -1,133 +1,136 @@
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#ifndef Addressbook_H 20#ifndef Addressbook_H
21#define Addressbook_H 21#define Addressbook_H
22 22
23// Remove this for OPIE releae 1.0 ! 23// Remove this for OPIE releae 1.0 !
24#define __DEBUG_RELEASE 24#define __DEBUG_RELEASE
25 25
26#include <qmainwindow.h> 26#include <qmainwindow.h>
27#include <qvaluelist.h> 27#include <qvaluelist.h>
28#include <qstringlist.h> 28#include <qstringlist.h>
29#include <qlineedit.h> 29#include <qlineedit.h>
30#include "ofloatbar.h" 30#include "ofloatbar.h"
31 31
32class ContactEditor; 32class ContactEditor;
33class AbLabel; 33class AbLabel;
34class AbTable; 34class AbTable;
35class QPEToolBar; 35class QPEToolBar;
36class QPopupMenu; 36class QPopupMenu;
37class QToolButton; 37class QToolButton;
38class QDialog; 38class QDialog;
39class Ir; 39class Ir;
40class QAction; 40class QAction;
41class LetterPicker; 41class LetterPicker;
42 42
43class AddressbookWindow: public QMainWindow 43class AddressbookWindow: public QMainWindow
44{ 44{
45 Q_OBJECT 45 Q_OBJECT
46public: 46public:
47 AddressbookWindow( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); 47 AddressbookWindow( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
48 ~AddressbookWindow(); 48 ~AddressbookWindow();
49 49
50protected: 50protected:
51 void resizeEvent( QResizeEvent * e ); 51 void resizeEvent( QResizeEvent * e );
52 void showList(); 52 void showList();
53 void showView(); 53 void showView();
54 enum EntryMode { NewEntry=0, EditEntry }; 54 enum EntryMode { NewEntry=0, EditEntry };
55 void editPersonal(); 55 void editPersonal();
56 void editEntry( EntryMode ); 56 void editEntry( EntryMode );
57 void closeEvent( QCloseEvent *e ); 57 void closeEvent( QCloseEvent *e );
58 bool save(); 58 bool save();
59 59
60public slots: 60public slots:
61 void flush(); 61 void flush();
62 void reload(); 62 void reload();
63 void appMessage(const QCString &, const QByteArray &); 63 void appMessage(const QCString &, const QByteArray &);
64 void setDocument( const QString & ); 64 void setDocument( const QString & );
65 void slotFindNext(); 65 void slotFindNext();
66 void slotFindPrevious(); 66 void slotFindPrevious();
67#ifdef __DEBUG_RELEASE 67#ifdef __DEBUG_RELEASE
68 void slotSave(); 68 void slotSave();
69#endif 69#endif
70 70
71private slots: 71private slots:
72 void importvCard(); 72 void importvCard();
73 void slotListNew(); 73 void slotListNew();
74 void slotListView(); 74 void slotListView();
75 void slotListDelete(); 75 void slotListDelete();
76 void slotViewBack(); 76 void slotViewBack();
77 void slotViewEdit(); 77 void slotViewEdit();
78 void slotPersonalView(); 78 void slotPersonalView();
79 void listIsEmpty( bool ); 79 void listIsEmpty( bool );
80 void slotSettings(); 80 void slotSettings();
81 void writeMail(); 81 void writeMail();
82 void slotBeam(); 82 void slotBeam();
83 void beamDone( Ir * ); 83 void beamDone( Ir * );
84 void slotSetCategory( int ); 84 void slotSetCategory( int );
85 void slotSetLetter( char ); 85 void slotSetLetter( char );
86 void slotUpdateToolbar(); 86 void slotUpdateToolbar();
87 void slotSetFont(int); 87 void slotSetFont(int);
88 88
89 void slotFindOpen(); 89 void slotFindOpen();
90 void slotFindClose(); 90 void slotFindClose();
91 void slotFind(); 91 void slotFind();
92 void slotNotFound(); 92 void slotNotFound();
93 void slotWrapAround(); 93 void slotWrapAround();
94 94
95 void slotConfig(); 95 void slotConfig();
96 96
97private: 97private:
98 void initFields(); // inititialize our fields... 98 void initFields(); // inititialize our fields...
99 AbLabel *abView(); 99 AbLabel *abView();
100 void populateCategories(); 100 void populateCategories();
101 101
102 QPopupMenu *catMenu, *fontMenu; 102 QPopupMenu *catMenu, *fontMenu;
103 QPEToolBar *listTools; 103 QPEToolBar *listTools;
104 QToolButton *deleteButton; 104 QToolButton *deleteButton;
105 QValueList<int> allFields, orderedFields; 105 QValueList<int> allFields, orderedFields;
106 QStringList slOrderedFields; 106 QStringList slOrderedFields;
107 enum Panes { paneList=0, paneView, paneEdit }; 107 enum Panes { paneList=0, paneView, paneEdit };
108 ContactEditor *abEditor; 108 ContactEditor *abEditor;
109 AbLabel *mView; 109 AbLabel *mView;
110 LetterPicker *pLabel; 110 LetterPicker *pLabel;
111 AbTable *abList; 111 AbTable *abList;
112 QWidget *listContainer; 112 QWidget *listContainer;
113 113
114 // Searching stuff 114 // Searching stuff
115 OFloatBar* searchBar; 115 OFloatBar* searchBar;
116 QLineEdit* searchEdit; 116 QLineEdit* searchEdit;
117 bool useRegExp; 117 bool useRegExp;
118 bool doNotifyWrapAround; 118 bool doNotifyWrapAround;
119 bool caseSensitive; 119 bool caseSensitive;
120 120
121 bool m_useQtMail;
122 bool m_useOpieMail;
123
121 QAction *actionNew, *actionEdit, *actionTrash, *actionFind, *actionBeam, *actionPersonal, *actionMail; 124 QAction *actionNew, *actionEdit, *actionTrash, *actionFind, *actionBeam, *actionPersonal, *actionMail;
122 125
123 bool bAbEditFirstTime; 126 bool bAbEditFirstTime;
124 int viewMargin; 127 int viewMargin;
125 128
126 bool syncing; 129 bool syncing;
127 QFont *defaultFont; 130 QFont *defaultFont;
128 int startFontSize; 131 int startFontSize;
129 132
130 bool isLoading; 133 bool isLoading;
131}; 134};
132 135
133#endif 136#endif
diff --git a/core/pim/addressbook/configdlg.cpp b/core/pim/addressbook/configdlg.cpp
index b7c3b77..c0195d1 100644
--- a/core/pim/addressbook/configdlg.cpp
+++ b/core/pim/addressbook/configdlg.cpp
@@ -1,45 +1,61 @@
1#include "configdlg.h" 1#include "configdlg.h"
2#include <qcheckbox.h> 2#include <qcheckbox.h>
3#include <qradiobutton.h> 3#include <qradiobutton.h>
4 4
5ConfigDlg::ConfigDlg( QWidget *parent = 0, const char *name = 0 ): 5ConfigDlg::ConfigDlg( QWidget *parent = 0, const char *name = 0 ):
6 ConfigDlg_Base(parent, name, true ) 6 ConfigDlg_Base(parent, name, true )
7{} 7{}
8 8
9 9
10bool ConfigDlg::useRegExp() const 10bool ConfigDlg::useRegExp() const
11{ 11{
12 return m_useRegExp->isOn(); 12 return m_useRegExp->isOn();
13} 13}
14bool ConfigDlg::useWildCards() const 14bool ConfigDlg::useWildCards() const
15{ 15{
16 return m_useWildCard->isOn(); 16 return m_useWildCard->isOn();
17} 17}
18bool ConfigDlg::useQtMail() const
19{
20 return m_useQtMail->isOn();
21}
22bool ConfigDlg::useOpieMail() const
23{
24 return m_useOpieMail->isOn();
25}
18bool ConfigDlg::beCaseSensitive() const 26bool ConfigDlg::beCaseSensitive() const
19{ 27{
20 return m_useCaseSensitive->isChecked(); 28 return m_useCaseSensitive->isChecked();
21} 29}
22bool ConfigDlg::signalWrapAround() const 30bool ConfigDlg::signalWrapAround() const
23{ 31{
24 return m_signalWrapAround->isChecked(); 32 return m_signalWrapAround->isChecked();
25} 33}
26void ConfigDlg::setUseRegExp( bool v ) 34void ConfigDlg::setUseRegExp( bool v )
27{ 35{
28 m_useRegExp->setChecked( v ); 36 m_useRegExp->setChecked( v );
29} 37}
30void ConfigDlg::setUseWildCards( bool v ) 38void ConfigDlg::setUseWildCards( bool v )
31{ 39{
32 m_useWildCard->setChecked( v ); 40 m_useWildCard->setChecked( v );
33} 41}
34void ConfigDlg::setBeCaseSensitive( bool v ) 42void ConfigDlg::setBeCaseSensitive( bool v )
35{ 43{
36 m_useCaseSensitive->setChecked( v ); 44 m_useCaseSensitive->setChecked( v );
37} 45}
38void ConfigDlg::setSignalWrapAround( bool v ) 46void ConfigDlg::setSignalWrapAround( bool v )
39{ 47{
40 m_signalWrapAround->setChecked( v ); 48 m_signalWrapAround->setChecked( v );
41} 49}
50void ConfigDlg::setQtMail( bool v )
51{
52 m_useQtMail->setChecked( v );
53}
54void ConfigDlg::setOpieMail( bool v )
55{
56 m_useOpieMail->setChecked( v );
57}
42 58
43 59
44 60
45 61
diff --git a/core/pim/addressbook/configdlg.h b/core/pim/addressbook/configdlg.h
index 8be469b..34e9718 100644
--- a/core/pim/addressbook/configdlg.h
+++ b/core/pim/addressbook/configdlg.h
@@ -1,25 +1,29 @@
1#ifndef _CONFIGDLG_H_ 1#ifndef _CONFIGDLG_H_
2#define _CONFIGDLG_H_ 2#define _CONFIGDLG_H_
3 3
4#include "configdlg_base.h" 4#include "configdlg_base.h"
5 5
6class ConfigDlg: public ConfigDlg_Base 6class ConfigDlg: public ConfigDlg_Base
7{ 7{
8 Q_OBJECT 8 Q_OBJECT
9public: 9public:
10 ConfigDlg( QWidget *parent = 0, const char *name = 0 ); 10 ConfigDlg( QWidget *parent = 0, const char *name = 0 );
11 11
12 // Search Settings 12 // Search Settings
13 bool useRegExp() const; 13 bool useRegExp() const;
14 bool useWildCards() const; 14 bool useWildCards() const;
15 bool beCaseSensitive() const; 15 bool beCaseSensitive() const;
16 bool signalWrapAround() const; 16 bool signalWrapAround() const;
17 bool useQtMail() const;
18 bool useOpieMail() const;
17 19
18 void setUseRegExp( bool v ); 20 void setUseRegExp( bool v );
19 void setUseWildCards( bool v ); 21 void setUseWildCards( bool v );
20 void setBeCaseSensitive( bool v ); 22 void setBeCaseSensitive( bool v );
21 void setSignalWrapAround( bool v ); 23 void setSignalWrapAround( bool v );
24 void setQtMail( bool v );
25 void setOpieMail( bool v );
22}; 26};
23 27
24 28
25#endif 29#endif
diff --git a/core/pim/addressbook/configdlg_base.ui b/core/pim/addressbook/configdlg_base.ui
index e082702..d3ea12e 100644
--- a/core/pim/addressbook/configdlg_base.ui
+++ b/core/pim/addressbook/configdlg_base.ui
@@ -1,232 +1,335 @@
1<!DOCTYPE UI><UI> 1<!DOCTYPE UI><UI>
2<class>ConfigDlg_Base</class> 2<class>ConfigDlg_Base</class>
3<author>Stefan Eilers</author> 3<author>Stefan Eilers</author>
4<widget> 4<widget>
5 <class>QDialog</class> 5 <class>QDialog</class>
6 <property stdset="1"> 6 <property stdset="1">
7 <name>name</name> 7 <name>name</name>
8 <cstring>Configuration</cstring> 8 <cstring>Configuration</cstring>
9 </property> 9 </property>
10 <property stdset="1"> 10 <property stdset="1">
11 <name>geometry</name> 11 <name>geometry</name>
12 <rect> 12 <rect>
13 <x>0</x> 13 <x>0</x>
14 <y>0</y> 14 <y>0</y>
15 <width>227</width> 15 <width>217</width>
16 <height>287</height> 16 <height>287</height>
17 </rect> 17 </rect>
18 </property> 18 </property>
19 <property stdset="1"> 19 <property stdset="1">
20 <name>caption</name> 20 <name>caption</name>
21 <string>MyDialog1</string> 21 <string>MyDialog1</string>
22 </property> 22 </property>
23 <property stdset="1"> 23 <property stdset="1">
24 <name>sizeGripEnabled</name> 24 <name>sizeGripEnabled</name>
25 <bool>true</bool> 25 <bool>true</bool>
26 </property> 26 </property>
27 <vbox> 27 <vbox>
28 <property stdset="1"> 28 <property stdset="1">
29 <name>margin</name> 29 <name>margin</name>
30 <number>11</number> 30 <number>11</number>
31 </property> 31 </property>
32 <property stdset="1"> 32 <property stdset="1">
33 <name>spacing</name> 33 <name>spacing</name>
34 <number>6</number> 34 <number>6</number>
35 </property> 35 </property>
36 <widget> 36 <widget>
37 <class>QTabWidget</class> 37 <class>QTabWidget</class>
38 <property stdset="1"> 38 <property stdset="1">
39 <name>name</name> 39 <name>name</name>
40 <cstring>configDlg_base</cstring> 40 <cstring>configDlg_base</cstring>
41 </property> 41 </property>
42 <property> 42 <property>
43 <name>layoutMargin</name> 43 <name>layoutMargin</name>
44 </property> 44 </property>
45 <widget> 45 <widget>
46 <class>QWidget</class> 46 <class>QWidget</class>
47 <property stdset="1"> 47 <property stdset="1">
48 <name>name</name> 48 <name>name</name>
49 <cstring>Widget5</cstring> 49 <cstring>Widget5</cstring>
50 </property> 50 </property>
51 <attribute> 51 <attribute>
52 <name>title</name> 52 <name>title</name>
53 <string>Search</string> 53 <string>Search</string>
54 </attribute> 54 </attribute>
55 <vbox> 55 <vbox>
56 <property stdset="1"> 56 <property stdset="1">
57 <name>margin</name> 57 <name>margin</name>
58 <number>5</number> 58 <number>5</number>
59 </property> 59 </property>
60 <property stdset="1"> 60 <property stdset="1">
61 <name>spacing</name> 61 <name>spacing</name>
62 <number>6</number> 62 <number>6</number>
63 </property> 63 </property>
64 <widget> 64 <widget>
65 <class>QButtonGroup</class> 65 <class>QButtonGroup</class>
66 <property stdset="1"> 66 <property stdset="1">
67 <name>name</name> 67 <name>name</name>
68 <cstring>ButtonGroup1</cstring> 68 <cstring>ButtonGroup1</cstring>
69 </property> 69 </property>
70 <property stdset="1"> 70 <property stdset="1">
71 <name>title</name> 71 <name>title</name>
72 <string>Query Style</string> 72 <string>Query Style</string>
73 </property> 73 </property>
74 <vbox> 74 <vbox>
75 <property stdset="1"> 75 <property stdset="1">
76 <name>margin</name> 76 <name>margin</name>
77 <number>11</number> 77 <number>11</number>
78 </property> 78 </property>
79 <property stdset="1"> 79 <property stdset="1">
80 <name>spacing</name> 80 <name>spacing</name>
81 <number>6</number> 81 <number>6</number>
82 </property> 82 </property>
83 <widget> 83 <widget>
84 <class>QRadioButton</class> 84 <class>QRadioButton</class>
85 <property stdset="1"> 85 <property stdset="1">
86 <name>name</name> 86 <name>name</name>
87 <cstring>m_useRegExp</cstring> 87 <cstring>m_useRegExp</cstring>
88 </property> 88 </property>
89 <property stdset="1"> 89 <property stdset="1">
90 <name>text</name> 90 <name>text</name>
91 <string>Use Regular Expressions</string> 91 <string>Use Regular Expressions</string>
92 </property> 92 </property>
93 </widget> 93 </widget>
94 <widget> 94 <widget>
95 <class>QRadioButton</class> 95 <class>QRadioButton</class>
96 <property stdset="1"> 96 <property stdset="1">
97 <name>name</name> 97 <name>name</name>
98 <cstring>m_useWildCard</cstring> 98 <cstring>m_useWildCard</cstring>
99 </property> 99 </property>
100 <property stdset="1"> 100 <property stdset="1">
101 <name>text</name> 101 <name>text</name>
102 <string>Use Wildcards (*,?)</string> 102 <string>Use Wildcards (*,?)</string>
103 </property> 103 </property>
104 <property stdset="1"> 104 <property stdset="1">
105 <name>checked</name> 105 <name>checked</name>
106 <bool>true</bool> 106 <bool>true</bool>
107 </property> 107 </property>
108 </widget> 108 </widget>
109 </vbox> 109 </vbox>
110 </widget> 110 </widget>
111 <widget> 111 <widget>
112 <class>QCheckBox</class> 112 <class>QCheckBox</class>
113 <property stdset="1"> 113 <property stdset="1">
114 <name>name</name> 114 <name>name</name>
115 <cstring>m_useCaseSensitive</cstring> 115 <cstring>m_useCaseSensitive</cstring>
116 </property> 116 </property>
117 <property stdset="1"> 117 <property stdset="1">
118 <name>text</name> 118 <name>text</name>
119 <string>Case Sensitive</string> 119 <string>Case Sensitive</string>
120 </property> 120 </property>
121 </widget> 121 </widget>
122 <widget> 122 <widget>
123 <class>QCheckBox</class> 123 <class>QCheckBox</class>
124 <property stdset="1"> 124 <property stdset="1">
125 <name>name</name> 125 <name>name</name>
126 <cstring>m_signalWrapAround</cstring> 126 <cstring>m_signalWrapAround</cstring>
127 </property> 127 </property>
128 <property stdset="1"> 128 <property stdset="1">
129 <name>text</name> 129 <name>text</name>
130 <string>Signal Wrap Around</string> 130 <string>Signal Wrap Around</string>
131 </property> 131 </property>
132 </widget> 132 </widget>
133 <spacer> 133 <spacer>
134 <property> 134 <property>
135 <name>name</name> 135 <name>name</name>
136 <cstring>Spacer3</cstring> 136 <cstring>Spacer3</cstring>
137 </property> 137 </property>
138 <property stdset="1"> 138 <property stdset="1">
139 <name>orientation</name> 139 <name>orientation</name>
140 <enum>Vertical</enum> 140 <enum>Vertical</enum>
141 </property> 141 </property>
142 <property stdset="1"> 142 <property stdset="1">
143 <name>sizeType</name> 143 <name>sizeType</name>
144 <enum>Expanding</enum> 144 <enum>Expanding</enum>
145 </property> 145 </property>
146 <property> 146 <property>
147 <name>sizeHint</name> 147 <name>sizeHint</name>
148 <size> 148 <size>
149 <width>20</width> 149 <width>20</width>
150 <height>20</height> 150 <height>20</height>
151 </size> 151 </size>
152 </property> 152 </property>
153 </spacer> 153 </spacer>
154 </vbox> 154 </vbox>
155 </widget> 155 </widget>
156 <widget>
157 <class>QWidget</class>
158 <property stdset="1">
159 <name>name</name>
160 <cstring>tab</cstring>
161 </property>
162 <attribute>
163 <name>title</name>
164 <string>Mail</string>
165 </attribute>
166 <vbox>
167 <property stdset="1">
168 <name>margin</name>
169 <number>5</number>
170 </property>
171 <property stdset="1">
172 <name>spacing</name>
173 <number>6</number>
174 </property>
175 <widget>
176 <class>QButtonGroup</class>
177 <property stdset="1">
178 <name>name</name>
179 <cstring>ButtonGroup2</cstring>
180 </property>
181 <property stdset="1">
182 <name>title</name>
183 <string>Mail</string>
184 </property>
185 <vbox>
186 <property stdset="1">
187 <name>margin</name>
188 <number>11</number>
189 </property>
190 <property stdset="1">
191 <name>spacing</name>
192 <number>6</number>
193 </property>
194 <widget>
195 <class>QRadioButton</class>
196 <property stdset="1">
197 <name>name</name>
198 <cstring>m_useQtMail</cstring>
199 </property>
200 <property stdset="1">
201 <name>text</name>
202 <string>Prefer QT-Mail </string>
203 </property>
204 <property stdset="1">
205 <name>checked</name>
206 <bool>true</bool>
207 </property>
208 </widget>
209 <widget>
210 <class>QRadioButton</class>
211 <property stdset="1">
212 <name>name</name>
213 <cstring>m_useOpieMail</cstring>
214 </property>
215 <property stdset="1">
216 <name>text</name>
217 <string>Prefer Opie-Mail</string>
218 </property>
219 </widget>
220 <widget>
221 <class>QLabel</class>
222 <property stdset="1">
223 <name>name</name>
224 <cstring>TextLabel1</cstring>
225 </property>
226 <property stdset="1">
227 <name>text</name>
228 <string>Notice: QT-Mail is just
229provided in the SHARP
230default ROM. Opie-Mail
231is provided free !</string>
232 </property>
233 </widget>
234 </vbox>
235 </widget>
236 <spacer>
237 <property>
238 <name>name</name>
239 <cstring>Spacer2</cstring>
240 </property>
241 <property stdset="1">
242 <name>orientation</name>
243 <enum>Vertical</enum>
244 </property>
245 <property stdset="1">
246 <name>sizeType</name>
247 <enum>Expanding</enum>
248 </property>
249 <property>
250 <name>sizeHint</name>
251 <size>
252 <width>20</width>
253 <height>20</height>
254 </size>
255 </property>
256 </spacer>
257 </vbox>
258 </widget>
156 </widget> 259 </widget>
157 <widget> 260 <widget>
158 <class>QLayoutWidget</class> 261 <class>QLayoutWidget</class>
159 <property stdset="1"> 262 <property stdset="1">
160 <name>name</name> 263 <name>name</name>
161 <cstring>Layout1</cstring> 264 <cstring>Layout1</cstring>
162 </property> 265 </property>
163 <hbox> 266 <hbox>
164 <property stdset="1"> 267 <property stdset="1">
165 <name>margin</name> 268 <name>margin</name>
166 <number>0</number> 269 <number>0</number>
167 </property> 270 </property>
168 <property stdset="1"> 271 <property stdset="1">
169 <name>spacing</name> 272 <name>spacing</name>
170 <number>6</number> 273 <number>6</number>
171 </property> 274 </property>
172 <widget> 275 <widget>
173 <class>QPushButton</class> 276 <class>QPushButton</class>
174 <property stdset="1"> 277 <property stdset="1">
175 <name>name</name> 278 <name>name</name>
176 <cstring>buttonOk</cstring> 279 <cstring>buttonOk</cstring>
177 </property> 280 </property>
178 <property stdset="1"> 281 <property stdset="1">
179 <name>text</name> 282 <name>text</name>
180 <string>&amp;OK</string> 283 <string>&amp;OK</string>
181 </property> 284 </property>
182 <property stdset="1"> 285 <property stdset="1">
183 <name>autoDefault</name> 286 <name>autoDefault</name>
184 <bool>true</bool> 287 <bool>true</bool>
185 </property> 288 </property>
186 <property stdset="1"> 289 <property stdset="1">
187 <name>default</name> 290 <name>default</name>
188 <bool>true</bool> 291 <bool>true</bool>
189 </property> 292 </property>
190 </widget> 293 </widget>
191 <widget> 294 <widget>
192 <class>QPushButton</class> 295 <class>QPushButton</class>
193 <property stdset="1"> 296 <property stdset="1">
194 <name>name</name> 297 <name>name</name>
195 <cstring>buttonCancel</cstring> 298 <cstring>buttonCancel</cstring>
196 </property> 299 </property>
197 <property stdset="1"> 300 <property stdset="1">
198 <name>text</name> 301 <name>text</name>
199 <string>&amp;Cancel</string> 302 <string>&amp;Cancel</string>
200 </property> 303 </property>
201 <property stdset="1"> 304 <property stdset="1">
202 <name>autoDefault</name> 305 <name>autoDefault</name>
203 <bool>true</bool> 306 <bool>true</bool>
204 </property> 307 </property>
205 </widget> 308 </widget>
206 </hbox> 309 </hbox>
207 </widget> 310 </widget>
208 </vbox> 311 </vbox>
209</widget> 312</widget>
210<connections> 313<connections>
211 <connection> 314 <connection>
212 <sender>buttonOk</sender> 315 <sender>buttonOk</sender>
213 <signal>clicked()</signal> 316 <signal>clicked()</signal>
214 <receiver>Configuration</receiver> 317 <receiver>Configuration</receiver>
215 <slot>accept()</slot> 318 <slot>accept()</slot>
216 </connection> 319 </connection>
217 <connection> 320 <connection>
218 <sender>buttonCancel</sender> 321 <sender>buttonCancel</sender>
219 <signal>clicked()</signal> 322 <signal>clicked()</signal>
220 <receiver>Configuration</receiver> 323 <receiver>Configuration</receiver>
221 <slot>reject()</slot> 324 <slot>reject()</slot>
222 </connection> 325 </connection>
223</connections> 326</connections>
224<tabstops> 327<tabstops>
225 <tabstop>configDlg_base</tabstop> 328 <tabstop>configDlg_base</tabstop>
226 <tabstop>m_useWildCard</tabstop> 329 <tabstop>m_useWildCard</tabstop>
227 <tabstop>m_useCaseSensitive</tabstop> 330 <tabstop>m_useCaseSensitive</tabstop>
228 <tabstop>m_signalWrapAround</tabstop> 331 <tabstop>m_signalWrapAround</tabstop>
229 <tabstop>buttonOk</tabstop> 332 <tabstop>buttonOk</tabstop>
230 <tabstop>buttonCancel</tabstop> 333 <tabstop>buttonCancel</tabstop>
231</tabstops> 334</tabstops>
232</UI> 335</UI>
diff --git a/core/pim/addressbook/opie-addressbook.control b/core/pim/addressbook/opie-addressbook.control
index 14b0770..0a04ee6 100644
--- a/core/pim/addressbook/opie-addressbook.control
+++ b/core/pim/addressbook/opie-addressbook.control
@@ -1,9 +1,9 @@
1Files: bin/addressbook apps/1Pim/addressbook.desktop 1Files: bin/addressbook apps/1Pim/addressbook.desktop
2Priority: optional 2Priority: optional
3Section: opie/applications 3Section: opie/applications
4Maintainer: Warwick Allison <warwick@trolltech.com> 4Maintainer: Stefan Eilers <eilers.stefan@epost.de>
5Architecture: arm 5Architecture: arm
6Version: $QPE_VERSION-$SUB_VERSION 6Version: $QPE_VERSION-$SUB_VERSION
7Depends: opie-base ($QPE_VERSION) libopie 7Depends: opie-base ($QPE_VERSION) libopie
8Description: Contacts 8Description: Contacts
9 A simple addressbook for the Opie environment. 9 A simple addressbook for the Opie environment.
diff --git a/core/pim/addressbook/picker.cpp b/core/pim/addressbook/picker.cpp
index 7f4acb0..2c7dd71 100644
--- a/core/pim/addressbook/picker.cpp
+++ b/core/pim/addressbook/picker.cpp
@@ -1,239 +1,239 @@
1#include "picker.h" 1#include "picker.h"
2 2
3#include <qfont.h> 3#include <qfont.h>
4#include <qstring.h> 4#include <qstring.h>
5#include <qtimer.h> 5#include <qtimer.h>
6#include <qlayout.h> 6#include <qlayout.h>
7 7
8char PickerLabel::lastLetter = '\0'; 8char PickerLabel::lastLetter = '\0';
9 9
10PickerLabel::PickerLabel( QWidget *parent, const char *name ) 10PickerLabel::PickerLabel( QWidget *parent, const char *name )
11 : QLabel ( parent, name ) 11 : QLabel ( parent, name )
12{ 12{
13 currentLetter = 0; 13 currentLetter = 0;
14 //lastLetter = 0; 14 //lastLetter = 0;
15 15
16 letter1 = '\0'; 16 letter1 = '\0';
17 letter2 = '\0'; 17 letter2 = '\0';
18 letter3 = '\0'; 18 letter3 = '\0';
19 19
20 setFont( QFont( "smallsmooth", 9 ) ); 20 setFont( QFont( "smallsmooth", 9 ) );
21 setTextFormat( Qt::RichText ); 21 setTextFormat( Qt::RichText );
22 22
23} 23}
24 24
25PickerLabel::~PickerLabel() 25PickerLabel::~PickerLabel()
26{ 26{
27 27
28} 28}
29 29
30void PickerLabel::setLetters( char ch1, char ch2, char ch3 ) 30void PickerLabel::setLetters( char ch1, char ch2, char ch3 )
31{ 31{
32 QString tmpStr; 32 QString tmpStr;
33 33
34 if (ch1 != '\0') 34 if (ch1 != '\0')
35 letter1 = ch1; 35 letter1 = ch1;
36 else 36 else
37 letter1 = ' '; 37 letter1 = ' ';
38 38
39 if (ch2 != '\0') 39 if (ch2 != '\0')
40 letter2 = ch2; 40 letter2 = ch2;
41 else 41 else
42 letter2 = ' '; 42 letter2 = ' ';
43 43
44 if (ch3 != '\0') 44 if (ch3 != '\0')
45 letter3 = ch3; 45 letter3 = ch3;
46 else 46 else
47 letter3 = ' '; 47 letter3 = ' ';
48 48
49 tmpStr = "<qt>"; 49 tmpStr = "<qt>";
50 tmpStr += letter1; 50 tmpStr += letter1;
51 tmpStr += letter2; 51 tmpStr += letter2;
52 tmpStr += letter3; 52 tmpStr += letter3;
53 tmpStr += "</qt>"; 53 tmpStr += "</qt>";
54 54
55 setText(tmpStr); 55 setText(tmpStr);
56 56
57 currentLetter = 0; 57 currentLetter = 0;
58 58
59} 59}
60 60
61void PickerLabel::clearLetter() 61void PickerLabel::clearLetter()
62{ 62{
63 63
64 QString tmpStr; 64 QString tmpStr;
65 65
66 tmpStr = "<qt>"; 66 tmpStr = "<qt>";
67 tmpStr += letter1; 67 tmpStr += letter1;
68 tmpStr += letter2; 68 tmpStr += letter2;
69 tmpStr += letter3; 69 tmpStr += letter3;
70 tmpStr += "</qt>"; 70 tmpStr += "</qt>";
71 71
72 setText(tmpStr); 72 setText(tmpStr);
73 73
74 currentLetter = 0; 74 currentLetter = 0;
75 75
76} 76}
77 77
78void PickerLabel::mousePressEvent( QMouseEvent* e ) 78void PickerLabel::mousePressEvent( QMouseEvent* e )
79{ 79{
80 // If one pickerlabel is was, and an other is now selected, we 80 // If one pickerlabel is was, and an other is now selected, we
81 // have to simulate the releaseevent.. Otherwise the new label 81 // have to simulate the releaseevent.. Otherwise the new label
82 // will not get a highlighted letter.. 82 // will not get a highlighted letter..
83 // Maybe there is a more intelligent solution, but this works and I am tired.. (se) 83 // Maybe there is a more intelligent solution, but this works and I am tired.. (se)
84 if ( ( currentLetter == 0 ) && ( lastLetter != '\0' ) ) mouseReleaseEvent( e ); 84 if ( ( currentLetter == 0 ) && ( lastLetter != '\0' ) ) mouseReleaseEvent( e );
85} 85}
86 86
87void PickerLabel::mouseReleaseEvent( QMouseEvent* /* e */ ) 87void PickerLabel::mouseReleaseEvent( QMouseEvent* /* e */ )
88{ 88{
89 QString tmpStr; 89 QString tmpStr;
90 90
91 if (lastLetter != letter1 && lastLetter != letter2 && lastLetter != letter3 && lastLetter != '\0') 91 if (lastLetter != letter1 && lastLetter != letter2 && lastLetter != letter3 && lastLetter != '\0')
92 QTimer::singleShot( 0, this, SLOT(emitClearSignal()) ); 92 QTimer::singleShot( 0, this, SLOT(emitClearSignal()) );
93 93
94 switch (currentLetter) { 94 switch (currentLetter) {
95 case 0: 95 case 0:
96 tmpStr = "<qt><u><font color=\"#7F0000\">"; 96 tmpStr = "<qt><u><b><font color=\"#FF00FF\">";
97 tmpStr += letter1; 97 tmpStr += letter1;
98 tmpStr += "</font></u>"; 98 tmpStr += "</font></b></u>";
99 tmpStr += letter2; 99 tmpStr += letter2;
100 tmpStr += letter3; 100 tmpStr += letter3;
101 tmpStr += "</qt>"; 101 tmpStr += "</qt>";
102 102
103 setText(tmpStr); 103 setText(tmpStr);
104 104
105 currentLetter++; 105 currentLetter++;
106 lastLetter = letter1; 106 lastLetter = letter1;
107 emit selectedLetter( letter1 ); 107 emit selectedLetter( letter1 );
108 break; 108 break;
109 109
110 case 1: 110 case 1:
111 tmpStr = "<qt>"; 111 tmpStr = "<qt>";
112 tmpStr += letter1; 112 tmpStr += letter1;
113 tmpStr += "<u><font color=\"#7F0000\">"; 113 tmpStr += "<u><b><font color=\"#FF00FF\">";
114 tmpStr += letter2; 114 tmpStr += letter2;
115 tmpStr += "</font></u>"; 115 tmpStr += "</font></b></u>";
116 tmpStr += letter3; 116 tmpStr += letter3;
117 tmpStr += "</qt>"; 117 tmpStr += "</qt>";
118 118
119 setText(tmpStr); 119 setText(tmpStr);
120 120
121 currentLetter++; 121 currentLetter++;
122 lastLetter = letter2; 122 lastLetter = letter2;
123 emit selectedLetter( letter2 ); 123 emit selectedLetter( letter2 );
124 break; 124 break;
125 125
126 case 2: 126 case 2:
127 tmpStr = "<qt>"; 127 tmpStr = "<qt>";
128 tmpStr += letter1; 128 tmpStr += letter1;
129 tmpStr += letter2; 129 tmpStr += letter2;
130 tmpStr += "<u><font color=\"#7F0000\">"; 130 tmpStr += "<u><b><font color=\"#FF00FF\">";
131 tmpStr += letter3; 131 tmpStr += letter3;
132 tmpStr += "</font></u></qt>"; 132 tmpStr += "</font></b></u></qt>";
133 133
134 setText(tmpStr); 134 setText(tmpStr);
135 135
136 currentLetter++; 136 currentLetter++;
137 lastLetter = letter3; 137 lastLetter = letter3;
138 emit selectedLetter( letter3 ); 138 emit selectedLetter( letter3 );
139 break; 139 break;
140 140
141 default: 141 default:
142 clearLetter(); 142 clearLetter();
143 lastLetter = '\0'; 143 lastLetter = '\0';
144 emit selectedLetter( '\0' ); 144 emit selectedLetter( '\0' );
145 145
146 146
147 } 147 }
148} 148}
149 149
150void PickerLabel::emitClearSignal() { 150void PickerLabel::emitClearSignal() {
151 emit clearAll(); 151 emit clearAll();
152} 152}
153 153
154LetterPicker::LetterPicker( QWidget *parent, const char *name ) 154LetterPicker::LetterPicker( QWidget *parent, const char *name )
155 : QFrame( parent, name ) 155 : QFrame( parent, name )
156{ 156{
157 QHBoxLayout *l = new QHBoxLayout(this); 157 QHBoxLayout *l = new QHBoxLayout(this);
158 158
159 lblABC = new PickerLabel( this ); 159 lblABC = new PickerLabel( this );
160 l->addWidget( lblABC ); 160 l->addWidget( lblABC );
161 161
162 lblDEF = new PickerLabel( this ); 162 lblDEF = new PickerLabel( this );
163 l->addWidget( lblDEF ); 163 l->addWidget( lblDEF );
164 164
165 lblGHI = new PickerLabel( this ); 165 lblGHI = new PickerLabel( this );
166 l->addWidget( lblGHI ); 166 l->addWidget( lblGHI );
167 167
168 lblJKL = new PickerLabel( this ); 168 lblJKL = new PickerLabel( this );
169 l->addWidget( lblJKL ); 169 l->addWidget( lblJKL );
170 170
171 lblMNO = new PickerLabel( this ); 171 lblMNO = new PickerLabel( this );
172 l->addWidget( lblMNO ); 172 l->addWidget( lblMNO );
173 173
174 lblPQR = new PickerLabel( this ); 174 lblPQR = new PickerLabel( this );
175 l->addWidget( lblPQR ); 175 l->addWidget( lblPQR );
176 176
177 lblSTU = new PickerLabel( this ); 177 lblSTU = new PickerLabel( this );
178 l->addWidget( lblSTU ); 178 l->addWidget( lblSTU );
179 179
180 lblVWX = new PickerLabel( this ); 180 lblVWX = new PickerLabel( this );
181 l->addWidget( lblVWX ); 181 l->addWidget( lblVWX );
182 182
183 lblYZ = new PickerLabel( this ); 183 lblYZ = new PickerLabel( this );
184 l->addWidget( lblYZ ); 184 l->addWidget( lblYZ );
185 185
186 lblABC->setLetters( 'A', 'B', 'C' ); 186 lblABC->setLetters( 'A', 'B', 'C' );
187 lblDEF->setLetters( 'D', 'E', 'F' ); 187 lblDEF->setLetters( 'D', 'E', 'F' );
188 lblGHI->setLetters( 'G', 'H', 'I' ); 188 lblGHI->setLetters( 'G', 'H', 'I' );
189 lblJKL->setLetters( 'J', 'K', 'L' ); 189 lblJKL->setLetters( 'J', 'K', 'L' );
190 lblMNO->setLetters( 'M', 'N', 'O' ); 190 lblMNO->setLetters( 'M', 'N', 'O' );
191 lblPQR->setLetters( 'P', 'Q', 'R' ); 191 lblPQR->setLetters( 'P', 'Q', 'R' );
192 lblSTU->setLetters( 'S', 'T', 'U' ); 192 lblSTU->setLetters( 'S', 'T', 'U' );
193 lblVWX->setLetters( 'V', 'W', 'X' ); 193 lblVWX->setLetters( 'V', 'W', 'X' );
194 lblYZ->setLetters( 'Y', 'Z', '#' ); 194 lblYZ->setLetters( 'Y', 'Z', '#' );
195 195
196 connect(lblABC, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char))); 196 connect(lblABC, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
197 connect(lblDEF, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char))); 197 connect(lblDEF, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
198 connect(lblGHI, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char))); 198 connect(lblGHI, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
199 connect(lblJKL, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char))); 199 connect(lblJKL, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
200 connect(lblMNO, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char))); 200 connect(lblMNO, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
201 connect(lblPQR, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char))); 201 connect(lblPQR, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
202 connect(lblSTU, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char))); 202 connect(lblSTU, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
203 connect(lblVWX, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char))); 203 connect(lblVWX, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
204 connect(lblYZ, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char))); 204 connect(lblYZ, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
205 connect(lblABC, SIGNAL(clearAll()), this, SLOT(clear())); 205 connect(lblABC, SIGNAL(clearAll()), this, SLOT(clear()));
206 connect(lblDEF, SIGNAL(clearAll()), this, SLOT(clear())); 206 connect(lblDEF, SIGNAL(clearAll()), this, SLOT(clear()));
207 connect(lblGHI, SIGNAL(clearAll()), this, SLOT(clear())); 207 connect(lblGHI, SIGNAL(clearAll()), this, SLOT(clear()));
208 connect(lblJKL, SIGNAL(clearAll()), this, SLOT(clear())); 208 connect(lblJKL, SIGNAL(clearAll()), this, SLOT(clear()));
209 connect(lblMNO, SIGNAL(clearAll()), this, SLOT(clear())); 209 connect(lblMNO, SIGNAL(clearAll()), this, SLOT(clear()));
210 connect(lblPQR, SIGNAL(clearAll()), this, SLOT(clear())); 210 connect(lblPQR, SIGNAL(clearAll()), this, SLOT(clear()));
211 connect(lblSTU, SIGNAL(clearAll()), this, SLOT(clear())); 211 connect(lblSTU, SIGNAL(clearAll()), this, SLOT(clear()));
212 connect(lblVWX, SIGNAL(clearAll()), this, SLOT(clear())); 212 connect(lblVWX, SIGNAL(clearAll()), this, SLOT(clear()));
213 connect(lblYZ, SIGNAL(clearAll()), this, SLOT(clear())); 213 connect(lblYZ, SIGNAL(clearAll()), this, SLOT(clear()));
214 214
215} 215}
216 216
217LetterPicker::~LetterPicker() 217LetterPicker::~LetterPicker()
218{ 218{
219} 219}
220 220
221void LetterPicker::clear() 221void LetterPicker::clear()
222{ 222{
223 lblABC->clearLetter(); 223 lblABC->clearLetter();
224 lblDEF->clearLetter(); 224 lblDEF->clearLetter();
225 lblGHI->clearLetter(); 225 lblGHI->clearLetter();
226 lblJKL->clearLetter(); 226 lblJKL->clearLetter();
227 lblMNO->clearLetter(); 227 lblMNO->clearLetter();
228 lblPQR->clearLetter(); 228 lblPQR->clearLetter();
229 lblSTU->clearLetter(); 229 lblSTU->clearLetter();
230 lblVWX->clearLetter(); 230 lblVWX->clearLetter();
231 lblYZ->clearLetter(); 231 lblYZ->clearLetter();
232} 232}
233 233
234void LetterPicker::newLetter( char letter ) 234void LetterPicker::newLetter( char letter )
235{ 235{
236 qWarning("LetterClicked"); 236 qWarning("LetterClicked");
237 emit letterClicked( letter ); 237 emit letterClicked( letter );
238 238
239} 239}