Fixed view aplication
[wifihood] / wifiscanner / wifiview
1 #!/usr/bin/python
2
3 import gtk
4 try :
5     import hildon
6 except :
7     hildon = False
8
9 import math
10
11 import wifimap.config
12
13 import wifimap.view
14
15
16 class AbstractMapWindow:
17
18     def destroy(self, widget, data=None):
19         gtk.main_quit()
20
21     def press_event ( self, widget, event, *args ) :
22       border_x , border_y = 40 , 30
23       if event.x > border_x and event.y > border_y and event.x < ( self.size_x - border_x ) and event.y < ( self.size_y - border_y ) :
24         self.click_x = event.x
25         self.click_y = event.y
26
27     def release_event ( self, widget, event, *args ) :
28       min_shift = 50
29       if self.click_x is not None and self.click_y is not None :
30         delta_x = int( event.x - self.click_x )
31         delta_y = int( event.y - self.click_y )
32         shift = math.sqrt( delta_x * delta_x + delta_y * delta_y )
33         if shift > min_shift :
34           self.map.Shift(delta_x, delta_y)
35       self.click_x , self.click_y = None , None
36
37     def on_key_press ( self, widget, event, *args ) :
38       if event.keyval == gtk.keysyms.Up :
39           self.map.Up()
40       elif event.keyval == gtk.keysyms.Down :
41           self.map.Down()
42       elif event.keyval == gtk.keysyms.Right :
43           self.map.Right()
44       elif event.keyval == gtk.keysyms.Left :
45           self.map.Left()
46       else :
47           print "UNKNOWN",event.keyval
48
49     def __init__( self , map_size=(800,480) ) :
50
51         self.connect("destroy", self.destroy)
52
53         self.set_border_width(10)
54
55         self.connect("key-press-event", self.on_key_press)
56
57         self.vbox = gtk.VBox(False, 0)
58
59         self.set_events( gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK )
60         self.connect('button_press_event', self.press_event)
61         self.connect('button_release_event', self.release_event)
62
63         self.config = wifimap.config.Configuration()
64         self.map = wifimap.view.mapWidget( self.config , map_size )
65         self.vbox.pack_end( self.map , True , True , 5)
66
67         self.size_x , self.size_y = map_size
68         self.click_x , self.click_y = None , None
69
70     def run(self):
71         gtk.main()
72
73 if hildon :
74
75     class MapWindow ( AbstractMapWindow , hildon.Window ) :
76
77         def __init__(self):
78             hildon.Window.__init__( self )
79             AbstractMapWindow.__init__(self)
80             self.add( self.vbox )
81             self.create_menu( self.vbox )
82             self.show_all()
83
84         def create_menu ( self , vbox ) :
85
86             self.menubar = menubar = hildon.AppMenu()
87
88             selector = wifimap.config.ZoomDialog( self.map.conf , self.map.SetZoom )
89             zoomlevel = hildon.PickerButton(gtk.HILDON_SIZE_AUTO,
90                                           hildon.BUTTON_ARRANGEMENT_VERTICAL)
91             zoomlevel.set_title( "Zoom" )
92             zoomlevel.set_selector( selector )
93             zoomlevel.connect_object( "value-changed", selector.zoomdialog , zoomlevel , self.map.conf )
94             menubar.append( zoomlevel )
95
96             menubar.show_all()
97             self.set_app_menu( menubar )
98
99 else :
100
101     class MapWindow ( AbstractMapWindow , gtk.Window ) :
102
103         def __init__(self):
104             gtk.Window.__init__( self , gtk.WINDOW_TOPLEVEL )
105             AbstractMapWindow.__init__(self)
106             self.add( self.vbox )
107             self.create_menu( self.vbox )
108             self.show_all()
109
110             self.resize( self.size_x , self.size_y)
111
112         def create_menu ( self , vbox ) :
113
114             menubar = gtk.MenuBar()
115
116             zoomlevel = gtk.MenuItem( label="Zoom level" )
117             zoomlevel.connect_object( "activate", self.zoomdialog, self.map.conf )
118             menubar.append( zoomlevel )
119
120             vbox.pack_start(menubar,True,True,5)
121
122         def zoomdialog ( self , config ) :
123             dialog = wifimap.config.ZoomDialog( config , self.map.SetZoom )
124             dialog.show_all()
125
126 window = MapWindow()
127 window.run()
128