summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/net/wellenreiter/gui/configbase.ui30
-rw-r--r--noncore/net/wellenreiter/gui/configwindow.cpp24
-rw-r--r--noncore/net/wellenreiter/gui/configwindow.h5
-rw-r--r--noncore/net/wellenreiter/gui/manufacturers.h1
-rw-r--r--noncore/net/wellenreiter/gui/wellenreiter.cpp51
5 files changed, 68 insertions, 43 deletions
diff --git a/noncore/net/wellenreiter/gui/configbase.ui b/noncore/net/wellenreiter/gui/configbase.ui
index 8dcf513..7992e6b 100644
--- a/noncore/net/wellenreiter/gui/configbase.ui
+++ b/noncore/net/wellenreiter/gui/configbase.ui
@@ -1,38 +1,38 @@
1<!DOCTYPE UI><UI> 1<!DOCTYPE UI><UI>
2<class>WellenreiterConfigBase</class> 2<class>WellenreiterConfigBase</class>
3<widget> 3<widget>
4 <class>QWidget</class> 4 <class>QWidget</class>
5 <property stdset="1"> 5 <property stdset="1">
6 <name>name</name> 6 <name>name</name>
7 <cstring>WellenreiterConfigBase</cstring> 7 <cstring>WellenreiterConfigBase</cstring>
8 </property> 8 </property>
9 <property stdset="1"> 9 <property stdset="1">
10 <name>geometry</name> 10 <name>geometry</name>
11 <rect> 11 <rect>
12 <x>0</x> 12 <x>0</x>
13 <y>0</y> 13 <y>0</y>
14 <width>228</width> 14 <width>224</width>
15 <height>267</height> 15 <height>267</height>
16 </rect> 16 </rect>
17 </property> 17 </property>
18 <property stdset="1"> 18 <property stdset="1">
19 <name>caption</name> 19 <name>caption</name>
20 <string>Form1</string> 20 <string>Form1</string>
21 </property> 21 </property>
22 <property> 22 <property>
23 <name>layoutMargin</name> 23 <name>layoutMargin</name>
24 </property> 24 </property>
25 <property> 25 <property>
26 <name>layoutSpacing</name> 26 <name>layoutSpacing</name>
27 </property> 27 </property>
28 <vbox> 28 <vbox>
29 <property stdset="1"> 29 <property stdset="1">
30 <name>margin</name> 30 <name>margin</name>
31 <number>4</number> 31 <number>4</number>
32 </property> 32 </property>
33 <property stdset="1"> 33 <property stdset="1">
34 <name>spacing</name> 34 <name>spacing</name>
35 <number>1</number> 35 <number>1</number>
36 </property> 36 </property>
37 <widget> 37 <widget>
38 <class>QLayoutWidget</class> 38 <class>QLayoutWidget</class>
@@ -132,140 +132,164 @@
132 <name>text</name> 132 <name>text</name>
133 <string>wlan1</string> 133 <string>wlan1</string>
134 </property> 134 </property>
135 </item> 135 </item>
136 <item> 136 <item>
137 <property> 137 <property>
138 <name>text</name> 138 <name>text</name>
139 <string>wifi0</string> 139 <string>wifi0</string>
140 </property> 140 </property>
141 </item> 141 </item>
142 <item> 142 <item>
143 <property> 143 <property>
144 <name>text</name> 144 <name>text</name>
145 <string>wifi1</string> 145 <string>wifi1</string>
146 </property> 146 </property>
147 </item> 147 </item>
148 <property stdset="1"> 148 <property stdset="1">
149 <name>name</name> 149 <name>name</name>
150 <cstring>interfaceName</cstring> 150 <cstring>interfaceName</cstring>
151 </property> 151 </property>
152 <property stdset="1"> 152 <property stdset="1">
153 <name>enabled</name> 153 <name>enabled</name>
154 <bool>true</bool> 154 <bool>true</bool>
155 </property> 155 </property>
156 <property>
157 <name>whatsThis</name>
158 <string>Choose the interface used for sniffing.</string>
159 </property>
156 </widget> 160 </widget>
157 <widget row="4" column="0" rowspan="1" colspan="2" > 161 <widget row="4" column="0" rowspan="1" colspan="2" >
158 <class>QCheckBox</class> 162 <class>QCheckBox</class>
159 <property stdset="1"> 163 <property stdset="1">
160 <name>name</name> 164 <name>name</name>
161 <cstring>activeScanning</cstring> 165 <cstring>activeScanning</cstring>
162 </property> 166 </property>
163 <property stdset="1"> 167 <property stdset="1">
164 <name>enabled</name> 168 <name>enabled</name>
165 <bool>false</bool> 169 <bool>false</bool>
166 </property> 170 </property>
167 <property stdset="1"> 171 <property stdset="1">
168 <name>text</name> 172 <name>text</name>
169 <string>Active Scanning (caution!)</string> 173 <string>Active Scanning (caution!)</string>
170 </property> 174 </property>
171 </widget> 175 </widget>
172 <widget row="1" column="0" > 176 <widget row="1" column="0" >
173 <class>QComboBox</class> 177 <class>QComboBox</class>
174 <item> 178 <item>
175 <property> 179 <property>
176 <name>text</name> 180 <name>text</name>
177 <string>&lt;select&gt;</string> 181 <string>&lt;select&gt;</string>
178 </property> 182 </property>
179 </item> 183 </item>
180 <item> 184 <item>
181 <property> 185 <property>
182 <name>text</name> 186 <name>text</name>
183 <string>orinoco</string> 187 <string>cisco</string>
188 </property>
189 </item>
190 <item>
191 <property>
192 <name>text</name>
193 <string>wlan-ng</string>
194 </property>
195 </item>
196 <item>
197 <property>
198 <name>text</name>
199 <string>hostap</string>
184 </property> 200 </property>
185 </item> 201 </item>
186 <item> 202 <item>
187 <property> 203 <property>
188 <name>text</name> 204 <name>text</name>
189 <string>prism</string> 205 <string>orinoco</string>
190 </property> 206 </property>
191 </item> 207 </item>
192 <item> 208 <item>
193 <property> 209 <property>
194 <name>text</name> 210 <name>text</name>
195 <string>&lt;manual&gt;</string> 211 <string>&lt;manual&gt;</string>
196 </property> 212 </property>
197 </item> 213 </item>
198 <property stdset="1"> 214 <property stdset="1">
199 <name>name</name> 215 <name>name</name>
200 <cstring>deviceType</cstring> 216 <cstring>deviceType</cstring>
201 </property> 217 </property>
202 <property stdset="1"> 218 <property stdset="1">
203 <name>enabled</name> 219 <name>enabled</name>
204 <bool>true</bool> 220 <bool>true</bool>
205 </property> 221 </property>
222 <property>
223 <name>whatsThis</name>
224 <string>Choose the type of driver used for sniffing.</string>
225 </property>
206 </widget> 226 </widget>
207 <widget row="3" column="0" rowspan="1" colspan="2" > 227 <widget row="3" column="0" rowspan="1" colspan="2" >
208 <class>QCheckBox</class> 228 <class>QCheckBox</class>
209 <property stdset="1"> 229 <property stdset="1">
210 <name>name</name> 230 <name>name</name>
211 <cstring>additionalInfo</cstring> 231 <cstring>additionalInfo</cstring>
212 </property> 232 </property>
213 <property stdset="1"> 233 <property stdset="1">
214 <name>enabled</name> 234 <name>enabled</name>
215 <bool>false</bool> 235 <bool>false</bool>
216 </property> 236 </property>
217 <property stdset="1"> 237 <property stdset="1">
218 <name>text</name> 238 <name>text</name>
219 <string>Gather Additional Info</string> 239 <string>Gather Additional Info</string>
220 </property> 240 </property>
221 </widget> 241 </widget>
222 <widget row="2" column="0" > 242 <widget row="2" column="0" >
223 <class>QSpinBox</class> 243 <class>QSpinBox</class>
224 <property stdset="1"> 244 <property stdset="1">
225 <name>name</name> 245 <name>name</name>
226 <cstring>hopInterval</cstring> 246 <cstring>hopInterval</cstring>
227 </property> 247 </property>
228 <property stdset="1"> 248 <property stdset="1">
229 <name>enabled</name> 249 <name>enabled</name>
230 <bool>true</bool> 250 <bool>true</bool>
231 </property> 251 </property>
232 <property stdset="1"> 252 <property stdset="1">
233 <name>suffix</name> 253 <name>suffix</name>
234 <string> ms</string> 254 <string> ms</string>
235 </property> 255 </property>
236 <property stdset="1"> 256 <property stdset="1">
237 <name>maxValue</name> 257 <name>maxValue</name>
238 <number>2000</number> 258 <number>2000</number>
239 </property> 259 </property>
240 <property stdset="1"> 260 <property stdset="1">
241 <name>minValue</name> 261 <name>minValue</name>
242 <number>100</number> 262 <number>100</number>
243 </property> 263 </property>
244 <property stdset="1"> 264 <property stdset="1">
245 <name>lineStep</name> 265 <name>lineStep</name>
246 <number>100</number> 266 <number>100</number>
247 </property> 267 </property>
268 <property>
269 <name>whatsThis</name>
270 <string>Choose the channel hop interval.</string>
271 </property>
248 </widget> 272 </widget>
249 <widget row="2" column="1" > 273 <widget row="2" column="1" >
250 <class>QLabel</class> 274 <class>QLabel</class>
251 <property stdset="1"> 275 <property stdset="1">
252 <name>name</name> 276 <name>name</name>
253 <cstring>TextLabel3_3</cstring> 277 <cstring>TextLabel3_3</cstring>
254 </property> 278 </property>
255 <property stdset="1"> 279 <property stdset="1">
256 <name>enabled</name> 280 <name>enabled</name>
257 <bool>true</bool> 281 <bool>true</bool>
258 </property> 282 </property>
259 <property stdset="1"> 283 <property stdset="1">
260 <name>text</name> 284 <name>text</name>
261 <string>Hop Interval</string> 285 <string>Hop Interval</string>
262 </property> 286 </property>
263 </widget> 287 </widget>
264 <widget row="1" column="1" > 288 <widget row="1" column="1" >
265 <class>QLabel</class> 289 <class>QLabel</class>
266 <property stdset="1"> 290 <property stdset="1">
267 <name>name</name> 291 <name>name</name>
268 <cstring>TextLabel2_3</cstring> 292 <cstring>TextLabel2_3</cstring>
269 </property> 293 </property>
270 <property stdset="1"> 294 <property stdset="1">
271 <name>enabled</name> 295 <name>enabled</name>
diff --git a/noncore/net/wellenreiter/gui/configwindow.cpp b/noncore/net/wellenreiter/gui/configwindow.cpp
index 04e3457..515d9b2 100644
--- a/noncore/net/wellenreiter/gui/configwindow.cpp
+++ b/noncore/net/wellenreiter/gui/configwindow.cpp
@@ -1,23 +1,47 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. 2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved.
3** 3**
4** This file is part of Opie Environment. 4** This file is part of Opie Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14**********************************************************************/ 14**********************************************************************/
15 15
16#include "configwindow.h" 16#include "configwindow.h"
17#include <qmap.h>
18#include <qcombobox.h>
19#include <qspinbox.h>
17 20
18WellenreiterConfigWindow::WellenreiterConfigWindow( QWidget * parent, const char * name, WFlags f ) 21WellenreiterConfigWindow::WellenreiterConfigWindow( QWidget * parent, const char * name, WFlags f )
19 :WellenreiterConfigBase( parent, name, f ) 22 :WellenreiterConfigBase( parent, name, f )
20{ 23{
24 _devicetype[ "cisco" ] = 1;
25 _devicetype[ "wlan-ng" ] = 2;
26 _devicetype[ "hostap" ] = 3;
27 _devicetype[ "orinoco" ] = 4;
28 _devicetype[ "<manual>" ] = 5;
29};
21 30
31int WellenreiterConfigWindow::daemonDeviceType()
32{
33 QString name = deviceType->currentText();
34 if ( _devicetype.contains( name ) )
35 {
36 return _devicetype[name];
37 }
38 else
39 {
40 return 0;
41 }
22}; 42};
23 43
44int WellenreiterConfigWindow::daemonHopInterval()
45{
46 return hopInterval->cleanText().toInt();
47}
diff --git a/noncore/net/wellenreiter/gui/configwindow.h b/noncore/net/wellenreiter/gui/configwindow.h
index c2db283..c627901 100644
--- a/noncore/net/wellenreiter/gui/configwindow.h
+++ b/noncore/net/wellenreiter/gui/configwindow.h
@@ -1,31 +1,36 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. 2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved.
3** 3**
4** This file is part of Opie Environment. 4** This file is part of Opie Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14**********************************************************************/ 14**********************************************************************/
15 15
16#ifndef WELLENREITERCONFIGWINDOW_H 16#ifndef WELLENREITERCONFIGWINDOW_H
17#define WELLENREITERCONFIGWINDOW_H 17#define WELLENREITERCONFIGWINDOW_H
18 18
19#include "configbase.h" 19#include "configbase.h"
20#include <qmap.h>
20 21
21class WellenreiterConfigWindow : public WellenreiterConfigBase 22class WellenreiterConfigWindow : public WellenreiterConfigBase
22{ 23{
23 24
24 public: 25 public:
25 WellenreiterConfigWindow( QWidget * parent = 0, const char * name = "WellenreiterConfigWindow", WFlags f = 0 ); 26 WellenreiterConfigWindow( QWidget * parent = 0, const char * name = "WellenreiterConfigWindow", WFlags f = 0 );
27 int daemonDeviceType();
28 int daemonHopInterval();
26 29
30 protected:
31 QMap<QString, int> _devicetype;
27 32
28}; 33};
29 34
30#endif 35#endif
31 36
diff --git a/noncore/net/wellenreiter/gui/manufacturers.h b/noncore/net/wellenreiter/gui/manufacturers.h
index 67afe21..75728b1 100644
--- a/noncore/net/wellenreiter/gui/manufacturers.h
+++ b/noncore/net/wellenreiter/gui/manufacturers.h
@@ -1,37 +1,36 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. 2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved.
3** 3**
4** This file is part of Opie Environment. 4** This file is part of Opie Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14**********************************************************************/ 14**********************************************************************/
15 15
16#ifndef MANUFACTURERS_H 16#ifndef MANUFACTURERS_H
17#define MANUFACTURERS_H 17#define MANUFACTURERS_H
18 18
19#include <qmap.h> 19#include <qmap.h>
20#include <string.h>
21 20
22class ManufacturerDB 21class ManufacturerDB
23{ 22{
24 public: 23 public:
25 24
26 ManufacturerDB( const QString& filename ); 25 ManufacturerDB( const QString& filename );
27 virtual ~ManufacturerDB(); 26 virtual ~ManufacturerDB();
28 const QString& lookup( const QString& macaddr ) const; 27 const QString& lookup( const QString& macaddr ) const;
29 28
30 private: 29 private:
31 30
32 QMap<QString, QString> manufacturers; 31 QMap<QString, QString> manufacturers;
33 32
34}; 33};
35 34
36#endif 35#endif
37 36
diff --git a/noncore/net/wellenreiter/gui/wellenreiter.cpp b/noncore/net/wellenreiter/gui/wellenreiter.cpp
index 4ee9a35..4c1c972 100644
--- a/noncore/net/wellenreiter/gui/wellenreiter.cpp
+++ b/noncore/net/wellenreiter/gui/wellenreiter.cpp
@@ -211,103 +211,76 @@ void Wellenreiter::dataReceived()
211 handleMessage(); 211 handleMessage();
212} 212}
213 213
214void Wellenreiter::buttonClicked() 214void Wellenreiter::buttonClicked()
215{ 215{
216 /* 216 /*
217 // add some test stations, so that we can see if the GUI part works 217 // add some test stations, so that we can see if the GUI part works
218 addNewItem( "managed", "Vanille", "04:00:20:EF:A6:43", true, 6, 80 ); 218 addNewItem( "managed", "Vanille", "04:00:20:EF:A6:43", true, 6, 80 );
219 addNewItem( "managed", "Vanille", "04:00:20:EF:A6:23", true, 11, 10 ); 219 addNewItem( "managed", "Vanille", "04:00:20:EF:A6:23", true, 11, 10 );
220 addNewItem( "adhoc", "ELAN", "40:03:43:E7:16:22", false, 3, 10 ); 220 addNewItem( "adhoc", "ELAN", "40:03:43:E7:16:22", false, 3, 10 );
221 addNewItem( "adhoc", "ELAN", "40:03:53:E7:56:62", false, 3, 15 ); 221 addNewItem( "adhoc", "ELAN", "40:03:53:E7:56:62", false, 3, 15 );
222 addNewItem( "adhoc", "ELAN", "40:03:63:E7:56:E2", false, 3, 20 ); 222 addNewItem( "adhoc", "ELAN", "40:03:63:E7:56:E2", false, 3, 20 );
223 */ 223 */
224 224
225 225
226 if ( daemonRunning ) 226 if ( daemonRunning )
227 { 227 {
228 daemonRunning = false; 228 daemonRunning = false;
229 229
230 logwindow->log( "(i) Daemon has been stopped." ); 230 logwindow->log( "(i) Daemon has been stopped." );
231 button->setText( "Start Scanning" ); 231 button->setText( "Start Scanning" );
232 232
233 // Stop daemon - ugly for now... later better 233 // Stop daemon - ugly for now... later better
234 234
235 system( "killall orinoco_hopper" );
236 system( "killall wellenreiterd" ); 235 system( "killall wellenreiterd" );
237 236
238 // get configuration from config window 237 // get configuration from config window
239 238
240 const QString& interface = configwindow->interfaceName->currentText(); 239 const QString& interface = configwindow->interfaceName->currentText();
241 const QString& cardtype = configwindow->deviceType->currentText(); 240 const QString& cardtype = configwindow->deviceType->currentText();
242 const QString& interval = configwindow->hopInterval->cleanText(); 241 //const QString& interval = configwindow->hopInterval->cleanText();
243 242
244 // reset the card trying to get into a usable state again 243 // reset the card trying to get into a usable state again
245 244
246 QString cmdline; 245 QString cmdline;
247 cmdline.sprintf( "iwpriv %s monitor 1", (const char*) interface ); 246 cmdline.sprintf( "cardctl eject; cardctl insert" );
248 system( cmdline );
249 cmdline.sprintf( "iwpriv %s monitor 1 6", (const char*) interface );
250 system( cmdline );
251 cmdline.sprintf( "ifconfig %s -promisc", (const char*) interface );
252 system( cmdline ); 247 system( cmdline );
253 cmdline.sprintf( "killall -14 dhcpcd" ); 248 cmdline.sprintf( "killall -14 dhcpcd" );
254 system( cmdline ); 249 system( cmdline );
255 cmdline.sprintf( "killall -10 udhcpc" ); 250 cmdline.sprintf( "killall -10 udhcpc" );
256 251
257 // message the user 252 // message the user
258 253
259 QMessageBox::information( this, "Wellenreiter/Opie", "Your wireless card\nshould now be usable again." ); 254 QMessageBox::information( this, "Wellenreiter/Opie", "Your wireless card\nshould now be usable again." );
260 } 255 }
261 256
262 else 257 else
263 { 258 {
264 259
265 logwindow->log( "(i) Daemon has been started." );
266 daemonRunning = true;
267 button->setText( "Stop Scanning" );
268
269 // get configuration from config window 260 // get configuration from config window
270 261
271 const QString& interface = configwindow->interfaceName->currentText(); 262 const QString& interface = configwindow->interfaceName->currentText();
272 const QString& cardtype = configwindow->deviceType->currentText(); 263 const int cardtype = configwindow->daemonDeviceType();
273 const QString& interval = configwindow->hopInterval->cleanText(); 264 const int interval = configwindow->daemonHopInterval();
274 265
275 if ( ( interface == "<select>" ) || ( cardtype == "<select>" ) ) 266 if ( ( interface == "<select>" ) || ( cardtype == 0 ) )
276 { 267 {
277 QMessageBox::information( this, "Wellenreiter/Opie", "You must configure your\ndevice before scanning." ); 268 QMessageBox::information( this, "Wellenreiter/Opie", "You must configure your\ndevice before scanning." );
278 return; 269 return;
279 } 270 }
280 271
281 // set interface into monitor mode 272 // start wellenreiterd
282 /* Global::Execute definitely does not work very well with non-gui stuff! :( */
283 273
284 QString cmdline; 274 QString cmdline;
285 cmdline.sprintf( "iwpriv %s monitor 2", (const char*) interface ); 275 cmdline.sprintf( "wellenreiterd %s %d &", (const char*) interface, cardtype );
286 system( cmdline );
287 cmdline.sprintf( "iwpriv %s monitor 2 1", (const char*) interface );
288 system( cmdline );
289
290 // start channel hopper
291 276
292 cmdline = "orinoco_hopper "; 277 qDebug( "about to execute '%s' ...", (const char*) cmdline );
293 cmdline += interface;
294 cmdline += " -i ";
295 cmdline += interval;
296 cmdline += " &";
297 qDebug( "execute: %s", (const char*) cmdline );
298 system( cmdline ); 278 system( cmdline );
299 qDebug( "done" ); 279 qDebug( "done!" );
300
301 // start daemon
302
303 cmdline = "wellenreiterd ";
304 cmdline += interface;
305 cmdline += " 3";
306 cmdline += " &";
307 280
308 qDebug( "execute: %s", (const char*) cmdline ); 281 logwindow->log( "(i) Daemon has been started." );
309 system( cmdline ); 282 daemonRunning = true;
310 qDebug( "done" ); 283 button->setText( "Stop Scanning" );
311 284
312 } 285 }
313} 286}