diff options
Diffstat (limited to 'src/themedesigner/themediconitem.cpp')
-rw-r--r-- | src/themedesigner/themediconitem.cpp | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/src/themedesigner/themediconitem.cpp b/src/themedesigner/themediconitem.cpp new file mode 100644 index 00000000..2ed7df80 --- /dev/null +++ b/src/themedesigner/themediconitem.cpp @@ -0,0 +1,195 @@ +/* ============================================================ + * + * This file is a part of digiKam project + * http://www.digikam.org + * + * Date : 2005-07-15 + * Description : themed icon item + * + * Copyright (C) 2005 by Renchi Raju <renchi at pooh.tam.uiuc.edu> + * + * 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. + * + * ============================================================ */ + +// TQt includes. + +#include <tqpainter.h> +#include <tqpixmap.h> +#include <tqpalette.h> +#include <tqpen.h> +#include <tqfontmetrics.h> +#include <tqfont.h> +#include <tqdatetime.h> + +// KDE includes. + +#include <tdeglobal.h> +#include <tdelocale.h> +#include <tdeapplication.h> +#include <kiconloader.h> + +// Local includes. + +#include "themeengine.h" +#include "themediconview.h" +#include "themediconitem.h" + +namespace Digikam +{ + +static void dateToString(const TQDateTime& datetime, TQString& str) +{ + str = TDEGlobal::locale()->formatDateTime(datetime, true, false); +} + +static TQString squeezedText(TQPainter* p, int width, const TQString& text) +{ + TQString fullText(text); + fullText.replace("\n"," "); + TQFontMetrics fm(p->fontMetrics()); + int textWidth = fm.width(fullText); + if (textWidth > width) + { + // start with the dots only + TQString squeezedText = "..."; + int squeezedWidth = fm.width(squeezedText); + + // estimate how many letters we can add to the dots on both sides + int letters = fullText.length() * (width - squeezedWidth) / textWidth; + if (width < squeezedWidth) letters=1; + squeezedText = fullText.left(letters) + "..."; + squeezedWidth = fm.width(squeezedText); + + if (squeezedWidth < width) + { + // we estimated too short + // add letters while text < label + do + { + letters++; + squeezedText = fullText.left(letters) + "..."; + squeezedWidth = fm.width(squeezedText); + } + while (squeezedWidth < width); + + letters--; + squeezedText = fullText.left(letters) + "..."; + } + else if (squeezedWidth > width) + { + // we estimated too long + // remove letters while text > label + do + { + letters--; + squeezedText = fullText.left(letters) + "..."; + squeezedWidth = fm.width(squeezedText); + } + while (letters && squeezedWidth > width); + } + + if (letters >= 5) + { + return squeezedText; + } + } + + return fullText; +} + +ThemedIconItem::ThemedIconItem(IconGroupItem* parent) + : IconItem(parent) +{ +} + +ThemedIconItem::~ThemedIconItem() +{ +} + +void ThemedIconItem::paintItem() +{ + ThemedIconView* view = (ThemedIconView*)iconView(); + + TQPixmap pix; + TQRect r; + + if (isSelected()) + pix = *(view->itemBaseSelPixmap()); + else + pix = *(view->itemBaseRegPixmap()); + + ThemeEngine* te = ThemeEngine::instance(); + + TQPainter p(&pix); + p.setPen(isSelected() ? te->textSelColor() : te->textRegColor()); + + { + r = view->itemPixmapRect(); + TDEIconLoader *iconLoader = TDEApplication::kApplication()->iconLoader(); + TQPixmap thumbnail = iconLoader->loadIcon("colors", TDEIcon::NoGroup, + 100, TDEIcon::DefaultState, 0, true); + + p.drawPixmap(r.x() + (r.width()-thumbnail.width())/2, + r.y() + (r.height()-thumbnail.height())/2, + thumbnail); + } + + r = view->itemNameRect(); + p.setFont(view->itemFontReg()); + p.drawText(r, TQt::AlignCenter, squeezedText(&p, r.width(), "IMG_00.JPG")); + + p.setFont(view->itemFontCom()); + r = view->itemCommentsRect(); + p.drawText(r, TQt::AlignCenter, squeezedText(&p, r.width(), i18n("Photo caption"))); + + p.setFont(view->itemFontXtra()); + { + TQDateTime date = TQDateTime::currentDateTime(); + + r = view->itemDateRect(); + p.setFont(view->itemFontXtra()); + TQString str; + dateToString(date, str); + p.drawText(r, TQt::AlignCenter, squeezedText(&p, r.width(), str)); + } + + p.setFont(view->itemFontCom()); + p.setPen(isSelected() ? te->textSpecialSelColor() : te->textSpecialRegColor()); + + { + TQString tags = i18n("Events, Places, Vacation"); + + r = view->itemTagRect(); + p.drawText(r, TQt::AlignCenter, + squeezedText(&p, r.width(), tags)); + } + + + if (this == view->currentItem()) + { + p.setPen(TQPen(isSelected() ? te->textSelColor() : te->textRegColor(), + 0, TQt::DotLine)); + p.drawRect(1, 1, pix.width()-2, pix.height()-2); + } + + p.end(); + + r = rect(); + r = TQRect(view->contentsToViewport(TQPoint(r.x(), r.y())), + TQSize(r.width(), r.height())); + + bitBlt(view->viewport(), r.x(), r.y(), &pix, + 0, 0, r.width(), r.height()); +} + +} // NameSpace Digikam |