/* ============================================================ * * This file is a part of digiKam project * http://www.digikam.org * * Date : 2004-09-21 * Description : camera icon view item * * Copyright (C) 2004-2005 by Renchi Raju * Copyright (C) 2006-2009 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. * * ============================================================ */ // TQt includes. #include #include // KDE includes. #include // Local includes. #include "iconview.h" #include "thumbnailsize.h" #include "albumiconitem.h" #include "gpiteminfo.h" #include "themeengine.h" #include "cameraiconview.h" #include "cameraiconitem.h" namespace Digikam { class CameraIconViewItemPriv { public: CameraIconViewItemPriv() { itemInfo = 0; } TQString downloadName; TQPixmap pixmap; TQPixmap thumbnail; TQRect pixRect; TQRect textRect; TQRect extraRect; GPItemInfo *itemInfo; }; CameraIconViewItem::CameraIconViewItem(IconGroupItem* parent, const GPItemInfo& itemInfo, const TQImage& thumbnail, const TQString& downloadName) : IconItem(parent) { d = new CameraIconViewItemPriv; d->itemInfo = new GPItemInfo(itemInfo); d->downloadName = downloadName; setThumbnail(thumbnail); } CameraIconViewItem::~CameraIconViewItem() { delete d->itemInfo; delete d; } void CameraIconViewItem::setThumbnail(const TQImage& thumbnail) { d->thumbnail = TQPixmap(thumbnail); } GPItemInfo* CameraIconViewItem::itemInfo() const { return d->itemInfo; } void CameraIconViewItem::paintItem() { CameraIconView* view = (CameraIconView*)iconView(); TQFont fn(view->font()); TQPixmap pix; TQRect r(rect()); if (isSelected()) pix = *(view->itemBaseSelPixmap()); else pix = *(view->itemBaseRegPixmap()); ThemeEngine* te = ThemeEngine::instance(); TQPainter p(&pix); TQString itemName = AlbumIconItem::squeezedText(&p, r.width()-5, d->itemInfo->name); TQString downloadName = AlbumIconItem::squeezedText(&p, r.width()-5, d->downloadName); calcRect(itemName, downloadName); p.setPen(isSelected() ? te->textSelColor() : te->textRegColor()); p.drawPixmap(d->pixRect.x() + (d->pixRect.width() - d->pixmap.width()) /2, d->pixRect.y() + (d->pixRect.height() - d->pixmap.height()) /2, d->pixmap); p.drawText(d->textRect, TQt::AlignHCenter|TQt::AlignTop, itemName); if (!d->downloadName.isEmpty()) { if (fn.pointSize() > 0) fn.setPointSize(TQMAX(fn.pointSize()-2, 6)); p.setFont(fn); p.setPen(isSelected() ? te->textSpecialSelColor() : te->textSpecialRegColor()); p.drawText(d->extraRect, TQt::AlignHCenter|TQt::AlignTop, downloadName); } if (this == iconView()->currentItem()) { p.setPen(TQPen(isSelected() ? TQt::white : TQt::black, 1, TQt::DotLine)); p.drawRect(0, 0, r.width(), r.height()); } // Draw download status icon. TQPixmap downloaded; switch (d->itemInfo->downloaded) { case GPItemInfo::NewPicture: { downloaded = TQPixmap(view->newPicturePixmap()); break; } case GPItemInfo::DownloadedYes: { downloaded = SmallIcon( "button_ok" ); break; } case GPItemInfo::DownloadStarted: { downloaded = SmallIcon( "system-run" ); break; } case GPItemInfo::DownloadFailed: { downloaded = SmallIcon( "button_cancel" ); break; } /* TODO: see B.K.O #107316 : disable temporally the unknow download status until a new method to identify the already downloaded pictures from camera is implemented. case GPItemInfo::DownloadUnknow: { downloaded = view->unknowPicturePixmap(); break; } */ } if (!downloaded.isNull()) p.drawPixmap(rect().width() - downloaded.width() - 5, 5, downloaded); // If camera item is locked (read only), draw a "Lock" icon. if (d->itemInfo->writePermissions == 0) p.drawPixmap(5, 5, SmallIcon( "encrypted" )); p.end(); r = TQRect(view->contentsToViewport(TQPoint(r.x(), r.y())), TQSize(r.width(), r.height())); bitBlt(view->viewport(), r.x(), r.y(), &pix); } void CameraIconViewItem::setDownloadName(const TQString& downloadName) { d->downloadName = downloadName; repaint(); } TQString CameraIconViewItem::getDownloadName() const { return d->downloadName; } void CameraIconViewItem::setDownloaded(int status) { d->itemInfo->downloaded = status; repaint(); } bool CameraIconViewItem::isDownloaded() const { return (d->itemInfo->downloaded == GPItemInfo::DownloadedYes); } void CameraIconViewItem::toggleLock() { if (d->itemInfo->writePermissions == 0) d->itemInfo->writePermissions = 1; else d->itemInfo->writePermissions = 0; repaint(); } void CameraIconViewItem::calcRect(const TQString& itemName, const TQString& downloadName) { CameraIconView* view = (CameraIconView*)iconView(); int thumbSize = view->thumbnailSize().size(); d->pixmap = TQPixmap(d->thumbnail.convertToImage().smoothScale(thumbSize, thumbSize, TQImage::ScaleMin)); d->pixRect = TQRect(0,0,0,0); d->textRect = TQRect(0,0,0,0); d->extraRect = TQRect(0,0,0,0); TQRect itemRect = rect(); itemRect.moveTopLeft(TQPoint(0, 0)); d->pixRect.setWidth(thumbSize); d->pixRect.setHeight(thumbSize); TQFontMetrics fm(iconView()->font()); TQRect r = TQRect(fm.boundingRect(0, 0, thumbSize, 0xFFFFFFFF, TQt::AlignHCenter | TQt::AlignTop, itemName)); d->textRect.setWidth(r.width()); d->textRect.setHeight(r.height()); if (!d->downloadName.isEmpty()) { TQFont fn(iconView()->font()); if (fn.pointSize() > 0) { fn.setPointSize(TQMAX(fn.pointSize()-2, 6)); } fm = TQFontMetrics(fn); r = TQRect(fm.boundingRect(0, 0, thumbSize, 0xFFFFFFFF, TQt::AlignHCenter | TQt::WordBreak, downloadName)); d->extraRect.setWidth(r.width()); d->extraRect.setHeight(r.height()); d->textRect.setWidth(TQMAX(d->textRect.width(), d->extraRect.width())); d->textRect.setHeight(d->textRect.height() + d->extraRect.height()); } int w = TQMAX(d->textRect.width(), d->pixRect.width() ); int h = d->textRect.height() + d->pixRect.height() ; itemRect.setWidth(w+4); itemRect.setHeight(h+4); // Center the pix and text rect d->pixRect = TQRect(2, 2, d->pixRect.width(), d->pixRect.height()); d->textRect = TQRect((itemRect.width() - d->textRect.width())/2, itemRect.height() - d->textRect.height(), d->textRect.width(), d->textRect.height()); if (!d->extraRect.isEmpty()) { d->extraRect = TQRect((itemRect.width() - d->extraRect.width())/2, itemRect.height() - d->extraRect.height(), d->extraRect.width(), d->extraRect.height()); } } TQRect CameraIconViewItem::clickToOpenRect() { TQRect r(rect()); if (d->pixmap.isNull()) { TQRect pixRect(d->pixRect); pixRect.moveBy(r.x(), r.y()); return pixRect; } TQRect pixRect(d->pixRect.x() + (d->pixRect.width() - d->pixmap.width())/2, d->pixRect.y() + (d->pixRect.height() - d->pixmap.height())/2, d->pixmap.width(), d->pixmap.height()); pixRect.moveBy(r.x(), r.y()); return pixRect; } } // namespace Digikam