package costabs.dialogs; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import costabs.Activator; import costabs.console.ConsoleHandler; import costabs.preferences.CostabsOptions; import costabs.preferences.PreferenceConstants; public class OptionsDialog extends Dialog { private Button[] costModelSelection; private Button[] costCentersSelection; private Button[] sizeAbstractionSelection; private Button[] debugModeSelection; private Button[] asymptoticSelection; private Button[] verbositySelection; public OptionsDialog(Shell parentShell) { super(parentShell); } protected Control createDialogArea(Composite parent) { Composite composite = (Composite)super.createDialogArea(parent); try { RowLayout verticalLayout = new RowLayout(); verticalLayout.type = SWT.VERTICAL; verticalLayout.marginWidth = 10; verticalLayout.marginHeight = 10; composite.setLayout(verticalLayout); createOptionsPanel(composite); createOptionsListeners(); setOptions(); } catch (Exception e) { ConsoleHandler.write("Error creating Dialog "); } return composite; } private void createOptionsPanel(Composite composite) { Composite costModelPanel = new Composite(composite,SWT.NONE); costModelSelection = new Button[CostabsOptions.COST_MODEL.length]; createOption(costModelPanel, costModelSelection, CostabsOptions.COST_MODEL_TITLE, CostabsOptions.COST_MODEL); Composite costCentersPanel = new Composite(composite,SWT.NONE); costCentersSelection = new Button[CostabsOptions.COST_CENTERS.length]; createOption(costCentersPanel, costCentersSelection, CostabsOptions.COST_CENTERS_TITLE, CostabsOptions.COST_CENTERS); Composite sizeAbstractionPanel = new Composite(composite,SWT.NONE); sizeAbstractionSelection = new Button[CostabsOptions.SIZE_NORM.length]; createOption(sizeAbstractionPanel, sizeAbstractionSelection, CostabsOptions.SIZE_NORM_TITLE, CostabsOptions.SIZE_NORM); Composite debugModePanel = new Composite(composite,SWT.NONE); debugModeSelection = new Button[CostabsOptions.DEBUG_MODE.length]; createOption(debugModePanel, debugModeSelection, CostabsOptions.DEBUG_MODE_TITLE, CostabsOptions.DEBUG_MODE); Composite asymptoticPanel = new Composite(composite,SWT.NONE); asymptoticSelection = new Button[CostabsOptions.ASYMPTOTIC.length]; createOption(asymptoticPanel, asymptoticSelection, CostabsOptions.ASYMPTOTIC_TITLE, CostabsOptions.ASYMPTOTIC); Composite verbosityPanel = new Composite(composite,SWT.NONE); verbositySelection = new Button[CostabsOptions.VERBOSITY.length]; createOption(verbosityPanel, verbositySelection, CostabsOptions.VERBOSITY_TITLE, CostabsOptions.VERBOSITY); } private void createOption(Composite c, Button[] buttons, String title, String[] options) { RowLayout verticalLayout = new RowLayout(); verticalLayout.type = SWT.VERTICAL; c.setLayout(verticalLayout); Label label = new Label (c, SWT.NULL); label.setText(title + ":"); Composite optionsPanel = new Composite(c,SWT.NONE); optionsPanel.setLayout(new RowLayout()); for (int i = 0; i < options.length; i++) { buttons[i] = new Button(optionsPanel, SWT.RADIO); buttons[i].setText(options[i]); } } private void createOptionsListeners() { for (int i = 0; i < costModelSelection.length; i++) costModelSelection[i].addSelectionListener(new SelectCostModelChangeListener(this, i, costModelSelection[i])); for (int i = 0; i < costCentersSelection.length; i++) costCentersSelection[i].addSelectionListener(new SelectCostCentersChangeListener(this, i, costCentersSelection[i])); for (int i = 0; i < sizeAbstractionSelection.length; i++) sizeAbstractionSelection[i].addSelectionListener(new SelectSizeAbstractionChangeListener(this, i, sizeAbstractionSelection[i])); for (int i = 0; i < asymptoticSelection.length; i++) asymptoticSelection[i].addSelectionListener(new SelectAsymptoticChangeListener(this, i, asymptoticSelection[i])); for (int i = 0; i < debugModeSelection.length; i++) debugModeSelection[i].addSelectionListener(new SelectDebugModeChangeListener(this, i, debugModeSelection[i])); for (int i = 0; i < verbositySelection.length; i++) verbositySelection[i].addSelectionListener(new SelectVerbosityChangeListener(this, i, verbositySelection[i])); } private void setOptions() { IPreferenceStore store = Activator.getDefault().getPreferenceStore(); String preferenceValue = ""; preferenceValue = store.getString(PreferenceConstants.PCOST_MODEL); for (int i = 0; i < CostabsOptions.COST_MODEL_PROLOG.length; i++) costModelSelection[i].setSelection(preferenceValue.equals(CostabsOptions.COST_MODEL_PROLOG[i])); preferenceValue = store.getString(PreferenceConstants.PCOST_CENTER); for (int i = 0; i < CostabsOptions.COST_CENTERS.length; i++) costCentersSelection[i].setSelection(preferenceValue.equals(CostabsOptions.COST_CENTERS_PROLOG[i])); preferenceValue = store.getString(PreferenceConstants.PSIZE_ABST); for (int i = 0; i < CostabsOptions.SIZE_NORM.length; i++) sizeAbstractionSelection[i].setSelection(preferenceValue.equals(CostabsOptions.SIZE_NORM_PROLOG[i])); preferenceValue = store.getString(PreferenceConstants.PASYMPTOTIC); for (int i = 0; i < CostabsOptions.ASYMPTOTIC.length; i++) asymptoticSelection[i].setSelection(preferenceValue.equals(CostabsOptions.ASYMPTOTIC[i])); preferenceValue = store.getString(PreferenceConstants.PDEBUG_MODE); for (int i = 0; i < CostabsOptions.DEBUG_MODE.length; i++) debugModeSelection[i].setSelection(preferenceValue.equals(CostabsOptions.DEBUG_MODE[i])); preferenceValue = store.getString(PreferenceConstants.PVERBOSITY); for (int i = 0; i < CostabsOptions.VERBOSITY.length; i++) verbositySelection[i].setSelection(preferenceValue.equals(CostabsOptions.VERBOSITY[i])); } public Button[] getCostModel() { return costModelSelection; } public Button[] getCostCenters() { return costCentersSelection; } public Button[] getSizeAbstraction() { return sizeAbstractionSelection; } public Button[] getAsymptotic() { return asymptoticSelection; } public Button[] getDebugMode() { return debugModeSelection; } public Button[] getVerbosity() { return verbositySelection; } @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText("Select the preferences for Costa"); } @Override protected void okPressed() { this.close(); } @Override protected void createButtonsForButtonBar(Composite parent) { GridLayout layout = new GridLayout (1,true); parent.setLayout(layout); parent.pack(); super.createButtonsForButtonBar(parent); this.getButton(IDialogConstants.OK_ID).setText("Analyze"); } } class SelectCostModelChangeListener implements SelectionListener { OptionsDialog dialog = null; int index; Button b; public SelectCostModelChangeListener(OptionsDialog dialog, int i, Button b) { this.dialog = dialog; this.index = i; this.b = b; } public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { for (int i = 0; i < this.dialog.getCostModel().length; i++) { this.dialog.getCostModel()[i].setSelection(false); } b.setSelection(true); IPreferenceStore store = Activator.getDefault().getPreferenceStore(); store.setValue(PreferenceConstants.PCOST_MODEL, CostabsOptions.COST_MODEL_PROLOG[index]); } } class SelectCostCentersChangeListener implements SelectionListener { OptionsDialog dialog = null; int index; Button b; public SelectCostCentersChangeListener(OptionsDialog dialog, int i, Button b) { this.dialog = dialog; this.index = i; this.b = b; } public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { for (int i = 0; i < this.dialog.getCostCenters().length; i++) { this.dialog.getCostCenters()[i].setSelection(false); } b.setSelection(true); IPreferenceStore store = Activator.getDefault().getPreferenceStore(); store.setValue(PreferenceConstants.PCOST_CENTER, CostabsOptions.COST_CENTERS_PROLOG[index]); } } class SelectSizeAbstractionChangeListener implements SelectionListener { OptionsDialog dialog = null; int index; Button b; public SelectSizeAbstractionChangeListener(OptionsDialog dialog, int i, Button b) { this.dialog = dialog; this.index = i; this.b = b; } public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { for (int i = 0; i < this.dialog.getSizeAbstraction().length; i++) { this.dialog.getSizeAbstraction()[i].setSelection(false); } b.setSelection(true); IPreferenceStore store = Activator.getDefault().getPreferenceStore(); store.setValue(PreferenceConstants.PSIZE_ABST, CostabsOptions.SIZE_NORM_PROLOG[index]); } } class SelectAsymptoticChangeListener implements SelectionListener { OptionsDialog dialog = null; int index; Button b; public SelectAsymptoticChangeListener(OptionsDialog dialog, int i, Button b) { this.dialog = dialog; this.index = i; this.b = b; } public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { for (int i = 0; i < this.dialog.getAsymptotic().length; i++) { this.dialog.getAsymptotic()[i].setSelection(false); } b.setSelection(true); IPreferenceStore store = Activator.getDefault().getPreferenceStore(); store.setValue(PreferenceConstants.PASYMPTOTIC, CostabsOptions.ASYMPTOTIC[index]); } } class SelectDebugModeChangeListener implements SelectionListener { OptionsDialog dialog = null; int index; Button b; public SelectDebugModeChangeListener(OptionsDialog dialog, int i, Button b) { this.dialog = dialog; this.index = i; this.b = b; } public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { for (int i = 0; i < this.dialog.getDebugMode().length; i++) { this.dialog.getDebugMode()[i].setSelection(false); } b.setSelection(true); IPreferenceStore store = Activator.getDefault().getPreferenceStore(); store.setValue(PreferenceConstants.PDEBUG_MODE, CostabsOptions.DEBUG_MODE[index]); } } class SelectVerbosityChangeListener implements SelectionListener { OptionsDialog dialog = null; int index; Button b; public SelectVerbosityChangeListener(OptionsDialog dialog, int i, Button b) { this.dialog = dialog; this.index = i; this.b = b; } public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { for (int i = 0; i < this.dialog.getVerbosity().length; i++) { this.dialog.getVerbosity()[i].setSelection(false); } b.setSelection(true); IPreferenceStore store = Activator.getDefault().getPreferenceStore(); store.setValue(PreferenceConstants.PVERBOSITY, CostabsOptions.VERBOSITY[index]); } }