comparison flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MeasureControl.java @ 802:d45ad7fd3027

Added map tools to measure lines and polygons. flys-client/trunk@2323 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Tue, 12 Jul 2011 15:04:50 +0000
parents
children 22dc88b17253
comparison
equal deleted inserted replaced
801:f6693d8f0bc8 802:d45ad7fd3027
1 package de.intevation.flys.client.client.ui.map;
2
3 import com.google.gwt.core.client.GWT;
4
5 import com.smartgwt.client.types.SelectionType;
6 import com.smartgwt.client.widgets.ImgButton;
7 import com.smartgwt.client.widgets.Label;
8 import com.smartgwt.client.widgets.events.ClickEvent;
9 import com.smartgwt.client.widgets.events.ClickHandler;
10 import com.smartgwt.client.widgets.layout.HLayout;
11
12 import org.gwtopenmaps.openlayers.client.control.Measure;
13 import org.gwtopenmaps.openlayers.client.event.MeasureEvent;
14 import org.gwtopenmaps.openlayers.client.event.MeasureListener;
15 import org.gwtopenmaps.openlayers.client.event.MeasurePartialListener;
16 import org.gwtopenmaps.openlayers.client.handler.PathHandler;
17 import org.gwtopenmaps.openlayers.client.handler.PolygonHandler;
18
19 import de.intevation.flys.client.client.FLYSConstants;
20 import de.intevation.flys.client.client.utils.EnableDisableCmd;
21
22
23 public class MeasureControl extends HLayout {
24
25 protected FLYSConstants MSG = GWT.create(FLYSConstants.class);
26
27 protected FloodMap floodMap;
28
29 protected Measure measureLine;
30 protected Measure measurePolygon;
31
32 protected ImgButton measureLineButton;
33 protected ImgButton measurePolyButton;
34 protected Label label;
35
36
37 public MeasureControl(FloodMap floodMap, EnableDisableCmd cmd) {
38 this.floodMap = floodMap;
39
40 measureLineButton = createMeasureLineControl(cmd);
41 measurePolyButton = createMeasurePolyControl(cmd);
42
43 label = new Label();
44
45 initLayout();
46 }
47
48
49 protected void initLayout() {
50 setMembersMargin(2);
51 addMember(measureLineButton);
52 addMember(measurePolyButton);
53 addMember(label);
54 }
55
56
57 protected ImgButton createMeasureLineControl(final EnableDisableCmd cmd) {
58 measureLine = new Measure(new PathHandler());
59 measureLine.setPersist(true);
60 measureLine.addMeasureListener(new MeasureListener() {
61 public void onMeasure(MeasureEvent e) {
62 updateMeasure(e.getMeasure(), e.getUnits());
63 }
64 });
65 measureLine.addMeasurePartialListener(new MeasurePartialListener() {
66 public void onMeasurePartial(MeasureEvent e) {
67 updateMeasure(e.getMeasure(), e.getUnits());
68 }
69 });
70
71 floodMap.getMap().addControl(measureLine);
72
73 final ImgButton btn = new ImgButton();
74 String baseUrl = GWT.getHostPageBaseURL();
75 btn.setSrc(baseUrl + MSG.measureLine());
76 btn.setActionType(SelectionType.CHECKBOX);
77 btn.setSize(20);
78 btn.setShowRollOver(false);
79 btn.setSelected(false);
80 btn.addClickHandler(new ClickHandler() {
81 public void onClick(ClickEvent e) {
82 if (btn.isSelected()) {
83 cmd.enable();
84 activateMeasurePolygon(false);
85 activateMeasureLine(true);
86 }
87 else {
88 cmd.disable();
89 activateMeasureLine(false);
90 }
91 }
92 });
93
94 return btn;
95 }
96
97
98 protected ImgButton createMeasurePolyControl(final EnableDisableCmd cmd) {
99 measurePolygon = new Measure(new PolygonHandler());
100 measurePolygon.setPersist(true);
101 measurePolygon.addMeasureListener(new MeasureListener() {
102 public void onMeasure(MeasureEvent e) {
103 updateMeasure(e.getMeasure(), e.getUnits());
104 }
105 });
106 measurePolygon.addMeasurePartialListener(new MeasurePartialListener() {
107 public void onMeasurePartial(MeasureEvent e) {
108 updateMeasure(e.getMeasure(), e.getUnits());
109 }
110 });
111
112 floodMap.getMap().addControl(measurePolygon);
113
114 final ImgButton btn = new ImgButton();
115 String baseUrl = GWT.getHostPageBaseURL();
116 btn.setSrc(baseUrl + MSG.measurePolygon());
117 btn.setActionType(SelectionType.CHECKBOX);
118 btn.setSize(20);
119 btn.setShowRollOver(false);
120 btn.setSelected(false);
121 btn.addClickHandler(new ClickHandler() {
122 public void onClick(ClickEvent e) {
123 if (btn.isSelected()) {
124 cmd.enable();
125 activateMeasureLine(false);
126 activateMeasurePolygon(true);
127 }
128 else {
129 cmd.disable();
130 activateMeasurePolygon(false);
131 }
132 }
133 });
134
135 return btn;
136 }
137
138
139 protected void clearMeasure() {
140 label.setContents("");
141 }
142
143
144 protected void updateMeasure(float value, String unit) {
145 label.setContents(String.valueOf(value) + " " + unit);
146 }
147
148
149 public void activate(boolean activate) {
150 if (!activate) {
151 clearMeasure();
152 activateMeasureLine(activate);
153 activateMeasurePolygon(activate);
154 }
155 }
156
157
158 protected void activateMeasureLine(boolean activate) {
159 if (activate) {
160 clearMeasure();
161 measureLineButton.select();
162 measureLine.activate();
163 }
164 else {
165 measureLineButton.deselect();
166 measureLine.deactivate();
167 }
168 }
169
170
171 protected void activateMeasurePolygon(boolean activate) {
172 if (activate) {
173 clearMeasure();
174 measurePolyButton.select();
175 measurePolygon.activate();
176 }
177 else {
178 measurePolyButton.deselect();
179 measurePolygon.deactivate();
180 }
181 }
182 }
183 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org