Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlena Laskavaia2011-03-01 03:32:51 +0000
committerAlena Laskavaia2011-03-01 03:32:51 +0000
commit14199fcfa3e86158253ac7591928065c6b714422 (patch)
tree4c6905145c36a7b215f2bcb53579b9b054938d79 /codan/org.eclipse.cdt.codan.ui
parent1db363d94cd521f699c5d89dbdcb79f9d3fb0ea4 (diff)
downloadorg.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')
-rw-r--r--codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/actions/OpenProblemPreferences.java30
-rw-r--r--codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/dialogs/CustomizeProblemDialog.java48
-rw-r--r--codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/preferences/CodanPreferencePage.java40
-rw-r--r--codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/widgets/ParametersComposite.java38
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();

Back to the top