Implement zoom level changes
[wifihood] / view.py
diff --git a/view.py b/view.py
index 0891cde..913d02d 100755 (executable)
--- a/view.py
+++ b/view.py
@@ -40,6 +40,12 @@ class background_map ( gtk.gdk.Pixmap ) :
         refpix = self.tileloader.get_refpix()
         return self.__vport_base[0] + refpix[0] , self.__vport_base[1] + refpix[1]
 
+    def reload ( self , config ) :
+        self.tileloader.set_params( config )
+        for i in range( self.size[0] * self.size[1] ) :
+            self.fill[i] = False
+        self.loadtiles()
+
     def loadtiles ( self ) :
 
         for x in range(self.size[0]) :
@@ -100,7 +106,11 @@ class tile_loader :
 
     def __init__ ( self , conf ) :
         self.tilesize = 256
-        self.rootdir = "%s/%s/%s" % ( conf.mapsdir , conf.mapclass , conf.zoom )
+        self.rootbase = os.path.join( conf.mapsdir , conf.mapclass )
+        self.set_params( conf )
+
+    def set_params ( self , conf ) :
+        self.rootdir = os.path.join( self.rootbase , str(conf.zoom) )
         self.__reftile , self.__refpix = self.get_reference( conf )
 
     def do_change_refpix ( self , dx , dy ) :
@@ -269,6 +279,7 @@ class simpleMapWidget ( AbstractmapWidget , gtk.Image ) :
         gtk.Image.__init__(self)
 
         self._bg = background_map( map_size , tile_loader( config ) )
+        self.config = config
 
         self.update_background()
     
@@ -286,6 +297,11 @@ class simpleMapWidget ( AbstractmapWidget , gtk.Image ) :
         self._bg.do_change_reftile( dx , dy )
         self.update_background()
 
+    def do_change_zoomlevel ( self , dz ) :
+        self.config.zoom += dz
+        self._bg.reload( self.config )
+        self.update_background()
+
     def composeMap( self ) :
         center_x , center_y = self.center()
 
@@ -434,6 +450,10 @@ if __name__ == "__main__" :
             map.do_change_reftile( +1 , 0 )
         elif event.keyval == gtk.keysyms.Left :
             map.do_change_reftile( -1 , 0 )
+        elif event.keyval == 49 :
+            map.do_change_zoomlevel( -1 )
+        elif event.keyval == 50 :
+            map.do_change_zoomlevel( +1 )
         else :
             print "UNKNOWN",event.keyval