Adjust field colouring to reflect overridden property values, added missing XPath version field.

git-svn-id: https://pmd.svn.sourceforge.net/svnroot/pmd/trunk@6877 51baf565-9d33-0410-a72c-fc3788e3496d
This commit is contained in:
Brian Remedios committed 2009-02-27 16:11:56 +00:00
1 parent 491a6e34e8
commit 5c98ea43c1
22 files changed
+179 -19

No files matched your search

@@ -23,7 +23,7 @@ public class ImageColumnDescriptor extends AbstractRuleColumnDescriptor {
private String imagePath;
private CellPainterBuilder painterBuilder;
public static final RuleColumnDescriptor filterExpression = new ImageColumnDescriptor("Exclusion rule", SWT.LEFT, 25, RuleFieldAccessor.violationRegex, false, PMDUiConstants.ICON_FILTER, Util.regexBuilderFor(16, 16));
public static final RuleColumnDescriptor filterExpression = new ImageColumnDescriptor("Filters", SWT.LEFT, 25, RuleFieldAccessor.violationRegex, false, PMDUiConstants.ICON_FILTER, Util.regexBuilderFor(16, 16));
public ImageColumnDescriptor(String labelKey, int theAlignment, int theWidth, RuleFieldAccessor theAccessor, boolean resizableFlag, String theImagePath, CellPainterBuilder thePainterBuilder) {
@@ -220,6 +220,9 @@ public class PMDPreferencePage extends PreferencePage implements IWorkbenchPrefe
*/
@Override
protected Control createContents(Composite parent) {
populateRuleset();
Composite composite = new Composite(parent, SWT.NULL);
layoutControls(composite);
return composite;
@@ -901,8 +904,8 @@ public class PMDPreferencePage extends PreferencePage implements IWorkbenchPrefe
new RuleSetTreeItemProvider(groupingField, "??", Util.comparatorFrom(columnSorter, sortDescending))
);
// ruleTreeViewer.setInput(ruleSet);
// checkSelections();
ruleTreeViewer.setInput(ruleSet);
checkSelections();
TreeColumn[] columns = ruleTree.getColumns();
for (TreeColumn column : columns) column.pack();
@@ -1216,20 +1219,23 @@ public class PMDPreferencePage extends PreferencePage implements IWorkbenchPrefe
return button;
}
private void populateRuleset() {
RuleSet defaultRuleSet = plugin.getPreferencesManager().getRuleSet();
ruleSet = new RuleSet();
ruleSet.addRuleSet(defaultRuleSet);
ruleSet.setName(defaultRuleSet.getName());
ruleSet.setDescription(Util.asCleanString(defaultRuleSet.getDescription()));
ruleSet.addExcludePatterns(defaultRuleSet.getExcludePatterns());
ruleSet.addIncludePatterns(defaultRuleSet.getIncludePatterns());
}
/**
* Populate the rule table
*/
private void populateRuleTable() {
RuleSet defaultRuleSet = plugin.getPreferencesManager().getRuleSet();
ruleSet = new RuleSet();
ruleSet.addRuleSet(defaultRuleSet);
ruleSet.setName(defaultRuleSet.getName());
ruleSet.setDescription(Util.asCleanString(defaultRuleSet.getDescription()));
ruleSet.addExcludePatterns(defaultRuleSet.getExcludePatterns());
ruleSet.addIncludePatterns(defaultRuleSet.getIncludePatterns());
private void populateRuleTable() {
ruleTreeViewer.setInput(ruleSet);
checkSelections();
}
@@ -1,9 +1,14 @@
package net.sourceforge.pmd.eclipse.ui.preferences.editors;
import net.sourceforge.pmd.PropertyDescriptor;
import net.sourceforge.pmd.Rule;
import net.sourceforge.pmd.eclipse.ui.preferences.br.EditorFactory;
import net.sourceforge.pmd.eclipse.ui.preferences.panelmanagers.AbstractRulePanelManager;
import net.sourceforge.pmd.eclipse.util.ColourManager;
import net.sourceforge.pmd.lang.rule.RuleReference;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
@@ -16,8 +21,26 @@ import org.eclipse.swt.widgets.Label;
*/
public abstract class AbstractEditorFactory implements EditorFactory {
protected static ColourManager colourManager;
protected static Color overriddenColour;
protected AbstractEditorFactory() { }
private static ColourManager managerFor(Display display) {
if (colourManager != null) return colourManager;
colourManager = ColourManager.managerFor(display);
return colourManager;
}
private Color overriddenColour(Display display) {
if (overriddenColour != null) return overriddenColour;
overriddenColour = managerFor(display).colourFor(AbstractRulePanelManager.overridenColourValues);
return overriddenColour;
}
/**
* @return int
* @see net.sourceforge.pmd.ui.preferences.br.EditorFactory#columnsRequired()
@@ -68,6 +91,17 @@ public abstract class AbstractEditorFactory implements EditorFactory {
);
}
protected void adjustRendering(Rule rule, PropertyDescriptor<?> desc, Control control) {
if (!(rule instanceof RuleReference)) return;
boolean isOverridden = ((RuleReference)rule).hasOverriddenProperty(desc);
Display display = control.getDisplay();
Color clr = isOverridden ? overriddenColour(display) : display.getSystemColor(SWT.COLOR_WHITE);
control.setBackground(clr);
}
/**
* Return the specified values as a single string using the delimiter.
* @param values Object
@@ -200,6 +200,7 @@ public abstract class AbstractMultiValueEditorFactory extends AbstractEditorFact
renumberLabelsIn(newControls);
fillWidget(parentWidget, desc, rule);
adjustRendering(rule, desc, parentWidget);
sizeListener.addedRows(1);
changeListener.changed(rule, desc, newValue);
parent.getParent().layout();
@@ -234,6 +235,7 @@ public abstract class AbstractMultiValueEditorFactory extends AbstractEditorFact
Object[] values = (Object[])rule.getProperty(desc);
textWidget.setText(values == null ? "" : StringUtil.asString(values, delimiter + ' '));
adjustRendering(rule, desc, textWidget);
}
protected String[] textWidgetValues(Text textWidget) {
@@ -61,9 +61,9 @@ public class BooleanEditorFactory extends AbstractEditorFactory {
boolean selected = butt.getSelection();
if (selected == rule.getProperty(bp)) return;
// adjustRendering(butt, selected == bp.defaultValue().booleanValue());
rule.setProperty(bp, Boolean.valueOf(selected));
listener.changed(rule, desc, Boolean.valueOf(selected));
adjustRendering(rule, desc, butt);
}
});
@@ -50,7 +50,7 @@ public class CharacterEditorFactory extends AbstractEditorFactory {
}
}
public Control newEditorOn(Composite parent, int columnIndex, PropertyDescriptor<?> desc, final Rule rule, final ValueChangeListener listener, SizeChangeListener sizeListener) {
public Control newEditorOn(Composite parent, int columnIndex, final PropertyDescriptor<?> desc, final Rule rule, final ValueChangeListener listener, SizeChangeListener sizeListener) {
if (columnIndex == 0) return addLabel(parent, desc);
@@ -70,6 +70,8 @@ public class CharacterEditorFactory extends AbstractEditorFactory {
rule.setProperty(cp, newValue);
listener.changed(rule, cp, newValue);
adjustRendering(rule, desc, text);
}
});
@@ -49,6 +49,8 @@ public class DoubleEditorFactory extends AbstractNumericEditorFactory {
rule.setProperty(dp, newValue);
listener.changed(rule, dp, newValue);
adjustRendering(rule, desc, spinner);
}
});
@@ -33,7 +33,7 @@ public class EnumerationEditorFactory extends AbstractEditorFactory {
}
}
private static int indexOf(Object item, Object[][] items) {
public static int indexOf(Object item, Object[][] items) {
for (int i=0; i<items.length; i++) if (items[i][0].equals(item)) return i;
return -1;
}
@@ -59,6 +59,7 @@ public class EnumerationEditorFactory extends AbstractEditorFactory {
rule.setProperty(ep, newValue);
listener.changed(rule, desc, newValue);
adjustRendering(rule, desc, combo);
}
});
@@ -49,6 +49,8 @@ public class FloatEditorFactory extends AbstractNumericEditorFactory {
rule.setProperty(fp, newValue);
listener.changed(rule, fp, newValue);
adjustRendering(rule, desc, spinner);
}
});
@@ -68,9 +68,9 @@ public class IntegerEditorFactory extends AbstractEditorFactory {
int newValue = spinner.getSelection();
if (newValue == rule.getProperty(ip)) return;
// adjustRendering(spinner, newValue == ip.defaultValue().intValue());
rule.setProperty(ip, Integer.valueOf(newValue));
listener.changed(rule, desc, Integer.valueOf(newValue));
adjustRendering(rule, desc, spinner);
}
});
@@ -35,6 +35,7 @@ public class MethodEditorFactory extends AbstractEditorFactory {
Method method = (Method)rule.getProperty(desc);
widget.setMethod(method);
adjustRendering(rule, desc, widget);
}
private static MethodProperty methodPropertyFrom(PropertyDescriptor<?> desc) {
@@ -8,6 +8,7 @@ import net.sourceforge.pmd.util.StringUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
@@ -80,6 +81,11 @@ public class MethodPicker extends Composite {
methodList.select(0);
}
public void setBackground(Color clr) {
typeText.setBackground(clr);
methodList.setBackground(clr);
}
public Point computeSize(int wHint, int hHint, boolean changed) {
Point pt = typeText.computeSize(wHint, hHint, changed);
pt.x *= 2;
@@ -82,6 +82,8 @@ public class MultiMethodEditorFactory extends AbstractMultiValueEditorFactory {
Map<String, List<Method>> methodMap = ClassUtil.asMethodGroupsByTypeName(values);
textWidget.setText(values == null ? "" : asString(methodMap));
adjustRendering(rule, desc, textWidget);
}
protected Control addWidget(Composite parent, Object value, PropertyDescriptor<?> desc, Rule rule) {
@@ -47,6 +47,7 @@ public class MultiTypeEditorFactory extends AbstractMultiValueEditorFactory {
}
textWidget.setText(values == null ? "" : asString(values));
adjustRendering(rule, desc, textWidget);
}
private String asString(Class<?>[] types) {
@@ -102,6 +103,8 @@ public class MultiTypeEditorFactory extends AbstractMultiValueEditorFactory {
rule.setProperty(tmp, newValue);
fillWidget(textWidget, desc, rule); // display the accepted values
listener.changed(rule, desc, newValue);
adjustRendering(rule, desc, textWidget);
}
});
}
@@ -78,6 +78,8 @@ public class StringEditorFactory extends AbstractEditorFactory {
rule.setProperty(sp, newValue);
fillWidget(text, desc, rule); // redraw
listener.changed(rule, desc, newValue);
adjustRendering(rule, desc, text);
}
});
@@ -86,6 +86,8 @@ public class TypeEditorFactory extends AbstractEditorFactory {
rule.setProperty(tp, newValue);
listener.changed(rule, desc, newValue);
adjustRendering(rule, desc, typeText);
}
});
@@ -6,6 +6,7 @@ import net.sourceforge.pmd.util.StringUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
@@ -94,6 +95,10 @@ public class TypeText extends Composite {
text.setText(cls.getName());
}
public void setBackground(Color clr) {
text.setBackground(clr);
}
public void setEnabled(boolean flag) {
super.setEnabled(flag);
text.setEnabled(flag);
@@ -35,9 +35,12 @@ public abstract class AbstractRulePanelManager implements RulePropertyManager {
protected static Color textColour;
protected static Color errorColour;
protected static Color disabledColour;
protected static Color overridenColour;
private static final String disabledTabText = "-------";
public static final int[] overridenColourValues = new int[] {196, 196, 255}; // light blue
public AbstractRulePanelManager(ValueChangeListener theListener) {
changeListener = theListener;
}
@@ -73,7 +76,16 @@ public abstract class AbstractRulePanelManager implements RulePropertyManager {
protected void valueChanged(PropertyDescriptor<?> optionalDesc, Object newValue) {
changeListener.changed(rules, optionalDesc, newValue);
updateUI();
}
protected void updateUI() {
updateTabUI();
updateOverridenFields();
}
protected void updateOverridenFields() {
}
protected boolean canWorkWith(Rule rule) { return true; } // override as necessary
@@ -131,6 +143,7 @@ public abstract class AbstractRulePanelManager implements RulePropertyManager {
errorColour = clrMgr.colourFor(new int[] { 255, 0, 0 }); // red
textColour = clrMgr.colourFor(new int[] { 0, 0, 0 }); // black
disabledColour = clrMgr.colourFor(new int[] {128, 128, 128}); // grey
overridenColour = clrMgr.colourFor(overridenColourValues);
}
/**
@@ -5,6 +5,7 @@ import java.net.URL;
import net.sourceforge.pmd.Rule;
import net.sourceforge.pmd.eclipse.ui.preferences.br.ValueChangeListener;
import net.sourceforge.pmd.lang.rule.RuleReference;
import net.sourceforge.pmd.util.StringUtil;
import org.eclipse.swt.SWT;
@@ -59,6 +60,18 @@ public class DescriptionPanelManager extends AbstractRulePanelManager {
messageField.setVisible(flag);
}
protected void updateOverridenFields() {
Rule rule = soleRule();
if (rule instanceof RuleReference) {
RuleReference ruleReference = (RuleReference)rule;
messageField.setBackground(ruleReference.getOverriddenMessage() != null ? overridenColour: null);
descriptionBox.setBackground(ruleReference.getOverriddenDescription() != null ? overridenColour: null);
externalURLField.setBackground(ruleReference.getOverriddenExternalInfoUrl() != null ? overridenColour: null);
}
}
public Control setupOn(Composite parent) {
initializeOn(parent);
@@ -172,6 +185,7 @@ public class DescriptionPanelManager extends AbstractRulePanelManager {
if (!StringUtil.areSemanticEquals(rule.getMessage().trim(), newMessage)) {
rule.setMessage(newMessage);
updateUI();
}
}
@@ -6,6 +6,7 @@ import java.util.List;
import net.sourceforge.pmd.PMD;
import net.sourceforge.pmd.Rule;
import net.sourceforge.pmd.eclipse.ui.preferences.br.ValueChangeListener;
import net.sourceforge.pmd.lang.rule.RuleReference;
import net.sourceforge.pmd.util.StringUtil;
import org.eclipse.swt.SWT;
@@ -40,6 +41,16 @@ public class ExamplePanelManager extends AbstractRulePanelManager {
exampleField.setVisible(flag);
}
protected void updateOverridenFields() {
Rule rule = soleRule();
if (rule instanceof RuleReference) {
RuleReference ruleReference = (RuleReference)rule;
exampleField.setBackground(ruleReference.getOverriddenExamples() != null ? overridenColour: null);
}
}
public Control setupOn(Composite parent) {
GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
@@ -3,6 +3,7 @@ package net.sourceforge.pmd.eclipse.ui.preferences.panelmanagers;
import net.sourceforge.pmd.Rule;
import net.sourceforge.pmd.eclipse.ui.preferences.br.ValueChangeListener;
import net.sourceforge.pmd.eclipse.util.ColourManager;
import net.sourceforge.pmd.lang.rule.RuleReference;
import net.sourceforge.pmd.lang.rule.properties.StringProperty;
import net.sourceforge.pmd.util.StringUtil;
@@ -2,15 +2,23 @@ package net.sourceforge.pmd.eclipse.ui.preferences.panelmanagers;
import net.sourceforge.pmd.Rule;
import net.sourceforge.pmd.eclipse.ui.preferences.br.ValueChangeListener;
import net.sourceforge.pmd.eclipse.ui.preferences.editors.EnumerationEditorFactory;
import net.sourceforge.pmd.eclipse.ui.preferences.editors.SWTUtil;
import net.sourceforge.pmd.lang.rule.RuleReference;
import net.sourceforge.pmd.lang.rule.XPathRule;
import net.sourceforge.pmd.lang.rule.properties.EnumeratedProperty;
import net.sourceforge.pmd.util.StringUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Text;
@@ -20,7 +28,8 @@ import org.eclipse.swt.widgets.Text;
*/
public class XPathPanelManager extends AbstractRulePanelManager {
private Text xpathField;
private Text xpathField;
private Combo xpathVersionField;
public XPathPanelManager(ValueChangeListener theListener) {
super(theListener);
@@ -45,6 +54,17 @@ public class XPathPanelManager extends AbstractRulePanelManager {
protected void setVisible(boolean flag) {
xpathField.setVisible(flag);
xpathVersionField.setVisible(flag);
}
protected void updateOverridenFields() {
Rule rule = soleRule();
if (rule instanceof RuleReference) {
RuleReference ruleReference = (RuleReference)rule;
xpathField.setBackground(ruleReference.hasOverriddenProperty(XPathRule.XPATH_DESCRIPTOR) ? overridenColour: null);
}
}
public Control setupOn(Composite parent) {
@@ -58,7 +78,7 @@ public class XPathPanelManager extends AbstractRulePanelManager {
xpathField = newTextField(panel);
gridData = new GridData(GridData.FILL_BOTH);
gridData.grabExcessHorizontalSpace = true;
gridData.horizontalSpan = 1;
gridData.horizontalSpan = 2;
xpathField.setLayoutData(gridData);
xpathField.addListener(SWT.FocusOut, new Listener() {
@@ -74,11 +94,41 @@ public class XPathPanelManager extends AbstractRulePanelManager {
soleRule.setProperty(XPathRule.XPATH_DESCRIPTOR, newValue);
valueChanged(XPathRule.XPATH_DESCRIPTOR, newValue);
}
});
});
Label versionLabel = new Label(panel, 0);
versionLabel.setText("XPath version:");
gridData = new GridData();
gridData.horizontalSpan = 1;
gridData.grabExcessHorizontalSpace = false;
versionLabel.setLayoutData(gridData);
final EnumeratedProperty<String> ep = XPathRule.VERSION_DESCRIPTOR;
xpathVersionField = new Combo(panel, SWT.READ_ONLY);
xpathVersionField.setItems(SWTUtil.labelsIn(ep.choices(), 0));
xpathVersionField.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
Rule rule = soleRule();
int selectionIdx = xpathVersionField.getSelectionIndex();
Object newValue = ep.choices()[selectionIdx][1];
if (newValue.equals(rule.getProperty(ep))) return;
rule.setProperty(ep, newValue);
// adjustRendering(rule, ep, xpathVersionField); TODO - won't compile?
}
});
return panel;
}
private void configureVersionFieldFor(Rule rule) {
Object value = rule.getProperty(XPathRule.VERSION_DESCRIPTOR);
int selectionIdx = EnumerationEditorFactory.indexOf(value, XPathRule.VERSION_DESCRIPTOR.choices());
if (selectionIdx >= 0) xpathVersionField.select(selectionIdx);
}
protected void adapt() {
Rule soleRule = soleRule();
@@ -87,6 +137,7 @@ public class XPathPanelManager extends AbstractRulePanelManager {
shutdown(xpathField);
} else {
show(xpathField, soleRule.getProperty(XPathRule.XPATH_DESCRIPTOR).trim());
configureVersionFieldFor(soleRule);
}
}