summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/graphics/opie-eye/slave/jpeg_slave.cpp3
-rw-r--r--noncore/graphics/opie-eye/slave/slavereciever.cpp11
-rw-r--r--noncore/graphics/opie-eye/slave/thumbnailtool.cpp3
3 files changed, 4 insertions, 13 deletions
diff --git a/noncore/graphics/opie-eye/slave/jpeg_slave.cpp b/noncore/graphics/opie-eye/slave/jpeg_slave.cpp
index 668ad13..0f41359 100644
--- a/noncore/graphics/opie-eye/slave/jpeg_slave.cpp
+++ b/noncore/graphics/opie-eye/slave/jpeg_slave.cpp
@@ -1,199 +1,196 @@
#include "jpeg_slave.h"
#include "thumbnailtool.h"
PHUNK_VIEW_INTERFACE( "JPEG", JpegSlave )
/* OPIE */
#include <opie2/odebug.h>
#include <opie2/opieexif.h>
#include <qpe/timestring.h>
using namespace Opie::Core;
using namespace Opie::MM;
/* QT */
#include <qobject.h>
#include <qimage.h>
static QDateTime parseDateTime( const QString& string )
{
QDateTime dt;
if ( string.length() != 19 )
return dt;
QString year = string.left( 4 );
QString month = string.mid( 5, 2 );
QString day = string.mid( 8, 2 );
QString hour = string.mid( 11, 2 );
QString minute = string.mid( 14, 2 );
QString seconds = string.mid( 18, 2 );
bool ok;
bool allOk = true;
int y = year.toInt( &ok );
allOk &= ok;
int mo = month.toInt( &ok );
allOk &= ok;
int d = day.toInt( &ok );
allOk &= ok;
int h = hour.toInt( &ok );
allOk &= ok;
int mi = minute.toInt( &ok );
allOk &= ok;
int s = seconds.toInt( &ok );
allOk &= ok;
if ( allOk ) {
dt.setDate( QDate( y, mo, d ) );
dt.setTime( QTime( h, mi, s ) );
}
return dt;
}
JpegSlave::JpegSlave()
: SlaveInterface( QStringList::split( " ", "jpeg jpg" ) )
{}
JpegSlave::~JpegSlave() {}
QString JpegSlave::iconViewName( const QString& path) {
ExifData ImageInfo;
if ( !ImageInfo.scan( path ) )
return QString::null;
QString tag;
tag = QObject::tr( "Comment: %1\n" ).arg( ImageInfo.getComment() );
{
// ODP fixme
QString timestring = TimeString::dateString( parseDateTime( ImageInfo.getDateTime() ), FALSE );
tag += QObject::tr( "Date/Time: %1\n" ).arg( timestring );
}
tag += QObject::tr( "Dimensions: %1x%2\n" ).arg(ImageInfo.getWidth())
.arg(ImageInfo.getHeight() );
tag += ExifData::color_mode_to_string( ImageInfo.getIsColor() );
tag += ExifData::compression_to_string( ImageInfo.getCompressionLevel() );
return tag;
}
/*
* messy messy string creation
*/
QString JpegSlave::fullImageInfo( const QString& path) {
ExifData ImageInfo;
if ( !ImageInfo.scan( path ) )
return QString::null;
QString tag, tmp;
tag = QObject::tr( "<qt>Comment: %1\n" ).arg( ImageInfo.getComment() );
tmp = ImageInfo.getCameraMake();
if ( tmp.length() )
tag += QObject::tr( "Manufacturer: %1\n" ).arg( tmp );
tmp = ImageInfo.getCameraModel();
if ( tmp.length() )
tag += QObject::tr( "Model: %1\n" ).arg( tmp );
{
// ODP fixme
tmp = TimeString::dateString( parseDateTime( ImageInfo.getDateTime() ), FALSE );
tag += QObject::tr( "Date/Time: %1\n" ).arg( tmp );
}
tag += QObject::tr( "Dimensions: %1x%2\n" ).arg(ImageInfo.getWidth())
.arg(ImageInfo.getHeight() );
tag += ExifData::color_mode_to_string( ImageInfo.getIsColor() );
tag += ExifData::compression_to_string( ImageInfo.getCompressionLevel() );
if ( ImageInfo.getOrientation() )
tag += QObject::tr( "Orientation: %1\n" ).arg(ImageInfo.getOrientation() );
{
int flash_used = ImageInfo.getFlashUsed();
if ( flash_used >= 0 )
tag += QObject::tr( "Flash used\n" );
}
if ( ImageInfo.getFocalLength() ) {
tag += QObject::tr( "Focal length: %1\n" ).arg( QString().sprintf( "%4.1f", ImageInfo.getFocalLength() ) );
if ( ImageInfo.getCCDWidth() )
tag += QObject::tr( "35mm equivalent: %1\n" ).arg( (int)(ImageInfo.getFocalLength()/ImageInfo.getCCDWidth()*35 + 0.5) );
}
if ( ImageInfo.getCCDWidth() )
tag += QObject::tr( "CCD width: %1" ).arg( ImageInfo.getCCDWidth() );
if ( ImageInfo.getExposureTime() ) {
tmp = QString().sprintf("%4.2f", ImageInfo.getExposureTime() );
float exposureTime = ImageInfo.getExposureTime();
if ( exposureTime > 0 && exposureTime <= 0.5 )
tmp += QString().sprintf(" (1/%d)", (int)(0.5 +1/exposureTime) );
tag += QObject::tr( "Exposure time: %1\n" ).arg( tmp );
}
if ( ImageInfo.getApertureFNumber() )
tag += QObject::tr( "Aperture: %1\n" ).arg( QString().sprintf("f/%3.1f", (double)ImageInfo.getApertureFNumber() ) );
if ( ImageInfo.getDistance() ) {
if ( ImageInfo.getDistance() < 0 )
tag += QObject::tr( "Distance: %1\n" ).arg( QObject::tr( "Infinite" ) );
else
tag += QObject::tr( "Distance: %1\n" ).arg( QString().sprintf( "%5.2fm", (double)ImageInfo.getDistance() ) );
}
if ( ImageInfo.getExposureBias() ) {
tag += QObject::tr( "Exposure bias: %1\n", QString().sprintf("%4.2f", (double)ImageInfo.getExposureBias() ) );
}
if ( ImageInfo.getWhitebalance() != -1 )
tag += ExifData::white_balance_string( ImageInfo.getWhitebalance() );
if( ImageInfo.getMeteringMode() != -1 )
tag += ExifData::metering_mode( ImageInfo.getMeteringMode() );
if ( ImageInfo.getExposureProgram() )
tag += ExifData::exposure_program( ImageInfo.getExposureProgram() );
if ( ImageInfo.getISOequivalent() )
tag += QObject::tr( "ISO equivalent: %1\n" ).arg( QString().sprintf("%2d", ImageInfo.getISOequivalent() ) );
tmp = ImageInfo.getUserComment();
if ( tmp.length() )
tag += QObject::tr( "EXIF comment: %1" ).arg( tmp );
tag += QObject::tr( "</qt>" );
return tag;
}
QPixmap JpegSlave::pixmap( const QString& path, int wid, int hei) {
ExifData ImageInfo;
/*
*/
if ( !ImageInfo.scan( path ) || ImageInfo.isNullThumbnail() ) {
QImage img;
QImageIO iio( path, 0l );
if (wid < ImageInfo.getWidth() || hei<ImageInfo.getHeight()) {
- odebug << "Scaling "<<ImageInfo.getWidth()<<"x"<<ImageInfo.getHeight()
- << " to "<<wid<<"x"<<hei<< " ("<<path<<")"<<oendl;
QString str = QString( "Fast Shrink( 4 ) Scale( %1, %2, ScaleFree)" ).arg( wid ).arg( hei );
iio.setParameters( str.latin1() );// will be strdupped anyway
} else {
- odebug << "Not scaling "<<ImageInfo.getWidth()<<"x"<<ImageInfo.getHeight()<< " ("<<path<<")"<<oendl;
}
img = iio.read() ? iio.image() : QImage();
return ThumbNailTool::scaleImage( img, wid,hei );
}else{
QImage img = ImageInfo.getThumbnail();
return ThumbNailTool::scaleImage( img, wid,hei );
}
}
diff --git a/noncore/graphics/opie-eye/slave/slavereciever.cpp b/noncore/graphics/opie-eye/slave/slavereciever.cpp
index 941a5df..3b11c04 100644
--- a/noncore/graphics/opie-eye/slave/slavereciever.cpp
+++ b/noncore/graphics/opie-eye/slave/slavereciever.cpp
@@ -1,238 +1,235 @@
/*
* GPLv2 zecke@handhelds.org
*/
#include "slavereciever.h"
#include "slaveiface.h"
/* OPIE */
#include <opie2/odebug.h>
#include <qpe/qcopenvelope_qws.h>
#include <qpe/qpeapplication.h>
using namespace Opie::Core;
/* QT */
#include <qtimer.h>
static SlaveObjects* _slaveObj = 0;
QDataStream & operator << (QDataStream & str, bool b)
{
str << Q_INT8(b);
return str;
}
QDataStream & operator >> (QDataStream & str, bool & b)
{
Q_INT8 l;
str >> l;
b = bool(l);
return str;
}
QDataStream &operator<<( QDataStream& s, const PixmapInfo& inf) {
return s << inf.file << inf.pixmap << inf.width << inf.height;
}
/*
* GUI sends no QPIxmap!!!
*/
QDataStream &operator>>( QDataStream& s, PixmapInfo& inf ) {
s >> inf.file >> inf.width >> inf.height;
- owarn << "Recieved " << inf.file.latin1() << " " << inf.width << " " << inf.height << "" << oendl;
return s;
}
QDataStream &operator<<( QDataStream& s, const ImageInfo& i) {
return s << i.kind << i.file << i.info;
}
QDataStream &operator>>( QDataStream& s, ImageInfo& i ) {
s >> i.kind >> i.file >> i.info;
return s;
}
SlaveObjects* slaveObjects() {
if ( !_slaveObj )
_slaveObj = new SlaveObjects;
return _slaveObj;
}
SlaveReciever::SlaveReciever( QObject* par)
: QObject( par ), m_refs( 0 )
{
m_inf = new QTimer(this);
connect(m_inf,SIGNAL(timeout()),
this, SLOT(slotImageInfo()));
m_pix = new QTimer(this);
connect(m_pix,SIGNAL(timeout()),
this, SLOT(slotThumbNail()));
m_out = new QTimer(this);
connect(m_out,SIGNAL(timeout()),
this, SLOT(slotSend()));
SlaveObjects *obj = slaveObjects(); // won't be changed
SlaveMap::Iterator it;
SlaveMap* map = slaveMap(); // SlaveMap won't be changed during execution!!!
for(it = map->begin(); it != map->end(); ++it ) {
obj->insert( it.key(), (*it.data())() );
}
}
SlaveReciever::~SlaveReciever() {
}
void SlaveReciever::recieveAnswer( const QCString& string, const QByteArray& ar) {
- owarn << "String is " << string.data() << "" << oendl;
QDataStream stream(ar, IO_ReadOnly );
QStringList lst;
static ImageInfo inf;
static PixmapInfo pix;
if ( string == "thumbInfo(QString)" ) {
stream >> inf.file;
inf.kind = false;
m_inList.append(inf);
}else if ( string == "thumbInfos(QStringList)" ) {
stream >> lst;
for(QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) {
- owarn << "Adding thumbinfo for file "+ *it << oendl;
inf.file = (*it);
inf.kind = false;
m_inList.append(inf);
}
}else if ( string == "fullInfo(QString)" ) {
inf.kind = true;
stream >> inf.file;
m_inList.append(inf);
}else if ( string == "fullInfos(QStringList)" ) {
stream >> lst;
for(QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) {
- owarn << "Adding fullInfo for"+ *it << oendl;
inf.file = (*it);
inf.kind = true;
m_inList.append(inf);
}
}else if ( string == "pixmapInfo(QString,int,int)" ) {
stream >> pix.file >> pix.width >> pix.height;
m_inPix.append(pix);
}else if ( string == "pixmapInfos(PixmapInfos)" ) {
PixmapList list;
stream >> list;
for(PixmapList::Iterator it = list.begin(); it != list.end(); ++it ) {
- owarn << "Got " << (*it).width << " " << (*it).height << " " + (*it).file << oendl;
m_inPix.append(*it);
}
}else if ( string == "refUp()" ) {
m_refs++;
}else if ( string == "refDown()" ) {
m_refs--;
}
if (!m_inf->isActive() && !m_inList.isEmpty() )
m_inf->start(5);
if (!m_pix->isActive() && !m_inPix.isEmpty() )
m_pix->start(5);
if ( m_refs )
QPEApplication::setKeepRunning();
else
qApp->quit();
}
PixmapList SlaveReciever::outPix()const {
return m_outPix;
}
StringList SlaveReciever::outInf()const{
return m_outList;
}
void SlaveReciever::slotImageInfo() {
ImageInfo inf = m_inList.first();
m_inList.remove( inf );
static SlaveObjects::Iterator it;
static SlaveObjects* map = slaveObjects(); // SlaveMap won't be changed during execution!!!
for(it = map->begin(); it != map->end(); ++it ) {
if( (*it)->supports(inf.file ) ) {
/* full image info */
if (inf.kind )
inf.info = (*it)->fullImageInfo( inf.file );
else
inf.info = (*it)->iconViewName( inf.file );
m_outList.append( inf );
break;
}
}
if (m_inList.isEmpty() )
m_inf->stop();
if (!m_out->isActive() && !m_outList.isEmpty() )
m_out->start( 100 );
}
void SlaveReciever::slotThumbNail() {
PixmapInfo inf = m_inPix.first();
m_inPix.remove( inf );
static SlaveObjects::Iterator it;
static SlaveObjects* map = slaveObjects(); // SlaveMap won't be changed during execution!!!
for(it = map->begin(); it != map->end(); ++it ) {
SlaveInterface* iface = it.data();
if( iface->supports(inf.file ) ) {
/* pixmap */
- owarn << "Asking for thumbNail in size " << inf.width << " " << inf.height << " for "+inf.file << oendl;
if (inf.width>256||inf.height>256) {
owarn << "Scaling thumbnail to 64x64 'cause " << inf.width<<"x"<<inf.height<<
" may be nonsense";
inf.pixmap = iface->pixmap(inf.file, 64, 64);
}else {
inf.pixmap = iface->pixmap(inf.file, inf.width, inf.height);
}
m_outPix.append( inf );
break;
}
}
if(m_inPix.isEmpty() )
m_pix->stop();
if(!m_out->isActive() && !m_outPix.isEmpty() )
m_out->start(100);
}
void SlaveReciever::slotSend() {
m_out->stop();
- owarn << "Sending " << outPix().count() << " " << outInf().count() << "" << oendl;
/* queue it and send */
/* if this ever gets a service introduce request queues
* so we can differinatate between different clients
*/
if (! m_outPix.isEmpty() ) {
QCopEnvelope answer("QPE/opie-eye", "pixmapsHandled(PixmapList)" );
answer << outPix();
+#if 0
for ( PixmapList::Iterator it = m_outPix.begin();it!=m_outPix.end();++it ) {
owarn << "Sending out " << (*it).file.latin1() << " " << (*it).width << " " << (*it).height << "" << oendl;
}
+#endif
}
if ( !m_outList.isEmpty() ) {
QCopEnvelope answer("QPE/opie-eye", "pixmapsHandled(StringList)" );
answer << outInf();
+#if 0
for ( StringList::Iterator it = m_outList.begin();it!=m_outList.end();++it ) {
owarn << "Sending out2 " + (*it).file << oendl;
}
+#endif
}
m_outList.clear();
m_outPix.clear();
}
diff --git a/noncore/graphics/opie-eye/slave/thumbnailtool.cpp b/noncore/graphics/opie-eye/slave/thumbnailtool.cpp
index d2e169c..62bb1e6 100644
--- a/noncore/graphics/opie-eye/slave/thumbnailtool.cpp
+++ b/noncore/graphics/opie-eye/slave/thumbnailtool.cpp
@@ -1,66 +1,63 @@
#include "thumbnailtool.h"
/* OPIE */
#include <opie2/odebug.h>
using namespace Opie::Core;
/* QT */
#include <qfileinfo.h>
#include <qdir.h>
#include <qimage.h>
#include <qpixmap.h>
#include <qstring.h>
static bool makeThumbDir( const QFileInfo& inf, bool make = false) {
QDir dir( inf.dirPath()+ "/.opie-eye" );
if ( !dir.exists() )
if ( make )
return dir.mkdir(QString::null);
else
return false;
return true;
}
/*
* check if the Opie opie-eye dir exists
* check if a thumbnail exists
* load the thumbnail
* /foo/bar/imagefoo.gif
* check for a png in /foo/bar/.opie-eye/%dx%d-imagefoo.gif
*/
QPixmap ThumbNailTool::getThumb( const QString& path, int width, int height ) {
QFileInfo inf( path );
- owarn << "Get Thumb" << oendl;
if ( !makeThumbDir( inf ) ) {
QPixmap pix;
return pix;
}
QString str = QString( "/.opie-eye/%1x%2-%3" ).arg( width ).arg( height ).arg( inf.fileName() );
- owarn << inf.dirPath()+str << oendl;
return QPixmap( inf.dirPath()+str,"PNG" );
}
void ThumbNailTool::putThumb( const QString& path, const QPixmap& pix, int width, int height ) {
QFileInfo inf( path );
makeThumbDir( inf, true );
QString str = QString( "/.opie-eye/%1x%2-%3" ).arg( width ).arg( height ).arg( inf.fileName() );
- owarn << inf.dirPath()+str << oendl;
pix.save( inf.dirPath()+str, "PNG" );
}
QPixmap ThumbNailTool::scaleImage( QImage& img, int w, int h ) {
double hs = (double)h / (double)img.height() ;
double ws = (double)w / (double)img.width() ;
double scaleFactor = (hs > ws) ? ws : hs;
int smoothW = (int)(scaleFactor * img.width());
int smoothH = (int)(scaleFactor * img.height());
QPixmap pixmap;
if ( img.width() <= w && img.height() <= h )
pixmap.convertFromImage( img );
else
pixmap.convertFromImage( img.smoothScale( smoothW, smoothH) );
return pixmap;
}