diff options
Diffstat (limited to 'src/themedesigner/themediconview.cpp')
-rw-r--r-- | src/themedesigner/themediconview.cpp | 304 |
1 files changed, 304 insertions, 0 deletions
diff --git a/src/themedesigner/themediconview.cpp b/src/themedesigner/themediconview.cpp new file mode 100644 index 00000000..ef5759e6 --- /dev/null +++ b/src/themedesigner/themediconview.cpp @@ -0,0 +1,304 @@ +/* ============================================================ + * + * 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 <renchi at pooh.tam.uiuc.edu> + * Copyright (C) 2006-2008 by Gilles Caulier <caulier dot gilles at gmail dot com> + * + * 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 |