1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-04 14:55:41 +02:00

partually support editing multiple problems at the same time

This commit is contained in:
Alena Laskavaia 2011-03-01 03:32:51 +00:00
parent 1db363d94c
commit 14199fcfa3
5 changed files with 126 additions and 47 deletions

View file

@ -211,6 +211,7 @@ public class ListProblemPreference extends AbstractProblemPreference implements
@Override @Override
public void importValue(String str) { public void importValue(String str) {
if (str.length()==0) return;
StreamTokenizer tokenizer = getImportTokenizer(str); StreamTokenizer tokenizer = getImportTokenizer(str);
try { try {
importValue(tokenizer); importValue(tokenizer);

View file

@ -1,5 +1,9 @@
package org.eclipse.cdt.codan.internal.ui.actions; 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.core.model.IProblemProfile;
import org.eclipse.cdt.codan.internal.core.model.CodanProblem; import org.eclipse.cdt.codan.internal.core.model.CodanProblem;
import org.eclipse.cdt.codan.internal.core.model.CodanProblemMarker; import org.eclipse.cdt.codan.internal.core.model.CodanProblemMarker;
@ -21,18 +25,24 @@ public class OpenProblemPreferences implements IObjectActionDelegate {
public void run(IAction action) { public void run(IAction action) {
if (selection instanceof IStructuredSelection) { if (selection instanceof IStructuredSelection) {
Object firstElement = ((IStructuredSelection) selection).getFirstElement(); // TODO support multiple IStructuredSelection ss = (IStructuredSelection) selection;
if (firstElement instanceof IMarker) { ArrayList<IProblem> list = new ArrayList<IProblem>();
IMarker marker = (IMarker) firstElement; 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); String id = CodanProblemMarker.getProblemId(marker);
if (id == null) if (id == null)
return; return;
IResource resource = marker.getResource(); resource = marker.getResource();
IProblemProfile profile = CodanProblemMarker.getProfile(resource); IProblemProfile profile = CodanProblemMarker.getProfile(resource);
CodanProblem problem = ((CodanProblem) profile.findProblem(id)); CodanProblem problem = ((CodanProblem) profile.findProblem(id));
new CustomizeProblemDialog(targetPart.getSite().getShell(), problem, resource).open(); list.add(problem);
} }
} }
new CustomizeProblemDialog(targetPart.getSite().getShell(), list.toArray(new IProblem[list.size()]), resource).open();
}
} }
public void selectionChanged(IAction action, ISelection selection) { public void selectionChanged(IAction action, ISelection selection) {

View file

@ -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.IProblem;
import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy; 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.CodanUIMessages;
import org.eclipse.cdt.codan.internal.ui.widgets.CustomizeProblemComposite; 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.core.resources.IResource;
import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
@ -29,6 +32,7 @@ import org.eclipse.swt.widgets.Shell;
public class CustomizeProblemDialog extends TitleAreaDialog { public class CustomizeProblemDialog extends TitleAreaDialog {
private CustomizeProblemComposite comp; private CustomizeProblemComposite comp;
private IProblem problem; private IProblem problem;
private IProblem[] problems;
private IResource resource; private IResource resource;
/** /**
@ -36,13 +40,30 @@ public class CustomizeProblemDialog extends TitleAreaDialog {
* @param selectedProblem * @param selectedProblem
* @param iResource * @param iResource
*/ */
public CustomizeProblemDialog(Shell parentShell, IProblem selectedProblem, IResource resource) { public CustomizeProblemDialog(Shell parentShell, IProblem[] selectedProblems, IResource resource) {
super(parentShell); super(parentShell);
this.problem = selectedProblem; this.problems = selectedProblems;
this.problem = buildCombined(selectedProblems);
this.resource = resource; this.resource = resource;
setShellStyle(getShellStyle() | SWT.RESIZE); 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 * Stores edit values into problem working copy
* *
@ -63,7 +84,7 @@ public class CustomizeProblemDialog extends TitleAreaDialog {
@Override @Override
protected Control createDialogArea(Composite parent) { protected Control createDialogArea(Composite parent) {
getShell().setText(CodanUIMessages.CustomizeProblemDialog_Title); getShell().setText(CodanUIMessages.CustomizeProblemDialog_Title);
setTitle(problem.getName()); setTitle(getTitle());
setMessage(CodanUIMessages.CustomizeProblemDialog_Message); setMessage(CodanUIMessages.CustomizeProblemDialog_Message);
Composite area = (Composite) super.createDialogArea(parent); Composite area = (Composite) super.createDialogArea(parent);
comp = new CustomizeProblemComposite(area, problem, resource); comp = new CustomizeProblemComposite(area, problem, resource);
@ -73,6 +94,22 @@ public class CustomizeProblemDialog extends TitleAreaDialog {
return area; 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) * (non-Javadoc)
* *
@ -80,7 +117,10 @@ public class CustomizeProblemDialog extends TitleAreaDialog {
*/ */
@Override @Override
protected void okPressed() { protected void okPressed() {
save((IProblemWorkingCopy) problem); for (int i = 0; i < problems.length; i++) {
IProblemWorkingCopy wc = (IProblemWorkingCopy) problems[i];
save(wc);
}
super.okPressed(); super.okPressed();
} }
} }

View file

@ -10,6 +10,9 @@
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.codan.internal.ui.preferences; 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.CodanCorePlugin;
import org.eclipse.cdt.codan.core.CodanRuntime; import org.eclipse.cdt.codan.core.CodanRuntime;
import org.eclipse.cdt.codan.core.model.ICheckersRegistry; 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 static final String EMPTY_STRING = ""; //$NON-NLS-1$
private IProblemProfile profile; private IProblemProfile profile;
private ISelectionChangedListener problemSelectionListener; private ISelectionChangedListener problemSelectionListener;
private IProblem selectedProblem; private ArrayList<IProblem> selectedProblems;
private Button infoButton; private Button infoButton;
private ProblemsTreeEditor checkedTreeEditor; private ProblemsTreeEditor checkedTreeEditor;
@ -66,10 +69,14 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements IWork
if (infoButton != null) { if (infoButton != null) {
if (event.getSelection() instanceof ITreeSelection) { if (event.getSelection() instanceof ITreeSelection) {
ITreeSelection s = (ITreeSelection) event.getSelection(); ITreeSelection s = (ITreeSelection) event.getSelection();
if (s.getFirstElement() instanceof IProblem) ArrayList<IProblem> list = new ArrayList<IProblem>();
setSelectedProblem((IProblem) s.getFirstElement()); for (Iterator iterator = s.iterator(); iterator.hasNext();) {
else Object o = iterator.next();
setSelectedProblem(null); if (o instanceof IProblem) {
list.add((IProblem) o);
}
}
setSelectedProblems(list);
} }
} }
} }
@ -141,8 +148,8 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements IWork
/** /**
* @param selection * @param selection
*/ */
protected void setSelectedProblem(IProblem problem) { protected void setSelectedProblems(ArrayList<IProblem> list) {
this.selectedProblem = problem; this.selectedProblems = list;
updateProblemInfo(); updateProblemInfo();
} }
@ -167,8 +174,11 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements IWork
} }
private void saveWidgetValues() { private void saveWidgetValues() {
CodanUIActivator.getDefault().getDialogSettings() CodanUIActivator
.put(getWidgetId(), selectedProblem == null ? EMPTY_STRING : selectedProblem.getId()); .getDefault()
.getDialogSettings()
.put(getWidgetId(),
(selectedProblems == null || selectedProblems.size() == 0) ? EMPTY_STRING : selectedProblems.get(0).getId());
} }
private void restoreWidgetValues() { private void restoreWidgetValues() {
@ -176,7 +186,7 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements IWork
if (id != null && id.length() > 0 && checkedTreeEditor != null) { if (id != null && id.length() > 0 && checkedTreeEditor != null) {
checkedTreeEditor.getTreeViewer().setSelection(new StructuredSelection(profile.findProblem(id)), true); checkedTreeEditor.getTreeViewer().setSelection(new StructuredSelection(profile.findProblem(id)), true);
} else { } else {
setSelectedProblem(null); setSelectedProblems(null);
} }
} }
@ -188,7 +198,7 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements IWork
} }
private void updateProblemInfo() { private void updateProblemInfo() {
if (selectedProblem == null) { if (selectedProblems == null) {
infoButton.setEnabled(false); infoButton.setEnabled(false);
} else { } else {
infoButton.setEnabled(true); infoButton.setEnabled(true);
@ -205,9 +215,11 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements IWork
} }
protected void openCustomizeDialog() { protected void openCustomizeDialog() {
if (selectedProblem == null) if (selectedProblems == null || selectedProblems.size() == 0)
return; return;
CustomizeProblemDialog dialog = new CustomizeProblemDialog(getShell(), selectedProblem, (IResource) getElement()); CustomizeProblemDialog dialog = new CustomizeProblemDialog(getShell(), selectedProblems.toArray(new IProblem[selectedProblems
.size()]), (IResource) getElement());
dialog.open(); dialog.open();
checkedTreeEditor.getTreeViewer().refresh(true);
} }
} }

View file

@ -45,6 +45,7 @@ public class ParametersComposite extends Composite {
private static final String PREF_ENABLED = "enabled"; //$NON-NLS-1$ 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_SEVERITY = "severity"; //$NON-NLS-1$
private static final String PREF_MESSAGE = "message"; //$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 FieldEditorPreferencePage page;
private IProblem problem; private IProblem problem;
private PreferenceStore prefStore; private PreferenceStore prefStore;
@ -70,6 +71,7 @@ public class ParametersComposite extends Composite {
String[][] entries = { { CodanSeverity.Error.toString(), CodanSeverity.Error.toString() }, // String[][] entries = { { CodanSeverity.Error.toString(), CodanSeverity.Error.toString() }, //
{ CodanSeverity.Warning.toString(), CodanSeverity.Warning.toString() }, // { CodanSeverity.Warning.toString(), CodanSeverity.Warning.toString() }, //
{ CodanSeverity.Info.toString(), CodanSeverity.Info.toString() }, // { CodanSeverity.Info.toString(), CodanSeverity.Info.toString() }, //
{ NO_CHANGE, NO_CHANGE }, //
}; };
addField(new ComboFieldEditor(PREF_SEVERITY, CodanUIMessages.ParametersComposite_Severity, entries, getFieldEditorParent())); addField(new ComboFieldEditor(PREF_SEVERITY, CodanUIMessages.ParametersComposite_Severity, entries, getFieldEditorParent()));
addField(new StringFieldEditor(PREF_MESSAGE, CodanUIMessages.ParametersComposite_MessagePattern, getFieldEditorParent())); addField(new StringFieldEditor(PREF_MESSAGE, CodanUIMessages.ParametersComposite_MessagePattern, getFieldEditorParent()));
@ -183,17 +185,25 @@ public class ParametersComposite extends Composite {
} else { } else {
initPrefStore(info); initPrefStore(info);
} }
prefStore.setValue(PREF_ENABLED, problem.isEnabled()); prefStore.setDefault(PREF_ENABLED, problem.isEnabled());
prefStore.setValue(PREF_SEVERITY, problem.getSeverity().toString()); if (problem.getMessagePattern() == NO_CHANGE) {
prefStore.setValue(PREF_MESSAGE, problem.getMessagePattern()); 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) { public void save(IProblemWorkingCopy problem) {
page.performOk(); page.performOk();
savePrefStore(problem.getPreference()); savePrefStore(problem.getPreference());
problem.setEnabled(prefStore.getBoolean(PREF_ENABLED)); problem.setEnabled(prefStore.getBoolean(PREF_ENABLED));
problem.setSeverity(CodanSeverity.valueOf(prefStore.getString(PREF_SEVERITY))); String severity = prefStore.getString(PREF_SEVERITY);
problem.setMessagePattern(prefStore.getString(PREF_MESSAGE)); 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) { private void savePrefStore(IProblemPreference desc) {
@ -237,22 +247,28 @@ public class ParametersComposite extends Composite {
String key = desc.getQualifiedKey(); String key = desc.getQualifiedKey();
switch (desc.getType()) { switch (desc.getType()) {
case TYPE_STRING: case TYPE_STRING:
prefStore.setValue(key, (String) desc.getValue()); prefStore.setDefault(key, (String) desc.getValue());
//prefStore.setValue(key, (String) desc.getValue());
break; break;
case TYPE_BOOLEAN: case TYPE_BOOLEAN:
prefStore.setValue(key, (Boolean) desc.getValue()); prefStore.setDefault(key, (Boolean) desc.getValue());
//prefStore.setValue(key, (Boolean) desc.getValue());
break; break;
case TYPE_INTEGER: case TYPE_INTEGER:
prefStore.setValue(key, (Integer) desc.getValue()); prefStore.setDefault(key, (Integer) desc.getValue());
//prefStore.setValue(key, (Integer) desc.getValue());
break; break;
case TYPE_FILE: 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; break;
case TYPE_LIST: case TYPE_LIST:
prefStore.setValue(key, desc.exportValue()); prefStore.setDefault(key, desc.exportValue());
//prefStore.setValue(key, desc.exportValue());
break; break;
case TYPE_CUSTOM: case TYPE_CUSTOM:
prefStore.setValue(key, desc.exportValue()); prefStore.setDefault(key, desc.exportValue());
//prefStore.setValue(key, desc.exportValue());
break; break;
case TYPE_MAP: case TYPE_MAP:
IProblemPreference[] childrenDescriptor = ((IProblemPreferenceCompositeDescriptor) desc).getChildDescriptors(); IProblemPreference[] childrenDescriptor = ((IProblemPreferenceCompositeDescriptor) desc).getChildDescriptors();