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