from PyQt5 import QtCore, QtGui, QtWidgets, uic import os class TerminalUi(QtWidgets.QMainWindow): def __init__(self, qProcess, args): super(TerminalUi, self).__init__() #Other variables self.darkColor = True self.qProcess = qProcess self.args = args self.iconDir = "../../images" # def setupUi(self, Form): #Load the ui file uic.loadUi("TerminalUi.ui", self) #Define Our Widgets self.progressBar = self.findChild(QtWidgets.QProgressBar, "progressBar") self.simulationConsole = self.findChild(QtWidgets.QTextEdit, "simulationConsole") self.lightDarkModeButton = self.findChild(QtWidgets.QPushButton, "lightDarkModeButton") self.cancelSimulationButton = self.findChild(QtWidgets.QPushButton, "cancelSimulationButton") self.redoSimulationButton = self.findChild(QtWidgets.QPushButton, "redoSimulationButton") #Add functionalities to Widgets self.lightDarkModeButton.setIcon(QtGui.QIcon(os.path.join(self.iconDir, 'light_mode.png'))) self.lightDarkModeButton.clicked.connect(self.changeColor) self.cancelSimulationButton.clicked.connect(self.cancelSimulation) self.redoSimulationButton.clicked.connect(self.redoSimulation) #show app self.show() def writeSimulationStatusToConsole(self, isSuccess): """Writes simulation status to the console with appropriate style to the :class:`Form_Ui` console. :param isSuccess: A boolean flag used to indicate whether the simulation was a success or not :type isSuccess: bool """ failedFormat = '{}' successFormat = '{}' if self.qProcess.exitStatus() == QtCore.QProcess.NormalExit: if isSuccess: self.simulationConsole.append(successFormat.format("Simulation Completed Successfully!")) else: self.simulationConsole.append(failedFormat.format("Simulation Failed!")) def cancelSimulation(self): """This function cancels the ongoing ngspice simulation. """ if (self.qProcess.state() == QtCore.QProcess.NotRunning): return cancelFormat = '{}' self.qProcess.kill() #To show progressBar completed self.progressBar.setMaximum(100) self.progressBar.setProperty("value", 100) self.simulationConsole.append(cancelFormat.format("Simulation Cancelled!")) self.simulationConsole.verticalScrollBar().setValue( self.simulationConsole.verticalScrollBar().maximum() ) def redoSimulation(self): """This function reruns the ngspice simulation """ if (self.qProcess.state() == QtCore.QProcess.Running): return #To make the progressbar running self.progressBar.setMaximum(0) self.progressBar.setProperty("value", -1) self.simulationConsole.setText("") self.qProcess.start('ngspice', self.args) def changeColor(self): """Toggles the :class:`Ui_Form` console between dark mode and light mode """ if self.darkColor is True: self.simulationConsole.setStyleSheet("QTextEdit {\n" " background-color: white;\n" " color: black;\n" "}") self.lightDarkModeButton.setIcon(QtGui.QIcon(os.path.join(self.iconDir, "dark_mode.png"))) self.darkColor = False else: self.simulationConsole.setStyleSheet("QTextEdit {\n" " background-color: rgb(36, 31, 49);\n" " color: white;\n" "}") self.lightDarkModeButton.setIcon(QtGui.QIcon(os.path.join(self.iconDir, "light_mode.png"))) self.darkColor = True