summaryrefslogtreecommitdiffabout
path: root/kaddressbook
Unidiff
Diffstat (limited to 'kaddressbook') (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/views/cardview.cpp9
1 files changed, 4 insertions, 5 deletions
diff --git a/kaddressbook/views/cardview.cpp b/kaddressbook/views/cardview.cpp
index 84d3116..b6e053f 100644
--- a/kaddressbook/views/cardview.cpp
+++ b/kaddressbook/views/cardview.cpp
@@ -555,786 +555,785 @@ void CardViewItem::showFullString( const QPoint &itempos, CardViewTip *tip )
555 isLabel=true; 555 isLabel=true;
556 } else { 556 } else {
557 // find the field 557 // find the field
558 Field *f = fieldAt( itempos ); 558 Field *f = fieldAt( itempos );
559 if ( !f || ( !mView->showEmptyFields() && f->second.isEmpty() ) ) 559 if ( !f || ( !mView->showEmptyFields() && f->second.isEmpty() ) )
560 return; 560 return;
561 561
562 // y position: 562 // y position:
563 // header font height + 4px hader margin + 2px leading + item margin 563 // header font height + 4px hader margin + 2px leading + item margin
564 // + actual field index * (fontheight + 2px leading) 564 // + actual field index * (fontheight + 2px leading)
565 int maxLines = mView->maxFieldLines(); 565 int maxLines = mView->maxFieldLines();
566 bool se = mView->showEmptyFields(); 566 bool se = mView->showEmptyFields();
567 int fh = mView->d->mFm->height(); 567 int fh = mView->d->mFm->height();
568// { 568// {
569 Field *_f; 569 Field *_f;
570 for (_f = d->mFieldList.first(); _f != f; _f = d->mFieldList.next()) 570 for (_f = d->mFieldList.first(); _f != f; _f = d->mFieldList.next())
571 if ( se || ! _f->second.isEmpty() ) 571 if ( se || ! _f->second.isEmpty() )
572 y += ( QMIN(_f->second.contains('\n')+1, maxLines) * fh ) + 2; 572 y += ( QMIN(_f->second.contains('\n')+1, maxLines) * fh ) + 2;
573// } 573// }
574 if ( isLabel && itempos.y() > y + fh ) 574 if ( isLabel && itempos.y() > y + fh )
575 return; 575 return;
576 // label or data? 576 // label or data?
577 s = isLabel ? f->first : f->second; 577 s = isLabel ? f->first : f->second;
578 // trimmed? 578 // trimmed?
579 int colonWidth = mView->d->mFm->width(":"); 579 int colonWidth = mView->d->mFm->width(":");
580 lw = drawLabels ? // label width 580 lw = drawLabels ? // label width
581 QMIN( w/2 - 4 - mrg, d->maxLabelWidth + colonWidth + 4 ) : 581 QMIN( w/2 - 4 - mrg, d->maxLabelWidth + colonWidth + 4 ) :
582 0; 582 0;
583 int mw = isLabel ? lw - colonWidth : w - lw - (mrg*2); // max width for string 583 int mw = isLabel ? lw - colonWidth : w - lw - (mrg*2); // max width for string
584 if ( isLabel ) 584 if ( isLabel )
585 { 585 {
586 trimmed = mView->d->mFm->width( s ) > mw - colonWidth; 586 trimmed = mView->d->mFm->width( s ) > mw - colonWidth;
587 } else { 587 } else {
588 QRect r( mView->d->mFm->boundingRect( 0, 0, INT_MAX, INT_MAX, Qt::AlignTop|Qt::AlignLeft, s ) ); 588 QRect r( mView->d->mFm->boundingRect( 0, 0, INT_MAX, INT_MAX, Qt::AlignTop|Qt::AlignLeft, s ) );
589 trimmed = r.width() > mw || r.height()/fh > QMIN(s.contains('\n') + 1, maxLines); 589 trimmed = r.width() > mw || r.height()/fh > QMIN(s.contains('\n') + 1, maxLines);
590 } 590 }
591 } 591 }
592 if ( trimmed ) 592 if ( trimmed )
593 { 593 {
594 tip->setFont( (isLabel && !lw) ? mView->headerFont() : mView->font() ); // if condition is true, a header 594 tip->setFont( (isLabel && !lw) ? mView->headerFont() : mView->font() ); // if condition is true, a header
595 tip->setText( s ); 595 tip->setText( s );
596 tip->adjustSize(); 596 tip->adjustSize();
597 // find a proper position 597 // find a proper position
598 int lx; 598 int lx;
599 lx = isLabel || !drawLabels ? mrg : lw + mrg + 2 /*-1*/; 599 lx = isLabel || !drawLabels ? mrg : lw + mrg + 2 /*-1*/;
600 QPoint pnt(mView->contentsToViewport( QPoint(d->x, d->y) )); 600 QPoint pnt(mView->contentsToViewport( QPoint(d->x, d->y) ));
601 pnt += QPoint(lx, y); 601 pnt += QPoint(lx, y);
602 if ( pnt.x() < 0 ) 602 if ( pnt.x() < 0 )
603 pnt.setX( 0 ); 603 pnt.setX( 0 );
604 if ( pnt.x() + tip->width() > mView->visibleWidth() ) 604 if ( pnt.x() + tip->width() > mView->visibleWidth() )
605 pnt.setX( mView->visibleWidth() - tip->width() ); 605 pnt.setX( mView->visibleWidth() - tip->width() );
606 if ( pnt.y() + tip->height() > mView->visibleHeight() ) 606 if ( pnt.y() + tip->height() > mView->visibleHeight() )
607 pnt.setY( QMAX( 0, mView->visibleHeight() - tip->height() ) ); 607 pnt.setY( QMAX( 0, mView->visibleHeight() - tip->height() ) );
608 // show 608 // show
609 tip->move( pnt ); 609 tip->move( pnt );
610 tip->show(); 610 tip->show();
611 } 611 }
612} 612}
613 613
614CardViewItem::Field *CardViewItem::fieldAt( const QPoint & itempos ) const 614CardViewItem::Field *CardViewItem::fieldAt( const QPoint & itempos ) const
615{ 615{
616 int ypos = mView->d->mBFm->height() + 7 + mView->d->mItemMargin; 616 int ypos = mView->d->mBFm->height() + 7 + mView->d->mItemMargin;
617 int iy = itempos.y(); 617 int iy = itempos.y();
618 // skip below caption 618 // skip below caption
619 if ( iy <= ypos ) 619 if ( iy <= ypos )
620 return 0; 620 return 0;
621 // try find a field 621 // try find a field
622 bool showEmpty = mView->showEmptyFields(); 622 bool showEmpty = mView->showEmptyFields();
623 int fh = mView->d->mFm->height(); 623 int fh = mView->d->mFm->height();
624 int maxLines = mView->maxFieldLines(); 624 int maxLines = mView->maxFieldLines();
625 Field *f; 625 Field *f;
626 for ( f = d->mFieldList.first(); f; f = d->mFieldList.next() ) 626 for ( f = d->mFieldList.first(); f; f = d->mFieldList.next() )
627 { 627 {
628 if ( showEmpty || !f->second.isEmpty() ) 628 if ( showEmpty || !f->second.isEmpty() )
629 ypos += ( QMIN( f->second.contains('\n')+1, maxLines ) *fh)+2; 629 ypos += ( QMIN( f->second.contains('\n')+1, maxLines ) *fh)+2;
630 if ( iy <= ypos ) 630 if ( iy <= ypos )
631 break; 631 break;
632 } 632 }
633 return f ? f : 0; 633 return f ? f : 0;
634} 634}
635//END CardViewItem 635//END CardViewItem
636 636
637//BEGIN CardView 637//BEGIN CardView
638 638
639CardView::CardView(QWidget *parent, const char *name) 639CardView::CardView(QWidget *parent, const char *name)
640 : QScrollView(parent, name), 640 : QScrollView(parent, name),
641 d(new CardViewPrivate()) 641 d(new CardViewPrivate())
642{ 642{
643 mFlagKeyPressed = false; 643 mFlagKeyPressed = false;
644 mFlagBlockKeyPressed = false; 644 mFlagBlockKeyPressed = false;
645 d->mItemList.setAutoDelete(true); 645 d->mItemList.setAutoDelete(true);
646 d->mSeparatorList.setAutoDelete(true); 646 d->mSeparatorList.setAutoDelete(true);
647 647
648 QFont f = font(); 648 QFont f = font();
649 d->mFm = new QFontMetrics(f); 649 d->mFm = new QFontMetrics(f);
650 f.setBold(true); 650 f.setBold(true);
651 d->mHeaderFont = f; 651 d->mHeaderFont = f;
652 d->mBFm = new QFontMetrics(f); 652 d->mBFm = new QFontMetrics(f);
653 d->mTip = ( new CardViewTip( viewport() ) ), 653 d->mTip = ( new CardViewTip( viewport() ) ),
654 d->mTip->hide(); 654 d->mTip->hide();
655 d->mTimer = ( new QTimer(this, "mouseTimer") ), 655 d->mTimer = ( new QTimer(this, "mouseTimer") ),
656 656
657 viewport()->setMouseTracking( true ); 657 viewport()->setMouseTracking( true );
658 viewport()->setFocusProxy(this); 658 viewport()->setFocusProxy(this);
659 viewport()->setFocusPolicy(WheelFocus); 659 viewport()->setFocusPolicy(WheelFocus);
660 viewport()->setBackgroundMode(PaletteBase); 660 viewport()->setBackgroundMode(PaletteBase);
661 661
662 connect( d->mTimer, SIGNAL(timeout()), this, SLOT(tryShowFullText()) ); 662 connect( d->mTimer, SIGNAL(timeout()), this, SLOT(tryShowFullText()) );
663 663
664//US setBackgroundMode(PaletteBackground, PaletteBase); 664//US setBackgroundMode(PaletteBackground, PaletteBase);
665 setBackgroundMode(PaletteBackground); 665 setBackgroundMode(PaletteBackground);
666 666
667 // no reason for a vertical scrollbar 667 // no reason for a vertical scrollbar
668 setVScrollBarMode(AlwaysOff); 668 setVScrollBarMode(AlwaysOff);
669} 669}
670 670
671CardView::~CardView() 671CardView::~CardView()
672{ 672{
673 delete d->mFm; 673 delete d->mFm;
674 delete d->mBFm; 674 delete d->mBFm;
675 delete d; 675 delete d;
676 d = 0; 676 d = 0;
677} 677}
678 678
679void CardView::insertItem(CardViewItem *item) 679void CardView::insertItem(CardViewItem *item)
680{ 680{
681 d->mItemList.inSort(item); 681 d->mItemList.inSort(item);
682 setLayoutDirty(true); 682 setLayoutDirty(true);
683} 683}
684 684
685void CardView::takeItem(CardViewItem *item) 685void CardView::takeItem(CardViewItem *item)
686{ 686{
687 if ( d->mCurrentItem == item ) 687 if ( d->mCurrentItem == item )
688 d->mCurrentItem = item->nextItem(); 688 d->mCurrentItem = item->nextItem();
689 d->mItemList.take(d->mItemList.findRef(item)); 689 d->mItemList.take(d->mItemList.findRef(item));
690 690
691 setLayoutDirty(true); 691 setLayoutDirty(true);
692} 692}
693 693
694void CardView::clear() 694void CardView::clear()
695{ 695{
696 d->mItemList.clear(); 696 d->mItemList.clear();
697 697
698 setLayoutDirty(true); 698 setLayoutDirty(true);
699} 699}
700 700
701CardViewItem *CardView::currentItem() 701CardViewItem *CardView::currentItem()
702{ 702{
703 if ( ! d->mCurrentItem && d->mItemList.count() ) 703 if ( ! d->mCurrentItem && d->mItemList.count() )
704 d->mCurrentItem = d->mItemList.first(); 704 d->mCurrentItem = d->mItemList.first();
705 return d->mCurrentItem; 705 return d->mCurrentItem;
706} 706}
707 707
708void CardView::setCurrentItem( CardViewItem *item ) 708void CardView::setCurrentItem( CardViewItem *item )
709{ 709{
710 if ( !item ) 710 if ( !item )
711 return; 711 return;
712 else if ( item->cardView() != this ) 712 else if ( item->cardView() != this )
713 { 713 {
714 kdDebug(5720)<<"CardView::setCurrentItem: Item ("<<item<<") not owned! Backing out.."<<endl; 714 kdDebug(5720)<<"CardView::setCurrentItem: Item ("<<item<<") not owned! Backing out.."<<endl;
715 return; 715 return;
716 } 716 }
717 else if ( item == currentItem() ) 717 else if ( item == currentItem() )
718 { 718 {
719 return; 719 return;
720 } 720 }
721 721
722 if ( d->mSelectionMode == Single ) 722 if ( d->mSelectionMode == Single )
723 { 723 {
724 setSelected( item, true ); 724 setSelected( item, true );
725 } 725 }
726 else 726 else
727 { 727 {
728 CardViewItem *it = d->mCurrentItem; 728 CardViewItem *it = d->mCurrentItem;
729 d->mCurrentItem = item; 729 d->mCurrentItem = item;
730 if ( it ) 730 if ( it )
731 it->repaintCard(); 731 it->repaintCard();
732 item->repaintCard(); 732 item->repaintCard();
733 } 733 }
734 if ( ! d->mOnSeparator ) 734 if ( ! d->mOnSeparator )
735 ensureItemVisible( item ); 735 ensureItemVisible( item );
736 emit currentChanged( item ); 736 emit currentChanged( item );
737} 737}
738 738
739CardViewItem *CardView::itemAt(const QPoint &viewPos) 739CardViewItem *CardView::itemAt(const QPoint &viewPos)
740{ 740{
741 CardViewItem *item = 0; 741 CardViewItem *item = 0;
742 QPtrListIterator<CardViewItem> iter(d->mItemList); 742 QPtrListIterator<CardViewItem> iter(d->mItemList);
743 bool found = false; 743 bool found = false;
744 for (iter.toFirst(); iter.current() && !found; ++iter) 744 for (iter.toFirst(); iter.current() && !found; ++iter)
745 { 745 {
746 item = *iter; 746 item = *iter;
747 //if (item->d->mRect.contains(viewPos)) 747 //if (item->d->mRect.contains(viewPos))
748 if (QRect(item->d->x, item->d->y, d->mItemWidth, item->height()).contains(viewPos)) 748 if (QRect(item->d->x, item->d->y, d->mItemWidth, item->height()).contains(viewPos))
749 found = true; 749 found = true;
750 } 750 }
751 751
752 if (found) 752 if (found)
753 return item; 753 return item;
754 754
755 return 0; 755 return 0;
756} 756}
757 757
758QRect CardView::itemRect(const CardViewItem *item) 758QRect CardView::itemRect(const CardViewItem *item)
759{ 759{
760 //return item->d->mRect; 760 //return item->d->mRect;
761 return QRect(item->d->x, item->d->y, d->mItemWidth, item->height()); 761 return QRect(item->d->x, item->d->y, d->mItemWidth, item->height());
762} 762}
763 763
764void CardView::ensureItemVisible(const CardViewItem *item) 764void CardView::ensureItemVisible(const CardViewItem *item)
765{ 765{
766 ensureVisible(item->d->x , item->d->y, d->mItemSpacing, 0); 766 ensureVisible(item->d->x , item->d->y, d->mItemSpacing, 0);
767 ensureVisible(item->d->x + d->mItemWidth, item->d->y, d->mItemSpacing, 0); 767 ensureVisible(item->d->x + d->mItemWidth, item->d->y, d->mItemSpacing, 0);
768} 768}
769 769
770void CardView::repaintItem(const CardViewItem *item) 770void CardView::repaintItem(const CardViewItem *item)
771{ 771{
772 //repaintContents(item->d->mRect); 772 //repaintContents(item->d->mRect);
773 repaintContents( QRect(item->d->x, item->d->y, d->mItemWidth, item->height()) ); 773 repaintContents( QRect(item->d->x, item->d->y, d->mItemWidth, item->height()) );
774} 774}
775 775
776void CardView::setSelectionMode(CardView::SelectionMode mode) 776void CardView::setSelectionMode(CardView::SelectionMode mode)
777{ 777{
778 selectAll(false); 778 selectAll(false);
779 779
780 d->mSelectionMode = mode; 780 d->mSelectionMode = mode;
781} 781}
782 782
783CardView::SelectionMode CardView::selectionMode() const 783CardView::SelectionMode CardView::selectionMode() const
784{ 784{
785 return d->mSelectionMode; 785 return d->mSelectionMode;
786} 786}
787 787
788void CardView::selectAll(bool state) 788void CardView::selectAll(bool state)
789{ 789{
790 QPtrListIterator<CardViewItem> iter(d->mItemList); 790 QPtrListIterator<CardViewItem> iter(d->mItemList);
791 if (!state) 791 if (!state)
792 { 792 {
793 for (iter.toFirst(); iter.current(); ++iter) 793 for (iter.toFirst(); iter.current(); ++iter)
794 { 794 {
795 if ((*iter)->isSelected()) 795 if ((*iter)->isSelected())
796 { 796 {
797 (*iter)->setSelected(false); 797 (*iter)->setSelected(false);
798 (*iter)->repaintCard(); 798 (*iter)->repaintCard();
799 } 799 }
800 } 800 }
801 //emit selectionChanged(); // WARNING FIXME 801 //emit selectionChanged(); // WARNING FIXME
802 emit selectionChanged(0); 802 emit selectionChanged(0);
803 } 803 }
804 else if (d->mSelectionMode != CardView::Single) 804 else if (d->mSelectionMode != CardView::Single)
805 { 805 {
806 for (iter.toFirst(); iter.current(); ++iter) 806 for (iter.toFirst(); iter.current(); ++iter)
807 { 807 {
808 (*iter)->setSelected(true); 808 (*iter)->setSelected(true);
809 } 809 }
810 810
811 if (d->mItemList.count() > 0) 811 if (d->mItemList.count() > 0)
812 { 812 {
813 // emit, since there must have been at least one selected 813 // emit, since there must have been at least one selected
814 emit selectionChanged(); 814 emit selectionChanged();
815 //repaint();//??? 815 //repaint();//???
816 viewport()->update(); 816 viewport()->update();
817 } 817 }
818 } 818 }
819} 819}
820 820
821void CardView::setSelected(CardViewItem *item, bool selected) 821void CardView::setSelected(CardViewItem *item, bool selected)
822{ 822{
823 if ((item == 0) || (item->isSelected() == selected)) 823 if ((item == 0) || (item->isSelected() == selected))
824 return; 824 return;
825 825
826 if ( selected && d->mCurrentItem != item ) 826 if ( selected && d->mCurrentItem != item )
827 { 827 {
828 CardViewItem *it = d->mCurrentItem; 828 CardViewItem *it = d->mCurrentItem;
829 d->mCurrentItem = item; 829 d->mCurrentItem = item;
830 if ( it ) 830 if ( it )
831 it->repaintCard(); 831 it->repaintCard();
832 } 832 }
833 833
834 if (d->mSelectionMode == CardView::Single) 834 if (d->mSelectionMode == CardView::Single)
835 { 835 {
836 bool b = signalsBlocked(); 836 bool b = signalsBlocked();
837 blockSignals(true); 837 blockSignals(true);
838 selectAll(false); 838 selectAll(false);
839 blockSignals(b); 839 blockSignals(b);
840 840
841 if (selected) 841 if (selected)
842 { 842 {
843 item->setSelected(selected); 843 item->setSelected(selected);
844 item->repaintCard(); 844 item->repaintCard();
845 emit selectionChanged(); 845 emit selectionChanged();
846 emit selectionChanged(item); 846 emit selectionChanged(item);
847 } 847 }
848 else 848 else
849 { 849 {
850 emit selectionChanged(); 850 emit selectionChanged();
851 emit selectionChanged(0); 851 emit selectionChanged(0);
852 } 852 }
853 } 853 }
854 else if (d->mSelectionMode == CardView::Multi) 854 else if (d->mSelectionMode == CardView::Multi)
855 { 855 {
856 item->setSelected(selected); 856 item->setSelected(selected);
857 item->repaintCard(); 857 item->repaintCard();
858 emit selectionChanged(); 858 emit selectionChanged();
859 } 859 }
860 else if (d->mSelectionMode == CardView::Extended) 860 else if (d->mSelectionMode == CardView::Extended)
861 { 861 {
862 bool b = signalsBlocked(); 862 bool b = signalsBlocked();
863 blockSignals(true); 863 blockSignals(true);
864 selectAll(false); 864 selectAll(false);
865 blockSignals(b); 865 blockSignals(b);
866 866
867 item->setSelected(selected); 867 item->setSelected(selected);
868 item->repaintCard(); 868 item->repaintCard();
869 emit selectionChanged(); 869 emit selectionChanged();
870 } 870 }
871} 871}
872 872
873bool CardView::isSelected(CardViewItem *item) const 873bool CardView::isSelected(CardViewItem *item) const
874{ 874{
875 return (item && item->isSelected()); 875 return (item && item->isSelected());
876} 876}
877 877
878CardViewItem *CardView::selectedItem() const 878CardViewItem *CardView::selectedItem() const
879{ 879{
880 // find the first selected item 880 // find the first selected item
881 QPtrListIterator<CardViewItem> iter(d->mItemList); 881 QPtrListIterator<CardViewItem> iter(d->mItemList);
882 for (iter.toFirst(); iter.current(); ++iter) 882 for (iter.toFirst(); iter.current(); ++iter)
883 { 883 {
884 if ((*iter)->isSelected()) 884 if ((*iter)->isSelected())
885 return *iter; 885 return *iter;
886 } 886 }
887 887
888 return 0; 888 return 0;
889} 889}
890 890
891CardViewItem *CardView::firstItem() const 891CardViewItem *CardView::firstItem() const
892{ 892{
893 return d->mItemList.first(); 893 return d->mItemList.first();
894} 894}
895 895
896int CardView::childCount() const 896int CardView::childCount() const
897{ 897{
898 return d->mItemList.count(); 898 return d->mItemList.count();
899} 899}
900/*US 900/*US
901CardViewItem *CardView::findItem(const QString &text, const QString &label, 901CardViewItem *CardView::findItem(const QString &text, const QString &label,
902 Qt::StringComparisonMode compare) 902 Qt::StringComparisonMode compare)
903{ 903{
904 // IF the text is empty, we will return null, since empty text will 904 // IF the text is empty, we will return null, since empty text will
905 // match anything! 905 // match anything!
906 if (text.isEmpty()) 906 if (text.isEmpty())
907 return 0; 907 return 0;
908 908
909 QPtrListIterator<CardViewItem> iter(d->mItemList); 909 QPtrListIterator<CardViewItem> iter(d->mItemList);
910 if (compare & Qt::BeginsWith) 910 if (compare & Qt::BeginsWith)
911 { 911 {
912 QString value; 912 QString value;
913 for (iter.toFirst(); iter.current(); ++iter) 913 for (iter.toFirst(); iter.current(); ++iter)
914 { 914 {
915 value = (*iter)->fieldValue(label).upper(); 915 value = (*iter)->fieldValue(label).upper();
916 if (value.startsWith(text.upper())) 916 if (value.startsWith(text.upper()))
917 return *iter; 917 return *iter;
918 } 918 }
919 } 919 }
920 else 920 else
921 { 921 {
922 kdDebug(5720) << "CardView::findItem: search method not implemented" << endl; 922 kdDebug(5720) << "CardView::findItem: search method not implemented" << endl;
923 } 923 }
924 924
925 return 0; 925 return 0;
926} 926}
927*/ 927*/
928 928
929uint CardView::columnWidth() 929uint CardView::columnWidth()
930{ 930{
931 return d->mDrawSeparators ? 931 return d->mDrawSeparators ?
932 d->mItemWidth + ( 2 * d->mItemSpacing ) + d->mSepWidth : 932 d->mItemWidth + ( 2 * d->mItemSpacing ) + d->mSepWidth :
933 d->mItemWidth + d->mItemSpacing; 933 d->mItemWidth + d->mItemSpacing;
934} 934}
935 935
936void CardView::drawContents(QPainter *p, int clipx, int clipy, 936void CardView::drawContents(QPainter *p, int clipx, int clipy,
937 int clipw, int cliph) 937 int clipw, int cliph)
938{ 938{
939 QScrollView::drawContents(p, clipx, clipy, clipw, cliph); 939 //QScrollView::drawContents(p, clipx, clipy, clipw, cliph);
940
941 if (d->mLayoutDirty) 940 if (d->mLayoutDirty)
942 calcLayout(); 941 calcLayout();
943 942
944 //kdDebug() << "CardView::drawContents: " << clipx << ", " << clipy 943 //kdDebug() << "CardView::drawContents: " << clipx << ", " << clipy
945 // << ", " << clipw << ", " << cliph << endl; 944 // << ", " << clipw << ", " << cliph << endl;
946 945
947 QColorGroup cg = viewport()->palette().active(); // allow setting costum colors in the viewport pale 946 QColorGroup cg = viewport()->palette().active(); // allow setting costum colors in the viewport pale
948 947 int cX, cY;
948 contentsToViewport ( clipx, clipy, cX, cY );
949 QRect clipRect(clipx, clipy, clipw, cliph); 949 QRect clipRect(clipx, clipy, clipw, cliph);
950 QRect cardRect; 950 QRect cardRect;
951 QRect sepRect; 951 QRect sepRect;
952 CardViewItem *item; 952 CardViewItem *item;
953 CardViewSeparator *sep; 953 CardViewSeparator *sep;
954
955 // make sure the viewport is a pure background 954 // make sure the viewport is a pure background
956 viewport()->erase(clipRect); 955 viewport()->erase( QRect ( cX, cY , clipw, cliph ) );
957 956
958 // Now tell the cards to draw, if they are in the clip region 957 // Now tell the cards to draw, if they are in the clip region
959 QPtrListIterator<CardViewItem> iter(d->mItemList); 958 QPtrListIterator<CardViewItem> iter(d->mItemList);
960 for (iter.toFirst(); iter.current(); ++iter) 959 for (iter.toFirst(); iter.current(); ++iter)
961 { 960 {
962 item = *iter; 961 item = *iter;
963 cardRect.setRect( item->d->x, item->d->y, d->mItemWidth, item->height() ); 962 cardRect.setRect( item->d->x, item->d->y, d->mItemWidth, item->height() );
964 963
965 if (clipRect.intersects(cardRect) || clipRect.contains(cardRect)) 964 if (clipRect.intersects(cardRect) || clipRect.contains(cardRect))
966 { 965 {
967 //kdDebug() << "\trepainting card at: " << cardRect.x() << ", " 966 //kdDebug() << "\trepainting card at: " << cardRect.x() << ", "
968 // << cardRect.y() << endl; 967 // << cardRect.y() << endl;
969 968
970 // Tell the card to paint 969 // Tell the card to paint
971 p->save(); 970 p->save();
972 p->translate(cardRect.x(), cardRect.y()); 971 p->translate(cardRect.x(), cardRect.y());
973 item->paintCard(p, cg); 972 item->paintCard(p, cg);
974 p->restore(); 973 p->restore();
975 } 974 }
976 } 975 }
977 976
978 // Followed by the separators if they are in the clip region 977 // Followed by the separators if they are in the clip region
979 QPtrListIterator<CardViewSeparator> sepIter(d->mSeparatorList); 978 QPtrListIterator<CardViewSeparator> sepIter(d->mSeparatorList);
980 for (sepIter.toFirst(); sepIter.current(); ++sepIter) 979 for (sepIter.toFirst(); sepIter.current(); ++sepIter)
981 { 980 {
982 sep = *sepIter; 981 sep = *sepIter;
983 sepRect = sep->mRect; 982 sepRect = sep->mRect;
984 983
985 if (clipRect.intersects(sepRect) || clipRect.contains(sepRect)) 984 if (clipRect.intersects(sepRect) || clipRect.contains(sepRect))
986 { 985 {
987 p->save(); 986 p->save();
988 p->translate(sepRect.x(), sepRect.y()); 987 p->translate(sepRect.x(), sepRect.y());
989 sep->paintSeparator(p, cg); 988 sep->paintSeparator(p, cg);
990 p->restore(); 989 p->restore();
991 } 990 }
992 } 991 }
993} 992}
994 993
995void CardView::resizeEvent(QResizeEvent *e) 994void CardView::resizeEvent(QResizeEvent *e)
996{ 995{
997 QScrollView::resizeEvent(e); 996 QScrollView::resizeEvent(e);
998 997
999 setLayoutDirty(true); 998 setLayoutDirty(true);
1000} 999}
1001 1000
1002void CardView::calcLayout() 1001void CardView::calcLayout()
1003{ 1002{
1004 //kdDebug() << "CardView::calcLayout:" << endl; 1003 //kdDebug() << "CardView::calcLayout:" << endl;
1005 1004
1006 // Start in the upper left corner and layout all the 1005 // Start in the upper left corner and layout all the
1007 // cars using their height and width 1006 // cars using their height and width
1008 int maxWidth = 0; 1007 int maxWidth = 0;
1009 int maxHeight = 0; 1008 int maxHeight = 0;
1010 int xPos = 0; 1009 int xPos = 0;
1011 int yPos = 0; 1010 int yPos = 0;
1012 int cardSpacing = d->mItemSpacing; 1011 int cardSpacing = d->mItemSpacing;
1013 1012
1014 // delete the old separators 1013 // delete the old separators
1015 d->mSeparatorList.clear(); 1014 d->mSeparatorList.clear();
1016 1015
1017 QPtrListIterator<CardViewItem> iter(d->mItemList); 1016 QPtrListIterator<CardViewItem> iter(d->mItemList);
1018 CardViewItem *item = 0; 1017 CardViewItem *item = 0;
1019 CardViewSeparator *sep = 0; 1018 CardViewSeparator *sep = 0;
1020 xPos += cardSpacing; 1019 xPos += cardSpacing;
1021 1020
1022 for (iter.toFirst(); iter.current(); ++iter) 1021 for (iter.toFirst(); iter.current(); ++iter)
1023 { 1022 {
1024 item = *iter; 1023 item = *iter;
1025 1024
1026 yPos += cardSpacing; 1025 yPos += cardSpacing;
1027 1026
1028 if (yPos + item->height() + cardSpacing >= height() - horizontalScrollBar()->height()) 1027 if (yPos + item->height() + cardSpacing >= height() - horizontalScrollBar()->height())
1029 { 1028 {
1030 maxHeight = QMAX(maxHeight, yPos); 1029 maxHeight = QMAX(maxHeight, yPos);
1031 1030
1032 // Drawing in this column would be greater than the height 1031 // Drawing in this column would be greater than the height
1033 // of the scroll view, so move to next column 1032 // of the scroll view, so move to next column
1034 yPos = cardSpacing; 1033 yPos = cardSpacing;
1035 xPos += cardSpacing + maxWidth; 1034 xPos += cardSpacing + maxWidth;
1036 if (d->mDrawSeparators) 1035 if (d->mDrawSeparators)
1037 { 1036 {
1038 // Create a separator since the user asked 1037 // Create a separator since the user asked
1039 sep = new CardViewSeparator(this); 1038 sep = new CardViewSeparator(this);
1040 sep->mRect.moveTopLeft(QPoint(xPos, yPos+d->mItemMargin)); 1039 sep->mRect.moveTopLeft(QPoint(xPos, yPos+d->mItemMargin));
1041 xPos += d->mSepWidth + cardSpacing; 1040 xPos += d->mSepWidth + cardSpacing;
1042 d->mSeparatorList.append(sep); 1041 d->mSeparatorList.append(sep);
1043 } 1042 }
1044 1043
1045 maxWidth = 0; 1044 maxWidth = 0;
1046 } 1045 }
1047 1046
1048 item->d->x = xPos; 1047 item->d->x = xPos;
1049 item->d->y = yPos; 1048 item->d->y = yPos;
1050 1049
1051 yPos += item->height(); 1050 yPos += item->height();
1052 maxWidth = QMAX(maxWidth, d->mItemWidth); 1051 maxWidth = QMAX(maxWidth, d->mItemWidth);
1053 } 1052 }
1054 1053
1055 xPos += maxWidth; 1054 xPos += maxWidth;
1056 resizeContents( xPos + cardSpacing, maxHeight ); 1055 resizeContents( xPos + cardSpacing, maxHeight );
1057 1056
1058 // Update the height of all the separators now that we know the 1057 // Update the height of all the separators now that we know the
1059 // max height of a column 1058 // max height of a column
1060 QPtrListIterator<CardViewSeparator> sepIter(d->mSeparatorList); 1059 QPtrListIterator<CardViewSeparator> sepIter(d->mSeparatorList);
1061 for (sepIter.toFirst(); sepIter.current(); ++sepIter) 1060 for (sepIter.toFirst(); sepIter.current(); ++sepIter)
1062 { 1061 {
1063 (*sepIter)->mRect.setHeight(maxHeight - 2*cardSpacing - 2*d->mItemMargin); 1062 (*sepIter)->mRect.setHeight(maxHeight - 2*cardSpacing - 2*d->mItemMargin);
1064 } 1063 }
1065 1064
1066 d->mLayoutDirty = false; 1065 d->mLayoutDirty = false;
1067} 1066}
1068 1067
1069CardViewItem *CardView::itemAfter(CardViewItem *item) 1068CardViewItem *CardView::itemAfter(CardViewItem *item)
1070{ 1069{
1071 /*int pos = */d->mItemList.findRef(item); 1070 /*int pos = */d->mItemList.findRef(item);
1072 return d->mItemList.next();//at(pos+1); 1071 return d->mItemList.next();//at(pos+1);
1073} 1072}
1074 1073
1075uint CardView::itemMargin() 1074uint CardView::itemMargin()
1076{ 1075{
1077 return d->mItemMargin; 1076 return d->mItemMargin;
1078} 1077}
1079 1078
1080void CardView::setItemMargin( uint margin ) 1079void CardView::setItemMargin( uint margin )
1081{ 1080{
1082 if ( margin == d->mItemMargin ) 1081 if ( margin == d->mItemMargin )
1083 return; 1082 return;
1084 1083
1085 d->mItemMargin = margin; 1084 d->mItemMargin = margin;
1086 setLayoutDirty( true ); 1085 setLayoutDirty( true );
1087} 1086}
1088 1087
1089uint CardView::itemSpacing() 1088uint CardView::itemSpacing()
1090{ 1089{
1091 return d->mItemSpacing; 1090 return d->mItemSpacing;
1092} 1091}
1093 1092
1094void CardView::setItemSpacing( uint spacing ) 1093void CardView::setItemSpacing( uint spacing )
1095{ 1094{
1096 if ( spacing == d->mItemSpacing ) 1095 if ( spacing == d->mItemSpacing )
1097 return; 1096 return;
1098 1097
1099 d->mItemSpacing = spacing; 1098 d->mItemSpacing = spacing;
1100 setLayoutDirty( true ); 1099 setLayoutDirty( true );
1101} 1100}
1102 1101
1103void CardView::contentsMousePressEvent(QMouseEvent *e) 1102void CardView::contentsMousePressEvent(QMouseEvent *e)
1104{ 1103{
1105 QScrollView::contentsMousePressEvent(e); 1104 QScrollView::contentsMousePressEvent(e);
1106 1105
1107 QPoint pos = e->pos(); 1106 QPoint pos = e->pos();
1108 d->mLastClickPos = pos; 1107 d->mLastClickPos = pos;
1109 1108
1110 CardViewItem *item = itemAt(pos); 1109 CardViewItem *item = itemAt(pos);
1111 1110
1112 if (item == 0) 1111 if (item == 0)
1113 { 1112 {
1114 d->mLastClickOnItem = false; 1113 d->mLastClickOnItem = false;
1115 if ( d->mOnSeparator) 1114 if ( d->mOnSeparator)
1116 { 1115 {
1117 d->mResizeAnchor = e->x()+contentsX(); 1116 d->mResizeAnchor = e->x()+contentsX();
1118 d->colspace = (2*d->mItemSpacing) /*+ (2*d->mItemMargin)*/; 1117 d->colspace = (2*d->mItemSpacing) /*+ (2*d->mItemMargin)*/;
1119 int ccw = d->mItemWidth + d->colspace + d->mSepWidth; 1118 int ccw = d->mItemWidth + d->colspace + d->mSepWidth;
1120 d->first = (contentsX()+d->mSepWidth)/ccw; 1119 d->first = (contentsX()+d->mSepWidth)/ccw;
1121 d->pressed = (d->mResizeAnchor+d->mSepWidth)/ccw; 1120 d->pressed = (d->mResizeAnchor+d->mSepWidth)/ccw;
1122 d->span = d->pressed - d->first; 1121 d->span = d->pressed - d->first;
1123 d->firstX = d->first * ccw; 1122 d->firstX = d->first * ccw;
1124 if ( d->firstX ) d->firstX -= d->mSepWidth; // (no sep in col 0) 1123 if ( d->firstX ) d->firstX -= d->mSepWidth; // (no sep in col 0)
1125 } 1124 }
1126 else 1125 else
1127 { 1126 {
1128 selectAll(false); 1127 selectAll(false);
1129 } 1128 }
1130 return; 1129 return;
1131 } 1130 }
1132 1131
1133 d->mLastClickOnItem = true; 1132 d->mLastClickOnItem = true;
1134 1133
1135 CardViewItem *other = d->mCurrentItem; 1134 CardViewItem *other = d->mCurrentItem;
1136 setCurrentItem( item ); 1135 setCurrentItem( item );
1137 1136
1138 // Always emit the selection 1137 // Always emit the selection
1139 emit clicked(item); 1138 emit clicked(item);
1140 1139
1141 // Check the selection type and update accordingly 1140 // Check the selection type and update accordingly
1142 if (d->mSelectionMode == CardView::Single) 1141 if (d->mSelectionMode == CardView::Single)
1143 { 1142 {
1144 // make sure it isn't already selected 1143 // make sure it isn't already selected
1145 if (item->isSelected()) 1144 if (item->isSelected())
1146 return; 1145 return;
1147 1146
1148 bool b = signalsBlocked(); 1147 bool b = signalsBlocked();
1149 blockSignals(true); 1148 blockSignals(true);
1150 selectAll(false); 1149 selectAll(false);
1151 blockSignals(b); 1150 blockSignals(b);
1152 1151
1153 item->setSelected(true); 1152 item->setSelected(true);
1154 item->repaintCard(); 1153 item->repaintCard();
1155 emit selectionChanged(item); 1154 emit selectionChanged(item);
1156 } 1155 }
1157 1156
1158 else if (d->mSelectionMode == CardView::Multi) 1157 else if (d->mSelectionMode == CardView::Multi)
1159 { 1158 {
1160 // toggle the selection 1159 // toggle the selection
1161 item->setSelected(!item->isSelected()); 1160 item->setSelected(!item->isSelected());
1162 item->repaintCard(); 1161 item->repaintCard();
1163 emit selectionChanged(); 1162 emit selectionChanged();
1164 } 1163 }
1165 1164
1166 else if (d->mSelectionMode == CardView::Extended) 1165 else if (d->mSelectionMode == CardView::Extended)
1167 { 1166 {
1168 if ((e->button() & Qt::LeftButton) && 1167 if ((e->button() & Qt::LeftButton) &&
1169 (e->state() & Qt::ShiftButton)) 1168 (e->state() & Qt::ShiftButton))
1170 { 1169 {
1171 if ( item == other ) return; 1170 if ( item == other ) return;
1172 1171
1173 bool s = ! item->isSelected(); 1172 bool s = ! item->isSelected();
1174 1173
1175 if ( s && ! (e->state() & ControlButton) ) 1174 if ( s && ! (e->state() & ControlButton) )
1176 { 1175 {
1177 bool b = signalsBlocked(); 1176 bool b = signalsBlocked();
1178 blockSignals(true); 1177 blockSignals(true);
1179 selectAll(false); 1178 selectAll(false);
1180 blockSignals(b); 1179 blockSignals(b);
1181 } 1180 }
1182 1181
1183 int from, to, a, b; 1182 int from, to, a, b;
1184 a = d->mItemList.findRef( item ); 1183 a = d->mItemList.findRef( item );
1185 b = d->mItemList.findRef( other ); 1184 b = d->mItemList.findRef( other );
1186 from = a < b ? a : b; 1185 from = a < b ? a : b;
1187 to = a > b ? a : b; 1186 to = a > b ? a : b;
1188 //kdDebug()<<"selecting items "<<from<<" - "<<to<<" ( "<<s<<" )"<<endl; 1187 //kdDebug()<<"selecting items "<<from<<" - "<<to<<" ( "<<s<<" )"<<endl;
1189 CardViewItem *aItem; 1188 CardViewItem *aItem;
1190 for ( ; from <= to; from++ ) 1189 for ( ; from <= to; from++ )
1191 { 1190 {
1192 aItem = d->mItemList.at( from ); 1191 aItem = d->mItemList.at( from );
1193 aItem->setSelected( s ); 1192 aItem->setSelected( s );
1194 repaintItem( aItem ); 1193 repaintItem( aItem );
1195 } 1194 }
1196 emit selectionChanged(); 1195 emit selectionChanged();
1197 } 1196 }
1198 else if ((e->button() & Qt::LeftButton) && 1197 else if ((e->button() & Qt::LeftButton) &&
1199 (e->state() & Qt::ControlButton)) 1198 (e->state() & Qt::ControlButton))
1200 { 1199 {
1201 item->setSelected(!item->isSelected()); 1200 item->setSelected(!item->isSelected());
1202 item->repaintCard(); 1201 item->repaintCard();
1203 emit selectionChanged(); 1202 emit selectionChanged();
1204 } 1203 }
1205 1204
1206 else if (e->button() & Qt::LeftButton) 1205 else if (e->button() & Qt::LeftButton)
1207 { 1206 {
1208 bool b = signalsBlocked(); 1207 bool b = signalsBlocked();
1209 blockSignals(true); 1208 blockSignals(true);
1210 selectAll(false); 1209 selectAll(false);
1211 blockSignals(b); 1210 blockSignals(b);
1212 1211
1213 item->setSelected(true); 1212 item->setSelected(true);
1214 item->repaintCard(); 1213 item->repaintCard();
1215 emit selectionChanged(); 1214 emit selectionChanged();
1216 } 1215 }
1217 } 1216 }
1218 1217
1219} 1218}
1220 1219
1221void CardView::contentsMouseReleaseEvent(QMouseEvent *e) 1220void CardView::contentsMouseReleaseEvent(QMouseEvent *e)
1222{ 1221{
1223 QScrollView::contentsMouseReleaseEvent(e); 1222 QScrollView::contentsMouseReleaseEvent(e);
1224 1223
1225 if ( d->mResizeAnchor ) 1224 if ( d->mResizeAnchor )
1226 { 1225 {
1227 // finish the resizing: 1226 // finish the resizing:
1228 unsetCursor(); 1227 unsetCursor();
1229 // hide rubber bands 1228 // hide rubber bands
1230 int newiw = d->mItemWidth - ((d->mResizeAnchor - d->mRubberBandAnchor)/d->span); 1229 int newiw = d->mItemWidth - ((d->mResizeAnchor - d->mRubberBandAnchor)/d->span);
1231 drawRubberBands( 0 ); 1230 drawRubberBands( 0 );
1232 // we should move to reflect the new position if we are scrolled. 1231 // we should move to reflect the new position if we are scrolled.
1233 if ( contentsX() ) 1232 if ( contentsX() )
1234 { 1233 {
1235 int newX = QMAX( 0, ( d->pressed * ( newiw + d->colspace + d->mSepWidth ) ) - e->x() ); 1234 int newX = QMAX( 0, ( d->pressed * ( newiw + d->colspace + d->mSepWidth ) ) - e->x() );
1236 setContentsPos( newX, contentsY() ); 1235 setContentsPos( newX, contentsY() );
1237 } 1236 }
1238 // set new item width 1237 // set new item width
1239 setItemWidth( newiw ); 1238 setItemWidth( newiw );
1240 // reset anchors 1239 // reset anchors
1241 d->mResizeAnchor = 0; 1240 d->mResizeAnchor = 0;
1242 d->mRubberBandAnchor = 0; 1241 d->mRubberBandAnchor = 0;
1243 return; 1242 return;
1244 } 1243 }
1245 1244
1246 // If there are accel keys, we will not emit signals 1245 // If there are accel keys, we will not emit signals
1247 if ((e->state() & Qt::ShiftButton) || (e->state() & Qt::ControlButton)) 1246 if ((e->state() & Qt::ShiftButton) || (e->state() & Qt::ControlButton))
1248 return; 1247 return;
1249 1248
1250 // Get the item at this position 1249 // Get the item at this position
1251 CardViewItem *item = itemAt(e->pos()); 1250 CardViewItem *item = itemAt(e->pos());
1252 1251
1253 if (item && KABPrefs::instance()->mHonorSingleClick) 1252 if (item && KABPrefs::instance()->mHonorSingleClick)
1254 { 1253 {
1255 emit executed(item); 1254 emit executed(item);
1256 } 1255 }
1257} 1256}
1258 1257
1259void CardView::contentsMouseDoubleClickEvent(QMouseEvent *e) 1258void CardView::contentsMouseDoubleClickEvent(QMouseEvent *e)
1260{ 1259{
1261 QScrollView::contentsMouseDoubleClickEvent(e); 1260 QScrollView::contentsMouseDoubleClickEvent(e);
1262 1261
1263 CardViewItem *item = itemAt(e->pos()); 1262 CardViewItem *item = itemAt(e->pos());
1264 1263
1265 if (item) 1264 if (item)
1266 { 1265 {
1267 d->mCurrentItem = item; 1266 d->mCurrentItem = item;
1268 } 1267 }
1269 1268
1270 if (item && !KABPrefs::instance()->mHonorSingleClick) 1269 if (item && !KABPrefs::instance()->mHonorSingleClick)
1271 { 1270 {
1272 emit executed(item); 1271 emit executed(item);
1273 } else 1272 } else
1274 emit doubleClicked(item); 1273 emit doubleClicked(item);
1275} 1274}
1276 1275
1277void CardView::contentsMouseMoveEvent( QMouseEvent *e ) 1276void CardView::contentsMouseMoveEvent( QMouseEvent *e )
1278{ 1277{
1279 // resizing 1278 // resizing
1280 if ( d->mResizeAnchor ) 1279 if ( d->mResizeAnchor )
1281 { 1280 {
1282 int x = e->x(); 1281 int x = e->x();
1283 if ( x != d->mRubberBandAnchor ) 1282 if ( x != d->mRubberBandAnchor )
1284 drawRubberBands( x ); 1283 drawRubberBands( x );
1285 return; 1284 return;
1286 } 1285 }
1287 1286
1288 if (d->mLastClickOnItem && (e->state() & Qt::LeftButton) && 1287 if (d->mLastClickOnItem && (e->state() & Qt::LeftButton) &&
1289 ((e->pos() - d->mLastClickPos).manhattanLength() > 4)) { 1288 ((e->pos() - d->mLastClickPos).manhattanLength() > 4)) {
1290 1289
1291 startDrag(); 1290 startDrag();
1292 return; 1291 return;
1293 } 1292 }
1294 1293
1295 d->mTimer->start( 500 ); 1294 d->mTimer->start( 500 );
1296 1295
1297 // see if we are over a separator 1296 // see if we are over a separator
1298 // only if we actually have them painted? 1297 // only if we actually have them painted?
1299 if ( d->mDrawSeparators ) 1298 if ( d->mDrawSeparators )
1300 { 1299 {
1301 int colcontentw = d->mItemWidth + (2*d->mItemSpacing); 1300 int colcontentw = d->mItemWidth + (2*d->mItemSpacing);
1302 int colw = colcontentw + d->mSepWidth; 1301 int colw = colcontentw + d->mSepWidth;
1303 int m = e->x()%colw; 1302 int m = e->x()%colw;
1304 if ( m >= colcontentw && m > 0 ) 1303 if ( m >= colcontentw && m > 0 )
1305 { 1304 {
1306 setCursor( SplitVCursor ); // Why does this fail sometimes? 1305 setCursor( SplitVCursor ); // Why does this fail sometimes?
1307 d->mOnSeparator = true; 1306 d->mOnSeparator = true;
1308 } 1307 }
1309 else 1308 else
1310 { 1309 {
1311 setCursor( ArrowCursor ); 1310 setCursor( ArrowCursor );
1312 d->mOnSeparator = false; 1311 d->mOnSeparator = false;
1313 } 1312 }
1314 } 1313 }
1315} 1314}
1316 1315
1317void CardView::enterEvent( QEvent * ) 1316void CardView::enterEvent( QEvent * )
1318{ 1317{
1319 d->mTimer->start( 500 ); 1318 d->mTimer->start( 500 );
1320} 1319}
1321 1320
1322void CardView::leaveEvent( QEvent * ) 1321void CardView::leaveEvent( QEvent * )
1323{ 1322{
1324 d->mTimer->stop(); 1323 d->mTimer->stop();
1325 if (d->mOnSeparator) 1324 if (d->mOnSeparator)
1326 { 1325 {
1327 d->mOnSeparator = false; 1326 d->mOnSeparator = false;
1328 setCursor( ArrowCursor ); 1327 setCursor( ArrowCursor );
1329 } 1328 }
1330} 1329}
1331 1330
1332void CardView::focusInEvent( QFocusEvent * ) 1331void CardView::focusInEvent( QFocusEvent * )
1333{ 1332{
1334 if (!d->mCurrentItem && d->mItemList.count() ) 1333 if (!d->mCurrentItem && d->mItemList.count() )
1335 { 1334 {
1336 setCurrentItem( d->mItemList.first() ); 1335 setCurrentItem( d->mItemList.first() );
1337 } 1336 }
1338 else if ( d->mCurrentItem ) 1337 else if ( d->mCurrentItem )
1339 { 1338 {
1340 d->mCurrentItem->repaintCard(); 1339 d->mCurrentItem->repaintCard();