Implement setting edition for GTK version, moving zoom dialogs into configuration...
[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             #zoomlevel = hildon.Button(gtk.HILDON_SIZE_AUTO,
89             #                          hildon.BUTTON_ARRANGEMENT_VERTICAL,
90             #                          "Zoom level", None)
91             #zoomlevel.connect_object( "clicked", self.zoomstack, self.map )
92             selector = wifmap.config.ZoomDialog( self.map.conf )
93             zoomlevel = hildon.PickerButton(gtk.HILDON_SIZE_AUTO,
94                                           hildon.BUTTON_ARRANGEMENT_VERTICAL)
95             zoomlevel.set_title( "Zoom" )
96             zoomlevel.set_selector( selector )
97             zoomlevel.connect_object( "value-changed", self.map.ZoomChange , selector )
98             menubar.append( zoomlevel )
99
100             menubar.show_all()
101             self.set_app_menu( menubar )
102
103 else :
104
105     class MapWindow ( AbstractMapWindow , gtk.Window ) :
106
107         def __init__(self):
108             gtk.Window.__init__( self , gtk.WINDOW_TOPLEVEL )
109             AbstractMapWindow.__init__(self)
110             self.add( self.vbox )
111             self.create_menu( self.vbox )
112             self.show_all()
113
114             self.resize( self.size_x , self.size_y)
115
116         def create_menu ( self , vbox ) :
117
118             menubar = gtk.MenuBar()
119
120             zoomlevel = gtk.MenuItem( label="Zoom level" )
121             zoomlevel.connect_object( "activate", self.zoomdialog, self.map.conf )
122             menubar.append( zoomlevel )
123
124             vbox.pack_start(menubar,True,True,5)
125
126         def zoomdialog ( self , config ) :
127             dialog = wifimap.config.ZoomDialog( config )
128             dialog.show_all()
129
130 window = MapWindow()
131 window.run()
132