summaryrefslogtreecommitdiff
path: root/noncore/graphics/opie-eye/slave/slavereciever.cpp
Side-by-side diff
Diffstat (limited to 'noncore/graphics/opie-eye/slave/slavereciever.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/graphics/opie-eye/slave/slavereciever.cpp214
1 files changed, 214 insertions, 0 deletions
diff --git a/noncore/graphics/opie-eye/slave/slavereciever.cpp b/noncore/graphics/opie-eye/slave/slavereciever.cpp
new file mode 100644
index 0000000..951f3df
--- a/dev/null
+++ b/noncore/graphics/opie-eye/slave/slavereciever.cpp
@@ -0,0 +1,214 @@
+/*
+ * GPLv2 zecke@handhelds.org
+ */
+
+#include "slavereciever.h"
+#include "slaveiface.h"
+
+#include <qpe/qcopenvelope_qws.h>
+#include <qpe/qpeapplication.h>
+
+#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;
+}
+QDataStream &operator>>( QDataStream& s, PixmapInfo& inf ) {
+ s >> inf.file >> inf.pixmap >> inf.width >> inf.height;
+ 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_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) {
+ qWarning( "String is %s", string.data() );
+ QDataStream stream(ar, IO_ReadOnly );
+ QStringList lst;
+ static ImageInfo inf;
+ static PixmapInfo pix;
+
+ if ( string == "thumbInfo(QString)" ) {
+ stream >> inf.file;
+ m_inList.append(inf);
+ }else if ( string == "thumbInfos(QStringList)" ) {
+ stream >> lst;
+ for(QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) {
+ qWarning( "Adding thumbinfo for file "+ *it );
+ inf.file = (*it);
+ 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 ) {
+ qWarning( "Adding fullInfo for"+ *it );
+ 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 ) {
+ qWarning( "Got %d %d " + (*it).file, (*it).width , (*it).height );
+ m_inPix.append(*it);
+ }
+ }
+
+ if (!m_inf->isActive() && !m_inList.isEmpty() )
+ m_inf->start(5);
+
+ if (!m_pix->isActive() && !m_inPix.isEmpty() )
+ m_pix->start(5);
+
+ QPEApplication::setKeepRunning();
+
+}
+
+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 */
+ qWarning( "Asking for thumbNail in size %d %d for "+inf.file, inf.width, inf.height );
+ inf.pixmap = iface->pixmap(inf.file, 64, 64);
+ 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();
+
+ qWarning( "Sending %d %d", outPix().count(), outInf().count() );
+ /* 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();
+ for ( PixmapList::Iterator it = m_outPix.begin();it!=m_outPix.end();++it ) {
+ qWarning( "Sending out %s %d %d", (*it).file.latin1(), (*it).width, (*it).height );
+ }
+ }
+ if ( !m_outList.isEmpty() ) {
+ QCopEnvelope answer("QPE/opie-eye", "pixmapsHandled(StringList)" );
+ answer << outInf();
+ for ( StringList::Iterator it = m_outList.begin();it!=m_outList.end();++it ) {
+ qWarning( "Sending out2 " + (*it).file );
+ }
+ }
+
+ m_outList.clear();
+ m_outPix.clear();
+}
+