1
1
#!/usr/bin/env python
2
2
# -*- coding: utf-8 -*-
3
import cluttergtk # must be the first to be imported
9
from demomarkers import DemoMarkerLayer
10
from markers import create_marker_layer
14
self.window = gtk.Window()
15
self.window.set_border_width(10)
16
self.window.set_title("The world seen through the eyes of a Python")
18
self.window.connect("destroy", lambda w: gtk.main_quit)
20
vbox = gtk.VBox(False, 12)
22
self.view = champlain.View()
23
self.view.set_property("scroll-mode", champlain.SCROLL_MODE_KINETIC)
25
self.layer = DemoMarkerLayer()
26
self.view.add_layer(self.layer)
28
embed = cluttergtk.Embed()
29
embed.set_size_request(640, 480)
31
bbox = gtk.HBox(False, 6)
32
button = gtk.Button(stock=gtk.STOCK_ZOOM_IN)
33
button.connect("clicked", self.zoom_in)
36
button = gtk.Button(stock=gtk.STOCK_ZOOM_OUT)
37
button.connect("clicked", self.zoom_out)
40
button = gtk.ToggleButton(label="Markers")
41
button.connect("toggled", self.toggle_layer)
44
combo = gtk.combo_box_new_text()
45
self.map_source_factory = champlain.map_source_factory_dup_default()
46
liststore = gtk.ListStore(str, str)
47
for source in self.map_source_factory.dup_list():
48
liststore.append([source["id"], source["name"]])
49
combo.append_text(source["name"])
50
combo.set_model(liststore)
51
combo.set_attributes(combo.get_cells()[0], text=1)
53
combo.connect("changed", self.map_source_changed)
56
self.spinbutton = gtk.SpinButton(gtk.Adjustment(lower=0, upper=20, value=1, step_incr=1))
57
self.spinbutton.connect("changed", self.zoom_changed)
58
self.view.connect("notify::zoom-level", self.map_zoom_changed)
59
self.spinbutton.set_value(5)
60
bbox.add(self.spinbutton)
62
vbox.pack_start(bbox, expand=False, fill=False)
66
# we need to realize the widget before we get the stage
69
stage = embed.get_stage()
70
self.view.set_size(640, 480)
73
self.window.show_all()
74
self.view.center_on(45.466, -73.75)
77
def zoom_in(self, widget):
80
def zoom_out(self, widget):
83
def toggle_layer(self, widget):
84
if widget.get_active():
89
def zoom_changed(self, widget):
90
self.view.set_property("zoom-level", self.spinbutton.get_value_as_int())
92
def map_source_changed(self, widget):
93
model = widget.get_model()
94
iter = widget.get_active_iter()
95
id = model.get_value(iter, 0)
96
source = self.map_source_factory.create(id);
97
self.view.set_property("map-source", source)
99
def map_zoom_changed(self, widget, value):
100
self.spinbutton.set_value(self.view.get_property("zoom-level"))
14
self.window = gtk.Window()
15
self.window.set_border_width(10)
16
self.window.set_title("The world seen through the eyes of a Python")
17
self.window.connect("destroy", gtk.main_quit)
19
vbox = gtk.VBox(False, 12)
21
self.view = champlain.View()
22
self.view.set_property("scroll-mode", champlain.SCROLL_MODE_KINETIC)
24
self.layer = create_marker_layer(self.view)
25
self.view.add_layer(self.layer)
27
embed = cluttergtk.Embed()
28
embed.set_size_request(640, 480)
30
bbox = gtk.HBox(False, 6)
31
button = gtk.Button(stock=gtk.STOCK_ZOOM_IN)
32
button.connect("clicked", self.zoom_in)
35
button = gtk.Button(stock=gtk.STOCK_ZOOM_OUT)
36
button.connect("clicked", self.zoom_out)
39
button = gtk.ToggleButton(label="Markers")
40
button.connect("toggled", self.toggle_layer)
43
combo = gtk.combo_box_new_text()
44
self.map_source_factory = champlain.map_source_factory_dup_default()
45
liststore = gtk.ListStore(str, str)
46
for source in self.map_source_factory.dup_list():
47
liststore.append([source.id, source.name])
48
combo.append_text(source.name)
49
combo.set_model(liststore)
50
combo.set_attributes(combo.get_cells()[0], text=1)
52
combo.connect("changed", self.map_source_changed)
55
self.spinbutton = gtk.SpinButton(gtk.Adjustment(lower=0, upper=20,
56
value=1, step_incr=1))
57
self.spinbutton.connect("changed", self.zoom_changed)
58
self.view.connect("notify::zoom-level", self.map_zoom_changed)
59
self.spinbutton.set_value(5)
60
bbox.add(self.spinbutton)
62
vbox.pack_start(bbox, expand=False, fill=False)
66
# we need to realize the widget before we get the stage
69
stage = embed.get_stage()
70
self.view.set_size(640, 480)
73
self.window.show_all()
74
self.view.center_on(45.466, -73.75)
76
def zoom_in(self, widget):
79
def zoom_out(self, widget):
82
def toggle_layer(self, widget):
83
if widget.get_active():
84
self.layer.animate_in_all_markers()
86
self.layer.animate_out_all_markers()
88
def zoom_changed(self, widget):
89
self.view.set_property("zoom-level", self.spinbutton.get_value_as_int())
91
def map_source_changed(self, widget):
92
model = widget.get_model()
93
iter = widget.get_active_iter()
94
id = model.get_value(iter, 0)
95
source = self.map_source_factory.create(id);
96
self.view.set_property("map-source", source)
98
def map_zoom_changed(self, widget, value):
99
self.spinbutton.set_value(self.view.get_property("zoom-level"))
103
102
if __name__ == "__main__":
104
gobject.threads_init()
103
gobject.threads_init()