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