summaryrefslogtreecommitdiff
path: root/core
authormickeyl <mickeyl>2005-08-23 20:37:03 (UTC)
committer mickeyl <mickeyl>2005-08-23 20:37:03 (UTC)
commit68c01ad5f6e7dc12192c9ce77f0a2ee48b813831 (patch) (unidiff)
tree054dd974156c8e49400979eb9b226bb7bd32fd31 /core
parent95210ac41729a4c264e830963cdae3a4cdd218fb (diff)
downloadopie-68c01ad5f6e7dc12192c9ce77f0a2ee48b813831.zip
opie-68c01ad5f6e7dc12192c9ce77f0a2ee48b813831.tar.gz
opie-68c01ad5f6e7dc12192c9ce77f0a2ee48b813831.tar.bz2
- fix SIGSEGV when trying to send but IrDA is not enabled
- rename 'scan' button to 'rescan' - disable 'send' button if IrDA and BT is both disabled
Diffstat (limited to 'core') (more/less context) (show whitespace changes)
-rw-r--r--core/obex/obexsend.cpp41
-rw-r--r--core/obex/obexsendbase.ui8
2 files changed, 27 insertions, 22 deletions
diff --git a/core/obex/obexsend.cpp b/core/obex/obexsend.cpp
index a80a48b..9cd9972 100644
--- a/core/obex/obexsend.cpp
+++ b/core/obex/obexsend.cpp
@@ -1,43 +1,44 @@
1// 7-Jul-2005 mbh@sdgsystems.com: replace hand coded form with one 1// 7-Jul-2005 mbh@sdgsystems.com: replace hand coded form with one
2// generated via QT2 Designer. The new form supports 2// generated via QT2 Designer. The new form supports
3// selection of target devices, as opposed to sending to 3// selection of target devices, as opposed to sending to
4// all. 4// all.
5 5
6#include "obex.h" 6#include "obex.h"
7#include "btobex.h" 7#include "btobex.h"
8#include "obexsend.h" 8#include "obexsend.h"
9using namespace OpieObex; 9using namespace OpieObex;
10 10
11/* OPIE */ 11/* OPIE */
12#include <opie2/odebug.h> 12#include <opie2/odebug.h>
13#include <qpe/qcopenvelope_qws.h> 13#include <qpe/qcopenvelope_qws.h>
14#include <qpe/resource.h> 14#include <qpe/resource.h>
15 15
16using namespace Opie::Core; 16using namespace Opie::Core;
17 17
18/* QT */ 18/* QT */
19#include <qlabel.h> 19#include <qlabel.h>
20#include <qpushbutton.h>
20#include <qpixmap.h> 21#include <qpixmap.h>
21#include <qlistview.h> 22#include <qlistview.h>
22#include <qtimer.h> 23#include <qtimer.h>
23 24
24/* TRANSLATOR OpieObex::SendWidget */ 25/* TRANSLATOR OpieObex::SendWidget */
25 26
26SendWidget::SendWidget( QWidget* parent, const char* name ) 27SendWidget::SendWidget( QWidget* parent, const char* name )
27 : obexSendBase( parent, name ) { 28 : obexSendBase( parent, name ) {
28 initUI(); 29 initUI();
29} 30}
30SendWidget::~SendWidget() { 31SendWidget::~SendWidget() {
31} 32}
32void SendWidget::initUI() { 33void SendWidget::initUI() {
33 m_obex = new Obex(this, "obex"); 34 m_obex = new Obex(this, "obex");
34 connect(m_obex, SIGNAL(error(int) ), 35 connect(m_obex, SIGNAL(error(int) ),
35 this, SLOT(slotIrError(int) ) ); 36 this, SLOT(slotIrError(int) ) );
36 connect(m_obex, SIGNAL(sent(bool) ), 37 connect(m_obex, SIGNAL(sent(bool) ),
37 this, SLOT(slotIrSent(bool) ) ); 38 this, SLOT(slotIrSent(bool) ) );
38 connect(m_obex, SIGNAL(currentTry(unsigned int) ), 39 connect(m_obex, SIGNAL(currentTry(unsigned int) ),
39 this, SLOT(slotIrTry(unsigned int) ) ); 40 this, SLOT(slotIrTry(unsigned int) ) );
40 41
41 QCopChannel* chan = new QCopChannel("QPE/IrDaAppletBack", this ); 42 QCopChannel* chan = new QCopChannel("QPE/IrDaAppletBack", this );
42 connect(chan, SIGNAL(received(const QCString&,const QByteArray&) ), 43 connect(chan, SIGNAL(received(const QCString&,const QByteArray&) ),
43 this, SLOT(dispatchIrda(const QCString&,const QByteArray&) ) ); 44 this, SLOT(dispatchIrda(const QCString&,const QByteArray&) ) );
@@ -117,118 +118,122 @@ void SendWidget::slotSelectedDevice( int, int ) {
117 QCopEnvelope e2("QPE/IrDaApplet", "listDevices()"); 118 QCopEnvelope e2("QPE/IrDaApplet", "listDevices()");
118 }*/ 119 }*/
119} 120}
120void SendWidget::dispatchIrda( const QCString& str, const QByteArray& ar ) { 121void SendWidget::dispatchIrda( const QCString& str, const QByteArray& ar ) {
121 if ( str == "devices(QStringList)" ) { 122 if ( str == "devices(QStringList)" ) {
122 QDataStream stream( ar, IO_ReadOnly ); 123 QDataStream stream( ar, IO_ReadOnly );
123 QStringList list; 124 QStringList list;
124 stream >> list; 125 stream >> list;
125 slotIrDaDevices( list ); 126 slotIrDaDevices( list );
126 } 127 }
127} 128}
128void SendWidget::slotIrError( int ) { 129void SendWidget::slotIrError( int ) {
129 irdaStatus->setText(tr("error :(")); 130 irdaStatus->setText(tr("error :("));
130} 131}
131void SendWidget::slotIrSent( bool b) { 132void SendWidget::slotIrSent( bool b) {
132 QString text = b ? tr("Sent") : tr("Failure"); 133 QString text = b ? tr("Sent") : tr("Failure");
133 setReceiverStatus( m_irDaIt.key(), text ); 134 setReceiverStatus( m_irDaIt.key(), text );
134 ++m_irDaIt; 135 ++m_irDaIt;
135 slotStartIrda(); 136 slotStartIrda();
136} 137}
137void SendWidget::slotIrTry(unsigned int trI) { 138void SendWidget::slotIrTry(unsigned int trI) {
138 setReceiverStatus(m_irDaIt.key(), tr("Try %1").arg( QString::number( trI ) )); 139 setReceiverStatus(m_irDaIt.key(), tr("Try %1").arg( QString::number( trI ) ));
139} 140}
140void SendWidget::slotStartIrda() { 141void SendWidget::slotStartIrda() {
142 if ( !m_irDa.count() ) return;
141 if (m_irDaIt == m_irDa.end() ) { 143 if (m_irDaIt == m_irDa.end() ) {
142 irdaStatus->setText(tr("complete.")); 144 irdaStatus->setText(tr("complete."));
143 return; 145 return;
144 } 146 }
145 setReceiverStatus( m_irDaIt.key(), tr("Start sending") ); 147 setReceiverStatus( m_irDaIt.key(), tr("Start sending") );
146 m_obex->send( m_file ); 148 m_obex->send( m_file );
147} 149}
148 150
149void SendWidget::dispatchBt( const QCString& str, const QByteArray& ar ) { 151void SendWidget::dispatchBt( const QCString& str, const QByteArray& ar ) {
150 if ( str == "devices(QStringMap)" ) { 152 if ( str == "devices(QStringMap)" ) {
151 QDataStream stream( ar, IO_ReadOnly ); 153 QDataStream stream( ar, IO_ReadOnly );
152 QMap<QString, QString> btmap; 154 QMap<QString, QString> btmap;
153 stream >> btmap; 155 stream >> btmap;
154 slotBTDevices( btmap ); 156 slotBTDevices( btmap );
155 } 157 }
156} 158}
157void SendWidget::slotBtError( int ) { 159void SendWidget::slotBtError( int ) {
158 btStatus->setText(tr("error :(")); 160 btStatus->setText(tr("error :("));
159} 161}
160void SendWidget::slotBtSent( bool b) { 162void SendWidget::slotBtSent( bool b) {
161 QString text = b ? tr("Sent") : tr("Failure"); 163 QString text = b ? tr("Sent") : tr("Failure");
162 setReceiverStatus( m_btIt.key(), text ); 164 setReceiverStatus( m_btIt.key(), text );
163 ++m_btIt; 165 ++m_btIt;
164 slotStartBt(); 166 slotStartBt();
165} 167}
166void SendWidget::slotBtTry(unsigned int trI) { 168void SendWidget::slotBtTry(unsigned int trI) {
167 setReceiverStatus( m_btIt.key(), tr("Try %1").arg( QString::number( trI ) ) ); 169 setReceiverStatus( m_btIt.key(), tr("Try %1").arg( QString::number( trI ) ) );
168} 170}
169void SendWidget::slotStartBt() { 171void SendWidget::slotStartBt() {
170 // skip past unselected receivers 172 // skip past unselected receivers
171 while((m_btIt != m_bt.end()) && !receiverSelected(m_btIt.key())) 173 while((m_btIt != m_bt.end()) && !receiverSelected(m_btIt.key()))
172 ++m_btIt; 174 ++m_btIt;
173 if (m_btIt == m_bt.end() ) { 175 if (m_btIt == m_bt.end() ) {
174 btStatus->setText(tr("complete.")); 176 btStatus->setText(tr("complete."));
175 return; 177 return;
176 } 178 }
177 setReceiverStatus( m_btIt.key(), tr("Start sending") ); 179 setReceiverStatus( m_btIt.key(), tr("Start sending") );
178 m_btobex->send( m_file, m_btIt.data().second() ); 180 m_btobex->send( m_file, m_btIt.data().second() );
179} 181}
180 182
181void SendWidget::send_to_receivers() { 183void SendWidget::send_to_receivers() {
182 slotStartIrda(); 184 slotStartIrda();
183 slotStartBt(); 185 slotStartBt();
184} 186}
185 187
186void SendWidget::scan_for_receivers() { 188void SendWidget::scan_for_receivers()
187 189{
188 bool enable_irda=false; 190 //FIXME: Clean ListBox prior to (re)scan
189 bool enable_bt=false; 191 sendButton->setDisabled( true );
190 192
191 if ( !QCopChannel::isRegistered("QPE/IrDaApplet") ) { 193 if ( !QCopChannel::isRegistered("QPE/IrDaApplet") )
194 {
192 irdaStatus->setText(tr("not enabled.")); 195 irdaStatus->setText(tr("not enabled."));
193 enable_irda=true; 196 }
194 } else 197 else
198 {
199 QCopEnvelope e1("QPE/IrDaApplet", "enableIrda()");
195 irdaStatus->setText(tr("searching...")); 200 irdaStatus->setText(tr("searching..."));
201 sendButton->setEnabled( true );
202 QCopEnvelope e2("QPE/IrDaApplet", "listDevices()");
203 }
196 204
197 if ( !QCopChannel::isRegistered("QPE/Bluetooth") ) { 205 if ( !QCopChannel::isRegistered("QPE/Bluetooth") )
206 {
198 btStatus->setText(tr("not enabled.")); 207 btStatus->setText(tr("not enabled."));
199 enable_bt=true; 208 }
200 } else 209 else
201 btStatus->setText(tr("searching...")); 210 {
202
203 if (enable_irda)
204 QCopEnvelope e0("QPE/IrDaApplet", "enableIrda()");
205 if (enable_bt)
206 QCopEnvelope e1("QPE/Bluetooth", "enableBluetooth()"); 211 QCopEnvelope e1("QPE/Bluetooth", "enableBluetooth()");
207 212 btStatus->setText(tr("searching..."));
208 QCopEnvelope e2("QPE/IrDaApplet", "listDevices()"); 213 sendButton->setEnabled( true );
209 QCopEnvelope e3("QPE/Bluetooth", "listDevices()"); 214 QCopEnvelope e3("QPE/Bluetooth", "listDevices()");
210 215 }
211} 216}
212 217
213void SendWidget::toggle_receiver(QListViewItem* item) 218void SendWidget::toggle_receiver(QListViewItem* item)
214{ 219{
215 // toggle the state of an individual receiver. 220 // toggle the state of an individual receiver.
216 if(item->pixmap(2)) 221 if(item->pixmap(2))
217 item->setPixmap(2,QPixmap()); 222 item->setPixmap(2,QPixmap());
218 else 223 else
219 item->setPixmap(2,Resource::loadPixmap("backup/check.png")); 224 item->setPixmap(2,Resource::loadPixmap("backup/check.png"));
220} 225}
221 226
222 227
223void SendWidget::closeEvent( QCloseEvent* e) { 228void SendWidget::closeEvent( QCloseEvent* e) {
224 e->accept(); // make sure 229 e->accept(); // make sure
225 QTimer::singleShot(0, this, SLOT(userDone() ) ); 230 QTimer::singleShot(0, this, SLOT(userDone() ) );
226} 231}
227void SendWidget::userDone() { 232void SendWidget::userDone() {
228 QCopEnvelope e0("QPE/IrDaApplet", "disableIrda()"); 233 QCopEnvelope e0("QPE/IrDaApplet", "disableIrda()");
229 QCopEnvelope e1("QPE/Bluetooth", "disableBluetooth()"); 234 QCopEnvelope e1("QPE/Bluetooth", "disableBluetooth()");
230 emit done(); 235 emit done();
231} 236}
232QString SendWidget::file()const { 237QString SendWidget::file()const {
233 return m_file; 238 return m_file;
234} 239}
diff --git a/core/obex/obexsendbase.ui b/core/obex/obexsendbase.ui
index a192dd3..4619842 100644
--- a/core/obex/obexsendbase.ui
+++ b/core/obex/obexsendbase.ui
@@ -1,43 +1,43 @@
1<!DOCTYPE UI><UI> 1<!DOCTYPE UI><UI>
2<class>obexSendBase</class> 2<class>obexSendBase</class>
3<comment>Manage send via OBEX over both IrDA and Bluetooth 3<comment>Manage send via OBEX over both IrDA and Bluetooth
4The form provides status information, and method 4The form provides status information, and method
5for selecting destination hosts.</comment> 5for selecting destination hosts.</comment>
6<author>Michael Haynie &lt;mbh@sdgsystems.com&gt;</author> 6<author>Michael Haynie &lt;mbh@sdgsystems.com&gt;</author>
7<include location="global">qlistview.h</include> 7<include location="global">qlistview.h</include>
8<widget> 8<widget>
9 <class>QWidget</class> 9 <class>QWidget</class>
10 <property stdset="1"> 10 <property stdset="1">
11 <name>name</name> 11 <name>name</name>
12 <cstring>obexSendBase</cstring> 12 <cstring>obexSendBase</cstring>
13 </property> 13 </property>
14 <property stdset="1"> 14 <property stdset="1">
15 <name>geometry</name> 15 <name>geometry</name>
16 <rect> 16 <rect>
17 <x>0</x> 17 <x>0</x>
18 <y>0</y> 18 <y>0</y>
19 <width>363</width> 19 <width>359</width>
20 <height>221</height> 20 <height>221</height>
21 </rect> 21 </rect>
22 </property> 22 </property>
23 <property stdset="1"> 23 <property stdset="1">
24 <name>caption</name> 24 <name>caption</name>
25 <string>Send via OBEX</string> 25 <string>Send via OBEX</string>
26 </property> 26 </property>
27 <vbox> 27 <vbox>
28 <property stdset="1"> 28 <property stdset="1">
29 <name>margin</name> 29 <name>margin</name>
30 <number>11</number> 30 <number>11</number>
31 </property> 31 </property>
32 <property stdset="1"> 32 <property stdset="1">
33 <name>spacing</name> 33 <name>spacing</name>
34 <number>6</number> 34 <number>6</number>
35 </property> 35 </property>
36 <widget> 36 <widget>
37 <class>QLayoutWidget</class> 37 <class>QLayoutWidget</class>
38 <property stdset="1"> 38 <property stdset="1">
39 <name>name</name> 39 <name>name</name>
40 <cstring>Layout1</cstring> 40 <cstring>Layout1</cstring>
41 </property> 41 </property>
42 <hbox> 42 <hbox>
43 <property stdset="1"> 43 <property stdset="1">
@@ -276,71 +276,71 @@ for selecting destination hosts.</comment>
276 <property stdset="1"> 276 <property stdset="1">
277 <name>orientation</name> 277 <name>orientation</name>
278 <enum>Horizontal</enum> 278 <enum>Horizontal</enum>
279 </property> 279 </property>
280 <property stdset="1"> 280 <property stdset="1">
281 <name>sizeType</name> 281 <name>sizeType</name>
282 <enum>Expanding</enum> 282 <enum>Expanding</enum>
283 </property> 283 </property>
284 <property> 284 <property>
285 <name>sizeHint</name> 285 <name>sizeHint</name>
286 <size> 286 <size>
287 <width>20</width> 287 <width>20</width>
288 <height>20</height> 288 <height>20</height>
289 </size> 289 </size>
290 </property> 290 </property>
291 </spacer> 291 </spacer>
292 <widget> 292 <widget>
293 <class>QPushButton</class> 293 <class>QPushButton</class>
294 <property stdset="1"> 294 <property stdset="1">
295 <name>name</name> 295 <name>name</name>
296 <cstring>scanButton</cstring> 296 <cstring>scanButton</cstring>
297 </property> 297 </property>
298 <property stdset="1"> 298 <property stdset="1">
299 <name>text</name> 299 <name>text</name>
300 <string>Scan</string> 300 <string>&amp;Rescan</string>
301 </property> 301 </property>
302 </widget> 302 </widget>
303 <widget> 303 <widget>
304 <class>QPushButton</class> 304 <class>QPushButton</class>
305 <property stdset="1"> 305 <property stdset="1">
306 <name>name</name> 306 <name>name</name>
307 <cstring>sendButton</cstring> 307 <cstring>sendButton</cstring>
308 </property> 308 </property>
309 <property stdset="1"> 309 <property stdset="1">
310 <name>text</name> 310 <name>text</name>
311 <string>Send</string> 311 <string>&amp;Send</string>
312 </property> 312 </property>
313 </widget> 313 </widget>
314 <widget> 314 <widget>
315 <class>QPushButton</class> 315 <class>QPushButton</class>
316 <property stdset="1"> 316 <property stdset="1">
317 <name>name</name> 317 <name>name</name>
318 <cstring>doneButton</cstring> 318 <cstring>doneButton</cstring>
319 </property> 319 </property>
320 <property stdset="1"> 320 <property stdset="1">
321 <name>text</name> 321 <name>text</name>
322 <string>Done</string> 322 <string>&amp;Close</string>
323 </property> 323 </property>
324 </widget> 324 </widget>
325 </hbox> 325 </hbox>
326 </widget> 326 </widget>
327 </vbox> 327 </vbox>
328</widget> 328</widget>
329<images> 329<images>
330 <image> 330 <image>
331 <name>image0</name> 331 <name>image0</name>
332 <data format="XPM.GZ" length="356">789c5d8f410a02310c45f73d456876453a0aeec423282e05719156075d8c82332e44bcbb4d52eb4c435bf25ffe6f69e360bfdb806b4c3fd0708d102ff400777a76ddeb705cbf8d5d2c21ad74d899b11e226cefb733f721f5389762492c6391c8b26d7fd24f2a13a49a7844ac88f79499120d118eef1126a8a4248393141b789794e23f91a952212148afa64c823acaeb42ea5f8cc86765bebe81454c</data> 332 <data format="XPM.GZ" length="356">789c5d8f410a02310c45f73d456876453a0aeec423282e05719156075d8c82332e44bcbb4d52eb4c435bf25ffe6f69e360bfdb806b4c3fd0708d102ff400777a76ddeb705cbf8d5d2c21ad74d899b11e226cefb733f721f5389762492c6391c8b26d7fd24f2a13a49a7844ac88f79499120d118eef1126a8a4248393141b789794e23f91a952212148afa64c823acaeb42ea5f8cc86765bebe81454c</data>
333 </image> 333 </image>
334 <image> 334 <image>
335 <name>image1</name> 335 <name>image1</name>
336 <data format="XPM.GZ" length="2334">789c9dd5596f1b390c00e0f7fc0a237c0b0a7634a363068b3ee4be9da467da451f6674c44ee238877316fdef2b93f4a02db258606de4e10365511425e5edcae0f4f870b0f276e96ed6cec67ee047eded6025dc4f26cf7f7f7ff7636959e981aa07aa708372f9cdd2f2c96ce007c3e9559c03eb0c28e83337ccc4aaa0c1b0df5b9337c4baf0e423b1291279280e258f3f14a7b2251fb095aa38dfb9d85681bc27f686f3dfb14be778fc7a6f8ae3963838ceefd95555b377c5b669c86be2baadc89be2b635e455b16fb9bedbdebc3e1087d6517edd9be71f89a38cbf59b8a3f5a313a74e9187bd693df899ad8b8eeb7f11971dcd8fa637ed277e12575d47e3dbde9c7f6b61cff9bf887547fd87c7853df76b476cbc254fc4d673bdd23f5d7bce2ffdd58de7f9c60b07aa0f1ec46da0f9d08a3bf1a9d8879ac66ff7e6fdec7af3f9b9ec4df5a2f453c740fd46399f3a45de5f392fa688541f4abf4d1979fe6bb2cafde2f9beb2b5eab8de477190fcf7e218b8de0b769e9ffb37162bc927f39b9c803c12dbc4e7b7ebcdbf6fc86536afffac379f874836793dfc7beeb731b5cc5792ad6964be6f64675a897fe8cd7145ee4c10f3f90e2689df93a32d12d7f334b72a4c8abcdf05db2a999fde0355da4ac6533f95b65aeaa1fb99cbad229d4facc8d6941ddd37dc17b781f79fee8f7256478ed37ba16a6bc4811c6c13b91fcfe4681a3ebf48ef4959d890d827e4d226f14772654de0f5d0efe7db2df51d93ad2b793c50fd65639d9cd7200e520f9d87b2758b7ae9fd283b67647fe87ee5d7ca257a6f90dea74abb90f87ed3f9ae8c8b89eba7fb5fb9ba48940fe97dae52ad793c4ce7d6b5b39ee3f45eeaa66e653c9d17edeb5af24d7b733d74be74748de738dd579df2ef293f5ccd6d8adaca7d496217f9beb0eba690f148f6d95c3fdd17131a23eba1f7c4c4def4dedaae0962ca97e8c3ffacfefdfb7b1c015bec5e8fa3c78011139ee108c77fc6f11c2ff01227788553ecf2f7fad738dee02ddee10cef73fc0a1f727c848f8b383ee133be506435ffade5bf75dcc04ddc92f836eee02eeed188f9771f0ff0308f1b4afc088ff104dfe3078a7ec44ff819bfe0297e95f8372c5061d9ffbe428d062d3ae4fd1a6193579423809c1f005ae8c0f7ebcf1541800889469dc128c7c770be88c3458e5fc204e6d1295cc30ddcc21dfcb23f700f0ff0084ff00c2fb00a6bb00e1bbfef2f6cc216aec136ecc02eecc1fe6bfd81033884211c61fd7afffeabbfff23fef3afa57f00b9561583</data> 336 <data format="XPM.GZ" length="2334">789c9dd5596f1b390c00e0f7fc0a237c0b0a7634a363068b3ee4be9da467da451f6674c44ee238877316fdef2b93f4a02db258606de4e10365511425e5edcae0f4f870b0f276e96ed6cec67ee047eded6025dc4f26cf7f7f7ff7636959e981aa07aa708372f9cdd2f2c96ce007c3e9559c03eb0c28e83337ccc4aaa0c1b0df5b9337c4baf0e423b1291279280e258f3f14a7b2251fb095aa38dfb9d85681bc27f686f3dfb14be778fc7a6f8ae3963838ceefd95555b377c5b669c86be2baadc89be2b635e455b16fb9bedbdebc3e1087d6517edd9be71f89a38cbf59b8a3f5a313a74e9187bd693df899ad8b8eeb7f11971dcd8fa637ed277e12575d47e3dbde9c7f6b61cff9bf887547fd87c7853df76b476cbc254fc4d673bdd23f5d7bce2ffdd58de7f9c60b07aa0f1ec46da0f9d08a3bf1a9d8879ac66ff7e6fdec7af3f9b9ec4df5a2f453c740fd46399f3a45de5f392fa688541f4abf4d1979fe6bb2cafde2f9beb2b5eab8de477190fcf7e218b8de0b769e9ffb37162bc927f39b9c803c12dbc4e7b7ebcdbf6fc86536afffac379f874836793dfc7beeb731b5cc5792ad6964be6f64675a897fe8cd7145ee4c10f3f90e2689df93a32d12d7f334b72a4c8abcdf05db2a999fde0355da4ac6533f95b65aeaa1fb99cbad229d4facc8d6941ddd37dc17b781f79fee8f7256478ed37ba16a6bc4811c6c13b91fcfe4681a3ebf48ef4959d890d827e4d226f14772654de0f5d0efe7db2df51d93ad2b793c50fd65639d9cd7200e520f9d87b2758b7ae9fd283b67647fe87ee5d7ca257a6f90dea74abb90f87ed3f9ae8c8b89eba7fb5fb9ba48940fe97dae52ad793c4ce7d6b5b39ee3f45eeaa66e653c9d17edeb5af24d7b733d74be74748de738dd579df2ef293f5ccd6d8adaca7d496217f9beb0eba690f148f6d95c3fdd17131a23eba1f7c4c4def4dedaae0962ca97e8c3ffacfefdfb7b1c015bec5e8fa3c78011139ee108c77fc6f11c2ff01227788553ecf2f7fad738dee02ddee10cef73fc0a1f727c848f8b383ee133be506435ffade5bf75dcc04ddc92f836eee02eeed188f9771f0ff0308f1b4afc088ff104dfe3078a7ec44ff819bfe0297e95f8372c5061d9ffbe428d062d3ae4fd1a6193579423809c1f005ae8c0f7ebcf1541800889469dc128c7c770be88c3458e5fc204e6d1295cc30ddcc21dfcb23f700f0ff0084ff00c2fb00a6bb00e1bbfef2f6cc216aec136ecc02eecc1fe6bfd81033884211c61fd7afffeabbfff23fef3afa57f00b9561583</data>
337 </image> 337 </image>
338</images> 338</images>
339<connections> 339<connections>
340 <connection> 340 <connection>
341 <sender>scanButton</sender> 341 <sender>scanButton</sender>
342 <signal>clicked()</signal> 342 <signal>clicked()</signal>
343 <receiver>obexSendBase</receiver> 343 <receiver>obexSendBase</receiver>
344 <slot>scan_for_receivers()</slot> 344 <slot>scan_for_receivers()</slot>
345 </connection> 345 </connection>
346 <connection> 346 <connection>