From c903ca19445b10b7690dbf53946c40b46d50f6e4 Mon Sep 17 00:00:00 2001 From: javiplx Date: Sat, 7 May 2011 02:35:40 +0000 Subject: [PATCH] Create branch to develop a basic wrapper for hildon specific widgets git-svn-id: file:///svnroot/wifihood/branches/hildon-wrapping@125 c51dfc6a-5949-4919-9c8e-f207a149c383 --- hildongtk.py | 113 ++++++++++++++++++++++++++++++++++++ wifimap/config.py | 163 ++++++++++++++++++++-------------------------------- wifimap/replay.py | 3 +- wifimap/scanner.py | 12 ++-- wifimap/view.py | 4 +- wifiscanner | 6 +- wifiview | 2 +- 7 files changed, 188 insertions(+), 115 deletions(-) create mode 100644 hildongtk.py diff --git a/hildongtk.py b/hildongtk.py new file mode 100644 index 0000000..2ba0e1a --- /dev/null +++ b/hildongtk.py @@ -0,0 +1,113 @@ + +import gtk + +gtk.HILDON_SIZE_FINGER_HEIGHT = -1 +gtk.HILDON_SIZE_AUTO = -1 + +BUTTON_ARRANGEMENT_VERTICAL = -1 + + +class PannableArea ( gtk.ScrolledWindow ) : + def __init__ ( self ) : + gtk.ScrolledWindow.__init__( self ) + self.set_size_request(-1, 260) + self.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) + +class Entry ( gtk.Entry ) : + def __init__ ( self , height ) : + gtk.Entry.__init__( self ) + +#class Button ( gtk.Button ) : +# def __init__ ( self , height , arrangement , text=None , value=None ) : +# gtk.Button.__init__( self , "%s %s" % ( text , value ) ) +# +#class __Button ( gtk.Button ) : +# def __init__ ( self , text , value ) : +# gtk.Button.__init__( self ) +# self._text = text +# self.set_value( value ) +# def set_value ( self , value ) : +# self._value = value +# self.set_label( "%s -- %s" % ( self._text , self._value ) ) + +class CheckButton ( gtk.CheckButton ) : + def __init__ ( self , height ) : + gtk.CheckButton.__init__( self ) + +class PickerButton ( gtk.Button ) : + def __init__ ( self , height , arrangement ) : # , text=None , value=None ) : + gtk.Button.__init__( self ) + self._text = None + self._selector = None + def _build_label ( self ) : + content = [] + if self._text : content.append( self._text ) + if self._selector : content.append( self._selector.get_current_text() ) + if content : self.set_label( " -- ".join( content ) ) + def set_title ( self , title ) : + self._text = title + self._build_label() + def get_selector ( self ) : + return self._selector + def set_selector ( self , selector ) : + self._selector = selector + self.connect_object( "clicked", self._selector.muestra , self._selector ) + self._build_label() + +#def hildon_ZoomButton ( self , text , config , handler ) : +# selector = ZoomDialog( config , handler ) +# button = hildon.PickerButton( gtk.HILDON_SIZE_AUTO, hildon.BUTTON_ARRANGEMENT_VERTICAL) +# button.set_title( text ) +# button.set_selector( selector ) +# return button + +#def ported_ZoomButton ( self , text , config , handler ) : +# button = PickerButton( text , config.zoom ) +# return button + +class TouchSelector ( gtk.Dialog ) : + + def __init__ ( self ) : + gtk.Dialog.__init__( self , "Select zoom level", + None, + gtk.DIALOG_MODAL, + ( gtk.STOCK_OK, gtk.RESPONSE_ACCEPT, + gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT + ) + ) + self.combo = gtk.ComboBox() + + def append_text_column ( self , zooms , boolean ) : + self.combo.set_model( zooms ) + cell = gtk.CellRendererText() + self.combo.pack_start(cell, True) + self.combo.add_attribute(cell, 'text', 0) + + self.vbox.pack_start(self.combo , True, True, 0) + + def set_active ( self , unknown , active ) : + self.combo.set_active( active ) + + def get_current_text ( self ) : + item = self.combo.get_active_iter() + if item : + model = self.combo.get_model() + return model.get(item,0)[0] + + def muestra ( self , widget ) : + self.show_all() + +## O nos sirve el active como indice, o tendremos que transformar el indice en un iterador +## # ... iter = self.combo.get( active ) +## combo.set_active_iter( iter ) +# +## def response ( self , combo , response , config , handler , labelsetter ) : +## if response == gtk.RESPONSE_ACCEPT : +## item = combo.get_active_iter() +## model = combo.get_model() +## newzoom = model.get(item,0)[0] +## if labelsetter : labelsetter( newzoom ) +## if handler : handler( newzoom ) +## config.set_zoom( newzoom ) +## self.destroy() +# diff --git a/wifimap/config.py b/wifimap/config.py index f7caad9..0f3b99a 100644 --- a/wifimap/config.py +++ b/wifimap/config.py @@ -5,37 +5,40 @@ import gtk try : import hildon except : + import hildongtk hildon = False class Configuration : - def __init__ ( self ) : - self.homedir = None - self.dbname = None - self.mapsdir , self.mapclass = None , None - self.lat , self.lon = 0.0 , 0.0 - self.zoom = 0 - self.read() - - def read ( self ) : - client = gconf.client_get_default() - self.homedir = client.get_string( "/apps/wifihood/basedir" ) or "/home/user/MyDocs" - self.dbname = client.get_string( "/apps/wifihood/dbname" ) or "wifiscanner.db" - self.mapsdir = client.get_string( "/apps/wifihood/maps" ) or "/home/user/MyDocs/.maps" - self.mapclass = client.get_string( "/apps/wifihood/maptype" ) or "OpenStreetMap I" - self.lat = client.get_float( "/apps/wifihood/lattitude" ) or client.get_float( "/apps/maemo/maemo-mapper/center_latitude" ) or 40.416 - self.lon = client.get_float( "/apps/wifihood/longitude" ) or client.get_float( "/apps/maemo/maemo-mapper/center_longitude" ) or -3.683 - self.zoom = client.get_int( "/apps/wifihood/zoom" ) or client.get_float( "/apps/maemo/maemo-mapper/zoom" ) or 15 + def __init__ ( self , type ) : + self._type = type + self._client = gconf.client_get_default() + self.homedir = self._client.get_string( "/apps/wifihood/basedir" ) or "/home/user/MyDocs" + self.homedir = "/tmp" + self.dbname = self._client.get_string( "/apps/wifihood/dbname" ) or "wifiscanner.db" + self.mapsdir = self._client.get_string( "/apps/wifihood/maps" ) or "/home/user/MyDocs/.maps" + self.mapclass = self._client.get_string( "/apps/wifihood/maptype" ) or "OpenStreetMap I" + self.lat = self._client.get_float( "/apps/wifihood/latitude" ) or self._client.get_float( "/apps/maemo/maemo-mapper/center_latitude" ) or 40.416 + self.lon = self._client.get_float( "/apps/wifihood/longitude" ) or self._client.get_float( "/apps/maemo/maemo-mapper/center_longitude" ) or -3.683 + if self._type == 'map' : + self.zoom = self._client.get_int( "/apps/wifihood/map-zoom" ) or self._client.get_float( "/apps/maemo/maemo-mapper/zoom" ) or 15 + else : + self.zoom = self._client.get_int( "/apps/wifihood/%s-zoom" % self._type ) or 16 + + def set_latlon ( self , ( lat , lon ) ) : + self._client.set_float( "/apps/wifihood/latitude" , lat ) + self._client.set_float( "/apps/wifihood/longitude" , lon ) + self.lat , self.lon = lat , lon + + def set_zoom ( self , zoom ) : + self._client.set_int( "/apps/wifihood/%s-zoom" % self._type , zoom ) + self.zoom = zoom def save ( self ) : - client = gconf.client_get_default() - client.set_string( "/apps/wifihood/basedir" , self.homedir ) - client.set_string( "/apps/wifihood/dbname" , self.dbname ) - client.set_string( "/apps/wifihood/maps" , self.mapsdir ) - client.set_string( "/apps/wifihood/maptype" , self.mapclass ) - client.set_float( "/apps/wifihood/lattitude" , self.lat ) - client.set_float( "/apps/wifihood/longitude" , self.lon ) - client.set_int( "/apps/wifihood/zoom" , self.zoom ) + self._client.set_string( "/apps/wifihood/basedir" , self.homedir ) + self._client.set_string( "/apps/wifihood/dbname" , self.dbname ) + self._client.set_string( "/apps/wifihood/maps" , self.mapsdir ) + self._client.set_string( "/apps/wifihood/maptype" , self.mapclass ) class AbstractSettingsWindow : @@ -43,7 +46,7 @@ class AbstractSettingsWindow : def __init__ ( self , config , handler ) : self.set_title( "Wifihood Settings" ) - scrollwin = self.MainArea() + scrollwin = hildongtk.PannableArea() scrollwin.show() self.add(scrollwin) @@ -65,7 +68,7 @@ class AbstractSettingsWindow : dblabel.show() database.attach(dblabel, 0, 1, 0, 1, gtk.EXPAND|gtk.FILL, 0, 0, 5) - dbvalue = self.Entry() + dbvalue = hildongtk.Entry( gtk.HILDON_SIZE_FINGER_HEIGHT ) dbvalue.set_text( config.homedir ) dbvalue.show() database.attach(dbvalue, 1, 2, 0, 1, gtk.EXPAND|gtk.FILL, 0, 0, 5) @@ -74,7 +77,7 @@ class AbstractSettingsWindow : dblabel.show() database.attach(dblabel, 0, 1, 1, 2, gtk.EXPAND|gtk.FILL, 0, 0, 5) - dbvalue = self.Entry() + dbvalue = hildongtk.Entry( gtk.HILDON_SIZE_FINGER_HEIGHT ) dbvalue.set_text( config.dbname ) dbvalue.show() database.attach(dbvalue, 1, 2, 1, 2, gtk.EXPAND|gtk.FILL, 0, 0, 5) @@ -89,7 +92,7 @@ class AbstractSettingsWindow : maps.show() mapsframe.add(maps) - button = self.CheckButton() + button = hildongtk.CheckButton( gtk.HILDON_SIZE_FINGER_HEIGHT ) button.set_label( "Use OpenStreet maps" ) button.set_active( 1 ) button.show() @@ -109,12 +112,12 @@ class AbstractSettingsWindow : gps.show() gpsframe.add(gps) - button = self.CheckButton() + button = hildongtk.CheckButton( gtk.HILDON_SIZE_FINGER_HEIGHT ) button.set_label( "Take initial coordinates from maemo-mapper" ) button.show() gps.attach(button, 0, 2, 0, 1, gtk.EXPAND|gtk.FILL) #, 0, 0, 5) - button = self.CheckButton() + button = hildongtk.CheckButton( gtk.HILDON_SIZE_FINGER_HEIGHT ) button.set_label( "Store changes in coordinates" ) button.show() gps.attach(button, 0, 2, 1, 2, gtk.EXPAND|gtk.FILL) #, 0, 0, 5) @@ -125,7 +128,7 @@ class AbstractSettingsWindow : dataframe.show() vbox.pack_start(dataframe, True, True, 0) - button = self.CheckButton() + button = hildongtk.CheckButton( gtk.HILDON_SIZE_FINGER_HEIGHT ) button.set_label( "Write full logfile" ) button.show() dataframe.add(button) @@ -158,7 +161,7 @@ if hildon : def zoomdialog ( self , widget , conf ) : newzoom = int( widget.get_selector().get_current_text() ) if self.handler : self.handler( newzoom ) - conf.zoom = newzoom + conf.set_zoom( newzoom ) class SettingsWindow ( hildon.StackableWindow , AbstractSettingsWindow ) : @@ -174,57 +177,39 @@ if hildon : button.connect_object( "value-changed", selector.zoomdialog , button , config ) return button - def MainArea ( self ) : - return hildon.PannableArea() - - def Entry ( self ) : - return hildon.Entry( gtk.HILDON_SIZE_FINGER_HEIGHT ) - - def Button ( self , text , value ) : - return hildon.Button( gtk.HILDON_SIZE_THUMB_HEIGHT , hildon.BUTTON_ARRANGEMENT_HORIZONTAL , text , "%s" % value ) - - def CheckButton ( self ) : - return hildon.CheckButton( gtk.HILDON_SIZE_FINGER_HEIGHT ) - else : - class ZoomDialog ( gtk.Dialog ) : + class ZoomDialog ( hildongtk.TouchSelector ) : - def __init__ ( self , config , handler , labelsetter=None ) : - gtk.Dialog.__init__( self , "Select zoom level", - None, - gtk.DIALOG_MODAL, - ( gtk.STOCK_OK, gtk.RESPONSE_ACCEPT, - gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT - ) - ) + def __init__ ( self , config , handler ) : + hildongtk.TouchSelector.__init__( self ) + self.handler = handler - zooms = gtk.ListStore(int) - combo = gtk.ComboBox( zooms ) + zooms = gtk.ListStore(str) + active = index = 0 for zoom in range(8,19) : iter = zooms.append() zooms.set( iter , 0 , zoom ) if zoom == config.zoom : - combo.set_active_iter( iter ) + active = index + index += 1 - cell = gtk.CellRendererText() - combo.pack_start(cell, True) - combo.add_attribute(cell, 'text', 0) + column = self.append_text_column( zooms , True ) - self.vbox.pack_start(combo , True, True, 0) + # NOTE : with text=True, we must use 1 instead of 0 + self.set_active( 0 , active ) - self.connect_object( "response", self.response , combo , config , handler , labelsetter ) + def zoomdialog ( self , widget , conf ) : + newzoom = int( widget.get_selector().get_current_text() ) + if self.handler : self.handler( newzoom ) + conf.set_zoom( newzoom ) - def response ( self , combo , response , config , handler , labelsetter ) : + def response ( self , widget , response , config ) : if response == gtk.RESPONSE_ACCEPT : - item = combo.get_active_iter() - model = combo.get_model() - newzoom = model.get(item,0)[0] - if labelsetter : labelsetter( newzoom ) - if handler : handler( newzoom ) - config.zoom = newzoom - self.destroy() + self.zoomdialog( widget , config ) + widget._build_label() + self.hide() class SettingsWindow ( gtk.Window , AbstractSettingsWindow ) : @@ -232,41 +217,19 @@ else : gtk.Window.__init__( self ) AbstractSettingsWindow.__init__( self , config , handler ) - def MainArea ( self ) : - scrollwin = gtk.ScrolledWindow() - scrollwin.set_size_request(-1, 260) - scrollwin.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) - return scrollwin - - def Entry ( self ) : - return gtk.Entry() - - def Button ( self , label=None ) : - return gtk.Button( label ) - - def zoomdialog ( self , widget , config , handler ) : - dialog = ZoomDialog( config , handler , widget.set_value ) - dialog.show_all() - def ZoomButton ( self , text , config , handler ) : - class _button ( gtk.Button ) : - def __init__ ( self , text , value ) : - gtk.Button.__init__( self ) - self._text = text - self.set_value( value ) - def set_value ( self , value ) : - self._value = value - self.set_label( "%s -- %s" % ( self._text , self._value ) ) - button = _button( text , config.zoom ) - button.connect_object( "clicked", self.zoomdialog , button , config , handler ) + selector = ZoomDialog( config , handler ) + button = hildongtk.PickerButton( gtk.HILDON_SIZE_AUTO, hildongtk.BUTTON_ARRANGEMENT_VERTICAL) + button.set_title( text ) + button.set_selector( selector ) +# button.connect_object( "value-changed", selector.zoomdialog , button , config ) +# event does not exists !!! + selector.connect_object( "response", selector.response , button , config ) return button - def CheckButton ( self ) : - return gtk.CheckButton() - -config = Configuration() if __name__ == "__main__" : + config = Configuration( 'scanner' ) window = SettingsWindow( config ) window.connect("delete_event", gtk.main_quit, None) window.show() diff --git a/wifimap/replay.py b/wifimap/replay.py index 6bf7c86..6d1fdc9 100644 --- a/wifimap/replay.py +++ b/wifimap/replay.py @@ -6,13 +6,12 @@ import gobject import os -conf = config.Configuration() - class ReplayScanner ( gobject.GObject ) : def __init__ ( self , ifname="wlan0" ) : gobject.GObject.__init__( self ) self.scan_timeout = 0 + conf = config.Configuration( 'scanner' ) self.db = db.database( os.path.join( conf.homedir , "wifireplay.db" ) ) # Values specific to replaying diff --git a/wifimap/scanner.py b/wifimap/scanner.py index 41f2e5c..bddd462 100644 --- a/wifimap/scanner.py +++ b/wifimap/scanner.py @@ -13,14 +13,14 @@ import gobject import os -conf = config.Configuration() - class Scanner ( gps.GPSObject , wifiscan.WifiScanner ) : def __init__ ( self , ifname="wlan0" ) : gps.GPSObject.__init__( self ) wifiscan.WifiScanner.__init__( self , ifname ) - self.db = db.database( os.path.join( conf.homedir , conf.dbname ) ) + conf = config.Configuration( 'scanner' ) + self.homedir = conf.homedir + self.db = db.database( os.path.join( self.homedir , conf.dbname ) ) # Values to be set by wireless scans self.newap = 0 @@ -49,15 +49,15 @@ class Scanner ( gps.GPSObject , wifiscan.WifiScanner ) : self.write_logs() def write_logs ( self ) : - fd = open( os.path.join( conf.homedir , "wiscan_gui.info" ) , 'a' ) + fd = open( os.path.join( self.homedir , "wiscan_gui.info" ) , 'a' ) fd.write( "%s %s %s\n" % ( self.tstamp , self.info , self.scanlist ) ) fd.close() if self.satellites : - loclist = open( os.path.join( conf.homedir , "location.info" ) , 'a' ) + loclist = open( os.path.join( self.homedir , "location.info" ) , 'a' ) loclist.write ( "%s\n" % ( self.satellites ,) ) loclist.close() if self.cells : - celllist = open( os.path.join( conf.homedir , "cell.info" ) , 'a' ) + celllist = open( os.path.join( self.homedir , "cell.info" ) , 'a' ) celllist.write ( "%s\n" % ( self.cells ,) ) celllist.close() diff --git a/wifimap/view.py b/wifimap/view.py index a3719cc..959e871 100755 --- a/wifimap/view.py +++ b/wifimap/view.py @@ -31,7 +31,7 @@ class AbstractmapWidget : # FIXME : instead of hardcoded, should depend on the actual display size if distance > 150 : - self.conf.lat , self.conf.lon = latlon + self.conf.set_latlon( latlon ) self.reftile_x , self.refpix_x = self.lon2tilex( self.conf.lon , self.conf.zoom ) self.reftile_y , self.refpix_y = self.lat2tiley( self.conf.lat , self.conf.zoom ) @@ -55,7 +55,7 @@ class AbstractmapWidget : lon = self.tilex2lon( ( self.reftile_x , self.refpix_x ) , self.conf.zoom ) self.reftile_x , self.refpix_x = self.lon2tilex( lon , zoom ) self.reftile_y , self.refpix_y = self.lat2tiley( lat , zoom ) - self.conf.zoom = zoom + self.conf.set_zoom( zoom ) self.composeMap() self.show() diff --git a/wifiscanner b/wifiscanner index 341ad90..42e12e6 100755 --- a/wifiscanner +++ b/wifiscanner @@ -139,8 +139,7 @@ if hildon : def __init__(self): gtk.Frame.__init__( self ) - self.config = wifimap.config.Configuration() - self.config.zoom = 16 + self.config = wifimap.config.Configuration( 'scanner' ) self.add( wifimap.simpleMapWidget( self.config ) ) class Wifiscanner ( AbstractWifiscanner , hildon.StackableWindow ) : @@ -198,8 +197,7 @@ else : def __init__(self): gtk.Frame.__init__( self ) - self.config = wifimap.config.Configuration() - self.config.zoom = 16 + self.config = wifimap.config.Configuration( 'scanner' ) self.add( wifimap.simpleMapWidget( self.config , (640,400) ) ) class Wifiscanner ( AbstractWifiscanner , gtk.Window ) : diff --git a/wifiview b/wifiview index afbed66..b7da997 100755 --- a/wifiview +++ b/wifiview @@ -60,7 +60,7 @@ class AbstractMapWindow: self.connect('button_press_event', self.press_event) self.connect('button_release_event', self.release_event) - self.config = wifimap.config.Configuration() + self.config = wifimap.config.Configuration( 'map' ) self.map = wifimap.view.mapWidget( self.config , map_size ) self.vbox.pack_end( self.map , True , True , 5) -- 1.7.9.5