class SolarSystem(activity.Activity): def __init__(self, handle): activity.Activity.__init__(self, handle) self.screen = None self.toolbarbox = ToolbarBox(self) self.toolbarbox.connect("show-simulation", self._show_simulation_cb) self.toolbarbox.connect("show-info", self._show_info_cb) self.toolbarbox.connect("go-back", self._go_back_cb) self.toolbarbox.connect("go-forward", self._go_forward_cb) self.toolbarbox.connect("show-orbits", self._show_orbits_cb) self.toolbarbox.connect("show-body", self._show_body_cb) self.toolbarbox.connect("speed-changed", self._speed_changed_cb) self.toolbarbox.connect("zoom-changed", self._zoom_changed_cb) self.set_toolbar_box(self.toolbarbox) self.box = Gtk.VBox() self.set_canvas(self.box) self.area = Area() self.area.connect("body-selected", self._body_selected) self.info_view = InfoView() self.info_view.connect("change-cursor", self._change_cursor) self.info_view.connect("can-go-back", self._can_go_back_cb) self.info_view.connect("can-go-forward", self._can_go_forward_cb) self.set_screen(Screen.SOLAR_SYSTEM) self.show_all() def set_screen(self, screen): if screen == self.screen: return self.screen = screen if self.screen == Screen.SOLAR_SYSTEM: self.toolbarbox.set_can_go_back(False) self.toolbarbox.set_can_go_forward(False) self.toolbarbox.enable_simulation_widgets() if self.info_view.get_parent() == self.box: self.box.remove(self.info_view) if self.area.get_parent() == None: self.box.pack_start(self.area, True, True, 0) self.box.reorder_child(self.area, 0) elif self.screen == Screen.INFO: self.toolbarbox.set_can_go_back(self.info_view.view.can_go_back()) self.toolbarbox.set_can_go_forward(self.info_view.view.can_go_forward()) self.toolbarbox.disable_simulation_widgets() if self.area.get_parent() == self.box: self.box.remove(self.area) if self.info_view.get_parent() == None: self.box.pack_start(self.info_view, True, True, 0) self.box.reorder_child(self.info_view, 0) self.toolbarbox.select_screen(self.screen) self.show_all() def _show_simulation_cb(self, widget): self.set_screen(Screen.SOLAR_SYSTEM) def _show_info_cb(self, widget): if self.screen != Screen.INFO: self.set_screen(Screen.INFO) self.info_view.load_file(get_data_file("index")) def _go_back_cb(self, widget): self.info_view.back() def _go_forward_cb(self, widget): self.info_view.forward() def _show_orbits_cb(self, widget, show): self.area.set_show_orbits(show) def _show_body_cb(self, widget, body, show): self.area.set_body_visible(body, show) def _speed_changed_cb(self, widget, speed): self.area.set_speed(speed) def _zoom_changed_cb(self, widget, zoom): self.area.set_zoom(zoom) def _body_selected(self, widget, body): print body, self.screen, Screen.INFO self.set_screen(Screen.INFO) self.info_view.set_body(body) def _change_cursor(self, widget, cursor): if self.get_window() == None: return cursor_type = None if cursor == Cursor.ARROW: cursor_type = Gdk.CursorType.ARROW elif cursor == Cursor.LOADING: cursor_type = Gdk.CursorType.WATCH if cursor_type != None: self.get_window().set_cursor(Gdk.Cursor(cursor_type)) def _can_go_back_cb(self, widget, can): self.toolbarbox.set_can_go_back(can) def _can_go_forward_cb(self, widget, can): self.toolbarbox.set_can_go_forward(can)
class SolarSystem(Gtk.VBox): __gsignals__ = {"view-changed": (GObject.SIGNAL_RUN_FIRST, None, [int])} def __init__(self): Gtk.VBox.__init__(self) self.screen = None self.area = Area() self.area.connect("body-selected", self._body_selected) self.info_view = InfoView() self.info_view.connect("change-cursor", self._change_cursor) adj = Gtk.Adjustment(10, 0.2, 100, 0.5, 1) s = Gtk.HScale() s.set_draw_value(False) s.set_adjustment(adj) s.connect("value-changed", self.change_zoom) self.pack_start(s, False, False, 0) adj = Gtk.Adjustment(1, 0.1, 5, 0.1, 1) s = Gtk.HScale() s.set_draw_value(False) s.set_adjustment(adj) s.connect("value-changed", self.change_speed) self.pack_start(s, False, False, 0) self.set_screen(Screen.SOLAR_SYSTEM) self.show_all() def _body_selected(self, widget, body): self.set_screen(Screen.INFO) self.info_view.set_body(body) def _change_cursor(self, widget, cursor): if self.get_window() is None: return cursor_type = None if cursor == Cursor.ARROW: cursor_type = Gdk.CursorType.ARROW elif cursor == Cursor.LOADING: cursor_type = Gdk.CursorType.WATCH if cursor_type is not None: self.get_window().set_cursor(Gdk.Cursor(cursor_type)) def change_zoom(self, widget): self.area.zoom = widget.get_value() def change_speed(self, widget): self.area.speed = widget.get_value() def set_screen(self, screen): if screen == self.screen: return self.screen = screen if self.screen == Screen.SOLAR_SYSTEM: if self.info_view.get_parent() == self: self.remove(self.info_view) if self.area.get_parent() is None: self.pack_start(self.area, True, True, 0) self.reorder_child(self.area, 0) elif self.screen == Screen.INFO: if self.area.get_parent() == self: self.remove(self.area) if self.info_view.get_parent() is None: self.pack_start(self.info_view, True, True, 0) self.reorder_child(self.info_view, 0)