def updateppDisplay(self): for pppTab in list(self.sourceCodeEdits.values()): self.sourceTabs.removeTab(self.sourceTabs.indexOf(pppTab)) self.sourceCodeEdits = dict() for name, text in self.pulseProgram.source.items(): textEdit = PulseProgramSourceEdit() textEdit.setupUi(textEdit, extraKeywords1=self.definitionWords, extraKeywords2=[key for key in OPS]) textEdit.setPlainText(text) self.sourceCodeEdits[name] = textEdit self.sourceTabs.addTab(textEdit, name) textEdit.setReadOnly(self.currentContext.pulseProgramMode != 'pp')
def updatepppDisplay(self): for pppTab in list(self.pppCodeEdits.values()): self.sourceTabs.removeTab(self.sourceTabs.indexOf(pppTab)) self.pppCodeEdits = dict() if self.currentContext.pulseProgramMode == 'ppp': for name, text in [(self.pppSourceFile, self.pppSource)]: textEdit = PulseProgramSourceEdit(mode='ppp') encodingStrings = [ encoding for encoding in EncodingDict.keys() if type(encoding) == str ] textEdit.setupUi(textEdit, extraKeywords1=self.definitionWords + encodingStrings, extraKeywords2=self.builtinWords) textEdit.setPlainText(text) self.pppCodeEdits[name] = textEdit self.sourceTabs.addTab(textEdit, name)
def setupUi(self, parent): super(ScriptingUi, self).setupUi(parent) self.configname = 'Scripting' #setup console self.consoleMaximumLines = self.config.get(self.configname+'.consoleMaximumLinesNew', 100) self.consoleEnable = self.config.get(self.configname+'.consoleEnable', True) self.consoleClearButton.clicked.connect( self.onClearConsole ) self.linesSpinBox.valueChanged.connect( self.onConsoleMaximumLinesChanged ) self.linesSpinBox.setValue( self.consoleMaximumLines ) self.checkBoxEnableConsole.stateChanged.connect( self.onEnableConsole ) self.checkBoxEnableConsole.setChecked( self.consoleEnable ) #setup editor self.textEdit = PulseProgramSourceEdit() self.textEdit.setupUi(self.textEdit, extraKeywords1=[], extraKeywords2=scriptFunctions) self.textEdit.textEdit.currentLineMarkerNum = 9 self.textEdit.textEdit.markerDefine(QsciScintilla.Background, self.textEdit.textEdit.currentLineMarkerNum) #This is a marker that highlights the background self.textEdit.textEdit.setMarkerBackgroundColor(QtGui.QColor(0xd0, 0xff, 0xd0), self.textEdit.textEdit.currentLineMarkerNum) self.textEdit.setPlainText(self.script.code) self.splitterVertical.insertWidget(0, self.textEdit) #setup documentation list self.getDocs() self.docTreeWidget.setHeaderLabels(['Available Script Functions']) for funcDef, funcDesc in list(self.docDict.items()): itemDef = QtWidgets.QTreeWidgetItem(self.docTreeWidget, [funcDef]) self.docTreeWidget.addTopLevelItem(itemDef) QtWidgets.QTreeWidgetItem(itemDef, [funcDesc]) self.docTreeWidget.setWordWrap(True) #load file self.script.fullname = self.config.get( self.configname+'.script.fullname', '' ) if self.script.fullname != '' and os.path.exists(self.script.fullname): with open(self.script.fullname, "r") as f: self.script.code = f.read() else: self.script.code = '' #setup filename combo box self.recentFiles = self.config.get( self.configname+'.recentFiles', dict() ) self.recentFiles = {k: v for k,v in self.recentFiles.items() if os.path.exists(v)} #removes files from dict if file paths no longer exist self.filenameComboBox.setInsertPolicy(1) self.filenameComboBox.setMaxCount(10) self.filenameComboBox.addItems( [shortname for shortname, fullname in list(self.recentFiles.items()) if os.path.exists(fullname)] ) self.filenameComboBox.currentIndexChanged[str].connect( self.onFilenameChange ) self.removeCurrent.clicked.connect( self.onRemoveCurrent ) self.filenameComboBox.setValidator( QtGui.QRegExpValidator() ) #verifies that files typed into combo box can be used self.updateValidator() #connect buttons self.script.repeat = self.config.get(self.configname+'.repeat',False) self.repeatButton.setChecked(self.script.repeat) self.repeatButton.clicked.connect( self.onRepeat ) self.script.slow = self.config.get(self.configname+'.slow',False) self.slowButton.setChecked(self.script.slow) self.slowButton.clicked.connect( self.onSlow ) self.revert = self.config.get(self.configname+'.revert',False) self.revertButton.setChecked(self.revert) self.revertButton.clicked.connect( self.onRevert ) #File control actions self.actionOpen.triggered.connect( self.onLoad ) self.actionSave.triggered.connect( self.onSave ) self.actionReset.triggered.connect(self.onReset) self.actionNew.triggered.connect( self.onNew ) #Script control actions self.actionStartScript.triggered.connect( self.onStartScript ) self.actionPauseScript.triggered.connect( self.onPauseScript ) self.actionStopScript.triggered.connect( self.onStopScript ) self.actionPauseScriptAndScan.triggered.connect( self.onPauseScriptAndScan ) self.actionStopScriptAndScan.triggered.connect( self.onStopScriptAndScan ) #Script finished signal self.script.finished.connect( self.onFinished ) self.loadFile(self.script.fullname) self.populateTree() #populates file explorer tree widget #Connect buttons for fileTreeWidget self.fileTreeWidget.itemDoubleClicked.connect(self.onDoubleClick) self.expandTree = QtWidgets.QAction("Expand All", self) self.collapseTree = QtWidgets.QAction("Collapse All", self) self.expandChild = QtWidgets.QAction("Expand Selected", self) self.collapseChild = QtWidgets.QAction("Collapse Selected", self) self.expandTree.triggered.connect(partial(self.onExpandOrCollapse, True, True)) self.collapseTree.triggered.connect(partial(self.onExpandOrCollapse, True, False)) self.expandChild.triggered.connect(partial(self.onExpandOrCollapse, False, True)) self.collapseChild.triggered.connect(partial(self.onExpandOrCollapse, False, False)) self.fileTreeWidget.addAction(self.expandTree) self.fileTreeWidget.addAction(self.collapseTree) self.fileTreeWidget.addAction(self.expandChild) self.fileTreeWidget.addAction(self.collapseChild) self.fileTreeWidget.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) self.setWindowTitle(self.configname) self.setWindowIcon(QtGui.QIcon(":/other/icons/Terminal-icon.png")) self.statusLabel.setText("Idle")
def setupUi(self, parent): super(UserFunctionsEditor, self).setupUi(parent) self.tableModel = EvalTableModel(self.globalDict) self.tableView.setModel(self.tableModel) self.tableView.setSortingEnabled(True) # triggers sorting self.delegate = MagnitudeSpinBoxDelegate(self.globalDict) self.tableView.setItemDelegateForColumn(1, self.delegate) self.addEvalRow.clicked.connect(self.onAddRow) self.removeEvalRow.clicked.connect(self.onRemoveRow) #initialize default options self.optionsWindow = OptionsWindow(self.config, 'UserFunctionsEditorOptions') self.optionsWindow.setupUi(self.optionsWindow) self.actionOptions.triggered.connect(self.onOpenOptions) self.optionsWindow.OptionsChangedSignal.connect(self.updateOptions) self.updateOptions() if self.optionsWindow.defaultExpand: onExpandOrCollapse(self.fileTreeWidget, True, True) #hot keys for copy/past and sorting self.filter = KeyListFilter( [QtCore.Qt.Key_PageUp, QtCore.Qt.Key_PageDown]) self.filter.keyPressed.connect(self.onReorder) self.tableView.installEventFilter(self.filter) QtWidgets.QShortcut(QtGui.QKeySequence(QtGui.QKeySequence.Copy), self, self.copy_to_clipboard) QtWidgets.QShortcut(QtGui.QKeySequence(QtGui.QKeySequence.Paste), self, self.paste_from_clipboard) #setup editor self.textEdit = PulseProgramSourceEdit() self.textEdit.setupUi(self.textEdit, extraKeywords1=[], extraKeywords2=[]) self.textEdit.textEdit.currentLineMarkerNum = 9 self.textEdit.textEdit.markerDefine( QsciScintilla.Background, self.textEdit.textEdit.currentLineMarkerNum ) #This is a marker that highlights the background self.textEdit.textEdit.setMarkerBackgroundColor( QtGui.QColor(0xd0, 0xff, 0xd0), self.textEdit.textEdit.currentLineMarkerNum) self.textEdit.setPlainText(self.script.code) self.splitterVertical.insertWidget(0, self.textEdit) #load recent files, also checks if data was saved correctly and if files still exist savedfiles = self.config.get(self.configname + '.recentFiles', OrderedList()) self.initRecentFiles(savedfiles) self.initComboBox() self.tableModel.exprList = self.config.get( self.configname + '.evalstr', [ExpressionValue(None, self.globalDict)]) if not isinstance(self.tableModel.exprList, list) or not isinstance( self.tableModel.exprList[0], ExpressionValue): self.tableModel.exprList = [ExpressionValue(None, self.globalDict)] self.tableModel.dataChanged.emit(QtCore.QModelIndex(), QtCore.QModelIndex()) self.tableModel.layoutChanged.emit() self.tableModel.connectAllExprVals() #load last opened file self.script.fullname = self.config.get( self.configname + '.script.fullname', '') self.initLoad() #connect buttons self.actionOpen.triggered.connect(self.onLoad) self.actionSave.triggered.connect(self.onSave) self.actionNew.triggered.connect(self.onNew) self.setWindowTitle(self.configname) self.setWindowIcon(QtGui.QIcon(":/latex/icons/FuncIcon2.png")) self.statusLabel.setText("") self.tableModel.updateData()
def setupUi(self, parent): super(UserFunctionsEditor, self).setupUi(parent) self.configname = 'UserFunctionsEditor' self.fileTreeWidget.setHeaderLabels(['User Function Files']) self.populateTree() self.tableModel = EvalTableModel(self.globalDict) self.tableView.setModel(self.tableModel) self.tableView.setSortingEnabled(True) # triggers sorting self.delegate = MagnitudeSpinBoxDelegate(self.globalDict) self.tableView.setItemDelegateForColumn(1, self.delegate) self.addEvalRow.clicked.connect(self.onAddRow) self.removeEvalRow.clicked.connect(self.onRemoveRow) #hot keys for copy/past and sorting self.filter = KeyListFilter( [QtCore.Qt.Key_PageUp, QtCore.Qt.Key_PageDown]) self.filter.keyPressed.connect(self.onReorder) self.tableView.installEventFilter(self.filter) QtWidgets.QShortcut(QtGui.QKeySequence(QtGui.QKeySequence.Copy), self, self.copy_to_clipboard) QtWidgets.QShortcut(QtGui.QKeySequence(QtGui.QKeySequence.Paste), self, self.paste_from_clipboard) #setup editor self.textEdit = PulseProgramSourceEdit() self.textEdit.setupUi(self.textEdit, extraKeywords1=[], extraKeywords2=[]) self.textEdit.textEdit.currentLineMarkerNum = 9 self.textEdit.textEdit.markerDefine( QsciScintilla.Background, self.textEdit.textEdit.currentLineMarkerNum ) #This is a marker that highlights the background self.textEdit.textEdit.setMarkerBackgroundColor( QtGui.QColor(0xd0, 0xff, 0xd0), self.textEdit.textEdit.currentLineMarkerNum) self.textEdit.setPlainText(self.script.code) self.splitterVertical.insertWidget(0, self.textEdit) #load file self.script.fullname = self.config.get( self.configname + '.script.fullname', '') self.tableModel.exprList = self.config.get( self.configname + '.evalstr', [ExpressionValue(None, self.globalDict)]) if not isinstance(self.tableModel.exprList, list) or not isinstance( self.tableModel.exprList[0], ExpressionValue): self.tableModel.exprList = [ExpressionValue(None, self.globalDict)] self.tableModel.dataChanged.emit(QtCore.QModelIndex(), QtCore.QModelIndex()) self.tableModel.layoutChanged.emit() self.tableModel.connectAllExprVals() if self.script.fullname != '' and os.path.exists(self.script.fullname): with open(self.script.fullname, "r") as f: self.script.code = f.read() else: self.script.code = '' #setup filename combo box self.recentFiles = self.config.get(self.configname + '.recentFiles', dict()) self.recentFiles = { k: v for k, v in self.recentFiles.items() if os.path.exists(v) } #removes files from dict if file paths no longer exist self.filenameComboBox.setInsertPolicy(1) self.filenameComboBox.setMaxCount(10) self.filenameComboBox.addItems([ shortname for shortname, fullname in list(self.recentFiles.items()) if os.path.exists(fullname) ]) self.filenameComboBox.currentIndexChanged[str].connect( self.onFilenameChange) self.removeCurrent.clicked.connect(self.onRemoveCurrent) self.filenameComboBox.setValidator(QtGui.QRegExpValidator( )) #verifies that files typed into combo box can be used self.updateValidator() #connect buttons self.actionOpen.triggered.connect(self.onLoad) self.actionSave.triggered.connect(self.onSave) self.actionNew.triggered.connect(self.onNew) self.fileTreeWidget.itemDoubleClicked.connect(self.onDoubleClick) self.loadFile(self.script.fullname) self.expandTree = QtWidgets.QAction("Expand All", self) self.collapseTree = QtWidgets.QAction("Collapse All", self) self.expandChild = QtWidgets.QAction("Expand Selected", self) self.collapseChild = QtWidgets.QAction("Collapse Selected", self) self.expandTree.triggered.connect( partial(self.onExpandOrCollapse, True, True)) self.collapseTree.triggered.connect( partial(self.onExpandOrCollapse, True, False)) self.expandChild.triggered.connect( partial(self.onExpandOrCollapse, False, True)) self.collapseChild.triggered.connect( partial(self.onExpandOrCollapse, False, False)) self.fileTreeWidget.addAction(self.expandTree) self.fileTreeWidget.addAction(self.collapseTree) self.fileTreeWidget.addAction(self.expandChild) self.fileTreeWidget.addAction(self.collapseChild) self.fileTreeWidget.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) self.setWindowTitle(self.configname) self.setWindowIcon(QtGui.QIcon(":/latex/icons/FuncIcon2.png")) self.statusLabel.setText("") self.tableModel.updateData()
def setupUi(self, parent): super(ScriptingUi, self).setupUi(parent) self.configname = 'Scripting' #initialize default options self.optionsWindow = OptionsWindow(self.config, 'ScriptingEditorOptions') self.optionsWindow.setupUi(self.optionsWindow) self.actionOptions.triggered.connect(self.onOpenOptions) self.optionsWindow.OptionsChangedSignal.connect(self.updateOptions) self.updateOptions() if self.optionsWindow.defaultExpand: onExpandOrCollapse(self.fileTreeWidget, True, True) #setup console self.consoleMaximumLines = self.config.get(self.configname+'.consoleMaximumLinesNew', 100) self.consoleEnable = self.config.get(self.configname+'.consoleEnable', True) self.consoleClearButton.clicked.connect( self.onClearConsole ) self.linesSpinBox.valueChanged.connect( self.onConsoleMaximumLinesChanged ) self.linesSpinBox.setValue( self.consoleMaximumLines ) self.checkBoxEnableConsole.stateChanged.connect( self.onEnableConsole ) self.checkBoxEnableConsole.setChecked( self.consoleEnable ) #setup editor self.textEdit = PulseProgramSourceEdit() self.textEdit.setupUi(self.textEdit, extraKeywords1=[], extraKeywords2=scriptFunctions) self.textEdit.textEdit.currentLineMarkerNum = 9 self.textEdit.textEdit.markerDefine(QsciScintilla.Background, self.textEdit.textEdit.currentLineMarkerNum) #This is a marker that highlights the background self.textEdit.textEdit.setMarkerBackgroundColor(QtGui.QColor(0xd0, 0xff, 0xd0), self.textEdit.textEdit.currentLineMarkerNum) self.textEdit.setPlainText(self.script.code) self.splitterVertical.insertWidget(0, self.textEdit) #setup documentation list self.getDocs() self.docTreeWidget.setHeaderLabels(['Available Script Functions']) for funcDef, funcDesc in list(self.docDict.items()): itemDef = QtWidgets.QTreeWidgetItem(self.docTreeWidget, [funcDef]) self.docTreeWidget.addTopLevelItem(itemDef) QtWidgets.QTreeWidgetItem(itemDef, [funcDesc]) self.docTreeWidget.setWordWrap(True) #load recent files, also checks if data was saved correctly and if files still exist savedfiles = self.config.get( self.configname+'.recentFiles', OrderedList()) self.initRecentFiles(savedfiles) self.initComboBox() #load last opened file self.script.fullname = self.config.get( self.configname+'.script.fullname', '' ) self.initLoad() #connect buttons self.script.repeat = self.config.get(self.configname+'.repeat',False) self.repeatButton.setChecked(self.script.repeat) self.repeatButton.clicked.connect( self.onRepeat ) self.script.slow = self.config.get(self.configname+'.slow',False) self.slowButton.setChecked(self.script.slow) self.slowButton.clicked.connect( self.onSlow ) self.revert = self.config.get(self.configname+'.revert',False) self.revertButton.setChecked(self.revert) self.revertButton.clicked.connect( self.onRevert ) #File control actions self.actionOpen.triggered.connect( self.onLoad ) self.actionSave.triggered.connect( self.onSave ) self.actionReset.triggered.connect(self.onReset) self.actionNew.triggered.connect( self.onNew ) #Script control actions self.actionStartScript.triggered.connect( self.onStartScript ) self.actionPauseScript.triggered.connect( self.onPauseScript ) self.actionStopScript.triggered.connect( self.onStopScript ) self.actionPauseScriptAndScan.triggered.connect( self.onPauseScriptAndScan ) self.actionStopScriptAndScan.triggered.connect( self.onStopScriptAndScan ) #Script finished signal self.script.finished.connect( self.onFinished ) self.setWindowTitle(self.configname) self.setWindowIcon(QtGui.QIcon(":/other/icons/Terminal-icon.png")) self.statusLabel.setText("Idle")