[Digikam-devel] extragear/graphics/digikam/digikam

Gilles Caulier caulier.gilles at gmail.com
Mon Jul 16 10:01:06 CEST 2007


SVN commit 688490 by cgilles:

KDE4 port : use QRubberBand in IconView.
Marcel, please look if all is fine for you...

NOTE: still one file to port (tagspopupmenu.cpp) and digiKam KDE4 port will be complete...

CCMAIL: marcel.wiesweg at gmx.de
CCMAIL: digikam-devel at kde.org



 M  +45 -105   iconview.cpp  
 M  +0 -2      iconview.h  


--- trunk/extragear/graphics/digikam/digikam/iconview.cpp #688489:688490
@@ -41,6 +41,7 @@
 #include <QDropEvent>
 #include <QMouseEvent>
 #include <QStyleOption>
+#include <QRubberBand>
 
 // KDE includes.
 
@@ -87,34 +88,33 @@
         needEmitSelectionChanged = false;
     }
 
-    bool               clearing;
-    bool               showTips;
-    bool               pressedMoved;
-    bool               dragging;
-    bool               needEmitSelectionChanged; // store for slotRearrange
+    bool                 clearing;
+    bool                 showTips;
+    bool                 pressedMoved;
+    bool                 dragging;
+    bool                 needEmitSelectionChanged; // store for slotRearrange
 
-    int                spacing;
+    int                  rearrangeTimerInterval;
+    int                  spacing;
 
-    Q3PtrDict<IconItem> selectedItems;
-    Q3PtrDict<IconItem> prevSelectedItems;
+    Q3PtrDict<IconItem>  selectedItems;
+    Q3PtrDict<IconItem>  prevSelectedItems;
 
-    QRect*             rubber;
+    QRubberBand         *rubber;
 
-    QPoint             dragStartPos;
+    QPoint               dragStartPos;
 
-    QTimer*            rearrangeTimer;
-    QTimer*            toolTipTimer;
+    QTimer              *rearrangeTimer;
+    QTimer              *toolTipTimer;
 
-    IconItem*          toolTipItem;
-    IconItem*          currItem;
-    IconItem*          anchorItem;
-    IconItem*          storedVisibleItem; // store position for slotRearrange
+    IconItem            *toolTipItem;
+    IconItem            *currItem;
+    IconItem            *anchorItem;
+    IconItem            *storedVisibleItem; // store position for slotRearrange
 
-    IconGroupItem*     firstGroup;
-    IconGroupItem*     lastGroup;
+    IconGroupItem       *firstGroup;
+    IconGroupItem       *lastGroup;
 
-    int                rearrangeTimerInterval;
-
     struct ItemContainer 
     {
         ItemContainer(ItemContainer *p, ItemContainer *n, const QRect &r) 
@@ -150,6 +150,8 @@
     d = new IconViewPriv;
     d->rearrangeTimer  = new QTimer(this);
     d->toolTipTimer    = new QTimer(this);
+    d->rubber          = new QRubberBand(QRubberBand::Rectangle, this);
+    d->rubber->hide();
     
     connect(d->rearrangeTimer, SIGNAL(timeout()),
             this, SLOT(slotRearrange()));
@@ -890,22 +892,9 @@
     d->toolTipTimer->stop();
     slotToolTip();
     
-    // Delete any existing rubber -------------------------------
+    // Clear any existing rubber -------------------------------
+    d->rubber->hide();
 
-    if ( d->rubber )
-    {
-        QPainter p;
-        p.begin(viewport());
-        p.setRasterOp(NotROP);
-        p.setPen(QPen(Qt::color0, 1));
-        p.setBrush(Qt::NoBrush);
-
-        drawRubber(&p);
-        p.end();
-        delete d->rubber;
-        d->rubber = 0;
-    }
-
     if (e->button() == Qt::RightButton)
     {
         IconItem* item = findItem(e->pos());
@@ -1026,38 +1015,13 @@
         }
     }
     
-    d->rubber = new QRect( e->x(), e->y(), 0, 0 );
-
-    QPainter p;
-    p.begin( viewport() );
-    p.setRasterOp( NotROP );
-    p.setPen( QPen( Qt::color0, 1 ) );
-    p.setBrush( Qt::NoBrush );
-    drawRubber( &p );
-    p.end();
+    d->rubber->setGeometry(QRect(e->pos(), QSize()));
+    d->rubber->show();
 }
 
