~ubuntu-branches/ubuntu/trusty/digikam/trusty

« back to all changes in this revision

Viewing changes to core/libs/widgets/q3support/thumbbar.cpp

  • Committer: Package Import Robot
  • Author(s): Mark Purcell
  • Date: 2012-09-27 21:41:30 UTC
  • mfrom: (1.2.43)
  • mto: This revision was merged to the branch mainline in revision 86.
  • Revision ID: package-import@ubuntu.com-20120927214130-i8v3ufr21nesp29i
Tags: 4:3.0.0~beta1a-1
* New upstream release

* Fix "wrongly conflicts phonon-backend-vlc" dropped (Closes: #688142)
* debian/watch include download.kde.org

* digikam 3.0.0 uses features from unreleased kdegraphics >=4.10 & ships 
a private version of the kdegraphics libs - this is not the Debian way :-(
* Unsatisfactory Conflicts: libkipi8, libkexiv2-10, libkdcraw20, libksane0
* Suspend digikam-dbg >130Mb

Show diffs side-by-side

added added

removed removed

Lines of Context:
6
6
 * Date        : 2004-11-22
7
7
 * Description : a bar widget to display image thumbnails
8
8
 *
9
 
 * Copyright (C) 2004-2005 by Renchi Raju <renchi@pooh.tam.uiuc.edu>
10
 
 * Copyright (C) 2005-2011 by Gilles Caulier <caulier dot gilles at gmail dot com>
 
9
 * Copyright (C) 2004-2005 by Renchi Raju <renchi dot raju at gmail dot com>
 
10
 * Copyright (C) 2005-2012 by Gilles Caulier <caulier dot gilles at gmail dot com>
11
11
 *
12
12
 * This program is free software; you can redistribute it
13
13
 * and/or modify it under the terms of the GNU General
66
66
#include "dmetadata.h"
67
67
#include "thumbnailloadthread.h"
68
68
#include "thumbnailsize.h"
 
69
#include "thumbbardock.h"
69
70
 
70
71
namespace Digikam
71
72
{
72
73
 
73
 
class ThumbBarView::ThumbBarViewPriv
 
74
class ThumbBarView::Private
74
75
{
75
76
public:
76
77
 
77
 
    ThumbBarViewPriv() :
 
78
    Private() :
78
79
        margin(5), radius(3)
79
80
    {
80
81
        dragging        = false;
129
130
 
130
131
// -------------------------------------------------------------------------
131
132
 
132
 
class ThumbBarItem::ThumbBarItemPriv
 
133
class ThumbBarItem::Private
133
134
{
134
135
public:
135
136
 
136
 
    ThumbBarItemPriv() :
 
137
    Private() :
137
138
        pos(0),
138
139
        next(0),
139
140
        prev(0),
155
156
 
156
157
// -------------------------------------------------------------------------
157
158
 
158
 
ThumbBarView::ThumbBarView(QWidget* parent, int orientation,
 
159
ThumbBarView::ThumbBarView(QWidget* const parent, int orientation,
159
160
                           const ThumbBarToolTipSettings& settings)
160
 
    : Q3ScrollView(parent), d(new ThumbBarViewPriv)
 
161
    : Q3ScrollView(parent), d(new Private)
161
162
{
162
163
    d->toolTipSettings = settings;
163
164
    d->timer           = new QTimer(this);
236
237
    }
237
238
}
238
239
 
239
 
void ThumbBarView::setToolTip(ThumbBarToolTip* toolTip)
 
240
void ThumbBarView::setToolTip(ThumbBarToolTip* const toolTip)
240
241
{
241
242
    d->toolTip = toolTip;
242
243
}
267
268
    ensureItemVisible(currentItem());
268
269
}
269
270
 
270
 
int ThumbBarView::getOrientation()
 
271
int ThumbBarView::getOrientation() const
271
272
{
272
273
    return d->orientation;
273
274
}
274
275
 
275
 
int ThumbBarView::getTileSize()
 
276
int ThumbBarView::getTileSize() const
276
277
{
277
278
    return d->tileSize;
278
279
}
279
280
 
280
 
int ThumbBarView::getMargin()
 
281
int ThumbBarView::getMargin() const
281
282
{
282
283
    return d->margin;
283
284
}
284
285
 
285
 
int ThumbBarView::getRadius()
 
286
int ThumbBarView::getRadius() const
286
287
{
287
288
    return d->radius;
288
289
}
297
298
    return d->toolTipSettings;
298
299
}
299
300
 
300
 
int ThumbBarView::countItems()
 
301
int ThumbBarView::countItems() const
301
302
{
302
303
    return d->count;
303
304
}
304
305
 
305
 
KUrl::List ThumbBarView::itemsUrls()
 
306
KUrl::List ThumbBarView::itemsUrls() const
306
307
{
307
308
    KUrl::List urlList;
308
309
 
382
383
    return 0;
383
384
}
384
385
 
385
 
void ThumbBarView::setSelected(ThumbBarItem* item)
 
386
void ThumbBarView::setSelected(ThumbBarItem* const item)
386
387
{
387
388
    if (!item)
388
389
    {
455
456
    }
456
457
}
457
458
 
458
 
void ThumbBarView::invalidateThumb(ThumbBarItem* item)
 
459
void ThumbBarView::invalidateThumb(ThumbBarItem* const item)
459
460
{
460
461
    if (!item)
461
462
    {
480
481
    }
481
482
}
482
483
 
483
 
void ThumbBarView::reloadThumb(ThumbBarItem* item)
 
484
void ThumbBarView::reloadThumb(ThumbBarItem* const item)
484
485
{
485
486
    if (!item)
486
487
    {
490
491
    d->thumbLoadThread->find(item->url().toLocalFile(), d->tileSize);
491
492
}
492
493
 
493
 
bool ThumbBarView::pixmapForItem(ThumbBarItem* item, QPixmap& pix) const
 
494
bool ThumbBarView::pixmapForItem(ThumbBarItem* const item, QPixmap& pix) const
494
495
{
495
496
    if (d->tileSize > d->maxTileSize)
496
497
    {
516
517
    }
517
518
}
518
519
 
519
 
void ThumbBarView::preloadPixmapForItem(ThumbBarItem* item) const
 
520
void ThumbBarView::preloadPixmapForItem(ThumbBarItem* const item) const
520
521
{
521
522
    d->thumbLoadThread->preload(item->url().toLocalFile(), qMin(d->tileSize, d->maxTileSize));
522
523
}
578
579
                    int y = (tile.height() - pix.height())/2;
579
580
                    p.drawPixmap(x, y, pix);
580
581
                    p.drawPixmap(x-d->radius, y-d->radius,
581
 
                                 generateFuzzyRect(QSize(pix.width()+2*d->radius,
582
 
                                                         pix.height()+2*d->radius),
583
 
                                                   QColor(0, 0, 0, 128), d->radius));
 
582
                                 ThumbBarDock::generateFuzzyRect(QSize(pix.width()+2*d->radius,
 
583
                                                                 pix.height()+2*d->radius),
 
584
                                                                 QColor(0, 0, 0, 128), d->radius));
584
585
                    item->setTooltipRect(QRect(x, y+item->position(), pix.width(), pix.height()));
585
586
                }
586
587
 
621
622
                    int x = (tile.width()  - pix.width())/2;
622
623
                    int y = (tile.height() - pix.height())/2;
623
624
                    p.drawPixmap(x, y, pix);
624
 
                    p.drawPixmap(x-3, y-3, generateFuzzyRect(QSize(pix.width()+6,
625
 
                                 pix.height()+6),
626
 
                                 QColor(0, 0, 0, 128), 3));
 
625
                    p.drawPixmap(x-3, y-3, ThumbBarDock::generateFuzzyRect(QSize(pix.width()+6,
 
626
                                                                           pix.height()+6),
 
627
                                                                           QColor(0, 0, 0, 128), 3));
627
628
                    item->setTooltipRect(QRect(x+item->position(), y, pix.width(), pix.height()));
628
629
                }
629
630
 
635
636
    checkPreload();
636
637
}
637
638
 
638
 
QPixmap ThumbBarView::generateFuzzyRect(const QSize& size, const QColor& color, int radius)
639
 
{
640
 
    QPixmap pix(size);
641
 
    pix.fill(Qt::transparent);
642
 
 
643
 
    QPainter painter(&pix);
644
 
    painter.setRenderHint(QPainter::Antialiasing, true);
645
 
 
646
 
    // Draw corners ----------------------------------
647
 
 
648
 
    QRadialGradient gradient;
649
 
    gradient.setColorAt(1, Qt::transparent);
650
 
    gradient.setColorAt(0, color);
651
 
    gradient.setRadius(radius);
652
 
    QPoint center;
653
 
 
654
 
    // Top Left
655
 
    center = QPoint(radius, radius);
656
 
    gradient.setCenter(center);
657
 
    gradient.setFocalPoint(center);
658
 
    painter.fillRect(0, 0, radius, radius, gradient);
659
 
 
660
 
    // Top right
661
 
    center = QPoint(size.width() - radius, radius);
662
 
    gradient.setCenter(center);
663
 
    gradient.setFocalPoint(center);
664
 
    painter.fillRect(center.x(), 0, radius, radius, gradient);
665
 
 
666
 
    // Bottom left
667
 
    center = QPoint(radius, size.height() - radius);
668
 
    gradient.setCenter(center);
669
 
    gradient.setFocalPoint(center);
670
 
    painter.fillRect(0, center.y(), radius, radius, gradient);
671
 
 
672
 
    // Bottom right
673
 
    center = QPoint(size.width() - radius, size.height() - radius);
674
 
    gradient.setCenter(center);
675
 
    gradient.setFocalPoint(center);
676
 
    painter.fillRect(center.x(), center.y(), radius, radius, gradient);
677
 
 
678
 
    // Draw borders ----------------------------------
679
 
 
680
 
    QLinearGradient linearGradient;
681
 
    linearGradient.setColorAt(1, Qt::transparent);
682
 
    linearGradient.setColorAt(0, color);
683
 
 
684
 
    // Top
685
 
    linearGradient.setStart(0, radius);
686
 
    linearGradient.setFinalStop(0, 0);
687
 
    painter.fillRect(radius, 0, size.width() - 2*radius, radius, linearGradient);
688
 
 
689
 
    // Bottom
690
 
    linearGradient.setStart(0, size.height() - radius);
691
 
    linearGradient.setFinalStop(0, size.height());
692
 
    painter.fillRect(radius, int(linearGradient.start().y()), size.width() - 2*radius, radius, linearGradient);
693
 
 
694
 
    // Left
695
 
    linearGradient.setStart(radius, 0);
696
 
    linearGradient.setFinalStop(0, 0);
697
 
    painter.fillRect(0, radius, radius, size.height() - 2*radius, linearGradient);
698
 
 
699
 
    // Right
700
 
    linearGradient.setStart(size.width() - radius, 0);
701
 
    linearGradient.setFinalStop(size.width(), 0);
702
 
    painter.fillRect(int(linearGradient.start().x()), radius, radius, size.height() - 2*radius, linearGradient);
703
 
    return pix;
704
 
}
705
 
 
706
639
void ThumbBarView::contentsMousePressEvent(QMouseEvent* e)
707
640
{
708
641
    // hide tooltip
789
722
        return;
790
723
    }
791
724
 
792
 
    d->toolTipItem  = 0;
 
725
    d->toolTipItem = 0;
793
726
    d->toolTipTimer->stop();
794
727
    slotToolTip();
795
728
 
807
740
 
808
741
void ThumbBarView::contentsMouseReleaseEvent(QMouseEvent* e)
809
742
{
810
 
    d->dragging = false;
 
743
    d->dragging        = false;
811
744
    ThumbBarItem* item = findItem(e->pos());
812
745
 
813
746
    if (e->button() == Qt::LeftButton && item)
957
890
    emit signalItemSelected(0);
958
891
}
959
892
 
960
 
void ThumbBarView::insertItem(ThumbBarItem* item)
 
893
void ThumbBarView::insertItem(ThumbBarItem* const item)
961
894
{
962
895
    if (!item)
963
896
    {
1132
1065
    }
1133
1066
}
1134
1067
 
1135
 
void ThumbBarView::repaintItem(ThumbBarItem* item)
 
1068
void ThumbBarView::repaintItem(ThumbBarItem* const item)
1136
1069
{
1137
1070
    if (item)
1138
1071
    {
1250
1183
    return false;
1251
1184
}
1252
1185
 
 
1186
void ThumbBarView::slotDockLocationChanged(Qt::DockWidgetArea area)
 
1187
{
 
1188
    // Change orientation of child thumbbar when location has changed.
 
1189
    if ((area == Qt::LeftDockWidgetArea) || (area == Qt::RightDockWidgetArea))
 
1190
    {
 
1191
        setOrientation(Qt::Vertical);
 
1192
    }
 
1193
    else
 
1194
    {
 
1195
        setOrientation(Qt::Horizontal);
 
1196
    }
 
1197
}
 
1198
 
1253
1199
// -------------------------------------------------------------------------
1254
1200
 
1255
 
ThumbBarItem::ThumbBarItem(ThumbBarView* view, const KUrl& url)
1256
 
    : d(new ThumbBarItemPriv)
 
1201
ThumbBarItem::ThumbBarItem(ThumbBarView* const view, const KUrl& url)
 
1202
    : d(new Private)
1257
1203
{
1258
1204
    d->url  = url;
1259
1205
    d->view = view;
1319
1265
 
1320
1266
// -------------------------------------------------------------------------
1321
1267
 
1322
 
class ThumbBarToolTip::ThumbBarToolTipPriv
 
1268
class ThumbBarToolTip::Private
1323
1269
{
1324
1270
public:
1325
1271
 
1326
 
    ThumbBarToolTipPriv() :
 
1272
    Private() :
1327
1273
        view(0),
1328
1274
        item(0)
1329
1275
    {
1334
1280
    ThumbBarItem* item;
1335
1281
};
1336
1282
 
1337
 
ThumbBarToolTip::ThumbBarToolTip(ThumbBarView* view)
1338
 
    : DItemToolTip(), d(new ThumbBarToolTipPriv)
 
1283
ThumbBarToolTip::ThumbBarToolTip(ThumbBarView* const view)
 
1284
    : DItemToolTip(), d(new Private)
1339
1285
{
1340
1286
    d->view = view;
1341
1287
}
1350
1296
    return d->view->getToolTipSettings();
1351
1297
}
1352
1298
 
1353
 
void ThumbBarToolTip::setItem(ThumbBarItem* item)
 
1299
void ThumbBarToolTip::setItem(ThumbBarItem* const item)
1354
1300
{
1355
1301
    d->item = item;
1356
1302