X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=wifiscanner%2Fwifiscanner;h=1f39e3d6b31deea41f3ba5997c299ecc675a6cec;hb=e4cb350eceeaa7a50e20de154c9f59139703eefb;hp=ee9b20bda02878b0593dfd3519f52e0f9c686c48;hpb=ca5df0def8442d66f4baa031eb192ddb7a68c520;p=wifihood diff --git a/wifiscanner/wifiscanner b/wifiscanner/wifiscanner index ee9b20b..1f39e3d 100755 --- a/wifiscanner/wifiscanner +++ b/wifiscanner/wifiscanner @@ -2,89 +2,254 @@ import wifimap -import gtk -import hildon +import gtk , pango +try : + import hildon +except : + hildon = False + +def global_start(button, scanner, config): + scanner.start( config.scan_period , config.store_log ) + if button._id : + button.disconnect( button._id ) + button._id = button.connect("clicked", global_stop, scanner, config) + button.set_label("Switch GPS Off") + +def global_stop(button, scanner, config): + scanner.stop() + if button._id : + button.disconnect( button._id ) + button._id = button.connect("clicked", global_start, scanner, config) + button.set_label("Switch GPS On") + +def enable_agps(button): + if button.get_active() : + print "%s state is active" % button + +def start_scan(button, scanner): + # BUG : If gps is not started in advance, database is not opened and an exception happens + scanner.scan() + if button._id : + button.disconnect( button._id ) + button._id = button.connect("clicked", stop_scan, scanner) + button.set_label("Stop scanning") + +def stop_scan(button, scanner): + # FIXME : This method do not clear the scheduled scan + scanner.scan_timeout = 0 + if button._id : + button.disconnect( button._id ) + button._id = button.connect("clicked", start_scan, scanner) + button.set_label("Start scanning") + + +class scanner ( wifimap.ReplayScanner ) : + + def scan ( self ) : + wifimap.ReplayScanner.scan( self ) + self.report() -import gobject + def report ( self ) : + self.status.set_label( wifimap.ReplayScanner.report(self) ) + start, end = self.buffer.get_bounds() + self.buffer.delete( start , end ) + for mac,rss in self.scanlist.iteritems() : + self.buffer.insert_at_cursor( "%s %5d\n" % ( mac , rss ) ) + if self.info[0] == "FIX" : + self.map.hide() + self.map.recenter( self.info[4:6] ) + pixmap,mask = self.map.get_pixbuf().render_pixmap_and_mask() + pointsize = 2 + if self.newaps : + pointsize += 2 + self.map.plot( pixmap , ( float(self.info[4]) , float(self.info[5]) ) , "red" , pointsize ) + for mac,ap in self.aps.iteritems() : + if self.oldpos.get( mac ) : + self.map.line( pixmap , self.oldpos[mac] , ( ap[1]/ap[0] , ap[2]/ap[0] ) , "green" ) + self.map.plot( pixmap , ( ap[1]/ap[0] , ap[2]/ap[0] ) , "green" , 2 ) + self.map.get_pixbuf().get_from_drawable( pixmap , pixmap.get_colormap() , 0, 0 , 0 , 0 , self.map.win_x, self.map.win_y ) + self.map.show() + + +class AbstractWifiscanner : + + def __init__ ( self ) : + + _scanner = scanner( "wlan0" ) + + self.connect("delete_event", gtk.main_quit, None) + + self.vbox = gtk.VBox(homogeneous=False, spacing=0) + + # Top frame creation + top_frame = gtk.Frame() + + hbox = gtk.HBox(homogeneous=False, spacing=0) + top_frame.add(hbox) + + # Bottom frame creation + bottom_frame = gtk.Frame() + self.vbox.pack_end(bottom_frame, expand=False) + + self.vbox.pack_end(top_frame) + + bottom_box = gtk.HBox(homogeneous=False, spacing=0) + bottom_frame.add( bottom_box ) + + # Top frame population + notebook = gtk.Notebook() + hbox.pack_start( notebook ) + + scrollview = gtk.ScrolledWindow() + notebook.append_page( scrollview , gtk.Label("Scanning") ) + self.map = MapWindow() + notebook.append_page( self.map , gtk.Label("Map") ) -def hello(widget, data): - data.do_start() + buttons = gtk.VBox(homogeneous=False, spacing=0) + hbox.pack_end(buttons, expand=False) -def bye(widget, data): - data.do_stop() + textview = self.TextView( "Scan results ..." ) + scrollview.add( textview ) + scrollview.set_policy( gtk.POLICY_NEVER , gtk.POLICY_AUTOMATIC ) -def enable_agps(widget): - if widget.get_active() : - print "%s state is active" % widget + # Buttons creation + button = self.Button( "Switch GPS On") + button._id = button.connect("clicked", global_start, _scanner, self.map.config) + buttons.pack_start(button, expand=False) -def scana(widget, data): - if not data._timer : - data._timer = gobject.timeout_add( 5000 , data.scan ) - else : - hildon.hildon_banner_show_information( widget , "icon_path" , "Scanning was already active" ) + button_scan = self.Button( "Start scanning") + button_scan._id = button_scan.connect("clicked", start_scan, _scanner) + buttons.pack_start(button_scan, expand=False) -def scano(widget, data): - if data._timer : - hildon.hildon_banner_show_information( widget , "icon_path" , "Timer was running, stopping it" ) - gobject.source_remove( data._timer ) - data._timer = None - data.stop() - else : - hildon.hildon_banner_show_information( widget , "icon_path" , "Scanning is not active" ) + toggle_button = self.CheckButton( "Use Assisted GPS" ) + toggle_button.connect("toggled", enable_agps) + buttons.pack_start(toggle_button, expand=False) -def main(): + # Bottom frame population + status = gtk.Label( "status bar ..." ) + _scanner.status = status + _scanner.buffer = textview.get_buffer() + _scanner.map = self.map.child + bottom_box.pack_start( status , expand=False , padding=20 ) - window = hildon.Window() - program = hildon.Program.get_instance() - program.add_window(window) + def run ( self ) : + gtk.main() - gpsdev = wifimap.Scanner( window ) +def settings_cb ( widget , map ) : + window = wifimap.config.SettingsWindow( map.config , map.child.SetZoom ) - window.connect("delete_event", gtk.main_quit, None) - vbox = gtk.VBox(homogeneous=False, spacing=0) - top_frame = gtk.Frame(label="top") - bottom_frame = gtk.Frame(label="bottom") +if hildon : - # FIXME : Temporary holder !!! - table = gtk.Table (2, 2, False) + class MapWindow ( gtk.Frame ) : - # set the spacing to 10 on x and 10 on y - table.set_row_spacings(10) - table.set_col_spacings(10) + def __init__(self): + gtk.Frame.__init__( self ) - button = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH, hildon.BUTTON_ARRANGEMENT_VERTICAL, "Switch On!") - button.connect("clicked", hello, gpsdev) - table.attach(button, 0, 1, 0, 1) + self.config = wifimap.config.Configuration( 'scanner' ) + self.add( wifimap.simpleMapWidget( self.config ) ) - button_off = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH, hildon.BUTTON_ARRANGEMENT_VERTICAL, "Switch Off!") - button_off.connect("clicked", bye, gpsdev) - table.attach(button_off, 1, 2, 0, 1) + class Wifiscanner ( AbstractWifiscanner , hildon.StackableWindow ) : - button_scan = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH, hildon.BUTTON_ARRANGEMENT_VERTICAL, "Start scanning now !!") - button_scan.connect("clicked", scana, gpsdev) - table.attach(button_scan, 0, 1, 1, 2) + def __init__ ( self ) : + hildon.StackableWindow.__init__( self ) + self.set_title( "Wifihood Scanner" ) + program = hildon.Program.get_instance() + program.add_window(self) - button_stop = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH, hildon.BUTTON_ARRANGEMENT_VERTICAL, "Stop scanning now !!") - button_stop.connect("clicked", scano, gpsdev) - table.attach(button_stop, 1, 2, 1, 2) + AbstractWifiscanner.__init__( self ) + self.add(self.vbox) - bottom_frame.add(table) + self.create_menu( ) - toggle_button = gtk.CheckButton(label="Use Assisted GPS") - toggle_button.connect("toggled", enable_agps) - top_frame.add(toggle_button) + self.show_all() - vbox.pack_start(top_frame) - vbox.pack_end(bottom_frame) - window.add(vbox) + def TextView ( self , placeholder=None ) : + textview = hildon.TextView() + if placeholder : + textview.set_placeholder( placeholder ) + textview.set_editable( False ) + textview.set_cursor_visible( False ) + textview.modify_font( pango.FontDescription("Courier 12") ) + return textview + + def Button ( self , label="" ) : + button = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL, label) + return button - window.show_all() + def CheckButton ( self , label=None ) : + toggle_button = hildon.CheckButton( gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT ) + if label : + toggle_button.set_label( label ) + return toggle_button - gpsdev.start() + def create_menu ( self ) : - gtk.main() + menubar = hildon.AppMenu() + self.set_app_menu( menubar ) -if __name__ == "__main__": - main() + settings = hildon.Button(gtk.HILDON_SIZE_AUTO, + hildon.BUTTON_ARRANGEMENT_VERTICAL, + "Settings", + None) + settings.connect( "clicked", settings_cb , self.map ) + menubar.append( settings ) + + menubar.show_all() + +else : + + class MapWindow ( gtk.Frame ) : + + def __init__(self): + gtk.Frame.__init__( self ) + + self.config = wifimap.config.Configuration( 'scanner' ) + self.add( wifimap.simpleMapWidget( self.config , (640,400) ) ) + + class Wifiscanner ( AbstractWifiscanner , gtk.Window ) : + + def __init__ ( self ) : + gtk.Window.__init__( self ) + self.resize(640,400) + + AbstractWifiscanner.__init__( self ) + self.add(self.vbox) + + self.create_menu() + + self.show_all() + + def TextView ( self , placeholder=None ) : + textview = gtk.TextView() + if placeholder : + textview.get_buffer().set_text( placeholder ) + textview.set_editable( False ) + textview.set_cursor_visible( False ) + textview.modify_font( pango.FontDescription("Courier 12") ) + return textview + + def Button ( self , label="" ) : + button = gtk.Button( label ) + return button + + def CheckButton ( self , label=None ) : + toggle_button = gtk.CheckButton() + if label : + toggle_button.set_label( label ) + return toggle_button + + def create_menu ( self ) : + + menubar = gtk.MenuBar() + self.vbox.pack_start( menubar ) + + settings = gtk.MenuItem( "Settings" ) + settings.connect( "activate", settings_cb , self.map ) + menubar.append( settings ) + + menubar.show_all() + +window = Wifiscanner() +window.run()