Skip to content

Commit 94e06b5

Browse files
authored
Merge pull request #51 from scijava/enum-object-widget
Support Enums in SwingObjectWidget
2 parents 6673b20 + 7d36b38 commit 94e06b5

File tree

2 files changed

+104
-2
lines changed

2 files changed

+104
-2
lines changed

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

+8-2
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,12 @@ public Object getValue() {
7878
public void set(final WidgetModel model) {
7979
super.set(model);
8080

81-
comboBox = new JComboBox<>(model.getObjectPool().toArray());
81+
String[] availableChoices = model.getChoices();
82+
if (availableChoices != null) {
83+
comboBox = new JComboBox<>(availableChoices);
84+
} else {
85+
comboBox = new JComboBox<>(model.getObjectPool().toArray());
86+
}
8287
setToolTip(comboBox);
8388
getComponent().add(comboBox);
8489
comboBox.addActionListener(this);
@@ -91,7 +96,8 @@ public void set(final WidgetModel model) {
9196

9297
@Override
9398
public boolean supports(final WidgetModel model) {
94-
return super.supports(model) && model.getObjectPool().size() > 0;
99+
return super.supports(model) && (model.getChoices() != null ||
100+
(model.getObjectPool() != null && model.getObjectPool().size() > 0));
95101
}
96102

97103
// -- AbstractUIInputWidget methods ---
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package org.scijava.ui.swing.widget;
2+
3+
import static org.junit.Assert.assertFalse;
4+
import static org.junit.Assert.assertTrue;
5+
6+
import java.util.Arrays;
7+
8+
import org.junit.After;
9+
import org.junit.Before;
10+
import org.junit.Test;
11+
import org.scijava.Context;
12+
import org.scijava.command.CommandInfo;
13+
import org.scijava.command.ContextCommand;
14+
import org.scijava.module.Module;
15+
import org.scijava.module.ModuleItem;
16+
import org.scijava.module.ModuleService;
17+
import org.scijava.plugin.Parameter;
18+
import org.scijava.widget.InputPanel;
19+
import org.scijava.widget.InputWidget;
20+
import org.scijava.widget.WidgetModel;
21+
import org.scijava.widget.WidgetService;
22+
23+
public class SwingObjectWidgetTest {
24+
25+
private Context context;
26+
private ModuleService moduleService;
27+
private WidgetService widgetService;
28+
29+
@Before
30+
public void setUp() {
31+
context = new Context();
32+
moduleService = context.getService(ModuleService.class);
33+
widgetService = context.getService(WidgetService.class);
34+
}
35+
36+
@After
37+
public void tearDown() {
38+
context.dispose();
39+
}
40+
41+
@Test
42+
public void testObjects() {
43+
Thing a = new Thing();
44+
Thing b = new Thing();
45+
46+
CommandInfo commandInfo = new CommandInfo(MyCommand.class);
47+
Module module = moduleService.createModule(commandInfo);
48+
InputPanel<?,?> panel = new SwingInputPanel();
49+
50+
ModuleItem<Thing> thingInput = moduleService.getSingleInput(module, Thing.class);
51+
ModuleItem<Nothing> nothingInput = moduleService.getSingleInput(module, Nothing.class);
52+
ModuleItem<Choices> choicesInput = moduleService.getSingleInput(module, Choices.class);
53+
54+
WidgetModel thingModel = widgetService.createModel(panel, module, thingInput, Arrays.asList(a, b));
55+
WidgetModel nothingModel = widgetService.createModel(panel, module, nothingInput, null);
56+
WidgetModel choicesModel = widgetService.createModel(panel, module, choicesInput, null);
57+
58+
InputWidget<?, ?> thingWidget = widgetService.create(thingModel);
59+
assertTrue(thingWidget instanceof SwingObjectWidget);
60+
61+
InputWidget<?, ?> nothingWidget = widgetService.create(nothingModel);
62+
assertFalse(nothingWidget instanceof SwingObjectWidget);
63+
64+
InputWidget<?, ?> choicesWidget = widgetService.create(choicesModel);
65+
assertTrue(choicesWidget instanceof SwingObjectWidget);
66+
}
67+
68+
private class Thing {
69+
// dummy class
70+
}
71+
72+
private class Nothing {
73+
// dummy class
74+
}
75+
76+
private enum Choices {
77+
FIRST, SECOND, THIRD
78+
};
79+
80+
public static class MyCommand extends ContextCommand {
81+
@Parameter
82+
private Thing thing;
83+
84+
@Parameter
85+
private Nothing nothing;
86+
87+
@Parameter
88+
private Choices choices;
89+
90+
@Override
91+
public void run() {
92+
// nothing to do
93+
}
94+
95+
}
96+
}

0 commit comments

Comments
 (0)