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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
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()
|