From: Paulo Cabido Date: Sat, 4 Apr 2009 08:07:24 +0000 (+0300) Subject: Fix Bug 576860: launcher.py demo should be more "pythonistic" X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e9762245988c0e174f00c11f9c9eda71c5f0b6ea;p=libchamplain Fix Bug 576860: launcher.py demo should be more "pythonistic" --- diff --git a/AUTHORS b/AUTHORS index 118026c..ced84f4 100644 --- a/AUTHORS +++ b/AUTHORS @@ -13,4 +13,5 @@ Lionel Dricot Simon Wenner Kritarth Upadhyay Debarshi Ray +Paulo Cabido Sjoerd Simons diff --git a/bindings/python/demos/launcher-gtk.py b/bindings/python/demos/launcher-gtk.py index 2f24b93..0dd6b6d 100755 --- a/bindings/python/demos/launcher-gtk.py +++ b/bindings/python/demos/launcher-gtk.py @@ -7,122 +7,129 @@ import gtk import champlain import champlaingtk -def zoom_in(widget, view): - view.zoom_in() - -def zoom_out(widget, view): - view.zoom_out() - -def toggle_layer(widget, layer): - if widget.get_active(): - layer.show_all() - else: - layer.hide() - -def zoom_changed(spinbutton, view): - view.set_property("zoom-level", spinbutton.get_value_as_int()) - -def map_source_changed(widget, view): - selection = widget.get_active_text() - if selection == "Open Street Map": - view.set_property("map-source", champlain.map_source_new_osm_mapnik()) - elif selection == "Open Arial Map": - view.set_property("map-source", champlain.map_source_new_oam()) - elif selection == "Maps for free - Relief": - view.set_property("map-source", champlain.map_source_new_mff_relief()) - elif selection == "OSM Cycle Map": - view.set_property("map-source", champlain.map_source_new_osm_cyclemap()) - elif selection == "OSM Osmarender": - view.set_property("map-source", champlain.map_source_new_osm_osmarender()) - else: - raise RuntimeException("Illegal state: active text of combobox invalid") - -def map_zoom_changed(view, obj, spinbutton): - spinbutton.set_value(view.get_property("zoom-level")) - -def create_marker_layer(): - layer = champlain.Layer() - - orange = clutter.Color(0xf3, 0x94, 0x07, 0xbb) - white = clutter.Color(0xff, 0xff, 0xff, 0xff) - black = clutter.Color(0x00, 0x00, 0x00, 0xff) - marker = champlain.marker_new_with_label("Montréal", "Airmole 14", black, orange) - marker.set_position(45.528178, -73.563788) - layer.add(marker) - - marker = champlain.marker_new_with_label("New York", "Sans 25", white, orange); - marker.set_position(40.77, -73.98); - layer.add(marker) - - marker = champlain.marker_new_with_label("Saint-Tite-des-Caps", "Serif 12", black, orange); - marker.set_position(47.130885, -70.764141); - layer.add(marker) - - layer.hide() - - return layer - -gobject.threads_init() -clutter.init() - -window = gtk.Window() -window.set_border_width(10) -window.set_title("The world seen through the eyes of a Python") - -window.connect("destroy", lambda w: gtk.main_quit) - -vbox = gtk.VBox(False, 12) - -view = champlain.View() -view.set_property("scroll-mode", champlain.SCROLL_MODE_KINETIC) -view.set_property("zoom-level", 5) - -layer = create_marker_layer() -view.add_layer(layer) - -embed = cluttergtk.Embed() -embed.set_size_request(640, 480) - -bbox = gtk.HBox(False, 6) -button = gtk.Button(stock=gtk.STOCK_ZOOM_IN) -button.connect("clicked", zoom_in, view) -bbox.add(button) - -button = gtk.Button(stock=gtk.STOCK_ZOOM_OUT) -button.connect("clicked", zoom_out, view) -bbox.add(button) - -button = gtk.ToggleButton(label="Markers") -button.connect("toggled", toggle_layer, layer) -bbox.add(button) - -combo = gtk.combo_box_new_text() -combo.append_text("Open Street Map") -combo.append_text("Open Arial Map") -combo.append_text("Maps for free - Relief") -combo.append_text("OSM Cycle Map") -combo.append_text("OSM Osmarender") -combo.set_active(0) -combo.connect("changed", map_source_changed, view) -bbox.add(combo) - -button = gtk.SpinButton(gtk.Adjustment(lower=0, upper=20, value=1)) -button.connect("changed", zoom_changed, view) -view.connect("notify::zoom-level", map_zoom_changed, button) -bbox.add(button) - -vbox.pack_start(bbox, expand=False, fill=False) -vbox.add(embed) - -window.add(vbox) -# we need to realize the widget before we get the stage -embed.realize() - -stage = embed.get_stage() -view.set_size(640, 480) -stage.add(view) - -window.show_all() -view.center_on(45.466, -73.75) -gtk.main() - +class champlainDemo: + def zoom_in(widget, view): + view.zoom_in() + + def zoom_out(widget, view): + view.zoom_out() + + def toggle_layer(widget, layer): + if widget.get_active(): + layer.show_all() + else: + layer.hide() + + def zoom_changed(spinbutton, view): + view.set_property("zoom-level", spinbutton.get_value_as_int()) + + def map_source_changed(widget, view): + selection = widget.get_active_text() + if selection == "Open Street Map": + view.set_property("map-source", champlain.map_source_new_osm_mapnik()) + elif selection == "Open Arial Map": + view.set_property("map-source", champlain.map_source_new_oam()) + elif selection == "Maps for free - Relief": + view.set_property("map-source", champlain.map_source_new_mff_relief()) + elif selection == "OSM Cycle Map": + view.set_property("map-source", champlain.map_source_new_osm_cyclemap()) + elif selection == "OSM Osmarender": + view.set_property("map-source", champlain.map_source_new_osm_osmarender()) + else: + raise RuntimeException("Illegal state: active text of combobox invalid") + + def map_zoom_changed(view, obj, spinbutton): + spinbutton.set_value(view.get_property("zoom-level")) + + def create_marker_layer(): + layer = champlain.Layer() + + orange = clutter.Color(0xf3, 0x94, 0x07, 0xbb) + white = clutter.Color(0xff, 0xff, 0xff, 0xff) + black = clutter.Color(0x00, 0x00, 0x00, 0xff) + marker = champlain.marker_new_with_label("Montréal", "Airmole 14", black, orange) + marker.set_position(45.528178, -73.563788) + layer.add(marker) + + marker = champlain.marker_new_with_label("New York", "Sans 25", white, orange); + marker.set_position(40.77, -73.98); + layer.add(marker) + + marker = champlain.marker_new_with_label("Saint-Tite-des-Caps", "Serif 12", black, orange); + marker.set_position(47.130885, -70.764141); + layer.add(marker) + + layer.hide() + + return layer + + gobject.threads_init() + clutter.init() + + window = gtk.Window() + window.set_border_width(10) + window.set_title("The world seen through the eyes of a Python") + + window.connect("destroy", lambda w: gtk.main_quit) + + vbox = gtk.VBox(False, 12) + + view = champlain.View() + view.set_property("scroll-mode", champlain.SCROLL_MODE_KINETIC) + view.set_property("zoom-level", 5) + + layer = create_marker_layer() + view.add_layer(layer) + + embed = cluttergtk.Embed() + embed.set_size_request(640, 480) + + bbox = gtk.HBox(False, 6) + button = gtk.Button(stock=gtk.STOCK_ZOOM_IN) + button.connect("clicked", zoom_in, view) + bbox.add(button) + + button = gtk.Button(stock=gtk.STOCK_ZOOM_OUT) + button.connect("clicked", zoom_out, view) + bbox.add(button) + + button = gtk.ToggleButton(label="Markers") + button.connect("toggled", toggle_layer, layer) + bbox.add(button) + + combo = gtk.combo_box_new_text() + combo.append_text("Open Street Map") + combo.append_text("Open Arial Map") + combo.append_text("Maps for free - Relief") + combo.append_text("OSM Cycle Map") + combo.append_text("OSM Osmarender") + combo.set_active(0) + combo.connect("changed", map_source_changed, view) + bbox.add(combo) + + button = gtk.SpinButton(gtk.Adjustment(lower=0, upper=20, value=1, step_incr=1)) + button.connect("changed", zoom_changed, view) + view.connect("notify::zoom-level", map_zoom_changed, button) + bbox.add(button) + + vbox.pack_start(bbox, expand=False, fill=False) + vbox.add(embed) + + window.add(vbox) + # we need to realize the widget before we get the stage + embed.realize() + + stage = embed.get_stage() + view.set_size(640, 480) + stage.add(view) + + window.show_all() + view.center_on(45.466, -73.75) + +def main(): + gtk.main() + return 0 + +if __name__ == "__main__": + champlainDemo() + main()