Skip to content

Commit b1bfe66

Browse files
committed
WIP: Fix non-primitive numeric type default values
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.
1 parent 857b67d commit b1bfe66

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
</license>
2424
</licenses>
2525

26+
<!--TEMP--><properties><scijava-common.version>2.41.0-SNAPSHOT</scijava-common.version></properties>
2627
<developers>
2728
<developer>
2829
<id>ctrueden</id>

src/main/java/org/scijava/ui/swing/widget/SwingNumberWidget.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,10 @@
5252
import javax.swing.event.ChangeEvent;
5353
import javax.swing.event.ChangeListener;
5454

55+
import org.scijava.module.ModuleService;
5556
import org.scijava.plugin.Parameter;
5657
import org.scijava.plugin.Plugin;
5758
import org.scijava.thread.ThreadService;
58-
import org.scijava.util.NumberUtils;
5959
import org.scijava.widget.InputWidget;
6060
import org.scijava.widget.NumberWidget;
6161
import org.scijava.widget.WidgetModel;
@@ -73,6 +73,9 @@ public class SwingNumberWidget extends SwingInputWidget<Number> implements
7373
@Parameter
7474
private ThreadService threadService;
7575

76+
@Parameter
77+
private ModuleService moduleService;
78+
7679
private JScrollBar scrollBar;
7780
private JSlider slider;
7881
private JSpinner spinner;
@@ -123,8 +126,14 @@ else if (model.isStyle(NumberWidget.SLIDER_STYLE)) {
123126
// add spinner widget
124127
final Class<?> type = model.getItem().getType();
125128
if (model.getValue() == null) {
126-
final Number defaultValue = NumberUtils.getDefaultValue(min, max, type);
127-
model.setValue(defaultValue);
129+
final Object defaultValue =
130+
moduleService.getDefaultValue(model.getItem());
131+
if (!(defaultValue instanceof Number)) {
132+
throw new IllegalStateException("Invalid default value type: " +
133+
defaultValue.getClass().getName());
134+
}
135+
final Number defaultNumber = (Number) defaultValue;
136+
model.setValue(defaultNumber);
128137
}
129138
final Number value = (Number) model.getValue();
130139
final SpinnerNumberModel spinnerModel =

0 commit comments

Comments
 (0)