Math2mat
|
00001 00020 package m2m.frontend.actions; 00021 00022 import org.eclipse.jface.dialogs.Dialog; 00023 import org.eclipse.swt.SWT; 00024 import org.eclipse.swt.layout.GridData; 00025 import org.eclipse.swt.layout.GridLayout; 00026 import org.eclipse.swt.widgets.Composite; 00027 import org.eclipse.swt.widgets.Control; 00028 import org.eclipse.swt.widgets.Display; 00029 import org.eclipse.swt.widgets.Group; 00030 import org.eclipse.swt.widgets.Label; 00031 import org.eclipse.swt.widgets.MessageBox; 00032 import org.eclipse.swt.widgets.Shell; 00033 import org.eclipse.swt.widgets.Text; 00034 import org.eclipse.ui.IWorkbenchWindow; 00035 00036 import m2m.backend.project.SimulationProperties; 00037 import m2m.frontend.M2MToolTips; 00038 import m2m.frontend.actions.M2MAction; 00039 00040 00041 public class ConfigureSimulationAction extends M2MAction{ 00042 00043 public ConfigureSimulationAction(IWorkbenchWindow window, String label) { 00044 super(window,label); 00045 // The id is used to refer to the action in a menu or toolbar 00046 setId(ICommandIds.CMD_CONFSIM); 00047 // Associate the action with a pre-defined command, to allow key bindings. 00048 setActionDefinitionId(ICommandIds.CMD_CONFSIM); 00049 //setImageDescriptor(m2mgui.Activator.getImageDescriptor("/icons/open.gif")); 00050 } 00051 00055 public void run() { 00056 00057 if (!getEditor("Error","Select the tab with the code you want to transform in VHDL")) 00058 return; 00059 00060 Display display = window.getShell().getDisplay(); 00061 final Shell shell = new Shell(display); 00062 shell.setText("Simulation configuration"); 00063 SimulationPropertiesDlg dlg=new SimulationPropertiesDlg(shell); 00064 dlg.setSimulationProperties(editor.getM2MProject().getSimulationProperties()); 00065 dlg.open(); 00066 if (dlg.pressedOk()) { 00067 editor.setModified(true); 00068 } 00069 // editor.saveProject(); 00070 } 00071 00072 class SimulationPropertiesDlg extends Dialog { 00073 00074 00078 private SimulationProperties simProp; 00082 private Text calcPres; 00086 private Text nbSamplesEntry; 00090 private Text systemFreqEntry; 00094 private Text inputFreqEntry; 00098 private Text outputFreqEntry; 00102 private Text inactivityTimeoutEntry; 00103 00107 private boolean pressedOnOk; 00108 00109 00110 public SimulationPropertiesDlg(Shell parentShell) { 00111 super(parentShell); 00112 pressedOnOk=false; 00113 } 00114 00115 protected void configureShell(Shell shell) { 00116 super.configureShell(shell); 00117 shell.setText("Simulation properties"); 00118 } 00119 00120 00121 @Override 00122 public void create() { 00123 super.create(); 00124 } 00125 00126 @Override 00127 protected Control createDialogArea(Composite parent) { 00128 00129 //create global GridLayout 00130 GridLayout globalGridLayout = new GridLayout(); 00131 globalGridLayout.numColumns = 1; 00132 00133 //create global Group 00134 Group globalGroup = new Group(parent, SWT.NONE); 00135 globalGroup.setLayout(globalGridLayout); 00136 00137 //create main GridLayout 00138 GridLayout gridLayout = new GridLayout(); 00139 gridLayout.numColumns = 3; 00140 gridLayout.verticalSpacing = 5; 00141 00142 //create date format Group 00143 Group formatGroup = new Group(globalGroup, SWT.SHADOW_ETCHED_IN); 00144 formatGroup.setText("Data format"); 00145 formatGroup.setBounds(globalGroup.getClientArea()); 00146 formatGroup.setLayout(gridLayout); 00147 00148 00149 //calculation precision label placement 00150 GridData gridCalc = new GridData(); 00151 gridCalc.verticalSpan = 8; 00152 gridCalc.verticalAlignment = SWT.BOTTOM; 00153 00154 //calculation precision label 00155 Label calcLabel = new Label(formatGroup, SWT.NONE); 00156 calcLabel.setText("Number bit precision :"); 00157 calcLabel.setLayoutData(gridCalc); 00158 calcLabel.pack(); 00159 00160 //calculation precision text entry placement 00161 GridData gridCalcPres = new GridData(); 00162 gridCalcPres.widthHint = 100; 00163 gridCalcPres.verticalSpan = 8; 00164 gridCalcPres.verticalAlignment = SWT.BOTTOM; 00165 00166 //text precision text entry 00167 calcPres = new Text(formatGroup, SWT.NONE); 00168 calcPres.setLayoutData(gridCalcPres); 00169 calcPres.pack(); 00170 00171 calcLabel.setToolTipText(M2MToolTips.SIMPROPERTIES_CALCPRECISION); 00172 calcPres.setToolTipText(M2MToolTips.SIMPROPERTIES_CALCPRECISION); 00173 00174 //rating and sampling group 00175 Group freqGroup = new Group(globalGroup, SWT.SHADOW_ETCHED_IN); 00176 freqGroup.setText("Rating and sampling"); 00177 freqGroup.setLocation(5, 200); 00178 freqGroup.setBounds(globalGroup.getClientArea()); 00179 00180 //create main GridLayout 00181 GridLayout freqGridLayout = new GridLayout(); 00182 freqGridLayout.numColumns = 3; 00183 freqGridLayout.verticalSpacing = 5; 00184 00185 freqGroup.setLayout(freqGridLayout); 00186 00187 /* 00188 //Stress factor placement 00189 GridData gridStressFactor = new GridData(); 00190 gridStressFactor.verticalSpan = 8; 00191 gridStressFactor.verticalAlignment = SWT.BOTTOM; 00192 00193 //Stress factor label 00194 Label stressFactorLabel = new Label(freqGroup, SWT.NONE); 00195 stressFactorLabel.setText("Stress factor :"); 00196 stressFactorLabel.setLayoutData(gridStressFactor); 00197 stressFactorLabel.pack(); 00198 00199 //Stress factor text entry placement 00200 GridData gridstressFactor = new GridData(); 00201 gridstressFactor.widthHint = 100; 00202 // gridstressFactor.horizontalSpan = 2; 00203 gridstressFactor.verticalSpan = 8; 00204 gridstressFactor.verticalAlignment = SWT.BOTTOM; 00205 00206 //Stress factor entry 00207 stressFactor = new Spinner(freqGroup, SWT.NONE); 00208 stressFactor.setLayoutData(gridStressFactor); 00209 00210 // stressFactor.pack(); 00211 00212 Label emptyLabel = new Label(freqGroup, SWT.NONE); 00213 emptyLabel.setText(""); 00214 emptyLabel.setLayoutData(gridStressFactor); 00215 emptyLabel.pack();*/ 00216 00217 00218 00219 00220 00221 //number of samples label placement 00222 GridData gridNumberOfSample = new GridData(); 00223 gridNumberOfSample.verticalSpan = 8; 00224 gridNumberOfSample.verticalAlignment = SWT.BOTTOM; 00225 00226 //number of samples label 00227 Label nbSamplesLabel = new Label(freqGroup, SWT.NONE); 00228 nbSamplesLabel.setLayoutData(gridNumberOfSample); 00229 nbSamplesLabel.setText("Number of samples :"); 00230 nbSamplesLabel.pack(); 00231 00232 //number of samples text entry placement 00233 GridData gridNbSamplesEntry = new GridData(); 00234 gridNbSamplesEntry.widthHint = 100; 00235 gridNbSamplesEntry.verticalSpan = 8; 00236 gridNbSamplesEntry.horizontalSpan = 2; 00237 gridNbSamplesEntry.verticalAlignment = SWT.BOTTOM; 00238 00239 //number of samples text entry 00240 nbSamplesEntry = new Text(freqGroup, SWT.RIGHT); 00241 nbSamplesEntry.setLayoutData(gridNbSamplesEntry); 00242 nbSamplesEntry.pack(); 00243 00244 nbSamplesLabel.setToolTipText(M2MToolTips.SIMPROPERTIES_NBSAMPLES); 00245 nbSamplesEntry.setToolTipText(M2MToolTips.SIMPROPERTIES_NBSAMPLES); 00246 00247 00248 //system frequency label placement 00249 GridData gridSystFreq = new GridData(); 00250 gridSystFreq.verticalSpan = 8; 00251 gridSystFreq.verticalAlignment = SWT.BOTTOM; 00252 00253 //system frequency label 00254 Label systFreq = new Label(freqGroup, SWT.NONE); 00255 systFreq.setLayoutData(gridSystFreq); 00256 systFreq.setText("System frequency :"); 00257 systFreq.pack(); 00258 00259 //stimuli read frequency text entry placement 00260 GridData gridSystFreqEntry = new GridData(); 00261 gridSystFreqEntry.widthHint = 100; 00262 gridSystFreqEntry.verticalSpan = 8; 00263 gridSystFreqEntry.verticalAlignment = SWT.BOTTOM; 00264 00265 //stimuli read frequency text entry 00266 systemFreqEntry = new Text(freqGroup, SWT.RIGHT); 00267 systemFreqEntry.setLayoutData(gridSystFreqEntry); 00268 systemFreqEntry.pack(); 00269 00270 //stimuli read frequency unit label placement 00271 GridData gridSystFreqUnit = new GridData(); 00272 gridSystFreqUnit.verticalSpan = 8; 00273 gridSystFreqUnit.verticalAlignment = SWT.BOTTOM; 00274 00275 //stimuli read frequency unit label 00276 Label systFreqUnit = new Label(freqGroup, SWT.NONE); 00277 systFreqUnit.setLayoutData(gridSystFreqUnit); 00278 systFreqUnit.setText("MHz"); 00279 systFreqUnit.pack(); 00280 00281 systFreq.setToolTipText(M2MToolTips.SIMPROPERTIES_SYSFREQ); 00282 systemFreqEntry.setToolTipText(M2MToolTips.SIMPROPERTIES_SYSFREQ); 00283 00284 00285 //stimuli read frequency label placement 00286 GridData gridReadStimFreqSample = new GridData(); 00287 gridReadStimFreqSample.verticalSpan = 8; 00288 gridReadStimFreqSample.verticalAlignment = SWT.BOTTOM; 00289 00290 //stimuli read frequency label 00291 Label readFreq = new Label(freqGroup, SWT.NONE); 00292 readFreq.setLayoutData(gridReadStimFreqSample); 00293 readFreq.setText("Input frequency :"); 00294 readFreq.pack(); 00295 00296 //stimuli read frequency text entry placement 00297 GridData gridReadStimFreqEntry = new GridData(); 00298 gridReadStimFreqEntry.widthHint = 100; 00299 gridReadStimFreqEntry.verticalSpan = 8; 00300 gridReadStimFreqEntry.verticalAlignment = SWT.BOTTOM; 00301 00302 //stimuli read frequency text entry 00303 inputFreqEntry = new Text(freqGroup, SWT.RIGHT); 00304 inputFreqEntry.setLayoutData(gridReadStimFreqEntry); 00305 inputFreqEntry.pack(); 00306 00307 //stimuli read frequency unit label placement 00308 GridData gridReadStimFreqUnit = new GridData(); 00309 gridReadStimFreqUnit.verticalSpan = 8; 00310 gridReadStimFreqUnit.verticalAlignment = SWT.BOTTOM; 00311 00312 //stimuli read frequency unit label 00313 Label readFreqUnit = new Label(freqGroup, SWT.NONE); 00314 readFreqUnit.setLayoutData(gridReadStimFreqUnit); 00315 readFreqUnit.setText("MHz"); 00316 readFreqUnit.pack(); 00317 00318 readFreq.setToolTipText(M2MToolTips.SIMPROPERTIES_INPUTFREQ); 00319 inputFreqEntry.setToolTipText(M2MToolTips.SIMPROPERTIES_INPUTFREQ); 00320 00321 00322 00323 00324 00325 //reference sample frequency label placement 00326 GridData gridRefSample = new GridData(); 00327 gridRefSample.verticalSpan = 8; 00328 gridRefSample.verticalAlignment = SWT.BOTTOM; 00329 00330 //reference sample frequency label 00331 Label refSampleFreq = new Label(freqGroup, SWT.NONE); 00332 refSampleFreq.setText("Output frequency :"); 00333 refSampleFreq.setLayoutData(gridRefSample); 00334 refSampleFreq.pack(); 00335 00336 //reference sample frequency text entry placement 00337 GridData gridRefSampleEntry = new GridData(); 00338 gridRefSampleEntry.widthHint = 100; 00339 gridRefSampleEntry.verticalSpan = 8; 00340 gridRefSampleEntry.verticalAlignment = SWT.BOTTOM; 00341 00342 //reference sample frequency text entry 00343 outputFreqEntry = new Text(freqGroup, SWT.RIGHT); 00344 outputFreqEntry.setLayoutData(gridRefSampleEntry); 00345 outputFreqEntry.pack(); 00346 00347 00348 //reference sample frequency unit label placement 00349 GridData gridRefSampleUnit = new GridData(); 00350 gridRefSampleUnit.verticalSpan = 8; 00351 gridRefSampleUnit.verticalAlignment = SWT.BOTTOM; 00352 00353 //reference sample frequency unit label 00354 Label refSampleUnit = new Label(freqGroup, SWT.NONE); 00355 refSampleUnit.setText("MHz"); 00356 refSampleUnit.setLayoutData(gridRefSampleUnit); 00357 refSampleUnit.pack(); 00358 00359 refSampleFreq.setToolTipText(M2MToolTips.SIMPROPERTIES_OUTPUTFREQ); 00360 outputFreqEntry.setToolTipText(M2MToolTips.SIMPROPERTIES_OUTPUTFREQ); 00361 00362 00363 00364 00365 00366 00367 00368 //inactivity timeout label placement 00369 GridData gridInactivityTimeout = new GridData(); 00370 gridInactivityTimeout.verticalSpan = 8; 00371 gridInactivityTimeout.verticalAlignment = SWT.BOTTOM; 00372 00373 //inactivity timeout label 00374 Label inactivityTimeoutFreq = new Label(freqGroup, SWT.NONE); 00375 inactivityTimeoutFreq.setText("Inactivity timeout :"); 00376 inactivityTimeoutFreq.setLayoutData(gridInactivityTimeout); 00377 inactivityTimeoutFreq.pack(); 00378 00379 //inactivity timeout text entry placement 00380 GridData gridInactivityTimeoutEntry = new GridData(); 00381 gridInactivityTimeoutEntry.widthHint = 100; 00382 gridInactivityTimeoutEntry.verticalSpan = 8; 00383 gridInactivityTimeoutEntry.verticalAlignment = SWT.BOTTOM; 00384 00385 //inactivity timeout text entry 00386 inactivityTimeoutEntry = new Text(freqGroup, SWT.RIGHT); 00387 inactivityTimeoutEntry.setLayoutData(gridInactivityTimeoutEntry); 00388 inactivityTimeoutEntry.pack(); 00389 00390 //inactivity timeout unit label placement 00391 GridData gridInactivityTimeoutUnit = new GridData(); 00392 gridInactivityTimeoutUnit.verticalSpan = 8; 00393 gridInactivityTimeoutUnit.verticalAlignment = SWT.BOTTOM; 00394 00395 //inactivity timeout unit label 00396 Label inactivityTimeoutUnit = new Label(freqGroup, SWT.NONE); 00397 inactivityTimeoutUnit.setText("Clock cycles"); 00398 inactivityTimeoutUnit.setLayoutData(gridInactivityTimeoutUnit); 00399 inactivityTimeoutUnit.pack(); 00400 00401 inactivityTimeoutFreq.setToolTipText(M2MToolTips.SIMPROPERTIES_INACTIVITY); 00402 inactivityTimeoutEntry.setToolTipText(M2MToolTips.SIMPROPERTIES_INACTIVITY); 00403 00404 this.refreshSimulationPage(); 00405 00406 return parent; 00407 } 00408 00409 00410 private boolean validate() { 00411 try { 00412 if (calcPres.getText() != null) { 00413 simProp.setSimulationCalcPrecision(Integer.parseInt(calcPres.getText())); 00414 } 00415 if (nbSamplesEntry.getText() != null) { 00416 simProp.setNumberOfSamples(Integer.parseInt(nbSamplesEntry.getText())); 00417 } 00418 if (inputFreqEntry.getText() != null) { 00419 simProp.setSystemFrequency(Float.parseFloat(systemFreqEntry.getText())); 00420 } 00421 if (inputFreqEntry.getText() != null) { 00422 simProp.setInputFrequency(Float.parseFloat(inputFreqEntry.getText())); 00423 } 00424 if (outputFreqEntry.getText() != null) { 00425 simProp.setOutputFrequency(Float.parseFloat(outputFreqEntry.getText())); 00426 } 00427 if (outputFreqEntry.getText() != null) { 00428 simProp.setInactivityTimeout(Integer.parseInt(inactivityTimeoutEntry.getText())); 00429 } 00430 00431 return true; 00432 } 00433 catch (NumberFormatException e){ 00434 00435 MessageBox mess=new MessageBox(this.getShell(), SWT.ICON_ERROR | SWT.OK); 00436 mess.setMessage("Error in the one of the input field"); 00437 mess.setText("Error"); 00438 mess.open(); 00439 return false; 00440 } 00441 } 00442 00443 protected void okPressed() { 00444 saveSimulationProperties(); 00445 pressedOnOk=true; 00446 this.close(); 00447 } 00448 00449 public boolean pressedOk() { 00450 return pressedOnOk; 00451 } 00452 00456 private void saveSimulationProperties() { 00457 if (!validate()) 00458 return; 00459 00460 if (calcPres.getText() != null) { 00461 simProp.setSimulationCalcPrecision(Integer.parseInt(calcPres.getText())); 00462 } 00463 if (nbSamplesEntry.getText() != null) { 00464 simProp.setNumberOfSamples(Integer.parseInt(nbSamplesEntry.getText())); 00465 } 00466 if (inputFreqEntry.getText() != null) { 00467 simProp.setSystemFrequency(Float.parseFloat(systemFreqEntry.getText())); 00468 } 00469 if (inputFreqEntry.getText() != null) { 00470 simProp.setInputFrequency(Float.parseFloat(inputFreqEntry.getText())); 00471 } 00472 if (outputFreqEntry.getText() != null) { 00473 simProp.setOutputFrequency(Float.parseFloat(outputFreqEntry.getText())); 00474 } 00475 if (inactivityTimeoutEntry.getText() != null) { 00476 simProp.setInactivityTimeout(Integer.parseInt(inactivityTimeoutEntry.getText())); 00477 } 00478 } 00479 00485 public void setSimulationProperties(SimulationProperties simProp) { 00486 this.simProp = simProp; 00487 } 00488 00492 public void refreshSimulationPage() { 00493 if (simProp instanceof SimulationProperties) { 00494 calcPres.setText(String.valueOf(simProp.getSimulationCalcPrecision())); 00495 nbSamplesEntry.setText(String.valueOf(simProp.getNumberOfSamples())); 00496 systemFreqEntry.setText(String.valueOf(simProp.getSystemFrequency())); 00497 inputFreqEntry.setText(String.valueOf(simProp.getInputFrequency())); 00498 outputFreqEntry.setText(String.valueOf(simProp.getOutputFrequency())); 00499 inactivityTimeoutEntry.setText(String.valueOf(simProp.getInactivityTimeout())); 00500 } 00501 } 00502 } 00503 }