You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
303 lines
8.4 KiB
303 lines
8.4 KiB
/* ============================================================
|
|
*
|
|
* 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 <renchi@pooh.tam.uiuc.edu>
|
|
* Copyright (C) 2006-2009 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.
|
|
*
|
|
* ============================================================ */
|
|
|
|
// TQt includes.
|
|
|
|
#include <tqpainter.h>
|
|
#include <tqpixmap.h>
|
|
|
|
// KDE includes.
|
|
|
|
#include <kiconloader.h>
|
|
|
|
// 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( "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, TQ_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
|