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()
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()