1
#include <qapplication.h>
7
#include <qfontmetrics.h>
10
#include <qstringlist.h>
12
#include <kfileitem.h>
13
#include <kmimetype.h>
15
#include <kio/global.h>
18
#include "albumsettings.h"
19
#include "albumiconview.h"
20
#include "albumiconitem.h"
23
AlbumIconItem::AlbumIconItem(AlbumIconView* parent,
27
const KFileItem* fileItem,
28
int imageWidth, int imageHeight)
29
: ThumbItem(parent, text, pix)
34
imageWidth_ = imageWidth;
35
imageHeight_ = imageHeight;
41
AlbumIconItem::~AlbumIconItem()
46
void AlbumIconItem::setPixmap(const QImage& thumbnail)
49
painter.begin(pixmap());
50
painter.fillRect(0, 0, size_, size_,
51
QBrush(iconView()->colorGroup().base()));
52
painter.drawImage((size_-thumbnail.width())/2,
53
(size_-thumbnail.height())/2,
57
QRect pRect(iconView()->contentsRectToViewport(pixmapRect(false)));
58
if (pRect.intersects(iconView()->visibleRect())) {
60
pRect.setWidth(pRect.width()+2);
61
pRect.setHeight(pRect.height()+2);
62
painter.begin(iconView()->viewport());
63
painter.drawPixmap(pRect.x()+1, pRect.y()+1, *pixmap());
69
void AlbumIconItem::setPixmap(const QPixmap& thumbnail)
72
painter.begin(pixmap());
73
painter.fillRect(0, 0, size_, size_,
74
QBrush(iconView()->colorGroup().base()));
75
painter.drawPixmap((size_-thumbnail.width())/2,
76
(size_-thumbnail.height())/2,
80
QRect pRect(iconView()->contentsRectToViewport(pixmapRect(false)));
81
if (pRect.intersects(iconView()->visibleRect())) {
83
pRect.setWidth(pRect.width()+2);
84
pRect.setHeight(pRect.height()+2);
85
bitBlt(iconView()->viewport(), pRect.x()+1, pRect.y()+1,
86
pixmap(), 0, 0, pRect.width(), pRect.height());
87
//painter.begin(iconView()->viewport());
88
//painter.drawPixmap(pRect.x()+1, pRect.y()+1, *pixmap());
93
void AlbumIconItem::calcRect()
95
QRect itemIconRect = QRect(0,0,0,0);
96
QRect itemTextRect = QRect(0,0,0,0);
97
itemExtraRect_ = QRect(0,0,0,0);
98
QRect itemRect = rect();
100
itemRect.setWidth(100);
101
itemRect.setHeight(0xFFFFFFFF);
103
// set initial pixrect
104
int pw = pixmap()->width();
105
int ph = pixmap()->height();
107
itemIconRect.setWidth(pw);
108
itemIconRect.setHeight(ph);
110
// word wrap main text
111
QFontMetrics fm(view_->font());
112
QRect r = QRect(fm.boundingRect(0, 0, itemIconRect.width(),
113
0xFFFFFFFF, Qt::AlignHCenter |
114
Qt::WordBreak | Qt::BreakAnywhere
117
r.setWidth(r.width() + 2);
119
itemTextRect.setWidth(r.width());
120
itemTextRect.setHeight(r.height());
122
// word wrap extra Text
123
if (!extraText_.isEmpty()) {
125
QFont font(view_->font());
126
int fontSize = font.pointSize();
128
font.setPointSize(fontSize-2);
131
fontSize = font.pixelSize();
132
font.setPixelSize(fontSize-2);
135
fm = QFontMetrics(font);
137
r = QRect(fm.boundingRect(0, 0, itemIconRect.width(),
138
0xFFFFFFFF, Qt::AlignHCenter |
139
Qt::WordBreak | Qt::BreakAnywhere
142
r.setWidth(r.width() + 2);
144
itemExtraRect_.setWidth(r.width());
145
itemExtraRect_.setHeight(r.height());
147
itemTextRect.setWidth(QMAX(itemTextRect.width(), itemExtraRect_.width()));
148
itemTextRect.setHeight(itemTextRect.height() + itemExtraRect_.height());
152
// Now start updating the rects
153
int w = QMAX(itemTextRect.width(), itemIconRect.width() );
154
int h = itemTextRect.height() + itemIconRect.height() + 1;
156
itemRect.setWidth(w);
157
itemRect.setHeight(h);
159
// Center the pix and text rect
161
itemIconRect = QRect((itemRect.width() - itemIconRect.width())/2,
163
itemIconRect.width(), itemIconRect.height());
164
itemTextRect = QRect((itemRect.width() - itemTextRect.width())/2,
165
itemRect.height() - itemTextRect.height(),
166
itemTextRect.width(), itemTextRect.height());
167
if (!itemExtraRect_.isEmpty()) {
168
itemExtraRect_ = QRect((itemRect.width() - itemExtraRect_.width())/2,
169
itemRect.height() - itemExtraRect_.height(),
170
itemExtraRect_.width(), itemExtraRect_.height());
174
if ( itemIconRect != pixmapRect() )
175
setPixmapRect( itemIconRect );
176
if ( itemTextRect != textRect() )
177
setTextRect( itemTextRect );
178
if ( itemRect != rect() )
183
void AlbumIconItem::paintItem(QPainter *, const QColorGroup& cg)
186
QRect pRect=pixmapRect(true);
187
QRect tRect=textRect(true);
189
QPixmap pix(rect().width(), rect().height());
191
QPainter painter(&pix);
192
painter.drawPixmap(pRect.x(), pRect.y(), *pixmap() );
196
pen.setColor(cg.highlight());
198
painter.drawRect(0, 0, pix.width(), pix.height());
199
painter.fillRect(0, tRect.y(), pix.width(),
200
tRect.height(), cg.highlight() );
201
painter.setPen( QPen( cg.highlightedText() ) );
204
painter.setPen( cg.text() );
206
painter.drawText(tRect, Qt::WordBreak|Qt::BreakAnywhere|
207
Qt::AlignHCenter|Qt::AlignTop,text());
209
if (!extraText_.isEmpty()) {
210
QFont font(view_->font());
211
int fontSize = font.pointSize();
213
font.setPointSize(fontSize-2);
216
fontSize = font.pixelSize();
217
font.setPixelSize(fontSize-2);
219
painter.setFont(font);
221
painter.setPen(QPen("steelblue"));
222
painter.drawText(itemExtraRect_, Qt::WordBreak|
223
Qt::BreakAnywhere|Qt::AlignHCenter|
224
Qt::AlignTop,extraText_);
230
r = QRect(view_->contentsToViewport(QPoint(r.x(), r.y())),
231
QSize(r.width(), r.height()));
233
bitBlt(view_->viewport(), r.x(), r.y(), &pix,
234
0, 0, r.width(), r.height());
238
void AlbumIconItem::updateExtraText()
241
bool firstLine = true;
243
const AlbumSettings *settings = view_->settings();
244
if (!settings) return;
246
if (settings->getIconShowMime()) {
248
KMimeType::Ptr mimePtr =
249
KMimeType::findByURL(fileItem_->url());
250
extraText += mimePtr->name();
253
if (settings->getIconShowSize()) {
258
extraText += KIO::convertSize(fileItem_->size());
261
if (settings->getIconShowDate()) {
267
date.setTime_t(fileItem_->time(KIO::UDS_MODIFICATION_TIME));
268
extraText += date.toString();
271
if (settings->getIconShowComments()) {
273
view_->getItemComments(text(), comments);
274
if (!comments.isEmpty()) {
279
extraText += comments;
283
if (imageWidth_ != 0 && imageHeight_ != 0) {
288
extraText += QString::number(imageWidth_)
290
+ QString::number(imageHeight_)
294
extraText_ = extraText;
298
void AlbumIconItem::setImageDimensions(int width, int height)
301
imageHeight_ = height;