summaryrefslogtreecommitdiff
path: root/src/ngspicetoModelica/ModelicaUI.py
blob: 168b5c14cbc7331ca62b129f359102bbffd6ed8e (plain)
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_()