1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
import os
from subprocess import Popen, PIPE, STDOUT
from PyQt4 import QtGui, QtCore
from configuration.Appconfig import Appconfig
from projManagement import Worker
from projManagement.Validation import Validation
BROWSE_LOCATION = '/home'
class OpenModelicaEditor(QtGui.QWidget):
def __init__(self, dir=None):
QtGui.QWidget.__init__(self)
self.obj_validation = Validation()
self.obj_appconfig = Appconfig()
self.projDir = dir
self.projName = os.path.basename(self.projDir)
self.ngspiceNetlist = os.path.join(
self.projDir, self.projName + ".cir.out")
self.modelicaNetlist = os.path.join(
self.projDir, self.projName + ".mo")
self.map_json = Appconfig.modelica_map_json
self.grid = QtGui.QGridLayout()
self.FileEdit = QtGui.QLineEdit()
self.FileEdit.setText(self.ngspiceNetlist)
self.grid.addWidget(self.FileEdit, 0, 0)
self.browsebtn = QtGui.QPushButton("Browse")
self.browsebtn.clicked.connect(self.browseFile)
self.grid.addWidget(self.browsebtn, 0, 1)
self.convertbtn = QtGui.QPushButton("Convert")
self.convertbtn.clicked.connect(self.callConverter)
self.grid.addWidget(self.convertbtn, 2, 1)
self.loadOMbtn = QtGui.QPushButton("Load OMEdit")
self.loadOMbtn.clicked.connect(self.callOMEdit)
self.grid.addWidget(self.loadOMbtn, 3, 1)
# self.setGeometry(300, 300, 350, 300)
self.setLayout(self.grid)
self.show()
def browseFile(self):
self.ngspiceNetlist = QtGui.QFileDialog.getOpenFileName(
self, 'Open Ngspice file', BROWSE_LOCATION)
self.FileEdit.setText(self.ngspiceNetlist)
def callConverter(self):
try:
self.cmd1 = (
"python3 ../ngspicetoModelica/NgspicetoModelica.py " +
self.ngspiceNetlist + ' ' +
self.map_json
)
# self.obj_workThread1 = Worker.WorkerThread(self.cmd1)
# self.obj_workThread1.start()
convert_process = Popen(
self.cmd1,
shell=True,
stdin=PIPE,
stdout=PIPE,
stderr=STDOUT,
close_fds=True)
error_code = convert_process.stdout.read()
if not error_code:
self.msg = QtGui.QMessageBox()
self.msg.setText(
"Ngspice netlist successfully converted to OpenModelica" +
"netlist"
)
self.obj_appconfig.print_info(
"Ngspice netlist successfully converted to OpenModelica" +
"netlist"
)
self.msg.exec_()
else:
self.err_msg = QtGui.QErrorMessage()
self.msg.setModal(True)
self.msg.setWindowTitle(
"Ngspice to Modelica conversion error")
self.err_msg.showMessage(
'Unable to convert NgSpice netlist to Modelica netlist.' +
'Check the netlist :' +
error_code)
self.err_msg.exec_()
self.obj_appconfig.print_error(error_code)
except Exception as e:
self.msg = QtGui.QErrorMessage()
self.msg.setModal(True)
self.msg.setWindowTitle("Ngspice to Modelica conversion error")
self.msg.showMessage(
'Unable to convert NgSpice netlist to Modelica netlist.' +
'Check the netlist :' +
str(e))
self.msg.setWindowTitle("Ngspice to Modelica conversion error")
def callOMEdit(self):
if self.obj_validation.validateTool("OMEdit"):
self.cmd2 = "OMEdit " + self.modelicaNetlist
self.obj_workThread2 = Worker.WorkerThread(self.cmd2)
self.obj_workThread2.start()
print("OMEdit called")
self.obj_appconfig.print_info("OMEdit called")
else:
self.msg = QtGui.QMessageBox()
self.msgContent = (
"There was an error while opening OMEdit.<br/>"
"Please make sure OpenModelica is installed in your"
" system.<br/>"
"To install it on Linux : Go to <a href="
"https://www.openmodelica.org/download/download-linux"
">OpenModelica Linux</a> and install nightly build"
" release.<br/>"
"To install it on Windows : Go to <a href="
"https://www.openmodelica.org/download/download-windows"
">OpenModelica Windows</a> and install latest version.<br/>"
)
self.msg.setTextFormat(QtCore.Qt.RichText)
self.msg.setText(self.msgContent)
self.msg.setWindowTitle("Missing OpenModelica")
self.obj_appconfig.print_info(self.msgContent)
self.msg.exec_()
|