Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.symbology / org.gvsig.symbology.swing / org.gvsig.symbology.swing.api / src / main / java / org / gvsig / app / gui / styling / LineProperties.java @ 40560

History | View | Annotate | Download (8.33 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.app.gui.styling;
25

    
26
import java.awt.BasicStroke;
27
import java.awt.BorderLayout;
28
import java.awt.Dimension;
29
import java.awt.FlowLayout;
30
import java.awt.event.ActionEvent;
31
import java.awt.event.ActionListener;
32

    
33
import javax.swing.BorderFactory;
34
import javax.swing.BoxLayout;
35
import javax.swing.ButtonGroup;
36
import javax.swing.JButton;
37
import javax.swing.JLabel;
38
import javax.swing.JPanel;
39
import javax.swing.JRadioButton;
40

    
41
import org.gvsig.andami.IconThemeHelper;
42
import org.gvsig.gui.beans.DefaultBean;
43
import org.gvsig.gui.beans.swing.JBlank;
44
import org.gvsig.i18n.Messages;
45

    
46

    
47
public class LineProperties extends DefaultBean implements ActionListener  {
48

    
49
        /**
50
         * 
51
         */
52
        private static final long serialVersionUID = 6356385079456043011L;
53
        private JRadioButton joinBevel;
54
        private JRadioButton joinMiter;
55
        private JRadioButton joinRound;
56
        private JRadioButton capBut;
57
        private JRadioButton capRound;
58
        private JRadioButton capSquare;
59
        private PatternEditor pe;
60
        private JButton clearButton;
61
        private float width;
62

    
63

    
64
        public LineProperties(float lineWidth) {
65
                super();
66
                this.width=lineWidth;
67
                initialize();
68
        }
69

    
70
        private void initialize() {
71
                setName(Messages.getText("line_properties"));
72
                setLayout(new BorderLayout(10, 10));
73

    
74
                JPanel aux2 = new JPanel();
75
                JPanel pnlJoin = new JPanel(new FlowLayout(FlowLayout.LEFT, 15, 0));
76

    
77

    
78
                pnlJoin.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(), Messages.getText("join_style")+":"));
79

    
80
                JPanel d = new JPanel();
81
                JPanel toCenter;
82
                d.setLayout(new BoxLayout(d, BoxLayout.Y_AXIS));
83
                joinBevel = new JRadioButton(IconThemeHelper.getImageIcon("line-properties-join-bevel"));
84
                joinBevel.setSelectedIcon(IconThemeHelper.getImageIcon("line-properties-join-bevel-selected"));
85
                FlowLayout flowCenteredLayout = new FlowLayout(FlowLayout.CENTER, 0, 0);
86
                toCenter = new JPanel(flowCenteredLayout);
87
                toCenter.add(joinBevel);
88
                d.add(toCenter);
89

    
90
                toCenter = new JPanel(flowCenteredLayout);
91
                toCenter.add(new JLabel(Messages.getText("join_bevel")));
92
                d.add(toCenter);
93

    
94
                pnlJoin.add(d);
95

    
96

    
97
                d = new JPanel();
98
                d.setLayout(new BoxLayout(d, BoxLayout.Y_AXIS));
99
                joinMiter = new JRadioButton(IconThemeHelper.getImageIcon("line-properties-join-miter"));
100
                joinMiter.setSelectedIcon(IconThemeHelper.getImageIcon("line-properties-join-miter-selected"));
101
                toCenter = new JPanel(flowCenteredLayout);
102
                toCenter.add(joinMiter);
103
                d.add(toCenter);
104

    
105
                toCenter = new JPanel(flowCenteredLayout);
106
                toCenter.add(new JLabel(Messages.getText("join_miter")));
107
                d.add(toCenter);
108
                pnlJoin.add(d);
109

    
110

    
111

    
112
                d = new JPanel();
113
                d.setLayout(new BoxLayout(d, BoxLayout.Y_AXIS));
114
                joinRound = new JRadioButton(IconThemeHelper.getImageIcon("line-properties-join-round"));
115
                joinRound.setSelectedIcon(IconThemeHelper.getImageIcon("line-properties-join-round-selected"));
116
                toCenter = new JPanel(flowCenteredLayout);
117
                toCenter.add(joinRound);
118
                d.add(toCenter);
119
                toCenter = new JPanel(flowCenteredLayout);
120
                toCenter.add(new JLabel(Messages.getText("join_round")));
121
                d.add(toCenter);
122
                pnlJoin.add(d);
123

    
124

    
125
                ButtonGroup groupJoin = new ButtonGroup();
126
                groupJoin.add(joinBevel);
127
                groupJoin.add(joinMiter);
128
                groupJoin.add(joinRound);
129
                aux2.add(pnlJoin);
130

    
131
                JPanel aux3 = new JPanel();
132

    
133
                JPanel pnlCap = new JPanel(new FlowLayout(FlowLayout.LEFT, 30, 0));
134
                pnlCap.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(), Messages.getText("end_style")+":"));
135

    
136
                JPanel c = new JPanel();
137
                c.setLayout(new BoxLayout(c, BoxLayout.Y_AXIS));
138
                capBut = new JRadioButton(IconThemeHelper.getImageIcon("line-properties-cap-butt"));
139
                capBut.setSelectedIcon(IconThemeHelper.getImageIcon("line-properties-cap-butt-selected"));
140
                toCenter = new JPanel(flowCenteredLayout);
141
                toCenter.add(capBut);
