diff --git a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/preferences/CodanPreferencePage.java b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/preferences/CodanPreferencePage.java index 70aed99519f..b8ba26fedc9 100644 --- a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/preferences/CodanPreferencePage.java +++ b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/preferences/CodanPreferencePage.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2011 Alena Laskavaia + * Copyright (c) 2009, 2012 Alena Laskavaia and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -7,12 +7,10 @@ * * Contributors: * Alena Laskavaia - initial API and implementation + * Alex Ruiz (Google) *******************************************************************************/ package org.eclipse.cdt.codan.internal.ui.preferences; -import java.util.ArrayList; -import java.util.Iterator; - import org.eclipse.cdt.codan.core.CodanCorePlugin; import org.eclipse.cdt.codan.core.CodanRuntime; import org.eclipse.cdt.codan.core.model.ICheckersRegistry; @@ -23,6 +21,7 @@ import org.eclipse.cdt.codan.internal.ui.CodanUIMessages; import org.eclipse.cdt.codan.internal.ui.dialogs.CustomizeProblemDialog; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.preferences.InstanceScope; +import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; @@ -42,15 +41,18 @@ import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.preferences.ScopedPreferenceStore; +import java.util.ArrayList; +import java.util.Iterator; + /** - * This class represents a preference page that is contributed to the - * Preferences dialog. By subclassing FieldEditorPreferencePage, we - * can use the field support built into JFace that allows us to create a page - * that is small and knows how to save, restore and apply itself. + * This class represents a preference page that is contributed to the Preferences dialog. By + * subclassing {@code FieldEditorPreferencePage}, we can use built-in field support in JFace to + * create a page that is both small and knows how to save, restore and apply its values. *

- * This page is used to modify preferences only. They are stored in the - * preference store that belongs to the main plug-in class. That way, - * preferences can be accessed directly via the preference store. + * This page is used to modify preferences only. They are stored in the preference store that + * belongs to the main plug-in class. That way, preferences can be accessed directly via the + * preference store. + *

*/ public class CodanPreferencePage extends FieldEditorOverlayPage implements IWorkbenchPreferencePage { private static final String EMPTY_STRING = ""; //$NON-NLS-1$ @@ -62,23 +64,20 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements IWork public CodanPreferencePage() { super(GRID); - setPreferenceStore(new ScopedPreferenceStore(new InstanceScope(), CodanCorePlugin.PLUGIN_ID)); - // setDescription("Code Analysis Preference Page"); + setPreferenceStore(new ScopedPreferenceStore(InstanceScope.INSTANCE, CodanCorePlugin.PLUGIN_ID)); problemSelectionListener = new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { - if (infoButton != null) { - if (event.getSelection() instanceof ITreeSelection) { - ITreeSelection s = (ITreeSelection) event.getSelection(); - ArrayList list = new ArrayList(); - for (Iterator iterator = s.iterator(); iterator.hasNext();) { - Object o = iterator.next(); - if (o instanceof IProblem) { - list.add((IProblem) o); - } + if (infoButton != null && event.getSelection() instanceof ITreeSelection) { + ITreeSelection s = (ITreeSelection) event.getSelection(); + ArrayList list = new ArrayList(); + for (Iterator iterator = s.iterator(); iterator.hasNext();) { + Object o = iterator.next(); + if (o instanceof IProblem) { + list.add((IProblem) o); } - setSelectedProblems(list); } + setSelectedProblems(list); } } }; @@ -90,9 +89,9 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements IWork } /** - * Creates the field editors. Field editors are abstractions of the common - * GUI blocks needed to manipulate various types of preferences. Each field - * editor knows how to save and restore itself. + * Creates the field editors. Field editors are abstractions of the common GUI blocks needed to + * manipulate various types of preferences. Each field editor knows how to save and restore + * its own value. */ @Override public void createFieldEditors() { @@ -106,29 +105,22 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements IWork } }); GridData layoutData = new GridData(GridData.FILL, GridData.FILL, true, true); - layoutData.heightHint = 400; + layoutData.heightHint = 200; checkedTreeEditor.getTreeViewer().getControl().setLayoutData(layoutData); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.cdt.codan.internal.ui.preferences.FieldEditorOverlayPage# - * createContents(org.eclipse.swt.widgets.Composite) - */ @Override protected Control createContents(Composite parent) { - profile = isPropertyPage() ? getRegistry().getResourceProfileWorkingCopy((IResource) getElement()) : getRegistry() - .getWorkspaceProfile(); + if (isPropertyPage()) { + profile = getRegistry().getResourceProfileWorkingCopy((IResource) getElement()); + } else { + profile = getRegistry().getWorkspaceProfile(); + } Composite comp = (Composite) super.createContents(parent); createInfoControl(comp); return comp; } - /** - * @param comp - */ private void createInfoControl(Composite comp) { Composite info = new Composite(comp, SWT.NONE); info.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); @@ -147,84 +139,68 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements IWork restoreWidgetValues(); } - /** - * @param selection - */ protected void setSelectedProblems(ArrayList list) { this.selectedProblems = list; updateProblemInfo(); } - /** - * @return - */ protected ICheckersRegistry getRegistry() { return CodanRuntime.getInstance().getCheckersRegistry(); } - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.preference.PreferencePage#performApply() - */ @Override public boolean performOk() { saveWidgetValues(); - // if (isPropertyPage()) getRegistry().updateProfile((IResource) getElement(), null); return super.performOk(); } private void saveWidgetValues() { - CodanUIActivator - .getDefault() - .getDialogSettings() - .put(getWidgetId(), - (selectedProblems == null || selectedProblems.size() == 0) ? EMPTY_STRING : selectedProblems.get(0).getId()); + String id = (!hasSelectedProblems()) ? EMPTY_STRING : selectedProblems.get(0).getId(); + getDialogSettings().put(getWidgetId(), id); } private void restoreWidgetValues() { - String id = CodanUIActivator.getDefault().getDialogSettings().get(getWidgetId()); + String id = getDialogSettings().get(getWidgetId()); if (id != null && id.length() > 0 && checkedTreeEditor != null) { IProblem problem = profile.findProblem(id); - if (problem != null) + if (problem != null) { checkedTreeEditor.getTreeViewer().setSelection(new StructuredSelection(problem), true); + } } else { setSelectedProblems(null); } + updateProblemInfo(); + } + + private IDialogSettings getDialogSettings() { + return CodanUIActivator.getDefault().getDialogSettings(); } - /** - * @return - */ protected String getWidgetId() { return getPageId() + ".selection"; //$NON-NLS-1$ } private void updateProblemInfo() { - if (selectedProblems == null) { - infoButton.setEnabled(false); - } else { - infoButton.setEnabled(true); - } + infoButton.setEnabled(hasSelectedProblems()); } - /* - * (non-Javadoc) - * - * @see - * org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) - */ @Override public void init(IWorkbench workbench) { } protected void openCustomizeDialog() { - if (selectedProblems == null || selectedProblems.size() == 0) + if (!hasSelectedProblems()) { return; - CustomizeProblemDialog dialog = new CustomizeProblemDialog(getShell(), selectedProblems.toArray(new IProblem[selectedProblems - .size()]), (IResource) getElement()); + } + IProblem[] selected = selectedProblems.toArray(new IProblem[selectedProblems.size()]); + CustomizeProblemDialog dialog = + new CustomizeProblemDialog(getShell(), selected, (IResource) getElement()); dialog.open(); checkedTreeEditor.getTreeViewer().refresh(true); } + + private boolean hasSelectedProblems() { + return selectedProblems != null && !selectedProblems.isEmpty(); + } } \ No newline at end of file