root / org.gvsig.legend.urbanhorizontalsignage / trunk / org.gvsig.legend.urbanhorizontalsignage / org.gvsig.legend.urbanhorizontalsignage.swing / org.gvsig.legend.urbanhorizontalsignage.swing.impl / src / main / java / org / gvsig / legend / urbanhorizontalsignage / swing / impl / DefaultUrbanHorizontalSignageLegendEditor.java @ 5130
History | View | Annotate | Download (10.1 KB)
1 |
|
---|---|
2 |
package org.gvsig.legend.urbanhorizontalsignage.swing.impl; |
3 |
|
4 |
import javax.swing.AbstractButton; |
5 |
import javax.swing.ImageIcon; |
6 |
import javax.swing.JLabel; |
7 |
import javax.swing.JPanel; |
8 |
import javax.swing.SpinnerNumberModel; |
9 |
import org.gvsig.app.project.documents.view.legend.gui.Features; |
10 |
import org.gvsig.fmap.dal.DataTypes; |
11 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
12 |
import org.gvsig.fmap.dal.feature.FeatureType; |
13 |
import org.gvsig.fmap.dal.swing.DALSwingLocator; |
14 |
import org.gvsig.fmap.dal.swing.DataSwingManager; |
15 |
import org.gvsig.fmap.dal.swing.featuretype.AttributeDescriptorPickerController; |
16 |
import org.gvsig.fmap.geom.Geometry; |
17 |
import org.gvsig.fmap.geom.GeometryUtils; |
18 |
import org.gvsig.fmap.mapcontext.layers.FLayer; |
19 |
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect; |
20 |
import org.gvsig.fmap.mapcontext.rendering.legend.ILegend; |
21 |
import org.gvsig.legend.urbanhorizontalsignage.lib.api.UrbanHorizontalSignageLegend; |
22 |
import static org.gvsig.legend.urbanhorizontalsignage.lib.api.UrbanHorizontalSignageLegend.DEFAULT_GAP_WIDTH_VALUE; |
23 |
import org.gvsig.legend.urbanhorizontalsignage.lib.api.UrbanHorizontalSignageLocator; |
24 |
import org.gvsig.legend.urbanhorizontalsignage.swing.api.UrbanHorizontalSignageLegendEditor; |
25 |
import org.gvsig.tools.ToolsLocator; |
26 |
import org.gvsig.tools.i18n.I18nManager; |
27 |
import org.gvsig.tools.swing.api.ToolsSwingLocator; |
28 |
import org.gvsig.tools.swing.api.ToolsSwingManager; |
29 |
import org.gvsig.tools.swing.icontheme.IconTheme; |
30 |
import org.slf4j.Logger; |
31 |
import org.slf4j.LoggerFactory; |
32 |
|
33 |
|
34 |
public class DefaultUrbanHorizontalSignageLegendEditor extends DefaultUrbanHorizontalSignageLegendEditorView implements UrbanHorizontalSignageLegendEditor { |
35 |
|
36 |
private static final long serialVersionUID = 4307714097793669675L; |
37 |
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultUrbanHorizontalSignageLegendEditor.class); |
38 |
|
39 |
private UrbanHorizontalSignageLegend legend;
|
40 |
private FLayer layer;
|
41 |
private final Class<? extends UrbanHorizontalSignageLegend> legendClass; |
42 |
private AttributeDescriptorPickerController widthFieldController;
|
43 |
private AttributeDescriptorPickerController continuityFieldController;
|
44 |
private AttributeDescriptorPickerController segmentsColorFieldController;
|
45 |
private AttributeDescriptorPickerController paintHolesFieldController;
|
46 |
private AttributeDescriptorPickerController holesColorFieldController;
|
47 |
private AttributeDescriptorPickerController segmentsLengthFieldController;
|
48 |
private AttributeDescriptorPickerController holesLengthFieldController;
|
49 |
private AttributeDescriptorPickerController roundVertexFieldController;
|
50 |
|
51 |
public DefaultUrbanHorizontalSignageLegendEditor() {
|
52 |
this.legendClass = UrbanHorizontalSignageLocator.getUrbanHorizontalSignageManager().getLegendClass();
|
53 |
initComponents(); |
54 |
} |
55 |
|
56 |
private void initComponents(){ |
57 |
ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager(); |
58 |
|
59 |
DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager(); |
60 |
widthFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboWidthFields, (t) -> { |
61 |
return t.getDataType().isNumeric();
|
62 |
}); |
63 |
continuityFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboContinuityFields, (t) -> { |
64 |
return t.getDataType().isNumeric();
|
65 |
}); |
66 |
segmentsColorFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboSegmentsColorFields, (t) -> { |
67 |
return t.getDataType().isNumeric() || t.getType() == DataTypes.STRING;
|
68 |
}); |
69 |
segmentsLengthFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboSegmentsLengthFields, (t) -> { |
70 |
return t.getDataType().isNumeric();
|
71 |
}); |
72 |
paintHolesFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboPaintHolesFields, (t) -> { |
73 |
return t.getType() != DataTypes.GEOMETRY;
|
74 |
}); |
75 |
holesColorFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboHolesColorFields, (t) -> { |
76 |
return t.getDataType().isNumeric() || t.getType() == DataTypes.STRING;
|
77 |
}); |
78 |
holesLengthFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboHolesLengthFields, (t) -> { |
79 |
return t.getDataType().isNumeric();
|
80 |
}); |
81 |
roundVertexFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboRoundVertexFields, (t) -> { |
82 |
return t.getType() != DataTypes.GEOMETRY;
|
83 |
}); |
84 |
|
85 |
SpinnerNumberModel spnModel = new SpinnerNumberModel((int)DEFAULT_GAP_WIDTH_VALUE, 0, Integer.MAX_VALUE, 1); |
86 |
spnGapWith.setModel(spnModel); |
87 |
|
88 |
translateAll(); |
89 |
} |
90 |
|
91 |
private void translateAll() { |
92 |
this.translate(this.lblWidthField); |
93 |
this.translate(this.lblContinuityField); |
94 |
this.translate(this.lblSegmentsColorField); |
95 |
this.translate(this.lblSegmentsLengthField); |
96 |
this.translate(this.lblHolesColorField); |
97 |
this.translate(this.lblPaintHolesField); |
98 |
this.translate(this.lblHolesLengthField); |
99 |
this.translate(this.lblRoundVertexField); |
100 |
this.translate(this.lblGapWidth); |
101 |
} |
102 |
|
103 |
private void translate(AbstractButton component) { |
104 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
105 |
component.setText(i18n.getTranslation(component.getText())); |
106 |
} |
107 |
|
108 |
private void translate(JLabel component) { |
109 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
110 |
component.setText(i18n.getTranslation(component.getText())); |
111 |
} |
112 |
|
113 |
@Override
|
114 |
public void setData(FLayer layer, ILegend legend) { |
115 |
if( layer == this.layer && legend == this.legend ) { |
116 |
return;
|
117 |
} |
118 |
this.layer = layer;
|
119 |
if( this.getLegendClass().isInstance(legend) ) { |
120 |
this.legend = (UrbanHorizontalSignageLegend) legend;
|
121 |
} else {
|
122 |
this.legend = UrbanHorizontalSignageLocator.getUrbanHorizontalSignageManager().create();
|
123 |
} |
124 |
|
125 |
if( layer instanceof FLyrVect ) { |
126 |
FeatureStore store = ((FLyrVect) layer).getFeatureStore(); |
127 |
if( store != null ) { |
128 |
try {
|
129 |
FeatureType ftype = store.getDefaultFeatureType(); |
130 |
this.widthFieldController.setFeatureType(ftype);
|
131 |
this.continuityFieldController.setFeatureType(ftype);
|
132 |
this.segmentsColorFieldController.setFeatureType(ftype);
|
133 |
this.segmentsLengthFieldController.setFeatureType(ftype);
|
134 |
this.paintHolesFieldController.setFeatureType(ftype);
|
135 |
this.holesColorFieldController.setFeatureType(ftype);
|
136 |
this.holesLengthFieldController.setFeatureType(ftype);
|
137 |
this.roundVertexFieldController.setFeatureType(ftype);
|
138 |
|
139 |
|
140 |
this.widthFieldController.set(this.legend.getWidthFieldName()); |
141 |
this.continuityFieldController.set(this.legend.getContinuityFieldName()); |
142 |
this.segmentsColorFieldController.set(this.legend.getSegmentsColorFieldName()); |
143 |
this.segmentsLengthFieldController.set(this.legend.getSegmentsLengthFieldName()); |
144 |
this.paintHolesFieldController.set(this.legend.getPaintHolesFieldName()); |
145 |
this.holesColorFieldController.set(this.legend.getHolesColorFieldName()); |
146 |
this.holesLengthFieldController.set(this.legend.getHolesLengthFieldName()); |
147 |
this.roundVertexFieldController.set(this.legend.getRoundVertexFieldName()); |
148 |
|
149 |
this.spnGapWith.getModel().setValue(this.legend.getGapWidth()); |
150 |
|
151 |
} catch (Exception ex) { |
152 |
LOGGER.warn("Can't fill data of legend.", ex);
|
153 |
//FIXME: ?hacemos algo m?s con la excepci?n?
|
154 |
|
155 |
} |
156 |
} |
157 |
} |
158 |
} |
159 |
|
160 |
@Override
|
161 |
public ILegend getLegend() {
|
162 |
this.legend.setWidthFieldName((String) this.widthFieldController.getName()); |
163 |
this.legend.setContinuityFieldName(this.continuityFieldController.getName()); |
164 |
this.legend.setSegmentsColorFieldName(this.segmentsColorFieldController.getName()); |
165 |
this.legend.setSegmentsLengthFieldName(this.segmentsLengthFieldController.getName()); |
166 |
this.legend.setPaintHolesFieldName(this.paintHolesFieldController.getName()); |
167 |
this.legend.setHolesColorFieldName(this.holesColorFieldController.getName()); |
168 |
this.legend.setHolesLengthFieldName(this.holesLengthFieldController.getName()); |
169 |
this.legend.setRoundVertexFieldName(this.roundVertexFieldController.getName()); |
170 |
|
171 |
this.legend.setGapWith((int) spnGapWith.getValue()); |
172 |
|
173 |
return legend;
|
174 |
} |
175 |
|
176 |
@Override
|
177 |
public String getDescription() { |
178 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
179 |
return i18n.getTranslation( "_Urban_horizontal_signage_legend_description"); |
180 |
} |
181 |
|
182 |
@Override
|
183 |
public ImageIcon getIcon() { |
184 |
IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent(); |
185 |
return theme.get("legend-overview-vectorial-urbanhorizontalsignage"); |
186 |
} |
187 |
|
188 |
@Override
|
189 |
public Class getParentClass() { |
190 |
return Features.class;
|
191 |
} |
192 |
|
193 |
@Override
|
194 |
public String getTitle() { |
195 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
196 |
return i18n.getTranslation( "_Urban_horizontal_signage_legend"); |
197 |
} |
198 |
|
199 |
@Override
|
200 |
public JPanel getPanel() { |
201 |
return this; |
202 |
} |
203 |
|
204 |
@Override
|
205 |
public Class getLegendClass() { |
206 |
return this.legendClass; |
207 |
} |
208 |
|
209 |
@Override
|
210 |
public boolean isSuitableFor(FLayer layer) { |
211 |
if(layer instanceof FLyrVect){ |
212 |
try {
|
213 |
int shapeType = ((FLyrVect)layer).getShapeType();
|
214 |
return (GeometryUtils.isSubtype(Geometry.TYPES.CURVE, shapeType) ||
|
215 |
GeometryUtils.isSubtype(Geometry.TYPES.MULTICURVE, shapeType)); |
216 |
} catch (Exception ex) { |
217 |
LOGGER.debug("Can't get shape type for layer "+layer.getName(), ex);
|
218 |
return false; |
219 |
} |
220 |
} |
221 |
return false; |
222 |
} |
223 |
|
224 |
} |