package com.mobilesorcery.sdk.molint.ui.internal; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IMarker; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import com.mobilesorcery.sdk.molint.IMolintRule; import com.mobilesorcery.sdk.molint.MolintPlugin; import com.mobilesorcery.sdk.ui.UIUtils; import com.mobilesorcery.sdk.ui.UpdateListener; import com.mobilesorcery.sdk.ui.UpdateListener.IUpdatableControl; public class MolintPreferencePage extends PreferencePage implements IWorkbenchPreferencePage, IUpdatableControl { private static final String[] SEVERITY_LABELS = new String[] { "Ignore", "Warning", "Error" }; private static final Integer[] SEVERITY_VALUES = new Integer[] { IMarker.SEVERITY_INFO, IMarker.SEVERITY_WARNING, IMarker.SEVERITY_ERROR }; private List<IMolintRule> rules; private ArrayList<Combo> severityCombos = new ArrayList<Combo>(); private Button enableButton; @Override public void init(IWorkbench workbench) { rules = MolintPlugin.getDefault().getAllRules(); } @Override protected Control createContents(Composite parent) { Composite main = new Composite(parent, SWT.NONE); main.setLayout(UIUtils.newPrefsLayout(2)); enableButton = new Button(main, SWT.CHECK); enableButton.setLayoutData(new GridData(SWT.DEFAULT, SWT.DEFAULT, true, false, 2, 1)); enableButton.setText("Enable &Molint"); enableButton.setSelection(MolintPlugin.getDefault().isMolintEnabled()); enableButton.addListener(SWT.Selection, new UpdateListener(this)); int ix = 0; for (IMolintRule rule : rules) { String ruleText = rule.getName(); Label ruleLabel = new Label(main, SWT.NONE); ruleLabel.setText(ruleText); int initialSeverity = rule.getSeverity(); createSeverityCombo(main, ix, initialSeverity); ix++; } updateUI(); return main; } public void updateUI() { for (Combo severityCombo : severityCombos) { severityCombo.setEnabled(enableButton.getSelection()); } } private void createSeverityCombo(Composite main, int ix, int initialValue) { Combo combo = new Combo(main, SWT.READ_ONLY); combo.setItems(SEVERITY_LABELS); for (int i = 0; i < SEVERITY_VALUES.length; i++) { if (SEVERITY_VALUES[i] == initialValue) { combo.select(i); } } severityCombos.add(combo); } public boolean performOk() { MolintPlugin.getDefault().setMolintEnabled(enableButton.getSelection()); for (int i = 0; i < severityCombos.size(); i++) { Combo severityCombo = severityCombos.get(i); int ix = severityCombo.getSelectionIndex(); rules.get(i).setSeverity(SEVERITY_VALUES[ix]); } return super.performOk(); } }