from PyQt5 import QtWidgets, QtCore, QtGui from PyQt5.QtCore import QObject, pyqtSlot from . import TrackWidget from xml.etree import ElementTree as ET import os import sys class Model(QtWidgets.QWidget): """ - This class creates Model Tab of KicadtoNgspice window. The widgets are created dynamically in the Model Tab. """ #by Sumanto and Jay def addHex(self): """ This function is use to keep track of all Device Model widget """ #print("Calling Track Device Model Library funtion") init_path = '../../../' if os.name == 'nt': init_path = '' self.hexfile = QtCore.QDir.toNativeSeparators( QtWidgets.QFileDialog.getOpenFileName( self, "Open Hex Directory", init_path + "home", "*.hex" )[0] ) self.text = open(self.hexfile).read() chosen_file_path = os.path.abspath(self.hexfile) print(os.path.abspath(self.hexfile)) #By Sumanto and Jay def uploadHex(self): """ This function is use to keep track of all Device Model widget """ #print("Calling Track Device Model Library funtion") path1 = os.path.expanduser('~') path2 = '/ngspice-nghdl/src/xspice/icm/ghdl' init_path = path1 + path2 if os.name == 'nt': init_path = '' self.hexloc = QtWidgets.QFileDialog.getExistingDirectory( self, "Open Hex Directory", init_path) print(self.hexloc) self.file = open(self.hexloc+"/hex.txt","w") self.file.write(self.text) self.file.close() def __init__(self, schematicInfo, modelList, clarg1): QtWidgets.QWidget.__init__(self) # Processing for getting previous values kicadFile = clarg1 (projpath, filename) = os.path.split(kicadFile) project_name = os.path.basename(projpath) check = 1 try: f = open( os.path.join( projpath, project_name + "_Previous_Values.xml"), 'r') tree = ET.parse(f) parent_root = tree.getroot() for child in parent_root: if child.tag == "model": root = child except BaseException: check = 0 print("Model Previous Values XML is Empty") # Creating track widget object self.obj_trac = TrackWidget.TrackWidget() # for increasing row and counting/tracking line edit widget self.nextrow = 0 self.nextcount = 0 # for storing line edit details position details self.start = 0 self.end = 0 self.entry_var = {} self.text = "" # Creating GUI dynamically for Model tab self.grid = QtWidgets.QGridLayout() self.setLayout(self.grid) for line in modelList: # print "ModelList Item:",line # Adding title label for model # Key: Tag name,Value:Entry widget number tag_dict = {} modelbox = QtWidgets.QGroupBox() modelgrid = QtWidgets.QGridLayout() modelbox.setTitle(line[5]) self.start = self.nextcount # line[7] is parameter dictionary holding parameter tags. i = 0 for key, value in line[7].items(): # Check if value is iterable if not isinstance(value, str) and hasattr(value, '__iter__'): # For tag having vector value temp_tag = [] for item in value: paramLabel = QtWidgets.QLabel(item) modelgrid.addWidget(paramLabel, self.nextrow, 0) self.obj_trac.model_entry_var[self.nextcount] = ( QtWidgets.QLineEdit() ) modelgrid.addWidget( self.obj_trac.model_entry_var [self.nextcount], self.nextrow, 1) try: for child in root: if child.text == line[2] \ and child.tag == line[3]: self.obj_trac.model_entry_var [self.nextcount].setText(child[i].text) i = i + 1 except BaseException: pass temp_tag.append(self.nextcount) self.nextcount = self.nextcount + 1 self.nextrow = self.nextrow + 1 if 'upload_hex_file:1' in tag_dict: self.addbtn = QtWidgets.QPushButton("Add Hex File") self.addbtn.setObjectName("%d" % self.nextcount) self.addbtn.clicked.connect(self.addHex) modelgrid.addWidget(self.addbtn, self.nextrow, 2) modelbox.setLayout(modelgrid) # CSS modelbox.setStyleSheet(" \ QGroupBox { border: 1px solid gray; border-radius:\ 9px; margin-top: 0.5em; } \ QGroupBox::title { subcontrol-origin: margin; left:\ 10px; padding: 0 3px 0 3px; } \ ") self.grid.addWidget(modelbox) self.addbtn = QtWidgets.QPushButton("Upload Hex File") self.addbtn.setObjectName("%d" % self.nextcount) self.addbtn.clicked.connect(self.uploadHex) modelgrid.addWidget(self.addbtn, self.nextrow, 3) modelbox.setLayout(modelgrid) # CSS modelbox.setStyleSheet(" \ QGroupBox { border: 1px solid gray; border-radius:\ 9px; margin-top: 0.5em; } \ QGroupBox::title { subcontrol-origin: margin; left:\ 10px; padding: 0 3px 0 3px; } \ ") self.grid.addWidget(modelbox) tag_dict[key] = temp_tag else: paramLabel = QtWidgets.QLabel(value) modelgrid.addWidget(paramLabel, self.nextrow, 0) self.obj_trac.model_entry_var[self.nextcount] = ( QtWidgets.QLineEdit() ) modelgrid.addWidget( self.obj_trac.model_entry_var[self.nextcount], self.nextrow, 1 ) try: for child in root: if child.text == line[2] and child.tag == line[3]: self.obj_trac.model_entry_var[self.nextcount] \ .setText(child[i].text) i = i + 1 except BaseException: pass tag_dict[key] = self.nextcount self.nextcount = self.nextcount + 1 self.nextrow = self.nextrow + 1 if 'upload_hex_file:1' in tag_dict: self.addbtn = QtWidgets.QPushButton("Add Hex File") self.addbtn.setObjectName("%d" % self.nextcount) self.addbtn.clicked.connect(self.addHex) modelgrid.addWidget(self.addbtn, self.nextrow, 2) modelbox.setLayout(modelgrid) # CSS modelbox.setStyleSheet(" \ QGroupBox { border: 1px solid gray; border-radius:\ 9px; margin-top: 0.5em; } \ QGroupBox::title { subcontrol-origin: margin; left:\ 10px; padding: 0 3px 0 3px; } \ ") self.grid.addWidget(modelbox) self.addbtn = QtWidgets.QPushButton("Upload Hex File") self.addbtn.setObjectName("%d" % self.nextcount) self.addbtn.clicked.connect(self.uploadHex) modelgrid.addWidget(self.addbtn, self.nextrow, 3) modelbox.setLayout(modelgrid) # CSS modelbox.setStyleSheet(" \ QGroupBox { border: 1px solid gray; border-radius:\ 9px; margin-top: 0.5em; } \ QGroupBox::title { subcontrol-origin: margin; left:\ 10px; padding: 0 3px 0 3px; } \ ") self.grid.addWidget(modelbox) self.end = self.nextcount - 1 modelbox.setLayout(modelgrid) # CSS modelbox.setStyleSheet(" \ QGroupBox { border: 1px solid gray; border-radius: \ 9px; margin-top: 0.5em; } \ QGroupBox::title { subcontrol-origin: margin; left:\ 10px; padding: 0 3px 0 3px; } \ ") self.grid.addWidget(modelbox) ''' Listing all line[0] = index line[1] = compLine line[2] = modelname #Change from compType to modelname line[3] = compName line[4] = comment line[5] = title line[6] = type i.e analog or digital Now adding start,end and tag_dict which will be line[7], line[8] and line[9] respectively ''' # This keeps the track of Model Tab Widget lst = [ line[0], line[1], line[2], line[3], line[4], line[5], line[6], self.start, self.end, tag_dict] check = 0 for itr in self.obj_trac.modelTrack: if itr == lst: check = 1 if check == 0: self.obj_trac.modelTrack.append(lst) self.show()