Source code: com/arranger/jarl/shell/views/mainShellPanes/MSPDimensionPane.java
1 package com.arranger.jarl.shell.views.mainShellPanes;
2
3 import com.arranger.jarl.shell.models.BaseModel;
4 import com.arranger.jarl.shell.models.JarlContextModel;
5 import com.arranger.jarl.util.StringTools;
6
7 import javax.swing.*;
8 import java.awt.*;
9 import java.awt.event.FocusAdapter;
10 import java.awt.event.FocusEvent;
11 import java.awt.event.KeyEvent;
12
13 /**
14 * MSPDimensionPane created on Apr 21, 2003
15 */
16 public class MSPDimensionPane extends BaseMSP {
17 protected static final int DEFAULT_WIDTH = 120;
18 protected static final int DEFAULT_HEIGHT = 120;
19
20 protected JTextField m_widthText;
21 protected JTextField m_heightText;
22 protected boolean m_isUpdating = false;
23
24 /**
25 * Create a component
26 * @return
27 */
28 public Component createComponent() {
29 JarlContextModel jarlContextModel = getJarlContextModel();
30
31 JPanel dimensionPane = new JPanel(new GridLayout(1, 4, 10, 0));
32
33 boolean hasCustomDimension = jarlContextModel.hasCustomDimension();
34 int width = (hasCustomDimension) ? (int) jarlContextModel.getDimension().getWidth() : DEFAULT_WIDTH;
35 int height = (hasCustomDimension) ? (int) jarlContextModel.getDimension().getHeight() : DEFAULT_HEIGHT;
36
37 //width
38 m_widthText = new JTextField(String.valueOf(width), 3);
39 m_widthText.addFocusListener(new FocusAdapter() {
40 public void focusLost(FocusEvent e) {
41 updateFields();
42 }
43 });
44
45 m_widthText.setEditable(hasCustomDimension);
46
47 //width title
48 JLabel comp = new JLabel("w", JLabel.TRAILING);
49 comp.setDisplayedMnemonic(KeyEvent.VK_W);
50 comp.setLabelFor(m_widthText);
51 dimensionPane.add(comp);
52 dimensionPane.add(m_widthText);
53
54
55 //height
56 m_heightText = new JTextField(String.valueOf(height), 3);
57 m_heightText.addFocusListener(new FocusAdapter() {
58 public void focusLost(FocusEvent e) {
59 updateFields();
60 }
61 });
62
63 m_heightText.setEditable(hasCustomDimension);
64
65 //height title
66 comp = new JLabel("h", JLabel.TRAILING);
67 comp.setDisplayedMnemonic(KeyEvent.VK_H);
68 comp.setLabelFor(m_heightText);
69 dimensionPane.add(comp);
70 dimensionPane.add(m_heightText);
71
72 //border
73 dimensionPane.setBorder(BorderFactory.createTitledBorder("Dimensions"));
74 return dimensionPane;
75 }
76
77 public void enable(boolean enabled) {
78 m_isUpdating = true;
79 try {
80 m_widthText.setEditable(enabled);
81 m_heightText.setEditable(enabled);
82 } finally {
83 m_isUpdating = false;
84 }
85 }
86
87 public Dimension getCustomDimensions() {
88 return new Dimension(
89 getValue(m_widthText.getText(), DEFAULT_WIDTH),
90 getValue(m_heightText.getText(), DEFAULT_HEIGHT));
91 }
92
93 public void onChange(BaseModel baseModel, String propertyName) {
94 //don't bother if we're initiating the update
95 if (m_isUpdating) {
96 return;
97 }
98 if (baseModel instanceof JarlContextModel && JarlContextModel.CUSTOM_DIMENSION.equals(propertyName)) {
99 JarlContextModel jarlContextModel = (JarlContextModel) baseModel;
100 if (jarlContextModel.hasCustomDimension()) {
101 Dimension dimension = jarlContextModel.getDimension();
102 m_widthText.setText(String.valueOf((int) dimension.getWidth()));
103 m_heightText.setText(String.valueOf((int) dimension.getHeight()));
104 }
105 }
106 }
107
108 protected void updateFields() {
109 m_isUpdating = true;
110 try {
111 JarlContextModel jarlContextModel = getJarlContextModel();
112 if (jarlContextModel.hasCustomDimension()) {
113 jarlContextModel.setDimension(getCustomDimensions());
114 m_jarlShell.saveModels();
115 }
116 } catch (Exception e) {
117 e.printStackTrace();
118 } finally {
119 m_isUpdating = false;
120 }
121 }
122
123 protected int getValue(String text, int defaultValue) {
124 if (StringTools.isEmpty(text)) {
125 return defaultValue;
126 } else {
127 double d = Double.parseDouble(text);
128 if (d < 1) {
129 d = defaultValue;
130 }
131 return (int) d;
132 }
133 }
134 }