diff --git a/system/plots.py b/system/plots.py index 359cb82..b6c2f21 100644 --- a/system/plots.py +++ b/system/plots.py @@ -67,7 +67,21 @@ class ViewFrame (gtk.Frame): self.view_frames = view_frames self.empty_view = EmptyView() self._button_event = None - + + ## Set up a VBox with a label wrapped in an event box. + label = gtk.Label() + ebox = gtk.EventBox() + ebox.add(label) + vbox = gtk.VBox() + vbox.pack_start(ebox, expand=False) + vbox.pack_start(gtk.HSeparator(), expand=False) + + ## Keep the references for later use. + self._vbox = vbox + self._ebox = ebox + self._view_title = label + self.add(vbox) + view_frames.append(self) if len(view_frames) == 1: self.focus() @@ -84,9 +98,10 @@ class ViewFrame (gtk.Frame): # Set view self._view = self.empty_view self._view.connect("button-press-event", self.on_button_press_event) - self.add(self._view) + self._vbox.add(self._view) + self._view_title.set_text(self._view.title) + self.show_all() self._view.show() - self.show() def focus(self): """Gets focus and ensures that no other window is in focus.""" @@ -98,6 +113,7 @@ class ViewFrame (gtk.Frame): frame.unfocus() self.set_shadow_type(gtk.SHADOW_IN) + self._ebox.set_state(gtk.STATE_ACTIVE) self.focused = True self.emit('focus-changed', self, True) return self @@ -108,6 +124,7 @@ class ViewFrame (gtk.Frame): return self.set_shadow_type(gtk.SHADOW_OUT) + self._ebox.set_state(gtk.STATE_NORMAL) self.focused = False self.emit('focus-changed', self, False) @@ -123,9 +140,8 @@ class ViewFrame (gtk.Frame): return # detach view from current parent - view_parent = view.get_parent() - if view_parent: - view_parent.set_view(None) + if view._view_frame: + view._view_frame.set_view(None) # switch which widget we are listening to if self._button_event: @@ -135,11 +151,16 @@ class ViewFrame (gtk.Frame): self.on_button_press_event) # remove old view, set new view - self._view.hide() - self.remove(self._view) - self.add(view) + if self._view: + self._view.hide() + self._vbox.remove(self._view) + self._view._view_frame = None + + self._view_title.set_text(view.title) + self._vbox.add(view) view.show() + view._view_frame = self self._view = view def get_view(self): @@ -262,7 +283,7 @@ class View (gtk.Frame): gtk.Frame.__init__(self) self.title = title self.set_shadow_type(gtk.SHADOW_NONE) - self.set_label(title) + self._view_frame = None def get_toolbar(self): return None @@ -294,11 +315,12 @@ class Plot (View): self._toolbar = PlotToolbar(self) self.canvas.add_events(gtk.gdk.ENTER_NOTIFY_MASK) self.current_dim = None + self._current_selection = None def set_frozen(self, frozen): """A frozen plot will not be updated when the current selection is changed.""" self._frozen = frozen - if not frozen: + if not frozen and self._current_selection != None: self.set_current_selection(self._current_selection) def get_title(self): @@ -316,13 +338,12 @@ class Plot (View): 3.) the selections dim_name is the plot's dimension. """ + self._current_selection = selection if self._frozen \ or not self.get_property('visible') \ or self.current_dim != dim_name: return - else: - self._current_selection = selection - + self.set_current_selection(selection) def set_selection_listener(self, listener): @@ -726,10 +747,6 @@ class DefaultPlotMode (PlotMode): def __init__(self, plot): PlotMode.__init__(self, plot, 'default', 'Default mode', 'cursor.png') - def activate(self): - for k, v in self.canvas.callbacks.items(): - print k, v - class PanPlotMode (PlotMode): def __init__(self, plot):