Ejemplo n.º 1
0
 def __init__(self, parent_widget, calibConfig):
     super(CalibrationConfigView, self).__init__(parent=parent_widget)
     self.setWindowTitle("Configure Calibration")
     #self.SetWindowIcon(QtGui.QIcon('SomeLocalIcon.png'))
     self.presenter = CalibPresenter(calibConfig)
     
     #This needs to run after we've read & set the original calibConfig
     self.setupUI(calibConfig)
     self.updateWidgetStates()
Ejemplo n.º 2
0
class CalibrationConfigView(QDialog, AllViews):

    def __init__(self, parent_widget, calibConfig):
        super(CalibrationConfigView, self).__init__(parent=parent_widget)
        self.setWindowTitle("Configure Calibration")
        #self.SetWindowIcon(QtGui.QIcon('SomeLocalIcon.png'))
        self.presenter = CalibPresenter(calibConfig)
        
        #This needs to run after we've read & set the original calibConfig
        self.setupUI(calibConfig)
        self.updateWidgetStates()
        
    
    def setupUI(self, mainData):
        ####
        #Creation of supporting layouts
        baseLayout = QVBoxLayout()
        
        ####
        #Select the base directory to look for calibration files
        calibDirGrpBox = QGroupBox("Calibration Directory:")
        self.calibDirTextBox = QLineEdit()
        self.calibDirTextBox.setText(mainData.calibDir)
        self.calibDirTextBox.textChanged.connect(self.calibDirPathChanged)
        self.browseCalibDirBtn = QPushButton("Browse...")
        self.browseCalibDirBtn.clicked.connect(self.calibDirBrowseBtnClick)
        calibDirLayout = QHBoxLayout()
        calibDirLayout.addWidget(self.calibDirTextBox)
        calibDirLayout.addWidget(self.browseCalibDirBtn)
        calibDirGrpBox.setLayout(calibDirLayout)
        baseLayout.addWidget(calibDirGrpBox)
        
        ####
        #Select specific calibration file names to use
        calibFileLayout = QGridLayout()
        calibFileGrpBox = QGroupBox("Calibration Files:")
        nrLabels = len(self.presenter.calibModel.calibFiles)
        self.calibFileLabels = {}
        self.calibFileTextBoxes={}
        self.calibFileBrowseBtns = {}
#        self.browseBtnRegister = {}
        
        colNr = 0
        rowNr = -1
        for i in range(nrLabels):
            uiElemName = self.presenter.calibModel.calibFiles.keys()[i]
            
            self.calibFileLabels[uiElemName] = QLabel("Calibration "+uiElemName+":")
            self.calibFileTextBoxes[uiElemName] = QLineEdit(self.presenter.calibModel.calibFiles[uiElemName])
            self.calibFileTextBoxes[uiElemName].textChanged.connect(self.calibFilePathChanged)
            
            self.calibFileBrowseBtns[uiElemName] = QPushButton("Browse...")
            self.calibFileBrowseBtns[uiElemName].clicked.connect(self.calibFileBrowseBtnClick)
            
            #Lay out UI elements in a 2 column format, with the label occupying 2x columns  
            colNr = i%2
            if (colNr == 0):
                rowNr += 1
            calibFileLayout.addWidget(self.calibFileLabels[uiElemName], (2*rowNr), (2*colNr), 1, 2)
            calibFileLayout.addWidget(self.calibFileTextBoxes[uiElemName], ((2*rowNr)+1), (2*colNr))
            calibFileLayout.addWidget(self.calibFileBrowseBtns[uiElemName], ((2*rowNr)+1), (2*colNr+1))
        calibFileGrpBox.setLayout(calibFileLayout)
        baseLayout.addWidget(calibFileGrpBox)
        
        ####
        #Define temperature of bulb used for calibration
        bulbTLabel = QLabel("Bulb Temperature:")
        self.calibTempTextBox = QLineEdit()#Populate from model
        self.calibTempTextBox.setFixedWidth(40)#Same as integrationTextInputWidth in MainView
        self.calibTempTextBox.setText(str(mainData.bulbTemp))
        self.calibTempTextBox.textChanged.connect(self.bulbTempChanged)
        kTempLabel = QLabel("K")
        calibTempLayout = QHBoxLayout()
        calibTempLayout.addWidget(bulbTLabel)
        calibTempLayout.addWidget(self.calibTempTextBox)
        calibTempLayout.addWidget(kTempLabel)
        calibTempLayout.addStretch(1)
        baseLayout.addLayout(calibTempLayout)
        
        ####
        #Buttons to accept/reject dialog
        okCancelBtnBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
        okCancelBtnBox.accepted.connect(self.okClick)
        okCancelBtnBox.rejected.connect(self.cancelClick)
        baseLayout.addWidget(okCancelBtnBox)
        
        ####
        #Set the base layout
        self.setLayout(baseLayout)
        
    ####
    def calibDirPathChanged(self):
        textBox = self.sender()
        if self.presenter.changeCalibDirTrigger(textBox.text()):
            textBox.setStyleSheet("color: rgb(0, 0, 0);")
        else:
            textBox.setStyleSheet("color: rgb(255, 0, 0);")
        
    
    def calibDirBrowseBtnClick(self):
        currDir = self.presenter.calibModel.calibDir
        newDir = self.showDirBrowserDialog(initDir=currDir, caption="Select a new calibration directory")
        if (newDir == None) or (newDir == ''):
            return
        else:
            self.calibDirTextBox.setText(newDir) #No need to fire an update as it happens automatically
    
    def calibFilePathChanged(self):
        textBox = self.sender()
        calibId = [uiElemName for uiElemName, btn in self.calibFileTextBoxes.iteritems() if (btn == textBox)][0]
        if self.presenter.changeCalibFileTrigger(textBox.text(), calibId):
            textBox.setStyleSheet("color: rgb(0, 0, 0);")
        else:
            textBox.setStyleSheet("color: rgb(255, 0, 0);")
    
    def calibFileBrowseBtnClick(self):
        calibId = [uiElemName for uiElemName, btn in self.calibFileBrowseBtns.iteritems() if (btn == self.sender())][0]
        
        calibFile = self.showFileBrowserDialog(initDir=self.presenter.calibModel.calibDir)
        if (calibFile == None) or (calibFile == ''):
            return
        else:
            self.calibFileTextBoxes[calibId].setText(calibFile)
            
    def bulbTempChanged(self):
        textBox = self.sender()
        if self.presenter.changeBulbTempTrigger(textBox.text()):
            self.calibTempTextBox.setStyleSheet("color: rgb(0, 0, 0);")
        else:
            self.calibTempTextBox.setStyleSheet("color: rgb(255, 0, 0);")
    
    def updateWidgetStates(self, extraData=None):
        mainData = self.presenter.calibModel if (extraData == None) else extraData
        
        for name in mainData.calibFiles.keys():
            self.calibFileTextBoxes[name].setText(mainData.calibFiles[name])
        
    def okClick(self):
        validity = self.presenter.isValidConfig()
        self.parent().presenter.calibConfigUpdateTrigger(self.presenter.calibModel, validity)
        self.accept()
         
     
    def cancelClick(self):
        self.reject()