def set_dataset(self, dataset): if dataset is None: self.set_title("(no dataset)") else: self.set_title("DS: %s" % dataset.key) # FIXME # this is inconsistent: we expect 'table' to be fixed, # even though we argued before that the dataset.data field # is not necessarily fixed, only the Dataset. table = dataset.get_data() if not isinstance(table, Table): raise TypeError("TableWindow can only use Datasets with a Table as data.") self.tableview.set_table(table) for signal in self._signals: Signals.disconnect(signal) self._signals += [ Signals.connect(table, 'update-columns', (lambda sender: self.tableview.setup_columns())), Signals.connect(dataset,'notify', (lambda sender: self.tableview.queue_draw())) ] # TODO: set metadata widget self._dataset = dataset
def disconnect(self): """ Close the connection to the backend. """ if self.project is not None: self.project.remove_backend(self) self.set(None,None) self.connected = False Signals.emit(self, 'backend-closed') Signals.disconnect(sender=self) Signals.disconnect(receiver=self)
def set_plot(self, plot): # TODO: remove old plot # TODO: connect to plot's title if plot is not None: backend = self.project.request_backend('matplotlib', plot=plot) #backend.canvas.set_size_request(800, 600) sw = uihelper.add_scrollbars(backend.canvas, viewport=True) sw.show() self.vbox.pack_start(sw) else: backend = None # disconnect old stuff if self.backend is not None and self.backend != backend: self.backend.disconnect() for signal in self._signals: Signals.disconnect(signal) self._signals = [] if self.cursor is not None: self.cursor.finish() # connect new backend self.plot = plot self.backend = backend if backend is not None: self._signals.extend( [Signals.connect(plot, "plot-changed", (lambda sender: backend.draw())), Signals.connect(plot, "closed", (lambda sender: Signals.emit(self, 'closed')))] ) try: backend.draw() except: #gtkutils.info_msg("Nothing to plot.") raise # Cursor self.cursor = mpl_selector.Cursor(self.backend.figure) Signals.connect(self.cursor, "move", (lambda sender,x,y: self.set_coords(x,y))) self.cursor.init()
def set(self, project,plot): logging.debug("Assigning project %s to Backend" % repr(project)) # if necessary, detach messages from old project for signal in self.Signals: Signals.disconnect(signal) self.Signals.clear() # assign project and plot self.plot = plot self.project = project if self.project is not None: logging.debug("Connecting Signals.") self.Signals['close'] = Signals.connect( self.project, 'close', self.cb_project_closed) self.Signals['plot-changed'] = Signals.connect( self.plot, 'plot-changed', self.cb_plot_changed) self.Signals['plot-closed'] = Signals.connect( self.plot, 'closed', (lambda sender: self.disconnect()))
def arrange(self, rows=1, cols=1): layers = self.plot.layers n = len(layers) if n > (rows*cols): rows = int((rows*cols) / n) + 1 cols = rows * n #raise ValueError("Not enough rows and cols for all layers!") self.figure.clear() self.figure.axes = [] self.layer_to_axes.clear() self.axes_to_layer.clear() self.layers_cache = [] for signal_list in self.layer_signals.itervalues(): for signal in signal_list: Signals.disconnect(signal) self.layer_signals = {} j = 1 for layer in layers: print "Setting up layer", layer axes = self.figure.add_subplot("%d%d%d" % (rows,cols,j)) self.layer_to_axes[layer] = axes self.axes_to_layer[axes] = layer self.layers_cache.append(layer) print "Connecting to notify of ", layer self.layer_signals[layer] = \ [Signals.connect(layer, 'notify', self.on_update_layer), Signals.connect(layer, 'notify::labels', self.on_update_labels)] j += 1