summaryrefslogtreecommitdiffstats
path: root/src/themedesigner/themediconview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/themedesigner/themediconview.cpp')
-rw-r--r--src/themedesigner/themediconview.cpp304
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