Package empro :: Package toolkit :: Package gui :: Module adfiImportDialog
[frames] | no frames]

Source Code for Module empro.toolkit.gui.adfiImportDialog

  1  # Copyright 1983-2012 Keysight Technologies, Inc   
  2  import os 
  3  import empro 
  4   
5 -def adfiImportShowGUI(iDefaultAdfi="",iDefaultADS_HPEESOF_DIR=""):
6 z = AdfiGui(iDefaultAdfi=iDefaultAdfi,iDefaultADS_HPEESOF_DIR=iDefaultADS_HPEESOF_DIR) 7 z.show()
8
9 -class AdfiGui(object):
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
62 - def updateSize(self):
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
77 - def onMoreDirs(self, ignore):
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
84 - def onMoreAdfiFiles(self,iIgnore):
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
94 - def _valid_ADS_HPEESOF_DIR(self):
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
114 - def onFinished(self,iReturn):
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
169 - def updateProgress(self,value):
170 try: 171 self.progressDialog.value = value 172 empro.gui.processEvents() 173 except: 174 # if no progressDialog exists, just ignore call 175 pass
176
177 - def onProgressFinished(self, retcode):
178 self.isCanceled = retcode != empro.gui.SimpleDialog.Accepted
179
180 - def show(self):
181 self.dialog.show(True)
182
183 -def _defaultLocation():
184 return os.getenv("HOME", os.path.expanduser("~"))
185
186 -def _lastLocation(key, set_value=None):
187 if set_value != None: 188 empro.core.ApplicationPreferences.setPreference(key, set_value) 189 default = _defaultLocation() 190 return empro.core.ApplicationPreferences.getPreference(key, default)
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