コード例 #1
0
    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
コード例 #2
0
 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)
コード例 #3
0
    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()
コード例 #4
0
    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()))
コード例 #5
0
    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