Revision: 6791
http://pmd.svn.sourceforge.net/pmd/?rev=6791&view=rev
Author: hooperbloob
Date: 2009-01-12 04:14:32 +0000 (Mon, 12 Jan 2009)
Log Message:
-----------
New Preference panel updates: revised rule columns, new compact colour-coded regex filter column. Reworked property tab resizing. Refactored editors into separate package.
Modified Paths:
--------------
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/PMDUiConstants.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/ExclusionPanelManager.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/FormArranger.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/PMDPreferencePage.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/PerRulePropertyPanelManager.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/RuleColumnDescriptor.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/RuleLabelProvider.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/ValueFormatter.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/util/ResourceManager.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/util/Util.java
Added Paths:
-----------
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/filter.gif
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/AbstractRuleColumnDescriptor.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/ImageColumnDescriptor.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/TextColumnDescriptor.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/AbstractEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/AbstractMultiValueEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/BooleanEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/CharacterEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/EnumerationEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/IntegerEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/MultiIntegerEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/MultiStringEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/MultiTypeEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/RealNumberEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/StringEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/TypeEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/util/ColourManager.java
Removed Paths:
-------------
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/AbstractEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/AbstractMultiValueEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/BooleanEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/CharacterEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/ColourManager.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/EnumerationEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/IntegerEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/MultiIntegerEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/MultiStringEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/MultiTypeEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/RealNumberEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/StringEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/TypeEditorFactory.java
Added: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/filter.gif
===================================================================
(Binary files differ)
Property changes on: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/icons/filter.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/PMDUiConstants.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/PMDUiConstants.java 2009-01-11 22:48:16 UTC (rev 6790)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/PMDUiConstants.java 2009-01-12 04:14:32 UTC (rev 6791)
@@ -75,6 +75,8 @@
public static final String ICON_LABEL_ERR_DFA = "icons/lab_errdfa.gif";
public static final String ICON_LABEL_ARRUP = "icons/lab_arrup.gif";
public static final String ICON_LABEL_ARRDN = "icons/lab_arrdn.gif";
+
+ public static final String ICON_FILTER = "icons/filter.gif";
public static final String ICON_PROJECT = "icons/obj_project.gif";
public static final String ICON_PACKAGE = "icons/obj_package.gif";
Deleted: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/AbstractEditorFactory.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/AbstractEditorFactory.java 2009-01-11 22:48:16 UTC (rev 6790)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/AbstractEditorFactory.java 2009-01-12 04:14:32 UTC (rev 6791)
@@ -1,96 +0,0 @@
-package net.sourceforge.pmd.eclipse.ui.preferences.br;
-
-import net.sourceforge.pmd.PropertyDescriptor;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-
-/**
- *
- * @author Brian Remedios
- */
-public abstract class AbstractEditorFactory implements EditorFactory {
-
- protected AbstractEditorFactory() { }
-
- /**
- * @return int
- * @see net.sourceforge.pmd.ui.preferences.br.EditorFactory#columnsRequired()
- */
- public int columnsRequired() { return 2; };
-
- /**
- * Method addLabel.
- * @param parent Composite
- * @param desc PropertyDescriptor
- * @return Label
- */
- protected Label addLabel(Composite parent, PropertyDescriptor<?> desc) {
-
- Label label = new Label(parent, SWT.NONE);
- label.setText(desc.description());
- return label;
- }
-
- /**
- * Return the value as a string that can be easily recognized and parsed
- * when we see it again.
- *
- * @param value Object
- * @return String
- */
- protected String asString(Object value) {
- return value == null ? "" : value.toString();
- }
-
- /**
- * Adjust the display of the control to denote whether it holds
- * onto the default value or not.
- *
- * @param control
- * @param hasDefaultValue
- */
- protected void adjustRendering(Control control, boolean hasDefaultValue) {
-
- Display display = control.getDisplay();
-
- control.setBackground(
- display.getSystemColor(hasDefaultValue ? SWT.COLOR_WHITE : SWT.COLOR_CYAN)
- );
- }
-
- /**
- * Return the specified values as a single string using the delimiter.
- * @param values Object
- * @param delimiter char
- * @return String
- * @see net.sourceforge.pmd.PropertyDescriptor#asDelimitedString(Object)
- */
- public String asDelimitedString(Object values, char delimiter) {
-
- if (values == null) {
- return "";
- }
-
- if (values instanceof Object[]) {
- Object[] valueSet = (Object[])values;
- if (valueSet.length == 0) {
- return "";
- }
- if (valueSet.length == 1) {
- return asString(valueSet[0]);
- }
-
- StringBuilder sb = new StringBuilder(asString(valueSet[0]));
- for (int i=1; i<valueSet.length; i++) {
- sb.append(delimiter).append(asString(valueSet[i]));
- }
- return sb.toString();
- }
-
- return asString(values);
- }
-}
Deleted: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/AbstractMultiValueEditorFactory.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/AbstractMultiValueEditorFactory.java 2009-01-11 22:48:16 UTC (rev 6790)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/AbstractMultiValueEditorFactory.java 2009-01-12 04:14:32 UTC (rev 6791)
@@ -1,93 +0,0 @@
-package net.sourceforge.pmd.eclipse.ui.preferences.br;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import net.sourceforge.pmd.PropertyDescriptor;
-import net.sourceforge.pmd.Rule;
-import net.sourceforge.pmd.util.StringUtil;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Text;
-
-/**
- *
- * @author Brian Remedios
- */
-public abstract class AbstractMultiValueEditorFactory extends AbstractEditorFactory {
-
- protected static final String delimiter = ",";
-
- protected AbstractMultiValueEditorFactory() {
- }
-
- protected abstract void configure(Text text, PropertyDescriptor<?> desc, Rule rule, ValueChangeListener listener);
-
- /**
- *
- * @param parent Composite
- * @param columnIndex int
- * @param desc PropertyDescriptor
- * @param rule Rule
- * @param listener ValueChangeListener
- * @return Control
- * @see net.sourceforge.pmd.ui.preferences.br.EditorFactory#newEditorOn(Composite, int, PropertyDescriptor, Rule)
- */
- public Control newEditorOn(Composite parent, int columnIndex, final PropertyDescriptor<?> desc, final Rule rule, final ValueChangeListener listener) {
-
- if (columnIndex == 0) return addLabel(parent, desc);
-
- if (columnIndex == 1) {
-
-// Composite panel = new Composite(parent, SWT.NONE);
-// panel.setLayout(new GridLayout(2, false));
-//
-// Text textWidget = new Text(panel, SWT.SINGLE | SWT.BORDER);
-// // final Button butt = new Button(panel, SWT.BORDER);
-// // butt.setText("...");
-//
-// textWidget.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
- final Text textWidget = new Text(parent, SWT.SINGLE | SWT.BORDER);
- GridData gridData = new GridData();
- gridData.horizontalAlignment = SWT.FILL;
- gridData.grabExcessHorizontalSpace = true;
- textWidget.setLayoutData(gridData);
-
- fillWidget(textWidget, desc, rule);
- configure(textWidget, desc, rule, listener);
-
-// return panel;
- return textWidget;
- }
-
- return null;
- }
-
- protected void fillWidget(Text textWidget, PropertyDescriptor<?> desc, Rule rule) {
-
- Object[] values = (Object[])rule.getProperty(desc);
- textWidget.setText(values == null ? "" : StringUtil.asString(values, delimiter + ' '));
- }
-
- protected String[] textWidgetValues(Text textWidget) {
-
- String values = textWidget.getText().trim();
-
- if (StringUtil.isEmpty(values)) return StringUtil.EMPTY_STRINGS;
-
- String[] valueSet = values.split(delimiter);
- List<String> valueList = new ArrayList<String>(valueSet.length);
-
- for (int i=0; i<valueSet.length; i++) {
- String str = valueSet[i].trim();
- if (str.length() > 0) valueList.add(str);
- }
-
- return (String[])valueList.toArray(new String[valueList.size()]);
- }
-}
Added: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/AbstractRuleColumnDescriptor.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/AbstractRuleColumnDescriptor.java (rev 0)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/AbstractRuleColumnDescriptor.java 2009-01-12 04:14:32 UTC (rev 6791)
@@ -0,0 +1,56 @@
+package net.sourceforge.pmd.eclipse.ui.preferences.br;
+
+import net.sourceforge.pmd.Rule;
+import net.sourceforge.pmd.eclipse.plugin.PMDPlugin;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+
+public abstract class AbstractRuleColumnDescriptor implements RuleColumnDescriptor {
+
+ private String label;
+ private int alignment;
+ private int width;
+ private RuleFieldAccessor accessor;
+ private boolean isResizable;
+
+ protected AbstractRuleColumnDescriptor(String labelKey, int theAlignment, int theWidth, RuleFieldAccessor theAccessor, boolean resizableFlag) {
+ super();
+
+ label = stringFor(labelKey);
+ alignment = theAlignment;
+ width = theWidth;
+ accessor = theAccessor;
+ isResizable = resizableFlag;
+ }
+
+ protected static String stringFor(String key) {
+ return PMDPlugin.getDefault().getStringTable().getString(key);
+ }
+
+ protected TreeColumn buildTreeColumn(Tree parent, final RuleSortListener sortListener) {
+
+ TreeColumn tc = new TreeColumn(parent, alignment);
+ tc.setWidth(width);
+ tc.setResizable(isResizable);
+
+ tc.addListener(SWT.Selection, new Listener() {
+ public void handleEvent(Event e) {
+ sortListener.sortBy(accessor());
+ }
+ });
+
+ return tc;
+ }
+
+ protected Object valueFor(Rule rule) {
+ return accessor.valueFor(rule);
+ }
+
+ public String label() { return label; }
+
+ public RuleFieldAccessor accessor() { return accessor; }
+}
\ No newline at end of file
Deleted: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/BooleanEditorFactory.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/BooleanEditorFactory.java 2009-01-11 22:48:16 UTC (rev 6790)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/BooleanEditorFactory.java 2009-01-12 04:14:32 UTC (rev 6791)
@@ -1,74 +0,0 @@
-package net.sourceforge.pmd.eclipse.ui.preferences.br;
-
-import net.sourceforge.pmd.PropertyDescriptor;
-import net.sourceforge.pmd.Rule;
-import net.sourceforge.pmd.lang.rule.properties.BooleanProperty;
-import net.sourceforge.pmd.lang.rule.properties.PropertyDescriptorWrapper;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-
-/**
- * @author Brian Remedios
- */
-public class BooleanEditorFactory extends AbstractEditorFactory {
-
- public static final BooleanEditorFactory instance = new BooleanEditorFactory();
-
-
- private BooleanEditorFactory() { }
-
- private static BooleanProperty booleanPropertyFrom(PropertyDescriptor<?> desc) {
-
- if (desc instanceof PropertyDescriptorWrapper) {
- return (BooleanProperty) ((PropertyDescriptorWrapper<?>)desc).getPropertyDescriptor();
- } else {
- return (BooleanProperty)desc;
- }
- }
-
- /**
- * Method newEditorOn.
- * @param parent Composite
- * @param columnIndex int
- * @param desc PropertyDescriptor
- * @param rule Rule
- * @return Control
- * @see net.sourceforge.pmd.ui.preferences.br.EditorFactory#newEditorOn(Composite, int, PropertyDescriptor, Rule)
- */
- public Control newEditorOn(Composite parent, int columnIndex, final PropertyDescriptor<?> desc, final Rule rule, final ValueChangeListener listener) {
-
- if (columnIndex == 0) return addLabel(parent, desc);
-
- if (columnIndex == 1) {
-
- final Button butt = new Button(parent, SWT.CHECK);
- butt.setText("");
-
- final BooleanProperty bp = booleanPropertyFrom(desc); // TODO - do I really have to do this?
-
- boolean set = ((Boolean)rule.getProperty(desc)).booleanValue();
- butt.setSelection(set);
-
- butt.addSelectionListener(new SelectionAdapter() {
- public void widgetSelected(SelectionEvent event) {
- 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));
- }
- });
-
-
- return butt;
- }
- return null;
- }
-
-}
Deleted: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/CharacterEditorFactory.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/CharacterEditorFactory.java 2009-01-11 22:48:16 UTC (rev 6790)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/CharacterEditorFactory.java 2009-01-12 04:14:32 UTC (rev 6791)
@@ -1,82 +0,0 @@
-package net.sourceforge.pmd.eclipse.ui.preferences.br;
-
-import net.sourceforge.pmd.PropertyDescriptor;
-import net.sourceforge.pmd.Rule;
-import net.sourceforge.pmd.lang.rule.properties.CharacterProperty;
-import net.sourceforge.pmd.lang.rule.properties.PropertyDescriptorWrapper;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Text;
-
-/**
- *
- * @author Brian Remedios
- */
-public class CharacterEditorFactory extends AbstractEditorFactory {
-
- public static final CharacterEditorFactory instance = new CharacterEditorFactory();
-
- private CharacterEditorFactory() { }
-
- /**
- * Method fillWidget.
- * @param textWidget Text
- * @param desc PropertyDescriptor<?>
- * @param rule Rule
- */
- protected void fillWidget(Text textWidget, PropertyDescriptor<?> desc, Rule rule) {
- Character val = (Character)rule.getProperty(desc);
- textWidget.setText(val == null ? "" : val.toString());
- }
-
- private static Character charValueIn(Text textControl) {
- String newValue = textControl.getText().trim();
- if (newValue.length() == 0) return null;
- return Character.valueOf(newValue.charAt(0));
- }
-
- private static CharacterProperty characterPropertyFrom(PropertyDescriptor<?> desc) {
-
- if (desc instanceof PropertyDescriptorWrapper) {
- return (CharacterProperty) ((PropertyDescriptorWrapper<?>)desc).getPropertyDescriptor();
- } else {
- return (CharacterProperty)desc;
- }
- }
-
- public Control newEditorOn(Composite parent, int columnIndex, PropertyDescriptor<?> desc, final Rule rule, final ValueChangeListener listener) {
-
- if (columnIndex == 0) return addLabel(parent, desc);
-
- if (columnIndex == 1) {
-
- final Text text = new Text(parent, SWT.SINGLE | SWT.BORDER);
-
- fillWidget(text, desc, rule);
-
- final CharacterProperty cp = characterPropertyFrom(desc); // TODO - really necessary?
-
- text.addListener(SWT.FocusOut, new Listener() {
- public void handleEvent(Event event) {
- Character newValue = charValueIn(text);
- Character existingValue = rule.getProperty(cp);
- if (existingValue.equals(newValue)) return;
-
- rule.setProperty(cp, newValue);
- listener.changed(rule, cp, newValue);
- }
- });
-
- return text;
-
-
- }
-
- return null;
- }
-
-}
Deleted: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/ColourManager.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/ColourManager.java 2009-01-11 22:48:16 UTC (rev 6790)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/ColourManager.java 2009-01-12 04:14:32 UTC (rev 6791)
@@ -1,62 +0,0 @@
-package net.sourceforge.pmd.eclipse.ui.preferences.br;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import net.sourceforge.pmd.util.StringUtil;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.widgets.Display;
-
-/**
- *
- * @author Brian Remedios
- */
-public class ColourManager {
-
- private final Display display;
-
- private final Map<int[], Color> coloursByRGB = new HashMap<int[], Color>();
-
- public ColourManager(Display theDisplay) {
- display = theDisplay;
- }
-
- public Color colourFor(String text) {
-
- if (StringUtil.isEmpty(text)) return display.getSystemColor(SWT.COLOR_WHITE);
-
- text = text.trim();
- int length = text.length();
-
- if (length < 3) return display.getSystemColor(SWT.COLOR_WHITE);
-
- int posA = length / 3;
- int posB = posA * 2;
-
- int rHash = text.subSequence(0, posA).hashCode();
- int gHash = text.subSequence(posA, posB).hashCode();
- int bHash = text.subSequence(posB, length).hashCode();
-
- int colourFractions[] = new int[] {
- (int)(Math.log10(rHash) % 1 * 255),
- (int)(Math.log10(gHash) % 1 * 255),
- (int)(Math.log10(bHash) % 1 * 255)
- };
-
- Color colour = coloursByRGB.get(colourFractions);
- if (colour != null) return colour;
-
- colour = new Color(display, colourFractions[0], colourFractions[1], colourFractions[2]);
- coloursByRGB.put(colourFractions, colour);
- return colour;
- }
-
- public void dispose() {
-
- Iterator<Color> iter = coloursByRGB.values().iterator();
- while (iter.hasNext()) iter.next().dispose();
- }
-}
Deleted: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/EnumerationEditorFactory.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/EnumerationEditorFactory.java 2009-01-11 22:48:16 UTC (rev 6790)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/EnumerationEditorFactory.java 2009-01-12 04:14:32 UTC (rev 6791)
@@ -1,71 +0,0 @@
-package net.sourceforge.pmd.eclipse.ui.preferences.br;
-
-import net.sourceforge.pmd.PropertyDescriptor;
-import net.sourceforge.pmd.Rule;
-import net.sourceforge.pmd.lang.rule.properties.EnumeratedProperty;
-import net.sourceforge.pmd.lang.rule.properties.PropertyDescriptorWrapper;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-
-/**
- *
- * @author Brian Remedios
- */
-public class EnumerationEditorFactory extends AbstractEditorFactory {
-
- public static final EnumerationEditorFactory instance = new EnumerationEditorFactory();
-
- private EnumerationEditorFactory() { }
-
- private static String[] labelsIn(Object[][] items) {
-
- String[] labels = new String[items.length];
- for (int i=0; i<labels.length; i++) labels[i] = items[i][0].toString();
- return labels;
- }
-
- private static EnumeratedProperty<?> enumerationPropertyFrom(PropertyDescriptor<?> desc) {
-
- if (desc instanceof PropertyDescriptorWrapper) {
- return (EnumeratedProperty<?>) ((PropertyDescriptorWrapper<?>)desc).getPropertyDescriptor();
- } else {
- return (EnumeratedProperty<?>)desc;
- }
- }
-
- public Control newEditorOn(Composite parent, int columnIndex, PropertyDescriptor<?> desc, Rule rule, ValueChangeListener listener) {
-
- if (columnIndex == 0) return addLabel(parent, desc);
-
- if (columnIndex == 1) {
- final Combo combo = new Combo(parent, SWT.READ_ONLY);
-
- if (desc instanceof PropertyDescriptorWrapper) {
-
- // TODO
- return combo;
- }
-
- final EnumeratedProperty<?> ep = enumerationPropertyFrom(desc);
-
- combo.setItems(labelsIn(ep.choices()));
-
- combo.addSelectionListener(new SelectionAdapter() {
- public void widgetSelected(SelectionEvent e) {
-
-
- }
- });
-
- return combo;
- }
-
- return null;
- }
-
-}
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/ExclusionPanelManager.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/ExclusionPanelManager.java 2009-01-11 22:48:16 UTC (rev 6790)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/ExclusionPanelManager.java 2009-01-12 04:14:32 UTC (rev 6791)
@@ -1,6 +1,7 @@
package net.sourceforge.pmd.eclipse.ui.preferences.br;
import net.sourceforge.pmd.Rule;
+import net.sourceforge.pmd.eclipse.util.ColourManager;
import net.sourceforge.pmd.lang.rule.properties.StringProperty;
import org.eclipse.swt.SWT;
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/FormArranger.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/FormArranger.java 2009-01-11 22:48:16 UTC (rev 6790)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/FormArranger.java 2009-01-12 04:14:32 UTC (rev 6791)
@@ -53,18 +53,18 @@
* Method arrangeFor.
* @param theRule Rule
*/
- public void arrangeFor(Rule theRule) {
+ public int arrangeFor(Rule theRule) {
- if (rule == theRule) return;
+ if (rule == theRule) return -1;
clearChildren();
rule = theRule;
- if (rule == null) return;
+ if (rule == null) return -1;
Map<PropertyDescriptor<?>, Object> valuesByDescriptor = PMDPreferencePage.filteredPropertiesOf(rule);
- if (valuesByDescriptor.isEmpty()) return;
+ if (valuesByDescriptor.isEmpty()) return 0;
PropertyDescriptor<?>[] orderedDescs = (PropertyDescriptor[])valuesByDescriptor.keySet().toArray(new PropertyDescriptor[valuesByDescriptor.size()]);
@@ -85,7 +85,7 @@
parent.setLayout(layout);
widgets = new Control[rowCount][maxColumns];
- if (maxColumns < 1) return;
+ if (maxColumns < 1) return 0;
int rowsAdded = 0;
for (int i=0; i<orderedDescs.length; i++) {
@@ -95,6 +95,8 @@
if (rowsAdded > 0) {
parent.pack();
}
+
+ return rowsAdded;
}
/**
Added: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/ImageColumnDescriptor.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/ImageColumnDescriptor.java (rev 0)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/ImageColumnDescriptor.java 2009-01-12 04:14:32 UTC (rev 6791)
@@ -0,0 +1,56 @@
+package net.sourceforge.pmd.eclipse.ui.preferences.br;
+
+import java.util.List;
+import java.util.Map;
+
+import net.sourceforge.pmd.Rule;
+import net.sourceforge.pmd.eclipse.ui.PMDUiConstants;
+import net.sourceforge.pmd.eclipse.util.ResourceManager;
+import net.sourceforge.pmd.eclipse.util.Util;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+
+/**
+ *
+ * @author Brian Remedios
+ */
+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 ImageColumnDescriptor(String labelKey, int theAlignment, int theWidth, RuleFieldAccessor theAccessor, boolean resizableFlag, String theImagePath, CellPainterBuilder thePainterBuilder) {
+ super(labelKey, theAlignment, theWidth, theAccessor, resizableFlag);
+
+ imagePath = theImagePath;
+ painterBuilder = thePainterBuilder;
+ }
+
+ /**
+ * @see net.sourceforge.pmd.eclipse.ui.preferences.br.IRuleColumnDescriptor#newTreeColumnFor(org.eclipse.swt.widgets.Tree, int, net.sourceforge.pmd.eclipse.ui.preferences.br.RuleSortListener, java.util.Map)
+ */
+ public TreeColumn newTreeColumnFor(Tree parent, int columnIndex, final RuleSortListener sortListener, Map<Integer, List<Listener>> paintListeners) {
+ TreeColumn tc = buildTreeColumn(parent, sortListener);
+ tc.setToolTipText(label());
+ if (imagePath != null) tc.setImage(ResourceManager.imageFor(imagePath));
+
+ painterBuilder.addPainterFor(tc.getParent(), columnIndex, accessor(), paintListeners);
+ return tc;
+ }
+
+ public String stringValueFor(Rule rule) {
+ return "";
+ }
+
+ public Image imageFor(Rule rule) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+}
Deleted: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/IntegerEditorFactory.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/IntegerEditorFactory.java 2009-01-11 22:48:16 UTC (rev 6790)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/IntegerEditorFactory.java 2009-01-12 04:14:32 UTC (rev 6791)
@@ -1,74 +0,0 @@
-package net.sourceforge.pmd.eclipse.ui.preferences.br;
-
-import net.sourceforge.pmd.PropertyDescriptor;
-import net.sourceforge.pmd.Rule;
-import net.sourceforge.pmd.lang.rule.properties.IntegerProperty;
-import net.sourceforge.pmd.lang.rule.properties.PropertyDescriptorWrapper;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Spinner;
-
-/**
- *
- * @author Brian Remedios
- */
-public class IntegerEditorFactory extends AbstractEditorFactory {
-
- public static final IntegerEditorFactory instance = new IntegerEditorFactory();
-
- private IntegerEditorFactory() { }
-
- private static IntegerProperty intPropertyFrom(PropertyDescriptor<?> desc) {
-
- if (desc instanceof PropertyDescriptorWrapper) {
- return (IntegerProperty) ((PropertyDescriptorWrapper<?>)desc).getPropertyDescriptor();
- } else {
- return (IntegerProperty)desc;
- }
- }
- /**
- *
- * @param parent Composite
- * @param columnIndex int
- * @param desc PropertyDescriptor
- * @param rule Rule
- * @return Control
- * @see net.sourceforge.pmd.ui.preferences.br.EditorFactory#newEditorOn(Composite, int, PropertyDescriptor, Rule)
- */
- public Control newEditorOn(Composite parent, int columnIndex, final PropertyDescriptor<?> desc, final Rule rule, final ValueChangeListener listener) {
-
- if (columnIndex == 0) return addLabel(parent, desc);
-
- if (columnIndex == 1) {
-
- final Spinner spinner = new Spinner(parent, SWT.SINGLE | SWT.BORDER);
-
- final IntegerProperty ip = intPropertyFrom(desc); // TODO - do I really have to do this?
-
- int val = ((Number)rule.getProperty(desc)).intValue();
-
- spinner.setMinimum(ip.lowerLimit().intValue());
- spinner.setMaximum(ip.upperLimit().intValue());
- spinner.setSelection(val);
-
- spinner.addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent event) {
- 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));
- }
- });
-
- return spinner;
- }
- return null;
- }
-
-}
Deleted: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/MultiIntegerEditorFactory.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/MultiIntegerEditorFactory.java 2009-01-11 22:48:16 UTC (rev 6790)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/MultiIntegerEditorFactory.java 2009-01-12 04:14:32 UTC (rev 6791)
@@ -1,70 +0,0 @@
-package net.sourceforge.pmd.eclipse.ui.preferences.br;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import net.sourceforge.pmd.PropertyDescriptor;
-import net.sourceforge.pmd.Rule;
-import net.sourceforge.pmd.eclipse.util.Util;
-import net.sourceforge.pmd.lang.rule.properties.IntegerMultiProperty;
-import net.sourceforge.pmd.lang.rule.properties.PropertyDescriptorWrapper;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Text;
-
-public class MultiIntegerEditorFactory extends AbstractMultiValueEditorFactory {
-
- public static final MultiIntegerEditorFactory instance = new MultiIntegerEditorFactory();
-
- private static final Integer[] emptyIntSet = new Integer[0];
-
- private MultiIntegerEditorFactory() { }
-
- private Integer[] currentIntegers(Text textWidget) {
-
- String[] numberStrings = textWidgetValues(textWidget);
- if (numberStrings.length == 0) return emptyIntSet;
-
- List<Integer> ints = new ArrayList<Integer>(numberStrings.length);
-
- Integer intrg = null;
-
- for (int i=0; i<numberStrings.length; i++) {
- try {
- intrg = Integer.parseInt(numberStrings[i]);
- } catch (Exception e) {
- // just eat it for now
- }
- if (intrg != null) ints.add(intrg);
- }
- return (Integer[]) ints.toArray(new Integer[ints.size()]);
- }
-
- private static IntegerMultiProperty multiIntegerPropertyFrom(PropertyDescriptor<?> desc) {
-
- if (desc instanceof PropertyDescriptorWrapper) {
- return (IntegerMultiProperty) ((PropertyDescriptorWrapper<?>)desc).getPropertyDescriptor();
- } else {
- return (IntegerMultiProperty)desc;
- }
- }
-
- protected void configure(final Text textWidget, final PropertyDescriptor<?> desc, final Rule rule, final ValueChangeListener listener) {
-
- final IntegerMultiProperty tmp = multiIntegerPropertyFrom(desc);
-
- textWidget.addListener(SWT.FocusOut, new Listener() {
- public void handleEvent(Event event) {
- Integer[] newValue = currentIntegers(textWidget);
- Integer[] existingValue = rule.getProperty(tmp);
- if (Util.areSemanticEquals(existingValue, newValue)) return;
-
- rule.setProperty(tmp, newValue);
- fillWidget(textWidget, desc, rule); // display the accepted values
- listener.changed(rule, desc, newValue);
- }
- });
- }
-}
Deleted: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/MultiStringEditorFactory.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/MultiStringEditorFactory.java 2009-01-11 22:48:16 UTC (rev 6790)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/MultiStringEditorFactory.java 2009-01-12 04:14:32 UTC (rev 6791)
@@ -1,49 +0,0 @@
-package net.sourceforge.pmd.eclipse.ui.preferences.br;
-
-import net.sourceforge.pmd.PropertyDescriptor;
-import net.sourceforge.pmd.Rule;
-import net.sourceforge.pmd.eclipse.util.Util;
-import net.sourceforge.pmd.lang.rule.properties.PropertyDescriptorWrapper;
-import net.sourceforge.pmd.lang.rule.properties.StringMultiProperty;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Text;
-
-/**
- *
- * @author Brian Remedios
- */
-public class MultiStringEditorFactory extends AbstractMultiValueEditorFactory {
-
- public static final MultiStringEditorFactory instance = new MultiStringEditorFactory();
-
- private MultiStringEditorFactory() { }
-
- private static StringMultiProperty multiStringPropertyFrom(PropertyDescriptor<?> desc) {
-
- if (desc instanceof PropertyDescriptorWrapper) {
- return (StringMultiProperty) ((PropertyDescriptorWrapper<?>)desc).getPropertyDescriptor();
- } else {
- return (StringMultiProperty)desc;
- }
- }
-
- protected void configure(final Text textWidget, final PropertyDescriptor<?> desc, final Rule rule, final ValueChangeListener listener) {
-
- final StringMultiProperty smp = multiStringPropertyFrom(desc);
-
- textWidget.addListener(SWT.FocusOut, new Listener() {
- public void handleEvent(Event event) {
- String[] newValues = textWidgetValues(textWidget);
- String[] existingValues = rule.getProperty(smp);
- if (Util.areSemanticEquals(existingValues, newValues)) return;
-
- rule.setProperty(smp, newValues);
- fillWidget(textWidget, desc, rule); // reload with latest scrubbed values
- listener.changed(rule, desc, newValues);
- }
- });
- }
-}
Deleted: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/MultiTypeEditorFactory.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/MultiTypeEditorFactory.java 2009-01-11 22:48:16 UTC (rev 6790)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/MultiTypeEditorFactory.java 2009-01-12 04:14:32 UTC (rev 6791)
@@ -1,89 +0,0 @@
-package net.sourceforge.pmd.eclipse.ui.preferences.br;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import net.sourceforge.pmd.PropertyDescriptor;
-import net.sourceforge.pmd.Rule;
-import net.sourceforge.pmd.eclipse.util.Util;
-import net.sourceforge.pmd.lang.rule.properties.PropertyDescriptorWrapper;
-import net.sourceforge.pmd.lang.rule.properties.TypeMultiProperty;
-import net.sourceforge.pmd.util.ClassUtil;
-import net.sourceforge.pmd.util.StringUtil;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Text;
-
-/**
- *
- * @author Brian Remedios
- */
-public class MultiTypeEditorFactory extends AbstractMultiValueEditorFactory {
-
- public static final MultiTypeEditorFactory instance = new MultiTypeEditorFactory();
-
- private MultiTypeEditorFactory() { }
-
- public static String[] shortNamesFor(Class<?>[] types) {
- String[] typeNames = new String[types.length];
- for (int i=0; i<typeNames.length; i++) {
- typeNames[i] = ClassUtil.asShortestName(types[i]);
- }
- return typeNames;
- }
-
- protected void fillWidget(Text textWidget, PropertyDescriptor<?> desc, Rule rule) {
-
- Class<?>[] values = (Class[])rule.getProperty(desc);
- if (values == null) {
- textWidget.setText("");
- return;
- }
-
- String[] typeNames = shortNamesFor(values);
-
- textWidget.setText(values == null ? "" : StringUtil.asString(typeNames, delimiter + ' '));
- }
-
- private Class<?>[] currentTypes(Text textWidget) {
-
- String[] typeNames = textWidgetValues(textWidget);
- if (typeNames.length == 0) return ClassUtil.EMPTY_CLASS_ARRAY;
-
- List<Class<?>> types = new ArrayList<Class<?>>(typeNames.length);
-
- for (int i=0; i<typeNames.length; i++) {
- Class<?> newType = TypeEditorFactory.typeFor(typeNames[i]);
- if (newType != null) types.add(newType);
- }
- return (Class[]) types.toArray(new Class[types.size()]);
- }
-
- private static TypeMultiProperty multiTypePropertyFrom(PropertyDescriptor<?> desc) {
-
- if (desc instanceof PropertyDescriptorWrapper) {
- return (TypeMultiProperty) ((PropertyDescriptorWrapper<?>)desc).getPropertyDescriptor();
- } else {
- return (TypeMultiProperty)desc;
- }
- }
-
- protected void configure(final Text textWidget, final PropertyDescriptor<?> desc, final Rule rule, final ValueChangeListener listener) {
-
- final TypeMultiProperty tmp = multiTypePropertyFrom(desc); // TODO - really necessary?
-
- textWidget.addListener(SWT.FocusOut, new Listener() {
- public void handleEvent(Event event) {
- Class<?>[] newValue = currentTypes(textWidget);
- Class<?>[] existingValue = rule.getProperty(tmp);
- if (Util.areSemanticEquals(existingValue, newValue)) return;
-
- rule.setProperty(tmp, newValue);
- fillWidget(textWidget, desc, rule); // display the accepted values
- listener.changed(rule, desc, newValue);
- }
- });
- }
-}
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/PMDPreferencePage.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/PMDPreferencePage.java 2009-01-11 22:48:16 UTC (rev 6790)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/PMDPreferencePage.java 2009-01-12 04:14:32 UTC (rev 6791)
@@ -92,24 +92,24 @@
// columns shown in the rule treetable in the desired order
private static final RuleColumnDescriptor[] availableColumns = new RuleColumnDescriptor[] {
- RuleColumnDescriptor.name,
- RuleColumnDescriptor.priorityName,
- RuleColumnDescriptor.since,
- RuleColumnDescriptor.ruleSetName,
- RuleColumnDescriptor.ruleType,
- RuleColumnDescriptor.minLangVers,
- RuleColumnDescriptor.properties,
-// RuleColumnDescriptor.filterExpression regex text -> compact color dots (for comparison), needs a bit more polish
+ TextColumnDescriptor.name,
+ TextColumnDescriptor.priorityName,
+ // TextColumnDescriptor.since,
+ TextColumnDescriptor.ruleSetName,
+ TextColumnDescriptor.ruleType,
+ // TextColumnDescriptor.minLangVers,
+ ImageColumnDescriptor.filterExpression, // regex text -> compact color dots (for comparison)
+ TextColumnDescriptor.properties,
};
private static final Set<RuleColumnDescriptor> availableColumnSet = CollectionUtil.asSet(availableColumns);
// last item in this list is the grouping used at startup
private static final Object[][] groupingChoices = new Object[][] {
- { RuleColumnDescriptor.ruleSetName, "Rule set" }, // TODO internationalize
- { RuleColumnDescriptor.since, "PMD version" },
- { RuleColumnDescriptor.priorityName, "Priority" },
- { RuleColumnDescriptor.ruleType, "Type" },
- { RuleColumnDescriptor.filterExpression, "Regex filter" },
+ { TextColumnDescriptor.ruleSetName, "Rule set" }, // TODO i18l
+ { TextColumnDescriptor.since, "PMD version" },
+ { TextColumnDescriptor.priorityName, "Priority" },
+ { TextColumnDescriptor.ruleType, "Type" },
+ { ImageColumnDescriptor.filterExpression, "Regex filter" },
{ null, "<no grouping>" }
};
@@ -121,6 +121,7 @@
XPathRule.VERSION_DESCRIPTOR,
};
+ private static final int RuleTableFraction = 55; // percent of screen height vs property tabs
private static final Map<Class<?>, ValueFormatter> formattersByType = new HashMap<Class<?>, ValueFormatter>();
static { // used to render property values in short form in main table
@@ -243,7 +244,7 @@
return ruleSection;
}
- /**
+ /**
* Main layout
* @param parent Composite
*/
@@ -254,9 +255,9 @@
// Create the sash first, so the other controls can be attached to it.
final Sash sash = new Sash(parent, SWT.HORIZONTAL);
FormData data = new FormData();
- data.left = new FormAttachment(0, 0); // attach to left
- data.right = new FormAttachment(100, 0); // attach to right
- data.top = new FormAttachment(50, 0); // attach halfway down
+ data.left = new FormAttachment(0, 0); // attach to left
+ data.right = new FormAttachment(100, 0); // attach to right
+ data.top = new FormAttachment(RuleTableFraction, 0);
sash.setLayoutData(data);
sash.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
@@ -702,8 +703,8 @@
private boolean hasPriorityGrouping() {
return
- groupingColumn == RuleColumnDescriptor.priorityName ||
- groupingColumn == RuleColumnDescriptor.priority;
+ groupingColumn == TextColumnDescriptor.priorityName ||
+ groupingColumn == TextColumnDescriptor.priority;
}
private void setPriority(RulePriority priority) {
@@ -1287,4 +1288,5 @@
redrawTable();
}
+
}
\ No newline at end of file
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/PerRulePropertyPanelManager.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/PerRulePropertyPanelManager.java 2009-01-11 22:48:16 UTC (rev 6790)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/PerRulePropertyPanelManager.java 2009-01-12 04:14:32 UTC (rev 6791)
@@ -3,6 +3,17 @@
import java.util.HashMap;
import java.util.Map;
+import net.sourceforge.pmd.eclipse.ui.preferences.editors.BooleanEditorFactory;
+import net.sourceforge.pmd.eclipse.ui.preferences.editors.CharacterEditorFactory;
+import net.sourceforge.pmd.eclipse.ui.preferences.editors.EnumerationEditorFactory;
+import net.sourceforge.pmd.eclipse.ui.preferences.editors.IntegerEditorFactory;
+import net.sourceforge.pmd.eclipse.ui.preferences.editors.MultiIntegerEditorFactory;
+import net.sourceforge.pmd.eclipse.ui.preferences.editors.MultiStringEditorFactory;
+import net.sourceforge.pmd.eclipse.ui.preferences.editors.MultiTypeEditorFactory;
+import net.sourceforge.pmd.eclipse.ui.preferences.editors.RealNumberEditorFactory;
+import net.sourceforge.pmd.eclipse.ui.preferences.editors.StringEditorFactory;
+import net.sourceforge.pmd.eclipse.ui.preferences.editors.TypeEditorFactory;
+
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.widgets.Composite;
@@ -15,8 +26,12 @@
*/
public class PerRulePropertyPanelManager extends AbstractRulePanelManager {
- private FormArranger formArranger;
-
+ private FormArranger formArranger;
+ private Composite composite;
+ private ScrolledComposite sComposite;
+
+ private static final int MaxWidgetHeight = 32; // pixels
+
private static final Map<Class<?>, EditorFactory> editorFactoriesByPropertyType;
static {
@@ -48,22 +63,23 @@
public Control setupOn(TabFolder parent, ValueChangeListener changeListener) {
- ScrolledComposite sc = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
-
- Composite composite = new Composite(sc, SWT.NONE);
+ sComposite = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
+ composite = new Composite(sComposite, SWT.NONE);
- sc.setContent(composite);
- sc.setExpandHorizontal(true);
- sc.setExpandVertical(true);
- sc.setMinSize(composite.computeSize(500, 250)); //TODO a best guess..could be made adaptive?
+ sComposite.setContent(composite);
+ sComposite.setExpandHorizontal(true);
+ sComposite.setExpandVertical(true);
formArranger = new FormArranger(composite, editorFactoriesByPropertyType, changeListener);
- return sc;
+ return sComposite;
}
protected void adapt() {
- formArranger.arrangeFor(soleRule());
+ int widgetRowCount = formArranger.arrangeFor(soleRule());
+ if (widgetRowCount < 0) return;
+
+ sComposite.setMinSize(composite.computeSize(500, widgetRowCount * MaxWidgetHeight));
}
}
Deleted: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/RealNumberEditorFactory.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/RealNumberEditorFactory.java 2009-01-11 22:48:16 UTC (rev 6790)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/RealNumberEditorFactory.java 2009-01-12 04:14:32 UTC (rev 6791)
@@ -1,62 +0,0 @@
-package net.sourceforge.pmd.eclipse.ui.preferences.br;
-
-import net.sourceforge.pmd.PropertyDescriptor;
-import net.sourceforge.pmd.Rule;
-import net.sourceforge.pmd.lang.rule.properties.FloatProperty;
-import net.sourceforge.pmd.lang.rule.properties.PropertyDescriptorWrapper;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Text;
-
-/**
- *
- * @author Brian Remedios
- */
-public class RealNumberEditorFactory extends AbstractEditorFactory {
-
- public static final RealNumberEditorFactory instance = new RealNumberEditorFactory();
-
- private RealNumberEditorFactory() { }
-
- private static FloatProperty floatPropertyFrom(PropertyDescriptor<?> desc) {
-
- if (desc instanceof PropertyDescriptorWrapper) {
- return (FloatProperty) ((PropertyDescriptorWrapper<?>)desc).getPropertyDescriptor();
- } else {
- return (FloatProperty)desc;
- }
- }
-
- public Control newEditorOn(Composite parent, int columnIndex, final PropertyDescriptor<?> desc, final Rule rule, final ValueChangeListener listener) {
-
- if (columnIndex == 0) return addLabel(parent, desc);
-
- if (columnIndex == 1) {
-
- final Text text = new Text(parent, SWT.SINGLE); // TODO use a number-only widget
-
- Number val = (Number)rule.getProperty(desc);
- text.setText(val == null ? "" : val.toString());
-
- final FloatProperty fp = floatPropertyFrom(desc);
-
- text.addListener(SWT.FocusOut, new Listener() {
- public void handleEvent(Event event) {
- String newValue = text.getText();
-
- rule.setProperty(fp, Float.valueOf(newValue));
- listener.changed(rule, fp, Float.valueOf(newValue));
- }
- });
-
- return text;
- }
-
- return null;
- }
-
-}
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/RuleColumnDescriptor.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/RuleColumnDescriptor.java 2009-01-11 22:48:16 UTC (rev 6790)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/RuleColumnDescriptor.java 2009-01-12 04:14:32 UTC (rev 6791)
@@ -4,129 +4,16 @@
import java.util.Map;
import net.sourceforge.pmd.Rule;
-import net.sourceforge.pmd.eclipse.plugin.PMDPlugin;
-import net.sourceforge.pmd.eclipse.ui.nls.StringKeys;
-import net.sourceforge.pmd.eclipse.util.ResourceManager;
-import net.sourceforge.pmd.eclipse.util.Util;
-import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
-/**
- *
- * @author Brian Remedios
- */
-public class RuleColumnDescriptor {
+public interface RuleColumnDescriptor {
- private String label;
- private String imagePath;
- private int alignment;
- private int width;
- private RuleFieldAccessor accessor;
- private boolean isResizeable;
- private CellPainterBuilder painterBuilder;
-
- private static final RuleFieldAccessor ruleSetNameAcc = new BasicRuleFieldAccessor() {
- public Comparable<?> valueFor(Rule rule) {
- return PMDPreferencePage.ruleSetNameFrom(rule);
- }
- };
-
- private static final RuleFieldAccessor propertiesAcc = new BasicRuleFieldAccessor() {
- public Comparable<?> valueFor(Rule rule) {
- return PMDPreferencePage.propertyStringFrom(rule);
- }
- };
-
- // TODO externalize remaining title strings
- public static final RuleColumnDescriptor name = new RuleColumnDescriptor(StringKeys.MSGKEY_PREF_RULESET_COLUMN_RULE_NAME, null, SWT.LEFT, 210, RuleFieldAccessor.name, true);
- public static final RuleColumnDescriptor ruleSetName = new RuleColumnDescriptor("Rule set", null, SWT.LEFT, 160, ruleSetNameAcc, true);
- public static final RuleColumnDescriptor priority = new RuleColumnDescriptor("Priority", null, SWT.RIGHT, 53, RuleFieldAccessor.priority, false);
- public static final RuleColumnDescriptor priorityName = new RuleColumnDescriptor("Priority", null, SWT.LEFT, 80, RuleFieldAccessor.priorityName, true);
- public static final RuleColumnDescriptor since = new RuleColumnDescriptor(StringKeys.MSGKEY_PREF_RULESET_COLUMN_SINCE, null, SWT.RIGHT, 46, RuleFieldAccessor.since, false);
- public static final RuleColumnDescriptor usesDFA = new RuleColumnDescriptor("DFA", null, SWT.LEFT, 60, RuleFieldAccessor.usesDFA, false);
- public static final RuleColumnDescriptor externalURL = new RuleColumnDescriptor("URL", null, SWT.LEFT, 100, RuleFieldAccessor.url, true);
- public static final RuleColumnDescriptor properti...
[truncated message content] |