diff options
Diffstat (limited to 'src/frontEnd/TerminalUi.py')
-rw-r--r-- | src/frontEnd/TerminalUi.py | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/src/frontEnd/TerminalUi.py b/src/frontEnd/TerminalUi.py new file mode 100644 index 00000000..4c53548f --- /dev/null +++ b/src/frontEnd/TerminalUi.py @@ -0,0 +1,143 @@ +from PyQt5 import QtCore, QtGui, QtWidgets, uic +import os + + +class TerminalUi(QtWidgets.QMainWindow): + """This is a class that represents the GUI required to provide + details regarding the ngspice simulation. This GUI consists of + a progress bar, a console window which displays the log of the + simulation and button required for re-simulation and cancellation + of the simulation""" + def __init__(self, qProcess, args): + """The constructor of the TerminalUi class + param: qProcess: a PyQt QProcess that runs ngspice + type: qProcess: :class:`QtCore.QProcess` + param: args: arguments to be passed on to the ngspice call + type: args: list + """ + super(TerminalUi, self).__init__() + + # Other variables + self.darkColor = True + self.qProcess = qProcess + self.args = args + self.iconDir = "../../images" + + # 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.cancelSimulationButton.setEnabled(True) + + self.redoSimulationButton = self.findChild( + QtWidgets.QPushButton, + "redoSimulationButton" + ) + self.redoSimulationButton.setEnabled(False) + + # 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) + + self.simulationCancelled = False + self.show() + + def cancelSimulation(self): + """This function cancels the ongoing ngspice simulation. + """ + self.cancelSimulationButton.setEnabled(False) + self.redoSimulationButton.setEnabled(True) + + if (self.qProcess.state() == QtCore.QProcess.NotRunning): + return + + self.simulationCancelled = True + self.qProcess.kill() + + # To show progressBar completed + self.progressBar.setMaximum(100) + self.progressBar.setProperty("value", 100) + + cancelFormat = '<span style="color:#FF8624; font-size:26px;">{}</span>' + self.simulationConsole.append( + cancelFormat.format("Simulation Cancelled!")) + self.simulationConsole.verticalScrollBar().setValue( + self.simulationConsole.verticalScrollBar().maximum() + ) + + def redoSimulation(self): + """This function reruns the ngspice simulation + """ + self.cancelSimulationButton.setEnabled(True) + self.redoSimulationButton.setEnabled(False) + + if (self.qProcess.state() != QtCore.QProcess.NotRunning): + return + + # To make the progressbar running + self.progressBar.setMaximum(0) + self.progressBar.setProperty("value", -1) + + self.simulationConsole.setText("") + self.simulationCancelled = False + + 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 |