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"
# 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