Initial implementation of settings window under hildon
[wifihood] / wifiscanner / wifimap / config.py
1
2 import gconf
3
4 import hildon , gtk
5
6 class Configuration :
7
8     def __init__ ( self ) :
9         self.homedir = None
10         self.dbname = None
11         self.mapsdir , self.mapclass = None , None
12         self.lat , self.lon = 0.0 , 0.0
13         self.zoom = 0
14         self.read()
15
16     def read ( self ) :
17         client = gconf.client_get_default()
18         self.homedir = client.get_string( "/apps/wifihood/basedir" ) or "/home/user/MyDocs"
19         self.dbname = client.get_string( "/apps/wifihood/dbname" ) or "wifiscanner.db"
20         self.mapsdir = client.get_string( "/apps/wifihood/maps" ) or "/home/user/MyDocs/.maps"
21         self.mapclass = client.get_string( "/apps/wifihood/maptype" ) or "OpenStreetMap I"
22         self.lat = client.get_float( "/apps/wifihood/lattitude" ) or client.get_float( "/apps/maemo/maemo-mapper/center_latitude" ) or 40.416
23         self.lon = client.get_float( "/apps/wifihood/longitude" ) or client.get_float( "/apps/maemo/maemo-mapper/center_longitude" ) or -3.683
24         self.zoom = client.get_int( "/apps/wifihood/zoom" ) or client.get_float( "/apps/maemo/maemo-mapper/zoom" ) or 15
25
26     def save ( self ) :
27         client = gconf.client_get_default()
28         client.set_string( "/apps/wifihood/basedir" , self.homedir )
29         client.set_string( "/apps/wifihood/dbname" , self.dbname )
30         client.set_string( "/apps/wifihood/maps" , self.mapsdir )
31         client.set_string( "/apps/wifihood/maptype" , self.mapclass )
32         client.set_float( "/apps/wifihood/lattitude" , self.lat )
33         client.set_float( "/apps/wifihood/longitude" , self.lon )
34         client.set_int( "/apps/wifihood/zoom" , self.zoom )
35
36
37 class SettingsWindow ( hildon.StackableWindow ) :
38
39     def __init__ ( self , config ) :
40         hildon.StackableWindow.__init__( self )
41         self.set_title( "Wifihood Settings" )
42
43         scrollwin = gtk.ScrolledWindow(None, None)
44         scrollwin.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
45         scrollwin.show()
46         self.add(scrollwin)
47
48         vbox = gtk.VBox(False, 0)
49         vbox.show()
50         scrollwin.add_with_viewport( vbox )
51
52
53         dbframe = gtk.Frame( label="Database" )
54         dbframe.set_label_align(0 , 0.1)
55         dbframe.show()
56         vbox.pack_start(dbframe, True, True, 0)
57
58         database = gtk.Table(2, 2, False)
59         database.show()
60         dbframe.add(database)
61
62         dblabel = gtk.Label( "Home directory" )
63         dblabel.show()
64         database.attach(dblabel, 0, 1, 0, 1, gtk.EXPAND|gtk.FILL, 0, 0, 5)
65
66         dbvalue = hildon.Entry( gtk.HILDON_SIZE_FINGER_HEIGHT )
67         dbvalue.set_text( config.homedir )
68         dbvalue.show()
69         database.attach(dbvalue, 1, 2, 0, 1, gtk.EXPAND|gtk.FILL, 0, 0, 5)
70
71         dblabel = gtk.Label( "Database name" )
72         dblabel.show()
73         database.attach(dblabel, 0, 1, 1, 2, gtk.EXPAND|gtk.FILL, 0, 0, 5)
74
75         dbvalue = hildon.Entry( gtk.HILDON_SIZE_FINGER_HEIGHT )
76         dbvalue.set_text( config.dbname )
77         dbvalue.show()
78         database.attach(dbvalue, 1, 2, 1, 2, gtk.EXPAND|gtk.FILL, 0, 0, 5)
79
80
81         mapsframe = gtk.Frame( label="Maps" )
82         mapsframe.set_label_align(0 , 0.1)
83         mapsframe.show()
84         vbox.pack_start(mapsframe, True, True, 0)
85
86         maps = gtk.Table(2, 2, False)
87         maps.show()
88         mapsframe.add(maps)
89
90         button = hildon.CheckButton( gtk.HILDON_SIZE_FINGER_HEIGHT )
91         button.set_label( "Use OpenStreet maps" )
92         button.set_active( 1 )
93         button.show()
94         maps.attach(button, 0, 1, 0, 1, gtk.EXPAND|gtk.FILL, 0, 0, 5)
95
96         zoomlevel = hildon.Button( gtk.HILDON_SIZE_THUMB_HEIGHT , hildon.BUTTON_ARRANGEMENT_HORIZONTAL )
97         zoomlevel.set_label( "Zoom level %d" % config.zoom )
98         zoomlevel.connect_object( "activate", self.zoomdialog, config )
99         zoomlevel.show()
100         maps.attach(zoomlevel, 1, 2, 0, 1, gtk.EXPAND|gtk.FILL, 0, 0, 5)
101
102
103         gpsframe = gtk.Frame( label="Coordinates" )
104         gpsframe.set_label_align(0 , 0.1)
105         gpsframe.show()
106         vbox.pack_start(gpsframe, True, True, 0)
107
108         gps = gtk.Table(2, 2, False)
109         gps.show()
110         gpsframe.add(gps)
111
112         button = hildon.CheckButton( gtk.HILDON_SIZE_FINGER_HEIGHT )
113         button.set_label( "Take initial coordinates from maemo-mapper" )
114         button.show()
115         gps.attach(button, 0, 2, 0, 1, gtk.EXPAND|gtk.FILL) #, 0, 0, 5)
116
117         button = hildon.CheckButton( gtk.HILDON_SIZE_FINGER_HEIGHT )
118         button.set_label( "Store changes in coordinates" )
119         button.show()
120         gps.attach(button, 0, 2, 1, 2, gtk.EXPAND|gtk.FILL) #, 0, 0, 5)
121
122
123         dataframe = gtk.Frame( label="Data gathering" )
124         dataframe.set_label_align(0 , 0.1)
125         dataframe.show()
126         vbox.pack_start(dataframe, True, True, 0)
127
128         button = hildon.CheckButton( gtk.HILDON_SIZE_FINGER_HEIGHT )
129         button.set_label( "Write full logfile" )
130         button.show()
131         dataframe.add(button)
132
133         self.show()
134
135     def zoomdialog ( self , widget ) :
136         dialog = ZoomDialog( widget )
137         dialog.show_all()
138
139 class ZoomDialog ( hildon.TouchSelector ) :
140
141     def __init__ ( self , widget ) :
142         hildon.TouchSelector.__init__( self )
143
144         zooms = gtk.ListStore(str)
145
146         active = index = 0
147         for zoom in range(8,19) :
148             iter = zooms.append()
149             zooms.set( iter , 0 , "%2d" % zoom )
150             if zoom == widget.conf.zoom :
151                 active = index
152             index += 1
153
154         column = self.append_text_column( zooms , True )
155         #renderer = gtk.CellRendererText()
156         #column = self.append_column( zooms , renderer )
157         #column.set_property('text-column', 0)
158
159         # NOTE : with text=True, we must use 1 instead of 0
160         self.set_active( 0 , active )
161
162 if __name__ == "__main__" :
163     window = SettingsWindow( Configuration() )
164     window.connect("delete_event", gtk.main_quit, None)
165     window.show()
166     gtk.main()