/* ============================================================ * * This file is a part of digiKam project * http://www.digikam.org * * Date : 2005-07-15 * Description : themed icon view * * Copyright (C) 2005 by Renchi Raju * Copyright (C) 2006-2008 by Gilles Caulier * * This program is free software; you can redistribute it * and/or modify it under the terms of the GNU General * Public License as published by the Free Software Foundation; * either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * ============================================================ */ // Local includes. #include "themeengine.h" #include "themedicongroupitem.h" #include "themediconitem.h" #include "themediconview.h" #include "themediconview.moc" namespace Digikam { class ThemedIconViewPriv { public: int thumbSize; TQRect itemRect; TQRect itemDateRect; TQRect itemPixmapRect; TQRect itemNameRect; TQRect itemCommentsRect; TQRect itemResolutionRect; TQRect itemSizeRect; TQRect itemTagRect; TQRect bannerRect; TQPixmap itemRegPixmap; TQPixmap itemSelPixmap; TQPixmap bannerPixmap; TQFont fnReg; TQFont fnCom; TQFont fnXtra; }; ThemedIconView::ThemedIconView(TQWidget* parent) : IconView(parent) { d = new ThemedIconViewPriv; d->thumbSize = 128; ThemedIconGroupItem* groupItem = new ThemedIconGroupItem(this); for (int i=0; i<10; i++) { ThemedIconItem* item = new ThemedIconItem(groupItem); if (i > 0 && i < 3) item->setSelected(true, false); } updateBannerRectPixmap(); updateItemRectsPixmap(); connect(ThemeEngine::instance(), TQ_SIGNAL(signalThemeChanged()), this, TQ_SLOT(slotThemeChanged())); } ThemedIconView::~ThemedIconView() { delete d; } TQRect ThemedIconView::itemRect() const { return d->itemRect; } TQRect ThemedIconView::itemDateRect() const { return d->itemDateRect; } TQRect ThemedIconView::itemPixmapRect() const { return d->itemPixmapRect; } TQRect ThemedIconView::itemNameRect() const { return d->itemNameRect; } TQRect ThemedIconView::itemCommentsRect() const { return d->itemCommentsRect; } TQRect ThemedIconView::itemResolutionRect() const { return d->itemResolutionRect; } TQRect ThemedIconView::itemTagRect() const { return d->itemTagRect; } TQRect ThemedIconView::itemSizeRect() const { return d->itemSizeRect; } TQRect ThemedIconView::bannerRect() const { return d->bannerRect; } TQPixmap* ThemedIconView::itemBaseRegPixmap() const { return &d->itemRegPixmap; } TQPixmap* ThemedIconView::itemBaseSelPixmap() const { return &d->itemSelPixmap; } TQPixmap ThemedIconView::bannerPixmap() const { return d->bannerPixmap; } TQFont ThemedIconView::itemFontReg() const { return d->fnReg; } TQFont ThemedIconView::itemFontCom() const { return d->fnCom; } TQFont ThemedIconView::itemFontXtra() const { return d->fnXtra; } void ThemedIconView::slotThemeChanged() { updateBannerRectPixmap(); updateItemRectsPixmap(); viewport()->update(); } void ThemedIconView::resizeEvent(TQResizeEvent* e) { IconView::resizeEvent(e); if (d->bannerRect.width() != frameRect().width()) updateBannerRectPixmap(); } void ThemedIconView::updateBannerRectPixmap() { d->bannerRect = TQRect(0, 0, 0, 0); // Title -------------------------------------------------------- TQFont fn(font()); int fnSize = fn.pointSize(); bool usePointSize; if (fnSize > 0) { fn.setPointSize(fnSize+2); usePointSize = true; } else { fnSize = fn.pixelSize(); fn.setPixelSize(fnSize+2); usePointSize = false; } fn.setBold(true); TQFontMetrics fm(fn); TQRect tr = fm.boundingRect(0, 0, frameRect().width(), 0xFFFFFFFF, TQt::AlignLeft | TQt::AlignVCenter, "XXX"); d->bannerRect.setHeight(tr.height()); if (usePointSize) fn.setPointSize(font().pointSize()); else fn.setPixelSize(font().pixelSize()); fn.setBold(false); fm = TQFontMetrics(fn); tr = fm.boundingRect(0, 0, frameRect().width(), 0xFFFFFFFF, TQt::AlignLeft | TQt::AlignVCenter, "XXX"); d->bannerRect.setHeight(d->bannerRect.height() + tr.height() + 10); d->bannerRect.setWidth(frameRect().width()); d->bannerPixmap = ThemeEngine::instance()->bannerPixmap(d->bannerRect.width(), d->bannerRect.height()); } void ThemedIconView::updateItemRectsPixmap() { d->itemRect = TQRect(0,0,0,0); d->itemDateRect = TQRect(0,0,0,0); d->itemPixmapRect = TQRect(0,0,0,0); d->itemNameRect = TQRect(0,0,0,0); d->itemCommentsRect = TQRect(0,0,0,0); d->itemResolutionRect = TQRect(0,0,0,0); d->itemSizeRect = TQRect(0,0,0,0); d->itemTagRect = TQRect(0,0,0,0); d->fnReg = font(); d->fnCom = font(); d->fnXtra = font(); d->fnCom.setItalic(true); int fnSz = d->fnReg.pointSize(); if (fnSz > 0) { d->fnCom.setPointSize(fnSz-1); d->fnXtra.setPointSize(fnSz-2); } else { fnSz = d->fnReg.pixelSize(); d->fnCom.setPixelSize(fnSz-1); d->fnXtra.setPixelSize(fnSz-2); } int margin = 5; int w = d->thumbSize + 2*margin; TQFontMetrics fm(d->fnReg); TQRect oneRowRegRect = fm.boundingRect(0, 0, w, 0xFFFFFFFF, TQt::AlignTop | TQt::AlignHCenter, "XXXXXXXXX"); fm = TQFontMetrics(d->fnCom); TQRect oneRowComRect = fm.boundingRect(0, 0, w, 0xFFFFFFFF, TQt::AlignTop | TQt::AlignHCenter, "XXXXXXXXX"); fm = TQFontMetrics(d->fnXtra); TQRect oneRowXtraRect = fm.boundingRect(0, 0, w, 0xFFFFFFFF, TQt::AlignTop | TQt::AlignHCenter, "XXXXXXXXX"); int y = margin; d->itemPixmapRect = TQRect(margin, y, w, d->thumbSize+margin); y = d->itemPixmapRect.bottom(); { d->itemNameRect = TQRect(margin, y, w, oneRowRegRect.height()); y = d->itemNameRect.bottom(); } { d->itemCommentsRect = TQRect(margin, y, w, oneRowComRect.height()); y = d->itemCommentsRect.bottom(); } { d->itemDateRect = TQRect(margin, y, w, oneRowXtraRect.height()); y = d->itemDateRect.bottom(); } { d->itemTagRect = TQRect(margin, y, w, oneRowComRect.height()); y = d->itemTagRect.bottom(); } d->itemRect = TQRect(0, 0, w+2*margin, y+margin); d->itemRegPixmap = ThemeEngine::instance()->thumbRegPixmap(d->itemRect.width(), d->itemRect.height()); d->itemSelPixmap = ThemeEngine::instance()->thumbSelPixmap(d->itemRect.width(), d->itemRect.height()); } } // NameSpace Digikam