Skip to content

Commit

Permalink
Fix non-primitive numeric type default values
Browse files Browse the repository at this point in the history
This change leans on the new ModuleService#getDefaultValue(ModuleItem)
method, which is smarter about default value computation across the
board. It avoids the pitfall of bounding min/max using the widget
model's min and max -- which fall back to the numeric type's min/max
values for the purposes of bounding the widget -- and instead uses the
ModuleItem's stated min/max, or a default converted from "0" if none.
  • Loading branch information
ctrueden authored and hinerm committed May 1, 2015
1 parent 857b67d commit 7dc0af5
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 4 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>org.scijava</groupId>
<artifactId>pom-scijava</artifactId>
<version>6.1.0</version>
<version>7.1.0</version>
<relativePath />
</parent>

Expand Down
15 changes: 12 additions & 3 deletions src/main/java/org/scijava/ui/swing/widget/SwingNumberWidget.java
Expand Up @@ -52,10 +52,10 @@
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import org.scijava.module.ModuleService;
import org.scijava.plugin.Parameter;
import org.scijava.plugin.Plugin;
import org.scijava.thread.ThreadService;
import org.scijava.util.NumberUtils;
import org.scijava.widget.InputWidget;
import org.scijava.widget.NumberWidget;
import org.scijava.widget.WidgetModel;
Expand All @@ -73,6 +73,9 @@ public class SwingNumberWidget extends SwingInputWidget<Number> implements
@Parameter
private ThreadService threadService;

@Parameter
private ModuleService moduleService;

private JScrollBar scrollBar;
private JSlider slider;
private JSpinner spinner;
Expand Down Expand Up @@ -123,8 +126,14 @@ else if (model.isStyle(NumberWidget.SLIDER_STYLE)) {
// add spinner widget
final Class<?> type = model.getItem().getType();
if (model.getValue() == null) {
final Number defaultValue = NumberUtils.getDefaultValue(min, max, type);
model.setValue(defaultValue);
final Object defaultValue =
moduleService.getDefaultValue(model.getItem());
if (!(defaultValue instanceof Number)) {
throw new IllegalStateException("Invalid default value type: " +
defaultValue.getClass().getName());
}
final Number defaultNumber = (Number) defaultValue;
model.setValue(defaultNumber);
}
final Number value = (Number) model.getValue();
final SpinnerNumberModel spinnerModel =
Expand Down

0 comments on commit 7dc0af5

Please sign in to comment.