summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/graphics/opie-eye/slave/slavereciever.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/noncore/graphics/opie-eye/slave/slavereciever.cpp b/noncore/graphics/opie-eye/slave/slavereciever.cpp
index 82b3d23..fb88873 100644
--- a/noncore/graphics/opie-eye/slave/slavereciever.cpp
+++ b/noncore/graphics/opie-eye/slave/slavereciever.cpp
@@ -1,230 +1,236 @@
1/* 1/*
2 * GPLv2 zecke@handhelds.org 2 * GPLv2 zecke@handhelds.org
3 */ 3 */
4 4
5#include "slavereciever.h" 5#include "slavereciever.h"
6#include "slaveiface.h" 6#include "slaveiface.h"
7 7
8/* OPIE */ 8/* OPIE */
9#include <opie2/odebug.h> 9#include <opie2/odebug.h>
10#include <qpe/qcopenvelope_qws.h> 10#include <qpe/qcopenvelope_qws.h>
11#include <qpe/qpeapplication.h> 11#include <qpe/qpeapplication.h>
12using namespace Opie::Core; 12using namespace Opie::Core;
13 13
14/* QT */ 14/* QT */
15#include <qtimer.h> 15#include <qtimer.h>
16 16
17static SlaveObjects* _slaveObj = 0; 17static SlaveObjects* _slaveObj = 0;
18 18
19QDataStream & operator << (QDataStream & str, bool b) 19QDataStream & operator << (QDataStream & str, bool b)
20{ 20{
21 str << Q_INT8(b); 21 str << Q_INT8(b);
22 return str; 22 return str;
23} 23}
24 24
25QDataStream & operator >> (QDataStream & str, bool & b) 25QDataStream & operator >> (QDataStream & str, bool & b)
26{ 26{
27 Q_INT8 l; 27 Q_INT8 l;
28 str >> l; 28 str >> l;
29 b = bool(l); 29 b = bool(l);
30 return str; 30 return str;
31} 31}
32 32
33 33
34 34
35QDataStream &operator<<( QDataStream& s, const PixmapInfo& inf) { 35QDataStream &operator<<( QDataStream& s, const PixmapInfo& inf) {
36 return s << inf.file << inf.pixmap << inf.width << inf.height; 36 return s << inf.file << inf.pixmap << inf.width << inf.height;
37} 37}
38 38
39/* 39/*
40 * GUI sends no QPIxmap!!! 40 * GUI sends no QPIxmap!!!
41 */ 41 */
42QDataStream &operator>>( QDataStream& s, PixmapInfo& inf ) { 42QDataStream &operator>>( QDataStream& s, PixmapInfo& inf ) {
43 s >> inf.file >> inf.width >> inf.height; 43 s >> inf.file >> inf.width >> inf.height;
44 owarn << "Recieved " << inf.file.latin1() << " " << inf.width << " " << inf.height << "" << oendl; 44 owarn << "Recieved " << inf.file.latin1() << " " << inf.width << " " << inf.height << "" << oendl;
45 return s; 45 return s;
46} 46}
47QDataStream &operator<<( QDataStream& s, const ImageInfo& i) { 47QDataStream &operator<<( QDataStream& s, const ImageInfo& i) {
48 return s << i.kind << i.file << i.info; 48 return s << i.kind << i.file << i.info;
49} 49}
50QDataStream &operator>>( QDataStream& s, ImageInfo& i ) { 50QDataStream &operator>>( QDataStream& s, ImageInfo& i ) {
51 s >> i.kind >> i.file >> i.info; 51 s >> i.kind >> i.file >> i.info;
52 return s; 52 return s;
53} 53}
54 54
55 55
56 56
57SlaveObjects* slaveObjects() { 57SlaveObjects* slaveObjects() {
58 if ( !_slaveObj ) 58 if ( !_slaveObj )
59 _slaveObj = new SlaveObjects; 59 _slaveObj = new SlaveObjects;
60 return _slaveObj; 60 return _slaveObj;
61} 61}
62 62
63SlaveReciever::SlaveReciever( QObject* par) 63SlaveReciever::SlaveReciever( QObject* par)
64 : QObject( par ), m_refs( 0 ) 64 : QObject( par ), m_refs( 0 )
65{ 65{
66 m_inf = new QTimer(this); 66 m_inf = new QTimer(this);
67 connect(m_inf,SIGNAL(timeout()), 67 connect(m_inf,SIGNAL(timeout()),
68 this, SLOT(slotImageInfo())); 68 this, SLOT(slotImageInfo()));
69 m_pix = new QTimer(this); 69 m_pix = new QTimer(this);
70 connect(m_pix,SIGNAL(timeout()), 70 connect(m_pix,SIGNAL(timeout()),
71 this, SLOT(slotThumbNail())); 71 this, SLOT(slotThumbNail()));
72 72
73 m_out = new QTimer(this); 73 m_out = new QTimer(this);
74 connect(m_out,SIGNAL(timeout()), 74 connect(m_out,SIGNAL(timeout()),
75 this, SLOT(slotSend())); 75 this, SLOT(slotSend()));
76 76
77 SlaveObjects *obj = slaveObjects(); // won't be changed 77 SlaveObjects *obj = slaveObjects(); // won't be changed
78 SlaveMap::Iterator it; 78 SlaveMap::Iterator it;
79 SlaveMap* map = slaveMap(); // SlaveMap won't be changed during execution!!! 79 SlaveMap* map = slaveMap(); // SlaveMap won't be changed during execution!!!
80 for(it = map->begin(); it != map->end(); ++it ) { 80 for(it = map->begin(); it != map->end(); ++it ) {
81 obj->insert( it.key(), (*it.data())() ); 81 obj->insert( it.key(), (*it.data())() );
82 } 82 }
83} 83}
84 84
85SlaveReciever::~SlaveReciever() { 85SlaveReciever::~SlaveReciever() {
86} 86}
87 87
88void SlaveReciever::recieveAnswer( const QCString& string, const QByteArray& ar) { 88void SlaveReciever::recieveAnswer( const QCString& string, const QByteArray& ar) {
89 owarn << "String is " << string.data() << "" << oendl; 89 owarn << "String is " << string.data() << "" << oendl;
90 QDataStream stream(ar, IO_ReadOnly ); 90 QDataStream stream(ar, IO_ReadOnly );
91 QStringList lst; 91 QStringList lst;
92 static ImageInfo inf; 92 static ImageInfo inf;
93 static PixmapInfo pix; 93 static PixmapInfo pix;
94 94
95 if ( string == "thumbInfo(QString)" ) { 95 if ( string == "thumbInfo(QString)" ) {
96 stream >> inf.file; 96 stream >> inf.file;
97 m_inList.append(inf); 97 m_inList.append(inf);
98 }else if ( string == "thumbInfos(QStringList)" ) { 98 }else if ( string == "thumbInfos(QStringList)" ) {
99 stream >> lst; 99 stream >> lst;
100 for(QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) { 100 for(QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) {
101 owarn << "Adding thumbinfo for file "+ *it << oendl; 101 owarn << "Adding thumbinfo for file "+ *it << oendl;
102 inf.file = (*it); 102 inf.file = (*it);
103 m_inList.append(inf); 103 m_inList.append(inf);
104 } 104 }
105 }else if ( string == "fullInfo(QString)" ) { 105 }else if ( string == "fullInfo(QString)" ) {
106 inf.kind = true; 106 inf.kind = true;
107 stream >> inf.file; 107 stream >> inf.file;
108 m_inList.append(inf); 108 m_inList.append(inf);
109 }else if ( string == "fullInfos(QStringList)" ) { 109 }else if ( string == "fullInfos(QStringList)" ) {
110 stream >> lst; 110 stream >> lst;
111 for(QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) { 111 for(QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) {
112 owarn << "Adding fullInfo for"+ *it << oendl; 112 owarn << "Adding fullInfo for"+ *it << oendl;
113 inf.file = (*it); 113 inf.file = (*it);
114 inf.kind = true; 114 inf.kind = true;
115 m_inList.append(inf); 115 m_inList.append(inf);
116 } 116 }
117 }else if ( string == "pixmapInfo(QString,int,int)" ) { 117 }else if ( string == "pixmapInfo(QString,int,int)" ) {
118 stream >> pix.file >> pix.width >> pix.height; 118 stream >> pix.file >> pix.width >> pix.height;
119 m_inPix.append(pix); 119 m_inPix.append(pix);
120 }else if ( string == "pixmapInfos(PixmapInfos)" ) { 120 }else if ( string == "pixmapInfos(PixmapInfos)" ) {
121 PixmapList list; 121 PixmapList list;
122 stream >> list; 122 stream >> list;
123 for(PixmapList::Iterator it = list.begin(); it != list.end(); ++it ) { 123 for(PixmapList::Iterator it = list.begin(); it != list.end(); ++it ) {
124 owarn << "Got " << (*it).width << " " << (*it).height << " " + (*it).file << oendl; 124 owarn << "Got " << (*it).width << " " << (*it).height << " " + (*it).file << oendl;
125 m_inPix.append(*it); 125 m_inPix.append(*it);
126 } 126 }
127 }else if ( string == "refUp()" ) { 127 }else if ( string == "refUp()" ) {
128 m_refs++; 128 m_refs++;
129 }else if ( string == "refDown()" ) { 129 }else if ( string == "refDown()" ) {
130 m_refs--; 130 m_refs--;
131 } 131 }
132 132
133 if (!m_inf->isActive() && !m_inList.isEmpty() ) 133 if (!m_inf->isActive() && !m_inList.isEmpty() )
134 m_inf->start(5); 134 m_inf->start(5);
135 135
136 if (!m_pix->isActive() && !m_inPix.isEmpty() ) 136 if (!m_pix->isActive() && !m_inPix.isEmpty() )
137 m_pix->start(5); 137 m_pix->start(5);
138 138
139 if ( m_refs ) 139 if ( m_refs )
140 QPEApplication::setKeepRunning(); 140 QPEApplication::setKeepRunning();
141 else 141 else
142 qApp->quit(); 142 qApp->quit();
143 143
144} 144}
145 145
146PixmapList SlaveReciever::outPix()const { 146PixmapList SlaveReciever::outPix()const {
147 return m_outPix; 147 return m_outPix;
148} 148}
149 149
150StringList SlaveReciever::outInf()const{ 150StringList SlaveReciever::outInf()const{
151 return m_outList; 151 return m_outList;
152} 152}
153 153
154void SlaveReciever::slotImageInfo() { 154void SlaveReciever::slotImageInfo() {
155 ImageInfo inf = m_inList.first(); 155 ImageInfo inf = m_inList.first();
156 m_inList.remove( inf ); 156 m_inList.remove( inf );
157 157
158 static SlaveObjects::Iterator it; 158 static SlaveObjects::Iterator it;
159 static SlaveObjects* map = slaveObjects(); // SlaveMap won't be changed during execution!!! 159 static SlaveObjects* map = slaveObjects(); // SlaveMap won't be changed during execution!!!
160 for(it = map->begin(); it != map->end(); ++it ) { 160 for(it = map->begin(); it != map->end(); ++it ) {
161 if( (*it)->supports(inf.file ) ) { 161 if( (*it)->supports(inf.file ) ) {
162 /* full image info */ 162 /* full image info */
163 if (inf.kind ) 163 if (inf.kind )
164 inf.info = (*it)->fullImageInfo( inf.file ); 164 inf.info = (*it)->fullImageInfo( inf.file );
165 else 165 else
166 inf.info = (*it)->iconViewName( inf.file ); 166 inf.info = (*it)->iconViewName( inf.file );
167 m_outList.append( inf ); 167 m_outList.append( inf );
168 break; 168 break;
169 } 169 }
170 } 170 }
171 171
172 if (m_inList.isEmpty() ) 172 if (m_inList.isEmpty() )
173 m_inf->stop(); 173 m_inf->stop();
174 if (!m_out->isActive() && !m_outList.isEmpty() ) 174 if (!m_out->isActive() && !m_outList.isEmpty() )
175 m_out->start( 100 ); 175 m_out->start( 100 );
176} 176}
177 177
178void SlaveReciever::slotThumbNail() { 178void SlaveReciever::slotThumbNail() {
179 PixmapInfo inf = m_inPix.first(); 179 PixmapInfo inf = m_inPix.first();
180 m_inPix.remove( inf ); 180 m_inPix.remove( inf );
181 181
182 static SlaveObjects::Iterator it; 182 static SlaveObjects::Iterator it;
183 static SlaveObjects* map = slaveObjects(); // SlaveMap won't be changed during execution!!! 183 static SlaveObjects* map = slaveObjects(); // SlaveMap won't be changed during execution!!!
184 for(it = map->begin(); it != map->end(); ++it ) { 184 for(it = map->begin(); it != map->end(); ++it ) {
185 SlaveInterface* iface = it.data(); 185 SlaveInterface* iface = it.data();
186 if( iface->supports(inf.file ) ) { 186 if( iface->supports(inf.file ) ) {
187 /* pixmap */ 187 /* pixmap */
188 owarn << "Asking for thumbNail in size " << inf.width << " " << inf.height << " for "+inf.file << oendl; 188 owarn << "Asking for thumbNail in size " << inf.width << " " << inf.height << " for "+inf.file << oendl;
189 inf.pixmap = iface->pixmap(inf.file, 64, 64); 189 if (inf.width>256||inf.height>256) {
190 owarn << "Scaling thumbnail to 64x64 'cause " << inf.width<<"x"<<inf.height<<
191 " may be nonsense";
192 inf.pixmap = iface->pixmap(inf.file, 64, 64);
193 }else {
194 inf.pixmap = iface->pixmap(inf.file, inf.width, inf.height);
195 }
190 m_outPix.append( inf ); 196 m_outPix.append( inf );
191 break; 197 break;
192 } 198 }
193 } 199 }
194 200
195 201
196 202
197 if(m_inPix.isEmpty() ) 203 if(m_inPix.isEmpty() )
198 m_pix->stop(); 204 m_pix->stop();
199 if(!m_out->isActive() && !m_outPix.isEmpty() ) 205 if(!m_out->isActive() && !m_outPix.isEmpty() )
200 m_out->start(100); 206 m_out->start(100);
201} 207}
202 208
203void SlaveReciever::slotSend() { 209void SlaveReciever::slotSend() {
204 210
205 m_out->stop(); 211 m_out->stop();
206 212
207 owarn << "Sending " << outPix().count() << " " << outInf().count() << "" << oendl; 213 owarn << "Sending " << outPix().count() << " " << outInf().count() << "" << oendl;
208 /* queue it and send */ 214 /* queue it and send */
209 /* if this ever gets a service introduce request queues 215 /* if this ever gets a service introduce request queues
210 * so we can differinatate between different clients 216 * so we can differinatate between different clients
211 */ 217 */
212 if (! m_outPix.isEmpty() ) { 218 if (! m_outPix.isEmpty() ) {
213 QCopEnvelope answer("QPE/opie-eye", "pixmapsHandled(PixmapList)" ); 219 QCopEnvelope answer("QPE/opie-eye", "pixmapsHandled(PixmapList)" );
214 answer << outPix(); 220 answer << outPix();
215 for ( PixmapList::Iterator it = m_outPix.begin();it!=m_outPix.end();++it ) { 221 for ( PixmapList::Iterator it = m_outPix.begin();it!=m_outPix.end();++it ) {
216 owarn << "Sending out " << (*it).file.latin1() << " " << (*it).width << " " << (*it).height << "" << oendl; 222 owarn << "Sending out " << (*it).file.latin1() << " " << (*it).width << " " << (*it).height << "" << oendl;
217 } 223 }
218 } 224 }
219 if ( !m_outList.isEmpty() ) { 225 if ( !m_outList.isEmpty() ) {
220 QCopEnvelope answer("QPE/opie-eye", "pixmapsHandled(StringList)" ); 226 QCopEnvelope answer("QPE/opie-eye", "pixmapsHandled(StringList)" );
221 answer << outInf(); 227 answer << outInf();
222 for ( StringList::Iterator it = m_outList.begin();it!=m_outList.end();++it ) { 228 for ( StringList::Iterator it = m_outList.begin();it!=m_outList.end();++it ) {
223 owarn << "Sending out2 " + (*it).file << oendl; 229 owarn << "Sending out2 " + (*it).file << oendl;
224 } 230 }
225 } 231 }
226 232
227 m_outList.clear(); 233 m_outList.clear();
228 m_outPix.clear(); 234 m_outPix.clear();
229} 235}
230 236