myToolbar.py 5.33 KB
# -*- coding: utf-8 -*-
"""
Created on Thu Jul  5 12:17:30 2018

@author: Usuario
"""


from PyQt5.QtCore import QSettings
from PyQt5.QtWidgets import QAction, QFileDialog, QWidget
from threading import Thread
from subclasses.controllayouts import LaserControlLayout, LaserScanLayout

#%%
class myToolbarMenu(QWidget):
    """
    This will create a toolbar menu
    """
    
    def __init__(self, win):
        super().__init__()
        
        self.MainGuiWindow = win
        self.sbsDicc = dict()
        self.cbsDicc = dict()
        self.incorporate_toolbar(self.MainGuiWindow)
        self.fillSpinBoxesDict()
        self.fillCheckBoxesDict()
        
        
    def fillSpinBoxesDict(self):
        
        for l in LaserControlLayout._registry:
            for sb_name in l.spinboxes:
                self.sbsDicc[sb_name] = l.spinboxes[sb_name]
        for l in LaserScanLayout._registry:
            for sb_name in l.spinboxes:
                self.sbsDicc['_'.join([l.name, sb_name])] = l.spinboxes[sb_name]
        
    
    def fillCheckBoxesDict(self):
        
        for l in LaserControlLayout._registry:
            for cb_name in l.checkboxes:
                self.cbsDicc[cb_name] = l.checkboxes[cb_name]
                
    

    def createElectrodesDict(self):
        d = dict()
        for l in LaserControlLayout._registry:
            if l.name == 'electrodes':
                for sb_name in l.spinboxes:
                    d[sb_name] = l.spinboxes[sb_name]
        return d
        
    def incorporate_toolbar(self, win):
    
        menuBar = win.menuBar
        #statusBar = QtGui.QStatusBar(self)
    
        saveAct = QAction('Save', win)    
        loadAct = QAction('Load', win)
        saveAsAct = QAction('Save as' , win)
        openFromAct = QAction('open from', win)
        loadElectrodesAct = QAction('Load electrodes', win)
        

        menubar = menuBar
        fileMenu = menubar.addMenu('&File')
        
        fileMenu.addAction(saveAct)
        fileMenu.addAction(loadAct)
        fileMenu.addAction(saveAsAct)
        fileMenu.addAction(openFromAct)
        fileMenu.addAction(loadElectrodesAct)
        
        
        
        viewMenu = menubar.addMenu('Monitor')
        viewWebcams = QAction('View webcams', win, checkable=True)
        viewWebcams.setChecked(False)
        viewMenu.addAction(viewWebcams)
        
        saveAct.triggered.connect(lambda: self.save())
        loadAct.triggered.connect(lambda: self.load())
        loadElectrodesAct.triggered.connect(lambda: self.load_electrodes(win))
        saveAsAct.triggered.connect(lambda: self.save_as(win))
        openFromAct.triggered.connect(lambda: self.open_from(win))
        viewWebcams.toggled.connect(lambda: self.putWebcams(viewWebcams.isChecked()) )


    def save(self, location='config.ini'):

        settings = QSettings(str(location), QSettings.IniFormat)
        settings.beginGroup('Ventana')

        for text, spinb in self.sbsDicc.items():
            settings.setValue(text, spinb.value())
        
        for text, checkb in self.cbsDicc.items():
            settings.setValue(text, checkb.isChecked())

        settings.endGroup()

        
    def load(self, location='config.ini'):

        settings = QSettings(location, QSettings.IniFormat)
        settings.beginGroup('Ventana')

        for text, spinb in self.sbsDicc.items():
            spinbox_saved_value = settings.value(text)
            try:
                spinb.setValue( float(spinbox_saved_value) )
            except TypeError:
                spinb.setValue( float(spinb.value()) )

        for text, checkb in self.cbsDicc.items():
            checkbox_saved_value = settings.value(text)
            if checkbox_saved_value in ['true', 'True', True]:
                checkb.setChecked(True)
            else:
                checkb.setChecked(False)

        settings.endGroup()
    
    def save_as(self, window):
        name = QFileDialog.getSaveFileName(window, 'Save File')
        if not name[0]:
            print('Saving was canceled')
            return 0
        filename = name[0]+'.ini'
        file = open(filename, 'w+')
        file.close()
        self.save( filename )
        print('saving to %s' % filename)
        
    def open_from(self, window):
        name = QFileDialog.getOpenFileName(window, 'Open File')
        
        if not name[0]:
            print('Opening was canceled')
            return 0
        self.load(name[0])
        
    def load_electrodes(self, window):
        name = QFileDialog.getOpenFileName(window, 'Open File')
        
        if not name[0]:
            print('Opening was canceled')
            return 0
        
        settings = QSettings(name[0], QSettings.IniFormat)
            
        settings.beginGroup('Ventana')

        for text, spinb in self.createElectrodesDict().items():
            spinbox_saved_value = settings.value(text)
            try:
                spinb.setValue( float(spinbox_saved_value) )
            except TypeError:
                spinb.setValue( float(spinb.value()) )
        settings.endGroup()
  
        
    def startWebcamsThread(self):
        exec(open('C:\\Users\\Usuario\\Documents\\control_app\\webcams.py').read())
        
    def putWebcams(self, checked):
        if checked:
            t_webcams = Thread(target=self.startWebcamsThread, args=())
            t_webcams.start()
        else:
            pass