summaryrefslogtreecommitdiff
path: root/src/kicadtoNgspice/Source.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/kicadtoNgspice/Source.py')
-rw-r--r--src/kicadtoNgspice/Source.py305
1 files changed, 305 insertions, 0 deletions
diff --git a/src/kicadtoNgspice/Source.py b/src/kicadtoNgspice/Source.py
new file mode 100644
index 00000000..1cf1487d
--- /dev/null
+++ b/src/kicadtoNgspice/Source.py
@@ -0,0 +1,305 @@
+import os
+from PyQt4 import QtGui
+import TrackWidget
+from xml.etree import ElementTree as ET
+
+class Source(QtGui.QWidget):
+ """
+ This class create Source Tab of KicadtoNgSpice Window.
+ """
+
+ def __init__(self,sourcelist,sourcelisttrack,clarg1):
+ QtGui.QWidget.__init__(self)
+ self.obj_track = TrackWidget.TrackWidget()
+ #Variable
+ self.count = 1
+ self.clarg1=clarg1
+ self.start = 0
+ self.end = 0
+ self.row = 0
+ self.entry_var = {}
+ #self.font = QtGui.QFont("Times",20,QtGui.QFont.Bold,True)
+
+ #Creating Source Widget
+ self.createSourceWidget(sourcelist,sourcelisttrack)
+
+
+
+ def createSourceWidget(self,sourcelist,sourcelisttrack):
+ """
+ This function dynamically create source widget in the Source tab of KicadtoNgSpice window
+ """
+ kicadFile = self.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=="source":
+ root=child
+ except:
+ check=0
+ print "Source Previous Values XML is Empty"
+
+ self.grid = QtGui.QGridLayout()
+ self.setLayout(self.grid)
+ xml_num=0
+
+ if sourcelist:
+ for line in sourcelist:
+ #print "Voltage source line index: ",line[0]
+ print "SourceList line: ",line
+ track_id=line[0]
+ #print "track_id is ",track_id
+ if line[2]=='ac':
+ acbox=QtGui.QGroupBox()
+ acbox.setTitle(line[3])
+ acgrid=QtGui.QGridLayout()
+ self.start=self.count
+ label1=QtGui.QLabel(line[4])
+ label2 = QtGui.QLabel(line[5])
+ acgrid.addWidget(label1,self.row,0)
+ acgrid.addWidget(label2, self.row+1, 0)
+ self.entry_var[self.count]=QtGui.QLineEdit()
+ self.entry_var[self.count].setMaximumWidth(150)
+ acgrid.addWidget(self.entry_var[self.count],self.row,1)
+ self.entry_var[self.count+1]=QtGui.QLineEdit()
+ self.entry_var[self.count+1].setMaximumWidth(150)
+ acgrid.addWidget(self.entry_var[self.count+1],self.row+1,1)
+ self.entry_var[self.count].setText("")
+ self.entry_var[self.count+1].setText("")
+ try:
+ for child in root:
+ templist1=line[1]
+ templist2=templist1.split(' ')
+
+ if child.tag==templist2[0] and child.text==line[2]:
+ self.entry_var[self.count].setText(child[0].text)
+ self.entry_var[self.count+1].setText(child[1].text)
+ except:
+ pass
+ #Value Need to check previuouse value
+ #self.entry_var[self.count].setText("")
+ self.row=self.row+1
+ self.end=self.count+1
+ self.count=self.count+1
+ acbox.setLayout(acgrid)
+
+ #CSS
+ acbox.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(acbox)
+ sourcelisttrack.append([track_id,'ac',self.start,self.end])
+
+
+ elif line[2]=='dc':
+ dcbox=QtGui.QGroupBox()
+ dcbox.setTitle(line[3])
+ dcgrid=QtGui.QGridLayout()
+ self.row=self.row+1
+ self.start=self.count
+ label=QtGui.QLabel(line[4])
+ dcgrid.addWidget(label,self.row,0)
+ self.entry_var[self.count]=QtGui.QLineEdit()
+ self.entry_var[self.count].setMaximumWidth(150)
+ dcgrid.addWidget(self.entry_var[self.count],self.row,1)
+ self.entry_var[self.count].setText("")
+ try:
+ for child in root:
+ templist1=line[1]
+ templist2=templist1.split(' ')
+
+ if child.tag==templist2[0] and child.text==line[2]:
+ self.entry_var[self.count].setText(child[0].text)
+ except:
+ pass
+
+ self.row=self.row+1
+ self.end=self.count
+ self.count=self.count+1
+ dcbox.setLayout(dcgrid)
+
+ #CSS
+ dcbox.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(dcbox)
+ sourcelisttrack.append([track_id,'dc',self.start,self.end])
+
+ elif line[2]=='sine':
+ sinebox=QtGui.QGroupBox()
+ sinebox.setTitle(line[3])
+ sinegrid=QtGui.QGridLayout()
+ self.row=self.row+1
+ self.start=self.count
+
+ for it in range(4,9):
+ label=QtGui.QLabel(line[it])
+ sinegrid.addWidget(label,self.row,0)
+ self.entry_var[self.count]=QtGui.QLineEdit()
+ self.entry_var[self.count].setMaximumWidth(150)
+ sinegrid.addWidget(self.entry_var[self.count],self.row,1)
+ self.entry_var[self.count].setText("")
+ try:
+ for child in root:
+ templist1=line[1]
+ templist2=templist1.split(' ')
+ if child.tag==templist2[0] and child.text==line[2]:
+ self.entry_var[self.count].setText(child[it-4].text)
+ except:
+ pass
+
+
+ self.row=self.row+1
+ self.count=self.count+1
+ self.end=self.count-1
+ sinebox.setLayout(sinegrid)
+
+ #CSS
+ sinebox.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(sinebox)
+ sourcelisttrack.append([track_id,'sine',self.start,self.end])
+
+ elif line[2]=='pulse':
+ pulsebox=QtGui.QGroupBox()
+ pulsebox.setTitle(line[3])
+ pulsegrid=QtGui.QGridLayout()
+ self.start=self.count
+ for it in range(4,11):
+ label=QtGui.QLabel(line[it])
+ pulsegrid.addWidget(label,self.row,0)
+ self.entry_var[self.count]=QtGui.QLineEdit()
+ self.entry_var[self.count].setMaximumWidth(150)
+ pulsegrid.addWidget(self.entry_var[self.count],self.row,1)
+ self.entry_var[self.count].setText("")
+
+ try:
+ for child in root:
+ templist1=line[1]
+ templist2=templist1.split(' ')
+ if child.tag==templist2[0] and child.text==line[2]:
+ self.entry_var[self.count].setText(child[it-4].text)
+ except:
+ pass
+
+
+ self.row=self.row+1
+ self.count=self.count+1
+ self.end=self.count-1
+ pulsebox.setLayout(pulsegrid)
+
+ #CSS
+ pulsebox.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(pulsebox)
+ sourcelisttrack.append([track_id,'pulse',self.start,self.end])
+
+ elif line[2]=='pwl':
+ pwlbox=QtGui.QGroupBox()
+ pwlbox.setTitle(line[3])
+ self.start=self.count
+ pwlgrid=QtGui.QGridLayout()
+ self.start=self.count
+ label=QtGui.QLabel(line[4])
+ pwlgrid.addWidget(label,self.row,0)
+ self.entry_var[self.count]=QtGui.QLineEdit()
+ self.entry_var[self.count].setMaximumWidth(150)
+ pwlgrid.addWidget(self.entry_var[self.count],self.row,1)
+ self.entry_var[self.count].setText("")
+
+ try:
+ for child in root:
+ templist1=line[1]
+ templist2=templist1.split(' ')
+ if child.tag==templist2[0] and child.text==line[2]:
+ self.entry_var[self.count].setText(child[0].text)
+ except:
+ pass
+
+
+ self.row=self.row+1
+ self.end=self.count
+ self.count=self.count+1
+ pwlbox.setLayout(pwlgrid)
+
+ #CSS
+ pwlbox.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(pwlbox)
+ sourcelisttrack.append([track_id,'pwl',self.start,self.end])
+
+ elif line[2]=='exp':
+ expbox=QtGui.QGroupBox()
+ expbox.setTitle(line[3])
+ expgrid=QtGui.QGridLayout()
+ self.start=self.count
+ for it in range(4,10):
+ label=QtGui.QLabel(line[it])
+ expgrid.addWidget(label,self.row,0)
+ self.entry_var[self.count]=QtGui.QLineEdit()
+ self.entry_var[self.count].setMaximumWidth(150)
+ expgrid.addWidget(self.entry_var[self.count],self.row,1)
+ self.entry_var[self.count].setText("")
+
+ try:
+ for child in root:
+ templist1=line[1]
+ templist2=templist1.split(' ')
+ if child.tag==templist2[0] and child.text==line[2]:
+ self.entry_var[self.count].setText(child[it-4].text)
+ except:
+ pass
+
+
+ self.row=self.row+1
+ self.count=self.count+1
+ self.end=self.count-1
+ expbox.setLayout(expgrid)
+
+ #CSS
+ expbox.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(expbox)
+ sourcelisttrack.append([track_id,'exp',self.start,self.end])
+
+
+ self.count=self.count+1
+ xml_num=xml_num+1
+
+
+ else:
+ print "No source is present in your circuit"
+
+
+ #This is used to keep the track of dynamically created widget
+ self.obj_track.sourcelisttrack["ITEMS"] = sourcelisttrack
+ self.obj_track.source_entry_var["ITEMS"] = self.entry_var
+ self.show()
+
+
+
+
+
+
+