diff options
Diffstat (limited to 'src/kicadtoNgspice')
-rw-r--r-- | src/kicadtoNgspice/Model.py | 223 |
1 files changed, 182 insertions, 41 deletions
diff --git a/src/kicadtoNgspice/Model.py b/src/kicadtoNgspice/Model.py index 0c821190..1389e556 100644 --- a/src/kicadtoNgspice/Model.py +++ b/src/kicadtoNgspice/Model.py @@ -1,86 +1,156 @@ -from PyQt5 import QtWidgets +#!/usr/bin/python +# -*- coding: utf-8 -*- +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. """ - def __init__(self, schematicInfo, modelList, clarg1): + # 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) + + # 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 + ) + 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') + 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(): + for (key, value) in line[7].items(): + # Check if value is iterable - if not isinstance(value, str) and hasattr(value, '__iter__'): + + 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() - ) + self.obj_trac.model_entry_var[ + self.nextcount + ] = QtWidgets.QLineEdit() modelgrid.addWidget( - self.obj_trac.model_entry_var - [self.nextcount], self.nextrow, 1) + 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]: + 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 @@ -90,58 +160,129 @@ class Model(QtWidgets.QWidget): temp_tag.append(self.nextcount) self.nextcount = self.nextcount + 1 self.nextrow = self.nextrow + 1 - tag_dict[key] = temp_tag + 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() - ) + self.obj_trac.model_entry_var[ + self.nextcount + ] = QtWidgets.QLineEdit() modelgrid.addWidget( self.obj_trac.model_entry_var[self.nextcount], - self.nextrow, 1 + 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) + 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(" \ + + 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], @@ -152,12 +293,12 @@ class Model(QtWidgets.QWidget): line[6], self.start, self.end, - tag_dict] + 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) |