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.
177 lines
5.5 KiB
177 lines
5.5 KiB
/* ============================================================
|
|
*
|
|
* This file is a part of digiKam project
|
|
* http://www.digikam.org
|
|
*
|
|
* Date : 2005-07-05
|
|
* Description : a ListView to display black frames
|
|
*
|
|
* Copyright (C) 2005-2008 by Gilles Caulier <caulier dot gilles at gmail dot com>
|
|
* Copyright (C) 2005-2006 by Unai Garro <ugarro at users dot sourceforge dot net>
|
|
*
|
|
* 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.
|
|
*
|
|
* ============================================================ */
|
|
|
|
#define THUMB_WIDTH 150
|
|
|
|
// TQt includes.
|
|
|
|
#include <tqpainter.h>
|
|
#include <tqtooltip.h>
|
|
|
|
// Local includes.
|
|
|
|
#include "blackframelistview.h"
|
|
#include "blackframelistview.moc"
|
|
|
|
namespace DigikamHotPixelsImagesPlugin
|
|
{
|
|
|
|
BlackFrameListView::BlackFrameListView(TQWidget* parent)
|
|
: TQListView(parent)
|
|
{
|
|
addColumn(i18n("Preview"));
|
|
addColumn(i18n("Size"));
|
|
addColumn(i18n("This is a column which will contain the amount of HotPixels "
|
|
"found in the black frame file", "HP"));
|
|
setAllColumnsShowFocus(true);
|
|
setResizeMode(TQListView::LastColumn);
|
|
setSelectionMode(TQListView::Single);
|
|
}
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
BlackFrameListViewItem::BlackFrameListViewItem(BlackFrameListView* parent, const KURL &url)
|
|
: TQObject(parent), TQListViewItem(parent)
|
|
{
|
|
m_parent = parent;
|
|
m_blackFrameURL = url;
|
|
m_parser = new BlackFrameParser(parent);
|
|
m_parser->parseBlackFrame(url);
|
|
|
|
connect(m_parser, TQT_SIGNAL(parsed(TQValueList<HotPixel>)),
|
|
this, TQT_SLOT(slotParsed(TQValueList<HotPixel>)));
|
|
|
|
connect(this, TQT_SIGNAL(parsed(TQValueList<HotPixel>, const KURL&)),
|
|
parent, TQT_SLOT(slotParsed(TQValueList<HotPixel>, const KURL&)));
|
|
|
|
connect(m_parser, TQT_SIGNAL(signalLoadingProgress(float)),
|
|
this, TQT_SIGNAL(signalLoadingProgress(float)));
|
|
|
|
connect(m_parser, TQT_SIGNAL(signalLoadingComplete()),
|
|
this, TQT_SIGNAL(signalLoadingComplete()));
|
|
}
|
|
|
|
void BlackFrameListViewItem::activate()
|
|
{
|
|
TQToolTip::add( m_parent, m_blackFrameDesc);
|
|
emit parsed(m_hotPixels, m_blackFrameURL);
|
|
}
|
|
|
|
TQString BlackFrameListViewItem::text(int column)const
|
|
{
|
|
switch (column)
|
|
{
|
|
case 0:
|
|
{
|
|
// First column includes the pixmap
|
|
break;
|
|
}
|
|
case 1:
|
|
{
|
|
// The image size.
|
|
if (!m_imageSize.isEmpty())
|
|
return (TQString("%1x%2").arg(m_imageSize.width()).arg(m_imageSize.height()));
|
|
break;
|
|
}
|
|
case 2:
|
|
{
|
|
// The amount of hot pixels found in the black frame.
|
|
return (TQString::number(m_hotPixels.count()));
|
|
break;
|
|
}
|
|
}
|
|
|
|
return TQString();
|
|
}
|
|
|
|
void BlackFrameListViewItem::paintCell(TQPainter* p, const TQColorGroup& cg, int column, int width, int align)
|
|
{
|
|
//Let the normal listview item draw it all for now
|
|
TQListViewItem::paintCell(p, cg, column, width, align);
|
|
}
|
|
|
|
void BlackFrameListViewItem::slotParsed(TQValueList<HotPixel> hotPixels)
|
|
{
|
|
m_hotPixels = hotPixels;
|
|
m_image = m_parser->image();
|
|
m_imageSize = m_image.size();
|
|
m_thumb = thumb(TQSize(THUMB_WIDTH, THUMB_WIDTH/3*2));
|
|
setPixmap(0, m_thumb);
|
|
|
|
m_blackFrameDesc = TQString("<p><b>" + m_blackFrameURL.fileName() + "</b>:<p>");
|
|
TQValueList <HotPixel>::Iterator end(m_hotPixels.end());
|
|
for (TQValueList <HotPixel>::Iterator it = m_hotPixels.begin() ; it != end ; ++it)
|
|
m_blackFrameDesc.append( TQString("[%1,%2] ").arg((*it).x()).arg((*it).y()) );
|
|
|
|
emit parsed(m_hotPixels, m_blackFrameURL);
|
|
}
|
|
|
|
TQPixmap BlackFrameListViewItem::thumb(const TQSize& size)
|
|
{
|
|
TQPixmap thumb;
|
|
|
|
//First scale it down to the size
|
|
thumb = m_image.smoothScale(size, TQ_ScaleMin);
|
|
|
|
//And draw the hot pixel positions on the thumb
|
|
TQPainter p(&thumb);
|
|
|
|
//Take scaling into account
|
|
float xRatio, yRatio;
|
|
float hpThumbX, hpThumbY;
|
|
TQRect hpRect;
|
|
|
|
xRatio = (float)size.width()/(float)m_image.width();
|
|
yRatio = (float)size.height()/(float)m_image.height();
|
|
|
|
//Draw hot pixels one by one
|
|
TQValueList <HotPixel>::Iterator it;
|
|
TQValueList <HotPixel>::Iterator end(m_hotPixels.end());
|
|
for (it=m_hotPixels.begin() ; it!=end ; ++it)
|
|
{
|
|
hpRect = (*it).rect;
|
|
hpThumbX = (hpRect.x()+hpRect.width()/2)*xRatio;
|
|
hpThumbY = (hpRect.y()+hpRect.height()/2)*yRatio;
|
|
|
|
p.setPen(TQPen(TQt::black));
|
|
p.drawLine((int)hpThumbX, (int)hpThumbY-1, (int)hpThumbX, (int)hpThumbY+1);
|
|
p.drawLine((int)hpThumbX-1, (int)hpThumbY, (int)hpThumbX+1, (int)hpThumbY);
|
|
p.setPen(TQPen(TQt::white));
|
|
p.drawPoint((int)hpThumbX-1, (int)hpThumbY-1);
|
|
p.drawPoint((int)hpThumbX+1, (int)hpThumbY+1);
|
|
p.drawPoint((int)hpThumbX-1, (int)hpThumbY+1);
|
|
p.drawPoint((int)hpThumbX+1, (int)hpThumbY-1);
|
|
}
|
|
|
|
return thumb;
|
|
}
|
|
|
|
int BlackFrameListViewItem::width(const TQFontMetrics& fm,const TQListView* lv,int c)const
|
|
{
|
|
if (c==0) return THUMB_WIDTH;
|
|
else return TQListViewItem::width(fm,lv,c);
|
|
}
|
|
|
|
} // NameSpace DigikamHotPixelsImagesPlugin
|