142
                c.add(toCenter);
143
                toCenter = new JPanel(flowCenteredLayout);
144
                toCenter.add(new JLabel(Messages.getText("cap_butt")));
145
                c.add(toCenter);
146
                pnlCap.add(c);
147

    
148
                JPanel a = new JPanel();
149
                a.setLayout(new BoxLayout(a, BoxLayout.Y_AXIS));
150
                capRound = new JRadioButton(IconThemeHelper.getImageIcon("line-properties-cap-round"));
151
                capRound.setSelectedIcon(IconThemeHelper.getImageIcon("line-properties-cap-round-selected"));
152
                toCenter = new JPanel(flowCenteredLayout);
153
                toCenter.add(capRound);
154
                a.add(toCenter);
155
                toCenter = new JPanel(flowCenteredLayout);
156
                toCenter.add(new JLabel(Messages.getText("cap_round")));
157
                a.add(toCenter);
158
                pnlCap.add(a);
159

    
160

    
161
                JPanel b = new JPanel();
162
                b.setLayout(new BoxLayout(b, BoxLayout.Y_AXIS));
163
                capSquare = new JRadioButton(IconThemeHelper.getImageIcon("line-properties-cap-square"));
164
                capSquare.setSelectedIcon(IconThemeHelper.getImageIcon("line-properties-cap-square-selected"));
165
                toCenter = new JPanel(flowCenteredLayout);
166
                toCenter.add(capSquare);
167

    
168
                b.add(toCenter);
169
                toCenter = new JPanel(flowCenteredLayout);
170
                toCenter.add(new JLabel(Messages.getText("cap_square")));
171
                b.add(toCenter);
172
                pnlCap.add(b);
173

    
174
                ButtonGroup groupCap = new ButtonGroup();
175
                groupCap.add(capBut);
176
                groupCap.add(capRound);
177
                groupCap.add(capSquare);
178
                aux3.add(pnlCap);
179

    
180
                JPanel aux4 = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
181
                aux4.add(new JBlank(5,40));
182
                pe = new PatternEditor();
183
                pe.setPreferredSize(new Dimension(440,40));
184
                aux4.add(pe);
185
                aux4.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(), Messages.getText("fill_pattern")+":"));
186

    
187
                JPanel aux5 = new JPanel(new FlowLayout(FlowLayout.LEFT,15, 0));
188
                clearButton = new JButton(Messages.getText("clear"));
189
                aux5.add(clearButton);
190

    
191
                joinBevel.addActionListener(this);
192
                joinMiter.addActionListener(this);
193
                joinRound.addActionListener(this);
194
                capBut.addActionListener(this);
195
                capRound.addActionListener(this);
196
                capSquare.addActionListener(this);
197
                clearButton.addActionListener(clear);
198
                pe.addActionListener(patternChange);
199

    
200
                JPanel aux = new JPanel(new FlowLayout(FlowLayout.LEFT));
201
                aux.add(aux2, BorderLayout.CENTER);
202
                aux.add(aux3, BorderLayout.CENTER);
203
                aux.add(aux4, BorderLayout.CENTER);
204
                aux.add(aux5, BorderLayout.WEST);
205
                add(aux, BorderLayout.CENTER);
206
        }
207

    
208
        public void actionPerformed(ActionEvent e) {
209
                callValueChanged(getLinePropertiesStyle());
210
        }
211

    
212
        private ActionListener patternChange = new ActionListener() {
213
                public void actionPerformed(ActionEvent e) {
214
                        callValueChanged(getLinePropertiesStyle());
215
                }
216
        };
217

    
218
        private ActionListener clear = new ActionListener() {
219
                public void actionPerformed(ActionEvent e) {
220
                        pe.clear_Dash();
221
                        callValueChanged(getLinePropertiesStyle());
222
                }
223
        };
224

    
225

    
226

    
227
        public void setLinePropertiesStyle(BasicStroke str) {
228

    
229
                if (str == null) {
230
                        str = new BasicStroke();
231
                }
232

    
233
                switch(str.getLineJoin()) {
234
                case 0:
235
                        joinMiter.setSelected(true);
236
                        break;
237
                case 1:
238
                        joinRound.setSelected(true);
239
                        break;
240
                case 2:
241
                        joinBevel.setSelected(true);
242
                        break;
243
                }
244

    
245
                switch(str.getEndCap()) {
246
                case 0:
247
                        capBut.setSelected(true);
248
                        break;
249
                case 1:
250
                        capRound.setSelected(true);
251
                        break;
252
                case 2:
253
                        capSquare.setSelected(true);
254
                        break;
255
                }
256

    
257
                pe.setDash(str.getDashArray());
258
                pe.repaint();
259
        }
260

    
261
        public BasicStroke getLinePropertiesStyle() {
262
                int capType=0, joinType=0;
263

    
264

    
265
                if (capBut.isSelected())                        capType = 0;
266
                else if (capRound.isSelected())                capType = 1;
267
                else if (capSquare.isSelected())        capType = 2;
268

    
269
                if (joinMiter.isSelected())                        joinType = 0;
270
                else if (joinRound.isSelected())        joinType = 1;
271
                else if (joinBevel.isSelected())        joinType = 2;
272

    
273
                float [] dash = pe.getDash();
274

    
275
                BasicStroke str = new BasicStroke(width, capType, joinType, 10, pe.getDash(), 0);
276
                pe.setDash(dash);
277
                return str;
278
        }
279
}