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