1
/* ============================================================
3
* This file is a part of digiKam project
4
* http://www.digikam.org
7
* Description : themed icon view
9
* Copyright (C) 2005 by Renchi Raju <renchi at pooh.tam.uiuc.edu>
10
* Copyright (C) 2007-2008 by Gilles Caulier <caulier dot gilles at gmail dot com>
12
* This program is free software; you can redistribute it
13
* and/or modify it under the terms of the GNU General
14
* Public License as published by the Free Software Foundation;
15
* either version 2, or (at your option)
18
* This program is distributed in the hope that it will be useful,
19
* but WITHOUT ANY WARRANTY; without even the implied warranty of
20
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
* GNU General Public License for more details.
23
* ============================================================ */
25
#include "themediconview.moc"
29
#include "themedicongroupitem.h"
30
#include "themediconitem.h"
31
#include "themeengine.h"
36
class ThemedIconViewPriv
40
ThemedIconViewPriv() :
51
QRect itemCommentsRect;
52
QRect itemResolutionRect;
57
QPixmap itemRegPixmap;
58
QPixmap itemSelPixmap;
66
ThemedIconView::ThemedIconView(QWidget* parent)
67
: IconView(parent), d(new ThemedIconViewPriv)
69
ThemedIconGroupItem* groupItem = new ThemedIconGroupItem(this);
71
for (int i=0; i<10; ++i)
73
ThemedIconItem* item = new ThemedIconItem(groupItem);
77
item->setSelected(true, false);
81
updateBannerRectPixmap();
82
updateItemRectsPixmap();
84
connect(ThemeEngine::instance(), SIGNAL(signalThemeChanged()),
85
this, SLOT(slotThemeChanged()));
88
ThemedIconView::~ThemedIconView()
93
QRect ThemedIconView::itemRect() const
98
QRect ThemedIconView::itemDateRect() const
100
return d->itemDateRect;
103
QRect ThemedIconView::itemPixmapRect() const
105
return d->itemPixmapRect;
108
QRect ThemedIconView::itemNameRect() const
110
return d->itemNameRect;
113
QRect ThemedIconView::itemCommentsRect() const
115
return d->itemCommentsRect;
118
QRect ThemedIconView::itemResolutionRect() const
120
return d->itemResolutionRect;
123
QRect ThemedIconView::itemTagRect() const
125
return d->itemTagRect;
128
QRect ThemedIconView::itemSizeRect() const
130
return d->itemSizeRect;
133
QRect ThemedIconView::bannerRect() const
135
return d->bannerRect;
138
QPixmap* ThemedIconView::itemBaseRegPixmap() const
140
return &d->itemRegPixmap;
143
QPixmap* ThemedIconView::itemBaseSelPixmap() const
145
return &d->itemSelPixmap;
148
QPixmap ThemedIconView::bannerPixmap() const
150
return d->bannerPixmap;
153
QFont ThemedIconView::itemFontReg() const
158
QFont ThemedIconView::itemFontCom() const
163
QFont ThemedIconView::itemFontXtra() const
168
void ThemedIconView::slotThemeChanged()
170
updateBannerRectPixmap();
171
updateItemRectsPixmap();
172
viewport()->update();
175
void ThemedIconView::resizeEvent(QResizeEvent* e)
177
IconView::resizeEvent(e);
179
if (d->bannerRect.width() != frameRect().width())
181
updateBannerRectPixmap();
185
void ThemedIconView::updateBannerRectPixmap()
187
d->bannerRect = QRect(0, 0, 0, 0);
189
// Title --------------------------------------------------------
191
int fnSize = fn.pointSize();
196
fn.setPointSize(fnSize+2);
201
fnSize = fn.pixelSize();
202
fn.setPixelSize(fnSize+2);
203
usePointSize = false;
208
QRect tr = fm.boundingRect(0, 0, frameRect().width(),
209
0xFFFFFFFF, Qt::AlignLeft | Qt::AlignVCenter,
211
d->bannerRect.setHeight(tr.height());
215
fn.setPointSize(font().pointSize());
219
fn.setPixelSize(font().pixelSize());
223
fm = QFontMetrics(fn);
225
tr = fm.boundingRect(0, 0, frameRect().width(),
226
0xFFFFFFFF, Qt::AlignLeft | Qt::AlignVCenter,
229
d->bannerRect.setHeight(d->bannerRect.height() + tr.height() + 10);
230
d->bannerRect.setWidth(frameRect().width());
231
d->bannerPixmap = ThemeEngine::instance()->bannerPixmap(d->bannerRect.width(), d->bannerRect.height());
234
void ThemedIconView::updateItemRectsPixmap()
236
d->itemRect = QRect(0, 0, 0, 0);
237
d->itemDateRect = QRect(0, 0, 0, 0);
238
d->itemPixmapRect = QRect(0, 0, 0, 0);
239
d->itemNameRect = QRect(0, 0, 0, 0);
240
d->itemCommentsRect = QRect(0, 0, 0, 0);
241
d->itemResolutionRect = QRect(0, 0, 0, 0);
242
d->itemSizeRect = QRect(0, 0, 0, 0);
243
d->itemTagRect = QRect(0, 0, 0, 0);
247
d->fnCom.setItalic(true);
249
int fnSz = d->fnReg.pointSize();
253
d->fnCom.setPointSize(fnSz-1);
254
d->fnXtra.setPointSize(fnSz-2);
258
fnSz = d->fnReg.pixelSize();
259
d->fnCom.setPixelSize(fnSz-1);
260
d->fnXtra.setPixelSize(fnSz-2);
264
int w = d->thumbSize + 2*margin;
266
QFontMetrics fm(d->fnReg);
267
QRect oneRowRegRect = fm.boundingRect(0, 0, w, 0xFFFFFFFF,
268
Qt::AlignTop | Qt::AlignHCenter,
270
fm = QFontMetrics(d->fnCom);
271
QRect oneRowComRect = fm.boundingRect(0, 0, w, 0xFFFFFFFF,
272
Qt::AlignTop | Qt::AlignHCenter,
274
fm = QFontMetrics(d->fnXtra);
275
QRect oneRowXtraRect = fm.boundingRect(0, 0, w, 0xFFFFFFFF,
276
Qt::AlignTop | Qt::AlignHCenter,
280
d->itemPixmapRect = QRect(margin, y, w, d->thumbSize + margin);
281
y = d->itemPixmapRect.bottom();
284
d->itemNameRect = QRect(margin, y, w, oneRowRegRect.height());
285
y = d->itemNameRect.bottom();
289
d->itemCommentsRect = QRect(margin, y, w, oneRowComRect.height());
290
y = d->itemCommentsRect.bottom();
294
d->itemDateRect = QRect(margin, y, w, oneRowXtraRect.height());
295
y = d->itemDateRect.bottom();
299
d->itemTagRect = QRect(margin, y, w, oneRowComRect.height());
300
y = d->itemTagRect.bottom();
303
d->itemRect = QRect(0, 0, w+2*margin, y+margin);
304
d->itemRegPixmap = ThemeEngine::instance()->thumbRegPixmap(d->itemRect.width(), d->itemRect.height());
305
d->itemSelPixmap = ThemeEngine::instance()->thumbSelPixmap(d->itemRect.width(), d->itemRect.height());
308
} // namespace Digikam