1
2 import os
3 import empro
4
6 z = AdfiGui(iDefaultAdfi=iDefaultAdfi,iDefaultADS_HPEESOF_DIR=iDefaultADS_HPEESOF_DIR)
7 z.show()
8
10 - def __init__(self,iDim=((60,60),(500,100)),iDefaultAdfi="",iDefaultADS_HPEESOF_DIR="",iDefaultOpen=None):
11 from empro.gui import SimpleDialog, Widget, PushButton, PushButton, LineEdit, Ok, Cancel, GridLayout, Label, CheckBox, RadioButton
12 self.dialog = SimpleDialog(Ok+Cancel)
13 self.dialog.setButtonText(Ok, "Import it!")
14 self.dialog.title = "Import ADFI file"
15 self.dialog.windowFlags -= empro.gui.WF_WindowStaysOnTopHint
16 self.mainWidget = Widget()
17 self.mainWidget.minimumWidth = iDim[1][0]-iDim[0][0]
18 self.mainWidget.minimumHeight = iDim[1][1]-iDim[0][1]
19 self.mainWidget.layout = GridLayout()
20 self.mainLayout = self.mainWidget.layout
21
22 self.adfiFile = iDefaultAdfi or _lastAdfiFile()
23 self.ADS_HPEESOF_DIR = iDefaultADS_HPEESOF_DIR or _lastADS_HPEESOF_DIRLocation()
24
25 self.edtProjectDir = LineEdit(self.ADS_HPEESOF_DIR, "MomEngine HPEESOF_DIR directory.\n(Leave empty to use MomEngine shipped with EMPro):" )
26 self.moreDirsButton = PushButton("...")
27 self.moreDirsButton.onClicked = self.onMoreDirs
28 self.edtAdfiFile = LineEdit(self.adfiFile, "Adfi File:" )
29 self.morePathsButton = PushButton("...")
30 self.morePathsButton.onClicked = self.onMoreAdfiFiles
31 self.lblSize = Label("(0 kB)")
32 self.lastSize = 0
33 for w in [self.edtProjectDir, self.edtAdfiFile]:
34 w.layout.contentsMargin = (0,0,0,0)
35
36 self.mainLayout.addWidget(self.edtAdfiFile,0,0)
37 self.mainLayout.addWidget(self.lblSize,0,1)
38 self.mainLayout.addWidget(self.morePathsButton,0,2)
39 showADS_HPEESOF_DIR_editor = False
40 if showADS_HPEESOF_DIR_editor:
41 self.mainLayout.addWidget(self.edtProjectDir,1,0,1,2)
42 self.mainLayout.addWidget(self.moreDirsButton,1,2)
43
44 self.checkUseJedecBondwires = CheckBox("Use Jedec Bondwire Definitions" )
45 self.checkUseJedecBondwires.checked = empro.core.ApplicationPreferences.getPreference(_PREFERENCE_USE_JEDEC_BONDWIRES, "true")!="false"
46 self.mainLayout.addWidget(self.checkUseJedecBondwires,2,0)
47
48 self.simFDTD = RadioButton("FDTD" )
49 self.simFEM = RadioButton("FEM" )
50 self.simFDTD.checked = empro.core.ApplicationPreferences.getPreference(_PREFERENCE_IMPORT_FOR_FDTD, "false")!="false"
51 self.simFEM.checked = not self.simFDTD.checked
52 self.simLabel = empro.gui.Label("Target simulator:")
53 self.mainLayout.addWidget(self.simLabel,3,0)
54 self.mainLayout.addWidget(self.simFDTD,3,1)
55 self.mainLayout.addWidget(self.simFEM,4,1)
56
57 self.mainLayout.contentsMargin = (0,0,0,0)
58 self.dialog.layout.add(self.mainWidget)
59 self.updateSize()
60 self.dialog.onFinished = self.onFinished
61
63 try:
64 self.lastSize = os.path.getsize(self.adfiFile)
65 gbsize = self.lastSize / (1024.0*1024.0*1024.0)
66 mbsize = self.lastSize / (1024.0*1024.0)
67 kbsize = self.lastSize / (1024.0)
68 if gbsize > 1.0:
69 self.lblSize.text = "( %4.3fGb)" % gbsize
70 elif mbsize > 1.0:
71 self.lblSize.text = "( %4.3fMb)" % mbsize
72 else:
73 self.lblSize.text = "( %4.3fkb)" % kbsize
74 except:
75 self.lblSize.text = self.lastSize = "(invalid)"
76
78 newDir = empro.gui.getExistingDirectory("Select ADS HPEESOF_DIR Directory", self.ADS_HPEESOF_DIR or _lastADS_HPEESOF_DIRLocation())
79 if not newDir:
80 return
81 self.edtProjectDir.text = self.ADS_HPEESOF_DIR = os.path.normpath(newDir)
82 _lastADS_HPEESOF_DIRLocation(self.ADS_HPEESOF_DIR)
83
85 newAdfiFile = ""
86 newAdfiFile = empro.gui.getOpenFileName("Select Adfi File to import ",self.adfiFile or _lastAdfiLocation(),"Allegro export file (*.adfi)")
87 if not newAdfiFile:
88 return
89 self.edtAdfiFile.text = self.adfiFile = os.path.normpath(newAdfiFile)
90 _lastAdfiLocation(os.path.dirname(self.adfiFile))
91 _lastAdfiFile(self.adfiFile)
92 self.updateSize()
93
95 if not os.path.exists(self.ADS_HPEESOF_DIR):
96 return False
97 if not (os.path.exists(os.path.join(self.ADS_HPEESOF_DIR,'bin','MomEngine')) or os.path.exists(os.path.join(self.ADS_HPEESOF_DIR,'bin','MomEngine.exe'))):
98 return False
99 if not (os.path.exists(os.path.join(self.ADS_HPEESOF_DIR,'bin','eesofsubed')) or os.path.exists(os.path.join(self.ADS_HPEESOF_DIR,'bin','eesofsubed.exe'))):
100 sysPath = os.environ['PATH']
101 import sys
102 if 'win' in sys.platform:
103 sysPath = sysPath.split(';')
104 else:
105 sysPath = sysPath.split(':')
106 found = False
107 for pathEl in sysPath:
108 if (os.path.exists(os.path.join(pathEl,'eesofsubed')) or os.path.exists(os.path.join(pathEl,'eesofsubed.exe'))):
109 found = True
110 if not found:
111 return False
112 return True
113
115 import time
116 import empro
117 from empro import gui
118 from empro.toolkit.gui import InfoDialog, YesNoDialog
119 if iReturn != gui.SimpleDialog.Accepted:
120 return
121
122 empro.core.ApplicationPreferences.setPreference(_PREFERENCE_USE_JEDEC_BONDWIRES, self.checkUseJedecBondwires.checked)
123 empro.core.ApplicationPreferences.setPreference(_PREFERENCE_IMPORT_FOR_FDTD, self.simFDTD.checked)
124
125 self.ADS_HPEESOF_DIR = self.edtProjectDir.text
126 _lastADS_HPEESOF_DIRLocation(self.ADS_HPEESOF_DIR)
127 self.adfiFile = self.edtAdfiFile.text
128 if not os.path.exists(self.adfiFile):
129 InfoDialog("Not a valid adfi file.", "Error", True)
130 return
131 if self.ADS_HPEESOF_DIR != "" and not self._valid_ADS_HPEESOF_DIR():
132 if self.ADS_HPEESOF_DIR != _defaultLocation():
133 InfoDialog("Not a valid ADS HPEESOF_DIR location. Falling back to MomEngine shipped with EMPro", "Info", True)
134 self.ADS_HPEESOF_DIR = ""
135 _lastADS_HPEESOF_DIRLocation(self.ADS_HPEESOF_DIR)
136 self.progressDialog = gui.ProgressDialog("Import ADFI File","Adfi Import","Close",0,0)
137 self.progressDialog.setCancelButtonText("Close")
138 self.progressDialog.value = 1
139 self.progressDialog.show()
140 import empro.toolkit.adfi_import
141 useJedecBondwires = self.checkUseJedecBondwires.checked
142 warnings = []
143 try:
144 self.updateProgress(5)
145 warnings = empro.toolkit.adfi_import.importAdfi(self.ADS_HPEESOF_DIR,self.adfiFile,useJedecBondwires,updateProgressFunction=self.updateProgress,simFDTD=self.simFDTD.checked)
146 self.updateProgress(95)
147 except Exception, err:
148 errorString = "ERROR: "+str(err)
149 empro.toolkit.gui.InfoDialog("The import operation failed with the error: %s"%errorString,"Adfi import: error",True)
150 return
151 finally:
152 del self.progressDialog
153 if warnings and len(warnings)!=0:
154 toptext = empro.gui.Label("The following problems have occurred during the import:")
155 import string
156 warningString = "\n".join(warnings)
157 empro.activeProject.notes = "\nFollowing warnings were generated during the Allegro DFI import:\n"+warningString + "\nEnd of ADFI import warnings\n" + empro.activeProject.notes
158 botscroll = empro.gui.TextEdit(warningString)
159 botscroll.readOnly = True
160 warning_dialog = empro.gui.SimpleDialog(empro.gui.Ok)
161 warning_dialog.title = "Adfi import:"
162 warning_dialog.layout.add(toptext)
163 warning_dialog.layout.add(botscroll)
164 warning_dialog.show(True)
165 else:
166 empro.toolkit.gui.InfoDialog("The import operation completed successfully.","%s import: success" % "Adfi",True)
167
168
170 try:
171 self.progressDialog.value = value
172 empro.gui.processEvents()
173 except:
174
175 pass
176
178 self.isCanceled = retcode != empro.gui.SimpleDialog.Accepted
179
181 self.dialog.show(True)
182
184 return os.getenv("HOME", os.path.expanduser("~"))
185
191
192 _lastAdfiLocation = lambda set_value=None: _lastLocation("lastAdfiLocation", set_value)
193 _lastADS_HPEESOF_DIRLocation = lambda set_value=None: _lastLocation("lastADS_HPEESOF_DIRLocation", set_value)
194 _lastAdfiFile = lambda set_value=None: _lastLocation("lastAdfiFile", set_value)
195
196 _PREFERENCE_USE_JEDEC_BONDWIRES = "lastAdfiImportUseJedecBondwires"
197 _PREFERENCE_IMPORT_FOR_FDTD = "lastAdfiImportForFDTD"
198
199
200 if __name__=="__main__":
201 adfiImportShowGUI()
202