View Javadoc

1   /*
2    * jcurl java curling software framework https://JCurl.mro.name Copyright (C)
3    * 2005-2009 M. Rohrmoser
4    * 
5    * This program is free software; you can redistribute it and/or modify it under
6    * the terms of the GNU General Public License as published by the Free Software
7    * Foundation; either version 2 of the License, or (at your option) any later
8    * version.
9    * 
10   * This program is distributed in the hope that it will be useful, but WITHOUT
11   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12   * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
13   * details.
14   * 
15   * You should have received a copy of the GNU General Public License along with
16   * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
17   * Place, Suite 330, Boston, MA 02111-1307 USA
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   * @author <a href="mailto:JCurl@mro.name">M. Rohrmoser </a>
51   * @version $Id$
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 }