-void IconView::drawRubber(QPainter* p)
-{
-    if ( !p || !d->rubber )
-        return;
-
-    QRect r(d->rubber->normalized());
-
-    r = contentsRectToViewport(r);
-
-    QPoint pnt(r.x(), r.y());
-
-    style().drawPrimitive(QStyle::PE_FocusRect, p,
-                          QRect( pnt.x(), pnt.y(),
-                                 r.width(), r.height() ),
-                          colorGroup(), QStyle::Style_Default,
-                          QStyleOption(colorGroup().base()));
-}
-
 void IconView::contentsMouseMoveEvent(QMouseEvent* e)
 {
-    if (e->buttons() == NoButton)
+    if (e->buttons() == Qt::NoButton)
     {
         IconItem* item = findItem(e->pos());
 
@@ -1080,7 +1044,7 @@
                 if(acceptToolTip(item, e->pos()))
                 {
                     d->toolTipItem = item;
-                    d->toolTipTimer->setSingleShoot(true);
+                    d->toolTipTimer->setSingleShot(true);
                     d->toolTipTimer->start(500);
                 }
             }
@@ -1117,19 +1081,19 @@
         return;
     }
 
-    if (!d->rubber)
+    if (!d->rubber->isVisible())
         return;
 
-    QRect oldRubber = QRect(*d->rubber);
+    QRect oldRubber = d->rubber->geometry();
+    QRect newRubber = oldRubber;
+    newRubber.setRight(e->pos().x());
+    newRubber.setBottom(e->pos().y());
+    d->rubber->setGeometry(newRubber);
 
-    d->rubber->setRight( e->pos().x() );
-    d->rubber->setBottom( e->pos().y() );
-
-    QRect nr = d->rubber->normalized();
+    QRect nr          = d->rubber->geometry().normalized();
     QRect rubberUnion = nr.unite(oldRubber.normalized());
+    bool changed      = false;
 
-    bool changed = false;
-
     QRegion paintRegion;
     viewport()->setUpdatesEnabled(false);
     blockSignals(true);
@@ -1168,17 +1132,11 @@
     blockSignals(false);
     viewport()->setUpdatesEnabled(true);
 
-    QRect r = *d->rubber;
-    *d->rubber = oldRubber;
+    QRect r = d->rubber->geometry();
+    
+    d->rubber->setGeometry(oldRubber);
+    d->rubber->show();
 
-    QPainter p;
-    p.begin( viewport() );
-    p.setRasterOp( NotROP );
-    p.setPen( QPen( Qt::color0, 1 ) );
-    p.setBrush( Qt::NoBrush );
-    drawRubber( &p );
-    p.end();
-
     if (changed)
     {
         paintRegion.translate(-contentsX(), -contentsY());
@@ -1187,15 +1145,9 @@
 
     ensureVisible(e->pos().x(), e->pos().y());
 
-    *d->rubber = r;
+    d->rubber->setGeometry(r);
+    d->rubber->show();
 
-    p.begin(viewport());
-    p.setRasterOp(NotROP);
-    p.setPen(QPen(Qt::color0, 1));
-    p.setBrush(Qt::NoBrush);
-    drawRubber(&p);
-    p.end();
-
     d->pressedMoved = true;
 
     if (changed)
@@ -1207,21 +1159,9 @@
     d->dragging = false;
     d->prevSelectedItems.clear();
 
-    if (d->rubber)
-    {
-        QPainter p;
-        p.begin( viewport() );
-        p.setRasterOp( NotROP );
-        p.setPen( QPen( Qt::color0, 1 ) );
-        p.setBrush( Qt::NoBrush );
-
-        drawRubber( &p );
-        p.end();
-
-        delete d->rubber;
-        d->rubber = 0;
-    }
-
+    if (d->rubber->isVisible())
+        d->rubber->hide();
+    
     if (e->buttons() == Qt::LeftButton)
     {
         if (d->pressedMoved)
--- trunk/extragear/graphics/digikam/digikam/iconview.h #688489:688490
@@ -133,8 +133,6 @@
     void appendContainer();
     void deleteContainers();
 
-    void drawRubber(QPainter* p);
-
     void itemClickedToOpen(IconItem* item);
 
     bool anchorIsBehind() const;


More information about the Digikam-devel mailing list