1 /*
2  * $Id: FrictionArea.java,v 1.3 2004/11/18 19:55:54 juhal Exp $
3  */
4 package org.xpilot.jxpmap;
5 
6 import java.io.IOException;
7 import java.io.PrintWriter;
8 import java.math.BigDecimal;
9 import javax.swing.JOptionPane;
10 import javax.swing.JTextField;
11 import javax.swing.JLabel;
12 import java.util.Collection;
13 
14 /**
15  * @author jli
16  */
17 public class FrictionArea extends Group {
18 
19     private BigDecimal friction;
20 
FrictionArea()21     public FrictionArea() {
22         super();
23         this.friction = new BigDecimal(0.0);
24     }
25 
FrictionArea(Collection c)26     public FrictionArea(Collection c) {
27         this(c, new BigDecimal(0.0));
28     }
29 
FrictionArea(Collection c, BigDecimal friction)30     public FrictionArea(Collection c, BigDecimal friction) {
31         super(c);
32         setFriction(friction);
33     }
34 
getFriction()35     public BigDecimal getFriction() {
36         return friction;
37     }
38 
setFriction(BigDecimal value)39     public void setFriction(BigDecimal value) {
40         this.friction = value;
41     }
42 
printXml(PrintWriter out)43     public void printXml(PrintWriter out) throws IOException {
44         out.println("<FrictionArea friction=\"" + getFriction() + "\">");
45         super.printMemberXml(out);
46         out.println("</FrictionArea>");
47     }
48 
getPropertyEditor(MapCanvas canvas)49     public EditorPanel getPropertyEditor(MapCanvas canvas) {
50         return new FrictionEditor(canvas);
51     }
52 
53     private class FrictionEditor extends EditorPanel {
54 
55         private MapCanvas canvas;
56         private JTextField field;
57 
FrictionEditor(MapCanvas canvas)58         public FrictionEditor(MapCanvas canvas) {
59             setTitle("Friction");
60             field = new JTextField(4);
61             field.setText(getFriction().toString());
62             add(new JLabel("Friction:"));
63             add(field);
64             this.canvas = canvas;
65         }
66 
apply()67         public boolean apply() {
68             try {
69                 BigDecimal newFriction = new BigDecimal(field.getText());
70                 double d = newFriction.doubleValue();
71                 if (d < -1.0 || d > 1.0) {
72                     JOptionPane.showMessageDialog
73                         (this, "The friction has to be between -1.0 and 1.0.",
74                         "Information", JOptionPane.INFORMATION_MESSAGE);
75                     return false;
76                 }
77                 setFriction(newFriction);
78                 return true;
79             } catch (NumberFormatException nfe) {
80                 JOptionPane.showMessageDialog
81                     (this, "Invalid friction value: " + field.getText(),
82                      "Error", JOptionPane.ERROR_MESSAGE);
83                 return false;
84             }
85         }
86     }
87 }
88