diff --git a/fluent b/fluent index 908fff0..495bd35 100755 --- a/fluent +++ b/fluent @@ -47,6 +47,16 @@ class FluentApp: self.log_view.show() return self.log_view + def create_small_view(self, str1, str2, int1, int2): + self.small_view = plots.SmallView() + self.small_view.show() + return self.small_view + + def create_large_view(self, str1, str2, int1, int2): + self.large_view = plots.LargeView() + self.large_view.show() + return self.large_view + def create_navigator_view(self, str1, str2, int1, int2): self.navigator_view = navigator.NavigatorView(self.navigator, self) self.navigator_view.show() @@ -66,23 +76,11 @@ class FluentApp: wf_box.pack_end(wf_menu) # Set up plot - pt = self.widget_tree.get_widget('plot_table') + pt = self.widget_tree.get_widget('small_view') plot = plots.SinePlot() plot.show() plot.mark_active(True) - pt.add(plot) - - plot2 = plots.EmptyPlot() - plot2.show() - pt.attach(plot2, 1, 2, 0, 1) - - plot3 = plots.EmptyPlot() - plot3.show() - pt.attach(plot3, 0, 1, 1, 2) - - plot4 = plots.EmptyPlot() - plot4.show() - pt.attach(plot4, 1, 2, 1, 2) +# pt.set_child(plot, 0, 1) # Set up plot toolbar dock = self.widget_tree.get_widget('plot_toolbar_dock') @@ -91,15 +89,20 @@ class FluentApp: # Connect signals signals = {'on_quit1_activate' : (gtk.main_quit), 'on_appwindow_delete_event' : (gtk.main_quit), - 'on_view_log_activate' : (self.toggle_view_log)} + 'on_view_log_activate' : (self.toggle_view_log), + 'on_zoom_in_button_clicked' : (self.on_single_view), + 'on_zoom_out_button_clicked' : (self.on_multiple_view)} self.widget_tree.signal_autoconnect(signals) # Log that we've set up the app now logger.log('debug', 'Program started') def change_plot(self, plot): - pt = self.widget_tree.get_widget('plot_table') - pt.attach(plot, 1, 2, 1, 2) + pt = self.widget_tree.get_widget('small_view') + pt.set_child(plot, 1, 1) +# plot.hide() +# pt.remove(plot) +# plot.unparent() def toggle_view_log(self, menu_item): lw = self.widget_tree.get_widget('logview') @@ -109,6 +112,13 @@ class FluentApp: lw.unparent() logger.log('debug', 'Toggling log window visibility') + def on_single_view(self, button): + nb = self.widget_tree.get_widget('view_notebook') + nb.set_current_page(1) + + def on_multiple_view(self, button): + nb = self.widget_tree.get_widget('view_notebook') + nb.set_current_page(0) if __name__ == '__main__': gnome.program_init(PROGRAM_NAME, VERSION) diff --git a/system/fluent.glade b/system/fluent.glade index 0ae35ce..3ff4956 100644 --- a/system/fluent.glade +++ b/system/fluent.glade @@ -305,12 +305,13 @@ False - + True gtk-zoom-in True True False + False @@ -319,12 +320,13 @@ - + True gtk-zoom-out True True False + False @@ -432,13 +434,79 @@ - + True - 2 - 2 - True - 3 - 3 + False + False + GTK_POS_TOP + False + False + + + + True + create_small_view + 0 + 0 + Mon, 17 Apr 2006 15:44:29 GMT + + + False + True + + + + + + True + label15 + False + False + GTK_JUSTIFY_LEFT + False + False + 0.449999988079 + 0.5 + 0 + 0 + + + tab + + + + + + True + create_large_view + 0 + 0 + Mon, 17 Apr 2006 15:44:42 GMT + + + False + True + + + + + + True + label16 + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + tab + + True diff --git a/system/navigator.py b/system/navigator.py index ff2dc70..d611016 100644 --- a/system/navigator.py +++ b/system/navigator.py @@ -14,7 +14,7 @@ class NavigatorStore (gtk.TreeStore): iter = self.append(None) self.set_value(iter, 0, ('Sine Plot 1')) - self.set_value(iter, 1, (plots.EmptyPlot())) + self.set_value(iter, 1, (plots.EmptyView())) def plot_at(self, path): iter = self.get_iter(path) @@ -39,9 +39,6 @@ class NavigatorView (gtk.TreeView): logger.log('debug', 'Initializing naviagor window') def row_activated_handler(self, widget, path, column): - #self.app.change_window( - # - plot = self.navigator.plot_at(path) logger.log('notice', 'Button pressed') self.app.change_plot(plot) diff --git a/system/plots.py b/system/plots.py index e78b649..3d554e9 100644 --- a/system/plots.py +++ b/system/plots.py @@ -10,11 +10,90 @@ from matplotlib.backends.backend_gtk import NavigationToolbar2GTK as NavigationT import scipy import logger +class SmallView (gtk.Table): + def __init__(self): + gtk.Table.__init__(self, 2, 2, True) + + self.child_views = [[EmptyView(), EmptyView()], + [EmptyView(), EmptyView()]] + self.cols = 2 + self.rows = 2 + + self.active_x = 0 + self.active_y = 0 + + for x in range(self.cols): + for y in range(self.rows): + child = self.child_views[x][y] + child.parent_signalling = child.connect('button_press_event', self.__view_button_event__) + self.attach(child, x, x+1, y, y+1) + + def set_child(self, child, col, row): + cur_widget = self.child_views[col][row] + cur_widget.disconnect(cur_widget.parent_signalling) + self.remove(cur_widget) + self.attach(child, col, col+1, row, row+1) + child.parent_signalling = child.connect('button_press_event', self.__view_button_event__) + self.child_views[col][row] = child + child.show() + + def remove_child(self, col, row): + self.remove(selv.child_views[col, row]) + self.attach(col, row, EmptyView()) + + def show(self): + for x in self.child_views: + for y in x: + y.show() + gtk.Table.show(self) + + def hide(self): + for x in self.child_views: + for y in x: + y.hide() + gtk.Table.hide(self) + + def set_active(self, x, y): + old_focus = self.child_views[self.active_x][self.active_y] + new_focus = self.child_views[x][y] + old_focus.mark_active(False) + new_focus.mark_active(True) + self.active_x = x + self.active_y = y + + def find_child(self, child): + for i, row in enumerate(self.child_views): + for j, v in enumerate(row): + if v == child: + return (i, j) + return None + + def __view_button_event__(self, view, *rest): + loc = self.find_child(view) + if loc: + self.set_active(loc[0], loc[1]) + +class LargeView (gtk.Frame): + def __init__(self): + gtk.Frame.__init__(self) + self.child_view = EmptyView() + self.add(self.child_view) + + def set_child(self, child): + pass + + def hide(self): + self.child_view.hide() + gtk.Frame.hide(self) + + def show(self): + self.child_view.show() + gtk.Frame.show(self) + class Plot (gtk.Frame): def __init__(self): gtk.Frame.__init__(self) - self.canvas = None self.mark_active(False) self.connect('button_press_event', self.on_button_press) @@ -23,9 +102,7 @@ class Plot (gtk.Frame): self.mark_active(True) def get_toolbar(self, window): - self.toolbar = NavigationToolbar(self.canvas, window) - self.toolbar.set_property('show-arrow', False) - return self.toolbar + return None def mark_active(self, active): if active: @@ -33,19 +110,32 @@ class Plot (gtk.Frame): else: self.set_shadow_type(gtk.SHADOW_ETCHED_IN) - -class EmptyPlot (Plot): +class EmptyView (Plot): def __init__(self): Plot.__init__(self) - label = gtk.Label('No plot') - label.show() - self.add(label) + + label = gtk.Label('No view') + ebox = gtk.EventBox() + ebox.add(label) + self.add(ebox) + label.connect('button_press_event', self.on_button_press) - def get_toolbar(self, window): - return None + self.label = label + self.ebox = ebox + self.show() + def show(self): + self.ebox.show() + self.label.show() + Plot.show(self) + + def hide(self): + self.label.hide() + self.ebox.hide() + Plot.hide(self) + class SinePlot (Plot): - + def __init__(self): Plot.__init__(self) fig = Figure(figsize=(5,4), dpi=72) @@ -57,6 +147,11 @@ class SinePlot (Plot): self.add(self.canvas) self.canvas.show() + def get_toolbar(self, window): + self.toolbar = NavigationToolbar(self.canvas, window) + self.toolbar.set_property('show-arrow', False) + return self.toolbar + class ScatterPlot (Plot): def __init__(self): Plot.__init__(self) @@ -69,3 +164,8 @@ class ScatterPlot (Plot): self.add(self.canvas) self.canvas.show() + def get_toolbar(self, window): + self.toolbar = NavigationToolbar(self.canvas, window) + self.toolbar.set_property('show-arrow', False) + return self.toolbar +