~ubuntu-branches/ubuntu/natty/libchamplain/natty

« back to all changes in this revision

Viewing changes to bindings/python/demos/launcher-gtk.py

  • Committer: Bazaar Package Importer
  • Author(s): Sjoerd Simons, Laurent Bigonville, Sjoerd Simons
  • Date: 2009-09-15 00:01:41 UTC
  • mfrom: (1.1.3 upstream) (2.1.3 sid)
  • Revision ID: james.westby@ubuntu.com-20090915000141-i8fg5n1t02zxo79m
Tags: 0.4.0-1
[ Laurent Bigonville ]
* debian/control: Add libchamplain-0.3-dev dependency to
  libchamplain-gtk-0.3-dev

[ Sjoerd Simons ]
* New upstream release (0.4.0)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#!/usr/bin/env python
2
2
# -*- coding: utf-8 -*-
 
3
import cluttergtk # must be the first to be imported
3
4
import clutter
4
 
import cluttergtk
5
5
import gobject
6
6
import gtk
7
7
import champlain
8
8
import champlaingtk
9
 
from demomarkers import DemoMarkerLayer
 
9
 
 
10
from markers import create_marker_layer
10
11
 
11
12
class LauncherGTK:
12
 
 
13
 
        def __init__(self):
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
 
 
18
 
                self.window.connect("destroy", lambda w: gtk.main_quit)
19
 
 
20
 
                vbox = gtk.VBox(False, 12)
21
 
 
22
 
                self.view = champlain.View()
23
 
                self.view.set_property("scroll-mode", champlain.SCROLL_MODE_KINETIC)
24
 
        
25
 
                self.layer = DemoMarkerLayer()
26
 
                self.view.add_layer(self.layer)
27
 
 
28
 
                embed = cluttergtk.Embed()
29
 
                embed.set_size_request(640, 480)
30
 
 
31
 
                bbox = gtk.HBox(False, 6)
32
 
                button = gtk.Button(stock=gtk.STOCK_ZOOM_IN)
33
 
                button.connect("clicked", self.zoom_in)
34
 
                bbox.add(button)
35
 
 
36
 
                button = gtk.Button(stock=gtk.STOCK_ZOOM_OUT)
37
 
                button.connect("clicked", self.zoom_out)
38
 
                bbox.add(button)
39
 
 
40
 
                button = gtk.ToggleButton(label="Markers")
41
 
                button.connect("toggled", self.toggle_layer)
42
 
                bbox.add(button)
43
 
 
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)
52
 
                combo.set_active(0)
53
 
                combo.connect("changed", self.map_source_changed)
54
 
                bbox.add(combo)
55
 
 
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)
61
 
 
62
 
                vbox.pack_start(bbox, expand=False, fill=False)
63
 
                vbox.add(embed)
64
 
 
65
 
                self.window.add(vbox)
66
 
                # we need to realize the widget before we get the stage
67
 
                embed.realize()
68
 
 
69
 
                stage = embed.get_stage()
70
 
                self.view.set_size(640, 480)
71
 
                stage.add(self.view)
72
 
 
73
 
                self.window.show_all()
74
 
                self.view.center_on(45.466, -73.75)
75
 
 
76
 
 
77
 
        def zoom_in(self, widget):
78
 
                self.view.zoom_in()
79
 
 
80
 
        def zoom_out(self, widget):
81
 
                self.view.zoom_out()
82
 
 
83
 
        def toggle_layer(self, widget):
84
 
                if widget.get_active():
85
 
                        self.layer.show_all()
86
 
                else:
87
 
                        self.layer.hide()
88
 
 
89
 
        def zoom_changed(self, widget):
90
 
                self.view.set_property("zoom-level", self.spinbutton.get_value_as_int())
91
 
 
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)
98
 
 
99
 
        def map_zoom_changed(self, widget, value):
100
 
                self.spinbutton.set_value(self.view.get_property("zoom-level"))
 
13
    def __init__(self):
 
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)
 
18
 
 
19
        vbox = gtk.VBox(False, 12)
 
20
 
 
21
        self.view = champlain.View()
 
22
        self.view.set_property("scroll-mode", champlain.SCROLL_MODE_KINETIC)
 
23
 
 
24
        self.layer = create_marker_layer(self.view)
 
25
        self.view.add_layer(self.layer)
 
26
 
 
27
        embed = cluttergtk.Embed()
 
28
        embed.set_size_request(640, 480)
 
29
 
 
30
        bbox = gtk.HBox(False, 6)
 
31
        button = gtk.Button(stock=gtk.STOCK_ZOOM_IN)
 
32
        button.connect("clicked", self.zoom_in)
 
33
        bbox.add(button)
 
34
 
 
35
        button = gtk.Button(stock=gtk.STOCK_ZOOM_OUT)
 
36
        button.connect("clicked", self.zoom_out)
 
37
        bbox.add(button)
 
38
 
 
39
        button = gtk.ToggleButton(label="Markers")
 
40
        button.connect("toggled", self.toggle_layer)
 
41
        bbox.add(button)
 
42
 
 
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)
 
51
        combo.set_active(0)
 
52
        combo.connect("changed", self.map_source_changed)
 
53
        bbox.add(combo)
 
54
 
 
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)
 
61
 
 
62
        vbox.pack_start(bbox, expand=False, fill=False)
 
63
        vbox.add(embed)
 
64
 
 
65
        self.window.add(vbox)
 
66
        # we need to realize the widget before we get the stage
 
67
        embed.realize()
 
68
 
 
69
        stage = embed.get_stage()
 
70
        self.view.set_size(640, 480)
 
71
        stage.add(self.view)
 
72
 
 
73
        self.window.show_all()
 
74
        self.view.center_on(45.466, -73.75)
 
75
 
 
76
    def zoom_in(self, widget):
 
77
        self.view.zoom_in()
 
78
 
 
79
    def zoom_out(self, widget):
 
80
        self.view.zoom_out()
 
81
 
 
82
    def toggle_layer(self, widget):
 
83
        if widget.get_active():
 
84
            self.layer.animate_in_all_markers()
 
85
        else:
 
86
            self.layer.animate_out_all_markers()
 
87
 
 
88
    def zoom_changed(self, widget):
 
89
        self.view.set_property("zoom-level", self.spinbutton.get_value_as_int())
 
90
 
 
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)
 
97
 
 
98
    def map_zoom_changed(self, widget, value):
 
99
        self.spinbutton.set_value(self.view.get_property("zoom-level"))
101
100
 
102
101
 
103
102
if __name__ == "__main__":
104
 
        gobject.threads_init()
105
 
        clutter.init()
106
 
        LauncherGTK()
107
 
        gtk.main()
 
103
    gobject.threads_init()
 
104
    LauncherGTK()
 
105
    gtk.main()