diff options
author | Alena Laskavaia | 2011-03-01 03:32:51 +0000 |
---|---|---|
committer | Alena Laskavaia | 2011-03-01 03:32:51 +0000 |
commit | 14199fcfa3e86158253ac7591928065c6b714422 (patch) | |
tree | 4c6905145c36a7b215f2bcb53579b9b054938d79 /codan/org.eclipse.cdt.codan.ui | |
parent | 1db363d94cd521f699c5d89dbdcb79f9d3fb0ea4 (diff) | |
download | org.eclipse.cdt-14199fcfa3e86158253ac7591928065c6b714422.tar.gz org.eclipse.cdt-14199fcfa3e86158253ac7591928065c6b714422.tar.xz org.eclipse.cdt-14199fcfa3e86158253ac7591928065c6b714422.zip |
partually support editing multiple problems at the same time
Diffstat (limited to 'codan/org.eclipse.cdt.codan.ui')
4 files changed, 117 insertions, 39 deletions
diff --git a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/actions/OpenProblemPreferences.java b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/actions/OpenProblemPreferences.java index 08abbe8e861..6c10bb507f5 100644 --- a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/actions/OpenProblemPreferences.java +++ b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/actions/OpenProblemPreferences.java @@ -1,5 +1,9 @@ package org.eclipse.cdt.codan.internal.ui.actions; +import java.util.ArrayList; +import java.util.Iterator; + +import org.eclipse.cdt.codan.core.model.IProblem; import org.eclipse.cdt.codan.core.model.IProblemProfile; import org.eclipse.cdt.codan.internal.core.model.CodanProblem; import org.eclipse.cdt.codan.internal.core.model.CodanProblemMarker; @@ -21,17 +25,23 @@ public class OpenProblemPreferences implements IObjectActionDelegate { public void run(IAction action) { if (selection instanceof IStructuredSelection) { - Object firstElement = ((IStructuredSelection) selection).getFirstElement(); // TODO support multiple - if (firstElement instanceof IMarker) { - IMarker marker = (IMarker) firstElement; - String id = CodanProblemMarker.getProblemId(marker); - if (id == null) - return; - IResource resource = marker.getResource(); - IProblemProfile profile = CodanProblemMarker.getProfile(resource); - CodanProblem problem = ((CodanProblem) profile.findProblem(id)); - new CustomizeProblemDialog(targetPart.getSite().getShell(), problem, resource).open(); + IStructuredSelection ss = (IStructuredSelection) selection; + ArrayList<IProblem> list = new ArrayList<IProblem>(); + IResource resource = null; + for (Iterator<?> iterator = ss.iterator(); iterator.hasNext();) { + Object el = iterator.next(); + if (el instanceof IMarker) { + IMarker marker = (IMarker) el; + String id = CodanProblemMarker.getProblemId(marker); + if (id == null) + return; + resource = marker.getResource(); + IProblemProfile profile = CodanProblemMarker.getProfile(resource); + CodanProblem problem = ((CodanProblem) profile.findProblem(id)); + list.add(problem); + } } + new CustomizeProblemDialog(targetPart.getSite().getShell(), list.toArray(new IProblem[list.size()]), resource).open(); } } diff --git a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/dialogs/CustomizeProblemDialog.java b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/dialogs/CustomizeProblemDialog.java index 14c598a191e..2b3eb06eb7f 100644 --- a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/dialogs/CustomizeProblemDialog.java +++ b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/dialogs/CustomizeProblemDialog.java @@ -12,8 +12,11 @@ package org.eclipse.cdt.codan.internal.ui.dialogs; import org.eclipse.cdt.codan.core.model.IProblem; import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy; +import org.eclipse.cdt.codan.core.param.RootProblemPreference; +import org.eclipse.cdt.codan.internal.core.model.CodanProblem; import org.eclipse.cdt.codan.internal.ui.CodanUIMessages; import org.eclipse.cdt.codan.internal.ui.widgets.CustomizeProblemComposite; +import org.eclipse.cdt.codan.internal.ui.widgets.ParametersComposite; import org.eclipse.core.resources.IResource; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.swt.SWT; @@ -29,6 +32,7 @@ import org.eclipse.swt.widgets.Shell; public class CustomizeProblemDialog extends TitleAreaDialog { private CustomizeProblemComposite comp; private IProblem problem; + private IProblem[] problems; private IResource resource; /** @@ -36,14 +40,31 @@ public class CustomizeProblemDialog extends TitleAreaDialog { * @param selectedProblem * @param iResource */ - public CustomizeProblemDialog(Shell parentShell, IProblem selectedProblem, IResource resource) { + public CustomizeProblemDialog(Shell parentShell, IProblem[] selectedProblems, IResource resource) { super(parentShell); - this.problem = selectedProblem; + this.problems = selectedProblems; + this.problem = buildCombined(selectedProblems); this.resource = resource; setShellStyle(getShellStyle() | SWT.RESIZE); } /** + * @param selectedProblems + * @return + */ + private IProblem buildCombined(IProblem[] selectedProblems) { + if (selectedProblems.length == 1) { + return selectedProblems[0]; + } + CodanProblem problem = new CodanProblem("multi", getTitle()); + problem.setMessagePattern(ParametersComposite.NO_CHANGE); + problem.setPreference(new RootProblemPreference()); + problem.setSeverity(selectedProblems[0].getSeverity()); + problem.setEnabled(selectedProblems[0].isEnabled()); + return problem; + } + + /** * Stores edit values into problem working copy * * @param problem @@ -63,7 +84,7 @@ public class CustomizeProblemDialog extends TitleAreaDialog { @Override protected Control createDialogArea(Composite parent) { getShell().setText(CodanUIMessages.CustomizeProblemDialog_Title); - setTitle(problem.getName()); + setTitle(getTitle()); setMessage(CodanUIMessages.CustomizeProblemDialog_Message); Composite area = (Composite) super.createDialogArea(parent); comp = new CustomizeProblemComposite(area, problem, resource); @@ -73,6 +94,22 @@ public class CustomizeProblemDialog extends TitleAreaDialog { return area; } + /** + * @return + */ + public String getTitle() { + if (problems.length == 1) + return problem.getName(); + String b = ""; //$NON-NLS-1$ + for (int i = 0; i < problems.length; i++) { + IProblem p = problems[i]; + if (i != 0) + b += ", "; //$NON-NLS-1$ + b += p.getName(); + } + return b; + } + /* * (non-Javadoc) * @@ -80,7 +117,10 @@ public class CustomizeProblemDialog extends TitleAreaDialog { */ @Override protected void okPressed() { - save((IProblemWorkingCopy) problem); + for (int i = 0; i < problems.length; i++) { + IProblemWorkingCopy wc = (IProblemWorkingCopy) problems[i]; + save(wc); + } super.okPressed(); } } 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 20501f1a98b..04099cf2ecf 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 @@ -10,6 +10,9 @@ *******************************************************************************/ 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; @@ -53,7 +56,7 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements IWork private static final String EMPTY_STRING = ""; //$NON-NLS-1$ private IProblemProfile profile; private ISelectionChangedListener problemSelectionListener; - private IProblem selectedProblem; + private ArrayList<IProblem> selectedProblems; private Button infoButton; private ProblemsTreeEditor checkedTreeEditor; @@ -66,10 +69,14 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements IWork if (infoButton != null) { if (event.getSelection() instanceof ITreeSelection) { ITreeSelection s = (ITreeSelection) event.getSelection(); - if (s.getFirstElement() instanceof IProblem) - setSelectedProblem((IProblem) s.getFirstElement()); - else - setSelectedProblem(null); + ArrayList<IProblem> list = new ArrayList<IProblem>(); + for (Iterator iterator = s.iterator(); iterator.hasNext();) { + Object o = iterator.next(); + if (o instanceof IProblem) { + list.add((IProblem) o); + } + } + setSelectedProblems(list); } } } @@ -124,7 +131,7 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements IWork Composite info = new Composite(comp, SWT.NONE); info.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); GridLayout layout = new GridLayout(1, false); - layout.marginWidth=0; + layout.marginWidth = 0; info.setLayout(layout); infoButton = new Button(info, SWT.PUSH); infoButton.setLayoutData(GridDataFactory.swtDefaults().align(SWT.END, SWT.BEGINNING).create()); @@ -141,8 +148,8 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements IWork /** * @param selection */ - protected void setSelectedProblem(IProblem problem) { - this.selectedProblem = problem; + protected void setSelectedProblems(ArrayList<IProblem> list) { + this.selectedProblems = list; updateProblemInfo(); } @@ -167,8 +174,11 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements IWork } private void saveWidgetValues() { - CodanUIActivator.getDefault().getDialogSettings() - .put(getWidgetId(), selectedProblem == null ? EMPTY_STRING : selectedProblem.getId()); + CodanUIActivator + .getDefault() + .getDialogSettings() + .put(getWidgetId(), + (selectedProblems == null || selectedProblems.size() == 0) ? EMPTY_STRING : selectedProblems.get(0).getId()); } private void restoreWidgetValues() { @@ -176,7 +186,7 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements IWork if (id != null && id.length() > 0 && checkedTreeEditor != null) { checkedTreeEditor.getTreeViewer().setSelection(new StructuredSelection(profile.findProblem(id)), true); } else { - setSelectedProblem(null); + setSelectedProblems(null); } } @@ -188,7 +198,7 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements IWork } private void updateProblemInfo() { - if (selectedProblem == null) { + if (selectedProblems == null) { infoButton.setEnabled(false); } else { infoButton.setEnabled(true); @@ -205,9 +215,11 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements IWork } protected void openCustomizeDialog() { - if (selectedProblem == null) + if (selectedProblems == null || selectedProblems.size() == 0) return; - CustomizeProblemDialog dialog = new CustomizeProblemDialog(getShell(), selectedProblem, (IResource) getElement()); + CustomizeProblemDialog dialog = new CustomizeProblemDialog(getShell(), selectedProblems.toArray(new IProblem[selectedProblems + .size()]), (IResource) getElement()); dialog.open(); + checkedTreeEditor.getTreeViewer().refresh(true); } }
\ No newline at end of file diff --git a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/widgets/ParametersComposite.java b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/widgets/ParametersComposite.java index fadadd8fa97..05875e87fb3 100644 --- a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/widgets/ParametersComposite.java +++ b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/widgets/ParametersComposite.java @@ -45,6 +45,7 @@ public class ParametersComposite extends Composite { private static final String PREF_ENABLED = "enabled"; //$NON-NLS-1$ private static final String PREF_SEVERITY = "severity"; //$NON-NLS-1$ private static final String PREF_MESSAGE = "message"; //$NON-NLS-1$ + public static final String NO_CHANGE = "<do not change>"; private FieldEditorPreferencePage page; private IProblem problem; private PreferenceStore prefStore; @@ -70,6 +71,7 @@ public class ParametersComposite extends Composite { String[][] entries = { { CodanSeverity.Error.toString(), CodanSeverity.Error.toString() }, // { CodanSeverity.Warning.toString(), CodanSeverity.Warning.toString() }, // { CodanSeverity.Info.toString(), CodanSeverity.Info.toString() }, // + { NO_CHANGE, NO_CHANGE }, // }; addField(new ComboFieldEditor(PREF_SEVERITY, CodanUIMessages.ParametersComposite_Severity, entries, getFieldEditorParent())); addField(new StringFieldEditor(PREF_MESSAGE, CodanUIMessages.ParametersComposite_MessagePattern, getFieldEditorParent())); @@ -183,17 +185,25 @@ public class ParametersComposite extends Composite { } else { initPrefStore(info); } - prefStore.setValue(PREF_ENABLED, problem.isEnabled()); - prefStore.setValue(PREF_SEVERITY, problem.getSeverity().toString()); - prefStore.setValue(PREF_MESSAGE, problem.getMessagePattern()); + prefStore.setDefault(PREF_ENABLED, problem.isEnabled()); + if (problem.getMessagePattern() == NO_CHANGE) { + prefStore.setDefault(PREF_SEVERITY, NO_CHANGE); + } else { + prefStore.setDefault(PREF_SEVERITY, problem.getSeverity().toString()); + } + prefStore.setDefault(PREF_MESSAGE, problem.getMessagePattern()); } public void save(IProblemWorkingCopy problem) { page.performOk(); savePrefStore(problem.getPreference()); problem.setEnabled(prefStore.getBoolean(PREF_ENABLED)); - problem.setSeverity(CodanSeverity.valueOf(prefStore.getString(PREF_SEVERITY))); - problem.setMessagePattern(prefStore.getString(PREF_MESSAGE)); + String severity = prefStore.getString(PREF_SEVERITY); + if (!severity.equals(NO_CHANGE)) + problem.setSeverity(CodanSeverity.valueOf(severity)); + String message = prefStore.getString(PREF_MESSAGE); + if (!message.equals(NO_CHANGE)) + problem.setMessagePattern(message); } private void savePrefStore(IProblemPreference desc) { @@ -237,22 +247,28 @@ public class ParametersComposite extends Composite { String key = desc.getQualifiedKey(); switch (desc.getType()) { case TYPE_STRING: - prefStore.setValue(key, (String) desc.getValue()); + prefStore.setDefault(key, (String) desc.getValue()); + //prefStore.setValue(key, (String) desc.getValue()); break; case TYPE_BOOLEAN: - prefStore.setValue(key, (Boolean) desc.getValue()); + prefStore.setDefault(key, (Boolean) desc.getValue()); + //prefStore.setValue(key, (Boolean) desc.getValue()); break; case TYPE_INTEGER: - prefStore.setValue(key, (Integer) desc.getValue()); + prefStore.setDefault(key, (Integer) desc.getValue()); + //prefStore.setValue(key, (Integer) desc.getValue()); break; case TYPE_FILE: - prefStore.setValue(key, ((File) desc.getValue()).getPath()); + prefStore.setDefault(key, ((File) desc.getValue()).getPath()); + //prefStore.setValue(key, ((File) desc.getValue()).getPath()); break; case TYPE_LIST: - prefStore.setValue(key, desc.exportValue()); + prefStore.setDefault(key, desc.exportValue()); + //prefStore.setValue(key, desc.exportValue()); break; case TYPE_CUSTOM: - prefStore.setValue(key, desc.exportValue()); + prefStore.setDefault(key, desc.exportValue()); + //prefStore.setValue(key, desc.exportValue()); break; case TYPE_MAP: IProblemPreference[] childrenDescriptor = ((IProblemPreferenceCompositeDescriptor) desc).getChildDescriptors(); |