1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-24 17:35:35 +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

@ -18,7 +18,7 @@ import java.util.Iterator;
/**
* List implementation of IProblemPreference.
*
*
* @noextend This class is not intended to be extended by clients.
*/
public class ListProblemPreference extends AbstractProblemPreference implements IProblemPreferenceCompositeValue,
@ -49,7 +49,7 @@ public class ListProblemPreference extends AbstractProblemPreference implements
/**
* Set child descriptor (all elements have the same). Value and key
* of it would be ignored and reset.
*
*
* @param desc
* @return set child descriptor
*/
@ -66,7 +66,7 @@ public class ListProblemPreference extends AbstractProblemPreference implements
* Sets common descriptor for all elements, if value if not null sets the
* value for its key also. Do not make assumptions of values of desc after
* you pass it to this function.
*
*
* @return read only preference matching the key
*/
public IProblemPreference addChildDescriptor(IProblemPreference desc) {
@ -78,7 +78,7 @@ public class ListProblemPreference extends AbstractProblemPreference implements
}
/**
*
*
* @return descriptor of the child elements
*/
public IProblemPreference getChildDescriptor() {
@ -88,7 +88,7 @@ public class ListProblemPreference extends AbstractProblemPreference implements
/**
* Returns cloned descriptor of the i'th child. Modifying return value would
* not affect internal state of the list element.
*
*
* @param i - index of the element
* @return child preference
*/
@ -103,7 +103,7 @@ public class ListProblemPreference extends AbstractProblemPreference implements
/**
* Get read only problem preference for element equal to key's int value.
* If key is null or # return generic descriptor with null value.
*
*
* @throws NumberFormatException
* if key is not number
*/
@ -170,7 +170,7 @@ public class ListProblemPreference extends AbstractProblemPreference implements
/**
* Adds value to the list
*
*
* @param value
*/
public void addChildValue(Object value) {
@ -211,6 +211,7 @@ public class ListProblemPreference extends AbstractProblemPreference implements
@Override
public void importValue(String str) {
if (str.length()==0) return;
StreamTokenizer tokenizer = getImportTokenizer(str);
try {
importValue(tokenizer);
@ -288,7 +289,7 @@ public class ListProblemPreference extends AbstractProblemPreference implements
/**
* Sets list value to values of array given as argument.
*
*
* @param value - must be Object[]
*/
@Override

View file

@ -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();
}
}

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.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,13 +40,30 @@ 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
*
@ -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();
}
}

View file

@ -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);
}
}

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_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();