1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.jcurl.demo.tactics;
21
22 import java.awt.BorderLayout;
23 import java.awt.event.ItemEvent;
24 import java.awt.event.ItemListener;
25 import java.beans.PropertyChangeEvent;
26 import java.beans.PropertyChangeListener;
27 import java.util.ArrayList;
28 import java.util.Collection;
29
30 import javax.swing.BorderFactory;
31 import javax.swing.Box;
32 import javax.swing.BoxLayout;
33 import javax.swing.JComboBox;
34 import javax.swing.JComponent;
35 import javax.swing.JLabel;
36 import javax.swing.JPanel;
37 import javax.swing.SpinnerNumberModel;
38 import javax.swing.event.ChangeEvent;
39 import javax.swing.event.ChangeListener;
40
41 import org.apache.commons.logging.Log;
42 import org.jcurl.core.api.Curler;
43 import org.jcurl.core.api.Unit;
44 import org.jcurl.core.helpers.Service;
45 import org.jcurl.core.impl.CurlerDenny;
46 import org.jcurl.core.log.JCLoggerFactory;
47 import org.jcurl.core.ui.ChangeManager;
48
49
50
51
52
53 public class CurlerSwingBean extends JComponent implements HasChanger,
54 PropertyChangeListener, ChangeListener, ItemListener {
55 private static class ComboItem {
56 final Class<? extends Curler> c;
57
58 public ComboItem(final Class<? extends Curler> c) {
59 this.c = c;
60 }
61
62 @Override
63 public String toString() {
64 return c.getSimpleName();
65 }
66 }
67
68 private static final Log log = JCLoggerFactory
69 .getLogger(CurlerSwingBean.class);
70 private static final long serialVersionUID = 2303066300268819434L;
71
72 private static ComboItem[] findCurlers() {
73 final Collection<ComboItem> tmp = new ArrayList<ComboItem>();
74 if (false)
75 for (final Class<Curler> elem : Service.providerClasses(
76 Curler.class, null))
77 tmp.add(new ComboItem(elem));
78 else
79 tmp.add(new ComboItem(CurlerDenny.class));
80 final ComboItem[] dat = new ComboItem[tmp.size()];
81 tmp.toArray(dat);
82 return dat;
83 }
84
85 private ChangeManager changer;
86 private final JSpinnerNumberUnit curl;
87 private Curler curler;
88 private final JComboBox curlers;
89 private final JSpinnerNumberUnit time;
90
91 public CurlerSwingBean() {
92 setLayout(new BorderLayout());
93 final Box b = Box.createVerticalBox();
94 {
95 final JPanel p = new JPanel();
96 p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
97 p.setBorder(BorderFactory.createTitledBorder("Curl Model"));
98 p.add(curlers = new JComboBox(findCurlers()));
99 b.add(p);
100 }
101 {
102 final JPanel p = new JPanel();
103 p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
104 p.setBorder(BorderFactory.createTitledBorder("Draw-To-Tee"));
105 {
106 time = new JSpinnerNumberUnit();
107 time.setLabel("time: ");
108 time.setBase(Unit.SECOND);
109 time.setModel(new SpinnerNumberModel(24.0, 17.0, 28.0, 0.1));
110 time.addPropertyChangeListener(this);
111 time.addChangeListener(this);
112 p.add(time);
113 }
114 {
115 curl = new JSpinnerNumberUnit();
116 curl.setLabel("curl: ");
117 curl.setBase(Unit.METER);
118 curl.setChoose(Unit.FOOT, Unit.INCH, Unit.CENTIMETER,
119 Unit.METER);
120 curl.setModel(new SpinnerNumberModel(1.0, 0.0, 3.0, 0.1));
121 curl.addPropertyChangeListener(this);
122 curl.addChangeListener(this);
123 p.add(curl);
124 }
125 b.add(p);
126 }
127 add(b, BorderLayout.NORTH);
128 add(new JLabel("TODO: other settings"), BorderLayout.CENTER);
129 setEnabled(false);
130 }
131
132 public ChangeManager getChanger() {
133 return ChangeManager.getTrivial(changer);
134 }
135
136 public Curler getCurler() {
137 return curler;
138 }
139
140 public void itemStateChanged(final ItemEvent e) {
141 log.warn("Unconsumed event from " + e.getSource());
142 }
143
144 public void propertyChange(final PropertyChangeEvent evt) {
145 log.warn("Unconsumed event '" + evt.getPropertyName() + "' from "
146 + evt.getSource().getClass().getName() + ": "
147 + evt.getOldValue() + " -> " + evt.getNewValue());
148 }
149
150 public void setChanger(final ChangeManager changer) {
151 final ChangeManager old = this.changer;
152 if (old == changer)
153 return;
154 firePropertyChange("changer", old, this.changer = changer);
155 }
156
157 public void setCurler(final Curler curler) {
158 final Curler old = this.curler;
159 if (old == curler)
160 return;
161 firePropertyChange("curler", old, this.curler = curler);
162 }
163
164 @Override
165 public void setEnabled(final boolean enabled) {
166 curlers.setEnabled(enabled);
167 time.setEnabled(enabled);
168 curl.setEnabled(enabled);
169 super.setEnabled(enabled);
170 }
171
172 public void stateChanged(final ChangeEvent e) {
173 log.warn("Unconsumed event from " + e.getSource());
174 }
175 }