Esempio n. 1
0
 def add_plot(self, title):
     """
     """
     self.widget = PlotWidget(self)
     self.widget.setup_widget(title)
     self.centralWidget().layout().addWidget(self.widget)
     
     #---Register plot to manager    
     self.manager.add_plot(self.widget.plot)
Esempio n. 2
0
class MainWindow(qg.QMainWindow):
    """This one generates the main window and orchestrates all other widgets
    """
    def __init__(self):
        qg.QMainWindow.__init__(self)
        self.setWindowTitle("Neuron Database")
        self.setWindowIcon(get_icon('guiqwt.png'))
        self.setAttribute(qc.Qt.WA_DeleteOnClose,True)
        
        hlayout = qg.QHBoxLayout()
        central_widget = qg.QWidget(self)
        central_widget.setLayout(hlayout)
        self.setCentralWidget(central_widget)
        #---guiqwt plot manager
        self.manager = PlotManager(self)
        #---
        self.add_plot("1")
        
        self._constructFileMenu()
        self._constructEditMenu()
        self._constructConsoleWidget(central_widget)

    def _constructFileMenu(self):
        """
        """
        file_menu = self.menuBar().addMenu("File")
        quit_action = create_action(self, "Quit",
                                    shortcut="Ctrl+Q",
                                    icon=get_std_icon("DialogCloseButton"),
                                    tip="Quit application",
                                    triggered=self.close)
        openDB_action = create_action(self, "Open database",
                                     shortcut ="Ctrl+D",
                                     tip ="Open an existing database into scroll area",
                                     triggered=self.open_Database)
        createDB_action = create_action(self,"New database",
                                        shortcut ="Ctrl+N",
                                        tip ="Create a new database",
                                        triggered=self.create_Database)
        closeDB_action = create_action(self,"Close database",
                                       shortcut ="Ctrl+W",
                                       tip = "Close an open database",
                                       triggered=self.close_Database)
        
        add_actions(file_menu, (quit_action, openDB_action, createDB_action,
                                closeDB_action))
        
    def _constructEditMenu(self):
        """
        """
        edit_menu = self.menuBar().addMenu("Edit")
        editparam1_action = create_action(self, "Import dataset",
                                          shortcut ="Ctrl+A",
                                          tip ="Import data from matlab structure",
                                          triggered=self.add_newData)
        deleteNode_action = create_action(self, "Delete neuron",
                                          tip ="Delete neuron from database",
                                          triggered=self.delete_Neuron)
        add_actions(edit_menu, (editparam1_action, deleteNode_action))
        

    def _constructConsoleWidget(self, central_widget):
        """
        """
        font = qg.QFont("Courier new")
        font.setPointSize(12)
        ns = {'win': self, 'widget': central_widget}
        msg = "Try for example: widget.set_text('foobar') or win.close()"
        
        # Note: by default, the internal shell is multithreaded which is safer 
        # but not compatible with graphical user interface creation.
        # For example, if you need to plot data with Matplotlib, you will need 
        # to pass the option: multithreaded=False
        self.console = cons = InternalShell(self, namespace=ns, message=msg)
        
        # Setup the console widget
        cons.set_font(font)
        cons.set_codecompletion_auto(True)
        cons.set_calltips(True)
        cons.setup_calltips(size=600, font=font)
        cons.setup_completion(size=(300, 100), font=font)
        console_dock = qg.QDockWidget("Console", self)
        console_dock.setWidget(cons)
        
        # Add the console widget to window as a dockwidget
        self.addDockWidget(qc.Qt.BottomDockWidgetArea, console_dock)
        
            
    def add_plot(self, title):
        """
        """
        self.widget = PlotWidget(self)
        self.widget.setup_widget(title)
        self.centralWidget().layout().addWidget(self.widget)
        
        #---Register plot to manager    
        self.manager.add_plot(self.widget.plot)

        
    def setup_window(self):
        """Add toolbar and register manager tools
        """
        toolbar = self.addToolBar("tools")
        self.manager.add_toolbar(toolbar, id(toolbar))
        self.manager.register_all_curve_tools()
        
    def closeEvent(self, event):
        """
        """
        self.console.exit_interpreter()
        event.accept()       

    def findOpenDBases(self):
        """
        """
        return self.widget.databaseScroll.DataBasesOpen
        
    ### popup actions: 
        
    def add_newData(self):
        """
        """
        DBname = Popup(self.findOpenDBases(), 
                       textMessage = "add data to a database:",
                       style = 4)
                       
        if DBname.selection != None and DBname.selection != []:
            
            name = DBname.selection[1]
            neuronName = DBname.selection[2]
            if self.widget.databaseScroll.isOpen(name):
                addData = Dbase(DBaseName = name)
                if not addData.Data.Exists(neuronName):
                    addData.AddData(neuronName, Directory = DBname.selection[0])
                
                    self.widget.databaseScroll.refreshTree()
                    print 'data import complete.'
                else :
                    print ' '
                    print 'database already has Neuron named {0}'.format(neuronName)
            else:
                print 'database not open.'
                

    def open_Database(self):
        """
        """
        DBname = Popup(self.findOpenDBases(), 
                       textMessage = "select database to open",
                       style = 3)
                       
        if DBname.selection != None and len(DBname.selection) > 1:
            print DBname.selection
            
            loadedDBname = DBname.selection
            self.widget.databaseScroll.AppendDatabasesOpen(loadedDBname)
            self.widget.databaseScroll.OpenDatabases(loadedDBname)
            #self.widget.databaseScroll.refreshTree()
            #print '{0} database opened.'.format(loadedDBname)
            
        else:
            pass
         
                
    def create_Database(self):
        """
        """        
        DBname = Popup(self.findOpenDBases(), 
                       textMessage = "enter name of new database",
                       style = 2)
                       
        if DBname.selection != None :
            newDBname = DBname.selection
            if newDBname[-3:] != '.h5':
                newDBname = newDBname + '.h5'
            self.widget.databaseScroll.AppendDatabasesOpen(newDBname)
            self.widget.databaseScroll.refreshTree()
            #print '{0} database created.'.format(newDBname)
        else:
            pass
            
        
    def delete_Neuron(self):
        """
        """
        DBname = Popup(self.findOpenDBases(), 
                       textMessage = "enter name of neuron to delete",
                       style = 1)
                       
        if DBname.selection != None :
            try: 
                name = DBname.selection[0]
                if self.widget.databaseScroll.isOpen(name):
                    rmData = Dbase(DBaseName = name)
                    neuron = DBname.selection[1]
                    rmData.Data.RemoveNeuron(neuron, option = 1)
                    rmData.Data.CloseDatabase()
                    self.widget.databaseScroll.refreshTree()
                    print 'successfully deleted', neuron
                else:
                    print 'database not open.'
            except (ValueError, TypeError):
                
                print 'sorry, could not delete. please make sure data exists.'
        else:
             pass
         
         
         
    def close_Database(self):
        """
        """
        DBname = Popup(self.findOpenDBases(), 
                       textMessage = "select database to close",
                       style = 0)
        
        if DBname.selection != None :

            self.widget.databaseScroll.CloseDatabase(DBname.selection)
            self.widget.databaseScroll.refreshTree()
            print '{0} closed.'.format(DBname.selection)        
        else:
            pass