Revision: 7059
http://pmd.svn.sourceforge.net/pmd/?rev=7059&view=rev
Author: hooperbloob
Date: 2010-01-07 05:16:57 +0000 (Thu, 07 Jan 2010)
Log Message:
-----------
property editor improvements, i18l updates
Modified Paths:
--------------
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/messages.properties
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/nls/StringKeys.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/TODO items
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/AbstractNumericEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/DoubleEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/MultiEnumerationEditorFactory.java
trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/MultiMethodEditorFactory.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/TypeEditorFactory.java
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/messages.properties
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/messages.properties 2010-01-07 02:27:14 UTC (rev 7058)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/messages.properties 2010-01-07 05:16:57 UTC (rev 7059)
@@ -109,6 +109,9 @@
preference.ruleedit.label.exclusion_regex = Exclusion regular expression
preference.ruleedit.label.xpath_exclusion = XPath exclusion expression
preference.ruleedit.label.colour_code = Color code
+preference.ruleedit.label.min = Min
+preference.ruleedit.label.max = Max
+preference.ruleedit.label.default = Default
preference.ruleedit.label.ruleset_name = RuleSet name :
preference.ruleedit.label.since = Since :
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/nls/StringKeys.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/nls/StringKeys.java 2010-01-07 02:27:14 UTC (rev 7058)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/nls/StringKeys.java 2010-01-07 05:16:57 UTC (rev 7059)
@@ -240,6 +240,9 @@
public static final String MSGKEY_DIALOG_PREFS_ADD_NEW_PROPERTY = "dialog.preferences.add_new_property";
+ public static final String MSGKEY_RULEEDIT_LABEL_MIN = "preference.ruleedit.label.min";
+ public static final String MSGKEY_RULEEDIT_LABEL_MAX = "preference.ruleedit.label.max";
+ public static final String MSGKEY_RULEEDIT_LABEL_DEFAULT = "preference.ruleedit.label.default";
public static final String MSGKEY_DIALOG_CPD_TITLE = "dialog.cpd.title";
public static final String MSGKEY_DIALOG_CPD_MIN_TILESIZE_LABEL = "dialog.cpd.min_tilesize.label";
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/TODO items
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/TODO items 2010-01-07 02:27:14 UTC (rev 7058)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/br/TODO items 2010-01-07 05:16:57 UTC (rev 7059)
@@ -1,4 +1,4 @@
-ToDo items: Jan 2nd 2010
+ToDo items: Jan 6th 2010
Finish remaining editors and the Add Property dialog
@@ -10,10 +10,10 @@
sort column & order
rule table screen fraction
-
Items needing support in PMD itself:
Enable non-intrinsic property field removal
Enable/disable rules w/out removing from ruleset
Enable rule reassignment to different rulesets
Add support for creating new rulesets & descriptions for same
+For multi-value properties, decide whether to allow unique or duplicate values (default to Set behaviour)
Modified: 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/AbstractMultiValueEditorFactory.java 2010-01-07 02:27:14 UTC (rev 7058)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/AbstractMultiValueEditorFactory.java 2010-01-07 05:16:57 UTC (rev 7059)
@@ -19,6 +19,7 @@
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.Text;
/**
@@ -164,8 +165,27 @@
return newControls;
}
+ /**
+ * Override in subclasses as necessary
+ * @param desc
+ * @param rule
+ * @return
+ */
+ protected boolean canAddNewRowFor(final PropertyDescriptor<?> desc, final Rule rule) {
+ return true;
+ }
+
+ protected void setupDefaultActionFor(Control widget, Listener listener) {
+
+ // if (widget instanceof Text || widget instanceof Spinner) {
+ widget.addListener(SWT.DefaultSelection, listener);
+ // }
+ }
+
private void addNewValueRow(final Composite parent, final PropertyDescriptor<?> desc, final Rule rule, final Text parentWidget, final ValueChangeListener changeListener, final SizeChangeListener sizeListener, final List<Control> newControls, int i) {
+ if (!canAddNewRowFor(desc, rule)) return;
+
final Label number = new Label(parent, SWT.NONE);
number.setText(Integer.toString(i+1));
newControls.add(number);
@@ -175,7 +195,7 @@
final Button butt = new Button(parent, SWT.BORDER);
butt.setText("+"); // TODO use icon for consistent width
newControls.add(butt);
- butt.addListener(SWT.Selection, new Listener() {
+ Listener addListener = new Listener() {
public void handleEvent(Event event) { // add new value handler
// add the new value to the property set
// set the value in the widget to the cleaned up one, disable it
@@ -197,7 +217,9 @@
changeListener.changed(rule, desc, newValue);
parent.getParent().layout();
}
- } );
+ };
+ butt.addListener(SWT.Selection, addListener);
+ setupDefaultActionFor(widget, addListener); // allow for CR on entry widgets themselves, no need to click the '+' button
}
private void convertToDelete(final Button button, final Object toDeleteValue, final Composite parent, final List<Control> newControls, final PropertyDescriptor<?> desc, final Rule rule, final Text parentWidget, final Label number, final Control widget, final ValueChangeListener changeListener, final SizeChangeListener sizeListener) {
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/AbstractNumericEditorFactory.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/AbstractNumericEditorFactory.java 2010-01-07 02:27:14 UTC (rev 7058)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/AbstractNumericEditorFactory.java 2010-01-07 05:16:57 UTC (rev 7059)
@@ -2,6 +2,7 @@
import net.sourceforge.pmd.PropertyDescriptor;
import net.sourceforge.pmd.Rule;
+import net.sourceforge.pmd.eclipse.ui.nls.StringKeys;
import net.sourceforge.pmd.eclipse.ui.preferences.br.SizeChangeListener;
import net.sourceforge.pmd.eclipse.ui.preferences.br.ValueChangeListener;
@@ -38,12 +39,12 @@
public Control[] createOtherControlsOn(Composite parent, PropertyDescriptor<?> desc, Rule rule, ValueChangeListener listener, SizeChangeListener sizeListener) {
- Label defaultLabel = newLabel(parent, "Default");
+ Label defaultLabel = newLabel(parent, SWTUtil.stringFor(StringKeys.MSGKEY_RULEEDIT_LABEL_DEFAULT));
Control valueControl = newEditorOn(parent, desc, rule, listener, sizeListener);
- Label minLabel = newLabel(parent, "Min"); // TODO i18l
+ Label minLabel = newLabel(parent, SWTUtil.stringFor(StringKeys.MSGKEY_RULEEDIT_LABEL_MIN));
Spinner minWidget = newSpinnerFor(parent, digitPrecision());
- Label maxLabel = newLabel(parent, "Max"); // TODO i18l
+ Label maxLabel = newLabel(parent, SWTUtil.stringFor(StringKeys.MSGKEY_RULEEDIT_LABEL_MAX));
Spinner maxWidget = newSpinnerFor(parent, digitPrecision());
linkup(minWidget, (Spinner)valueControl, maxWidget);
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/DoubleEditorFactory.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/DoubleEditorFactory.java 2010-01-07 02:27:14 UTC (rev 7058)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/DoubleEditorFactory.java 2010-01-07 05:16:57 UTC (rev 7059)
@@ -7,13 +7,10 @@
import net.sourceforge.pmd.lang.rule.properties.DoubleProperty;
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.Event;
-import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Spinner;
/**
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/MultiEnumerationEditorFactory.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/MultiEnumerationEditorFactory.java 2010-01-07 02:27:14 UTC (rev 7058)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/MultiEnumerationEditorFactory.java 2010-01-07 05:16:57 UTC (rev 7059)
@@ -54,16 +54,29 @@
String[] newValues = CollectionUtil.addWithoutDuplicates(currentValues, newValue);
if (currentValues.length == newValues.length) return null;
- rule.setProperty((StringMultiProperty)desc, newValues);
+ rule.setProperty((EnumeratedMultiProperty<?>)desc, newValues);
return newValue;
}
+ /**
+ * Only add a new widget row if there are any remaining choices to make
+ */
@Override
+ protected boolean canAddNewRowFor(PropertyDescriptor<?> desc, Rule rule) {
+
+ Object[] choices = desc.choices();
+ Object[] values = (Object[])rule.getProperty(desc);
+
+ return choices.length > values.length;
+ }
+
+ @Override
protected Control addWidget(Composite parent, Object value, PropertyDescriptor<?> desc, Rule rule) {
final Combo combo = new Combo(parent, SWT.READ_ONLY);
final EnumeratedMultiProperty<?> ep = enumerationPropertyFrom(desc);
+
// TODO remove all choices already chosen by previous widgets
combo.setItems(SWTUtil.labelsIn(ep.choices(), 0));
int selectionIdx = EnumerationEditorFactory.indexOf(value, ep.choices());
@@ -73,12 +86,6 @@
}
@Override
- protected void configure(Text text, PropertyDescriptor<?> desc, Rule rule, ValueChangeListener listener) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
protected void setValue(Control widget, Object value) {
// not necessary, set in addWidget method?
}
@@ -89,14 +96,17 @@
}
@Override
- protected Object valueFrom(Control valueControl) {
- // unreferenced method?
+ protected Object valueFrom(Control valueControl) { // unreferenced method?
return null;
}
public PropertyDescriptor<?> createDescriptor(String name, String description, Control[] otherData) {
- // TODO Auto-generated method stub
return null;
}
+ @Override
+ protected void configure(Text text, PropertyDescriptor<?> desc, Rule rule, ValueChangeListener listener) {
+ text.setEditable(false);
+ }
+
}
Modified: trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/MultiMethodEditorFactory.java
===================================================================
--- trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/MultiMethodEditorFactory.java 2010-01-07 02:27:14 UTC (rev 7058)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/MultiMethodEditorFactory.java 2010-01-07 05:16:57 UTC (rev 7059)
@@ -40,12 +40,7 @@
}
return typeNames;
}
-
- protected Object valueFrom(Control valueControl) {
-
- return null; // TODO
- }
-
+
private static String asString(Map<String, List<Method>> methodGroups) {
if (methodGroups.isEmpty()) return "";
@@ -127,4 +122,8 @@
rule.setProperty((MethodMultiProperty)desc, newValues);
return newValue;
}
+
+ protected Object valueFrom(Control valueControl) { // not necessary for this type
+ return null;
+ }
}
Modified: 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/MultiStringEditorFactory.java 2010-01-07 02:27:14 UTC (rev 7058)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/MultiStringEditorFactory.java 2010-01-07 05:16:57 UTC (rev 7059)
@@ -39,11 +39,6 @@
return (StringMultiProperty)desc;
}
}
-
- protected Object valueFrom(Control valueControl) {
-
- return null; // TODO
- }
protected Control addWidget(Composite parent, Object value, PropertyDescriptor<?> desc, Rule rule) {
Text textWidget = new Text(parent, SWT.SINGLE | SWT.BORDER);
@@ -59,7 +54,7 @@
final StringMultiProperty smp = multiStringPropertyFrom(desc);
- textWidget.addListener(SWT.FocusOut, new Listener() {
+ Listener widgetListener = new Listener() {
public void handleEvent(Event event) {
String[] newValues = textWidgetValues(textWidget);
String[] existingValues = (String[])valueFor(rule, smp);
@@ -68,8 +63,11 @@
rule.setProperty(smp, newValues);
fillWidget(textWidget, desc, rule); // reload with latest scrubbed values
listener.changed(rule, desc, newValues);
- }
- });
+ }
+ };
+
+ textWidget.addListener(SWT.FocusOut, widgetListener);
+// textWidget.addListener(SWT.DefaultSelection, widgetListener);
}
@Override
@@ -90,4 +88,8 @@
rule.setProperty((StringMultiProperty)desc, newValues);
return newValue;
}
+
+ protected Object valueFrom(Control valueControl) { // not necessary for this type
+ return null;
+ }
}
Modified: 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/MultiTypeEditorFactory.java 2010-01-07 02:27:14 UTC (rev 7058)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/MultiTypeEditorFactory.java 2010-01-07 05:16:57 UTC (rev 7059)
@@ -42,11 +42,6 @@
return typeNames;
}
- protected Object valueFrom(Control valueControl) {
-
- return null; // TODO
- }
-
protected void fillWidget(Text textWidget, PropertyDescriptor<?> desc, Rule rule) {
Class<?>[] values = (Class[])valueFor(rule, desc);
@@ -135,4 +130,8 @@
rule.setProperty((TypeMultiProperty)desc, newValues);
return enteredValue;
}
+
+ protected Object valueFrom(Control valueControl) { // not necessary for this type
+ return null;
+ }
}
Modified: 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/ui/preferences/editors/TypeEditorFactory.java 2010-01-07 02:27:14 UTC (rev 7058)
+++ trunk/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/preferences/editors/TypeEditorFactory.java 2010-01-07 05:16:57 UTC (rev 7059)
@@ -77,21 +77,23 @@
final TypeProperty tp = typePropertyFrom(desc);
- typeText.addListener(SWT.FocusOut, new Listener() {
+ Listener wereDoneListener = new Listener() {
public void handleEvent(Event event) {
- Class<?> newValue = typeText.getType(true);
- if (newValue == null) return;
-
- Class<?> existingValue = (Class<?>)valueFor(rule, tp);
- if (existingValue == newValue) return;
-
- rule.setProperty(tp, newValue);
- listener.changed(rule, desc, newValue);
+ Class<?> newValue = typeText.getType(true);
+ if (newValue == null) return;
+
+ Class<?> existingValue = (Class<?>)valueFor(rule, tp);
+ if (existingValue == newValue) return;
+
+ rule.setProperty(tp, newValue);
+ listener.changed(rule, desc, newValue);
- adjustRendering(rule, desc, typeText);
- }
- });
-
+ adjustRendering(rule, desc, typeText);
+ }
+ };
+
+ typeText.addListener(SWT.FocusOut, wereDoneListener);
+ typeText.addListener(SWT.DefaultSelection, wereDoneListener);
return typeText;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|