summaryrefslogtreecommitdiff
path: root/OSCAD/modelEditor/selectModel.py
diff options
context:
space:
mode:
Diffstat (limited to 'OSCAD/modelEditor/selectModel.py')
-rwxr-xr-xOSCAD/modelEditor/selectModel.py155
1 files changed, 155 insertions, 0 deletions
diff --git a/OSCAD/modelEditor/selectModel.py b/OSCAD/modelEditor/selectModel.py
new file mode 100755
index 0000000..1ca1e86
--- /dev/null
+++ b/OSCAD/modelEditor/selectModel.py
@@ -0,0 +1,155 @@
+#!/usr/bin/python
+# selectModel.py is a python script to select a component to create a model. It developed for OSCAD software. It is written by Yogesh Dilip Save (yogessave@gmail.com).
+# Copyright (C) 2012 Yogesh Dilip Save, FOSS Project, IIT Bombay.
+# This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+# You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+from setPath import OSCAD_HOME
+from Tkinter import *
+import template
+import tkMessageBox
+import os.path
+import os
+import Pmw
+from string import maketrans
+
+class ModelNameList():
+ """Class for specifying parameter of the model"""
+ def __init__(self,parent,filename):
+ self.parent=parent
+ self.modelName=""
+ self.modelType=""
+ self.modelList=[]
+ self.click_result=""
+
+ # Collect model information from the circuit file
+ try:
+ self.OSCAD_HOME=OSCAD_HOME
+ except NameError:
+ try:
+ self.OSCAD_HOME=os.environ["OSCAD_HOME"]
+ except KeyError:
+ tkMessageBox.showerror("Error OSCAD_HOME is not set","Please set OSCAD_HOME variable in .bashrc\n\nStep to set OSCAD_HOME variable:\n 1) Open ~/.bashrc using text editor (vi ~/.bash).\n 2) Add the line \"Export OSCAD_HOME=<path_of_oscad>\" to it.\n 3) source ~/.bashrc")
+ exit(0)
+
+ HOME=self.OSCAD_HOME="/modelEditor/"
+ # Open the circuit file
+ self.fileName=filename
+ # Open parameter file
+ if os.path.exists(self.fileName):
+ try:
+ f = open(self.fileName)
+ except :
+ tkMessageBox.showwarning("Bad input","Circuit netlist does not exit, please try again")
+ return
+ else:
+ tkMessageBox.showwarning("Bad input","Circuit netlist does not exit, please try again")
+ return
+
+ # Read the data from file
+ data=f.read()
+
+ # Close the file
+ f.close()
+ netlist=data.splitlines()
+ # Find the various model library required
+ self.modelInfo={}
+
+ for eachline in netlist:
+ eachline=eachline.strip()
+ if len(eachline)>1:
+ eachline=eachline.lower()
+ words=eachline.split()
+ if eachline[0]=='d':
+ modelName=words[3]
+ modelType=words[3]
+ self.modelList.append(words[0]+":"+modelName)
+ self.modelInfo[modelName]=modelType
+ elif eachline[0]=='q':
+ modelName=words[4]
+ if words[4]=='npn':
+ modelType="NPN"
+ elif words[4]=='pnp':
+ modelType="PNP"
+ else:
+ modelType=words[4]
+
+ self.modelList.append(words[0]+":"+modelName)
+ self.modelInfo[modelName]=modelType
+
+ elif eachline[0]=='m':
+ modelName=words[4]
+ if words[4]=='nmos':
+ modelType="NMOS"
+ elif words[4]=='pmos':
+ modelType="PMOS"
+ else:
+ modelType=words[4]
+ self.modelList.append(words[0]+":"+modelName)
+ self.modelInfo[modelName]=modelType
+
+ elif eachline[0]=='j':
+ modelName=words[4]
+ if words[4]=='pjf':
+ modelType='PJF'
+ elif words[4]=='njf':
+ modelType='NJF'
+ else:
+ modelType=words[4]
+ self.modelList.append(words[0]+":"+modelName)
+ self.modelInfo[modelName]=modelType
+ else:
+ continue
+
+ # Create the dialog.
+
+ self.dialog = Pmw.SelectionDialog(parent,
+ title = 'Model Selector',
+ buttons = ('OK', 'Cancel'),
+ defaultbutton = 'OK',
+ scrolledlist_labelpos = 'n',
+ label_text = 'Please select the model',
+ scrolledlist_items=self.modelList,
+ command = self.apply,
+ )
+ self.dialog.pack(fill = 'both', expand=1, padx=5, pady=5)
+ self.dialog.activate()
+
+ # Protocol when window is deleted.
+ self.dialog.protocol("WM_DELETE_WINDOW",self.cancel)
+
+ def apply(self,result):
+ sels = self.dialog.getcurselection()
+ self.click_result=result
+ if result=="OK":
+ if len(sels) == 0:
+ print 'You clicked on', result, '(no selection)'
+ return
+ else:
+ self.modelName=sels[0].partition(':')[2]
+ self.modelType=self.modelInfo[self.modelName]
+ self.status=1
+
+ else:
+ self.status=0
+ self.dialog.withdraw()
+ # Put focus back to the parent window
+ self.parent.focus_set()
+ # Destroy child window
+ self.dialog.deactivate()
+
+# Action taken when cancel pressed
+ def cancel(self, event=None, status=0):
+ # Catch the status
+ self.status=status
+ # Put focus back to the parent window
+ self.parent.focus_set()
+ # Destroy child window
+ self.destroy()
+
+if __name__=='__main__':
+ root=Tk()
+ model= ModelNameList(root,"xxx")
+ mainloop()
+