Statistics
| Revision:

root / org.gvsig.legend.urbanhorizontalsignage / trunk / org.gvsig.legend.urbanhorizontalsignage.swing / org.gvsig.legend.urbanhorizontalsignage.swing.impl / src / main / java / org / gvsig / legend / urbanhorizontalsignage / swing / impl / DefaultUrbanHorizontalSignageLegendEditor.java @ 5087

History | View | Annotate | Download (9.49 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.mapcontext.layers.FLayer;
17
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
18
import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
19
import org.gvsig.legend.urbanhorizontalsignage.lib.api.UrbanHorizontalSignageLegend;
20
import static org.gvsig.legend.urbanhorizontalsignage.lib.api.UrbanHorizontalSignageLegend.DEFAULT_GAP_WIDTH_VALUE;
21
import org.gvsig.legend.urbanhorizontalsignage.lib.api.UrbanHorizontalSignageLocator;
22
import org.gvsig.legend.urbanhorizontalsignage.swing.api.UrbanHorizontalSignageLegendEditor;
23
import org.gvsig.tools.ToolsLocator;
24
import org.gvsig.tools.i18n.I18nManager;
25
import org.gvsig.tools.swing.api.ToolsSwingLocator;
26
import org.gvsig.tools.swing.api.ToolsSwingManager;
27
import org.gvsig.tools.swing.icontheme.IconTheme;
28
import org.slf4j.Logger;
29
import org.slf4j.LoggerFactory;
30

    
31

    
32
public class DefaultUrbanHorizontalSignageLegendEditor extends DefaultUrbanHorizontalSignageLegendEditorView implements UrbanHorizontalSignageLegendEditor {
33

    
34
    private static final long serialVersionUID = 4307714097793669675L;
35
    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultUrbanHorizontalSignageLegendEditor.class);
36

    
37
    private UrbanHorizontalSignageLegend legend;
38
    private FLayer layer;
39
    private final Class<? extends UrbanHorizontalSignageLegend> legendClass;
40
    private AttributeDescriptorPickerController widthFieldController;
41
    private AttributeDescriptorPickerController continuityFieldController;
42
    private AttributeDescriptorPickerController segmentsColorFieldController;
43
    private AttributeDescriptorPickerController paintHolesFieldController;
44
    private AttributeDescriptorPickerController holesColorFieldController;
45
    private AttributeDescriptorPickerController segmentsLengthFieldController;
46
    private AttributeDescriptorPickerController holesLengthFieldController;
47
    private AttributeDescriptorPickerController roundVertexFieldController;
48

    
49
    public DefaultUrbanHorizontalSignageLegendEditor() {
50
        this.legendClass = UrbanHorizontalSignageLocator.getUrbanHorizontalSignageManager().getLegendClass();
51
        initComponents();
52
    }
53

    
54
    private void initComponents(){
55
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
56
        
57
        DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager();
58
        widthFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboWidthFields, (t) -> {
59
            return t.getDataType().isNumeric();
60
        });
61
        continuityFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboContinuityFields, (t) -> {
62
            return t.getDataType().isNumeric();
63
        });
64
        segmentsColorFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboSegmentsColorFields, (t) -> {
65
            return t.getDataType().isNumeric() || t.getType() == DataTypes.STRING;
66
        });
67
        segmentsLengthFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboSegmentsLengthFields, (t) -> {
68
            return t.getDataType().isNumeric();
69
        });
70
        paintHolesFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboPaintHolesFields, (t) -> {
71
            return t.getType() != DataTypes.GEOMETRY;
72
        });
73
        holesColorFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboHolesColorFields, (t) -> {
74
            return t.getDataType().isNumeric() || t.getType() == DataTypes.STRING;
75
        });
76
        holesLengthFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboHolesLengthFields, (t) -> {
77
            return t.getDataType().isNumeric();
78
        });
79
        roundVertexFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboRoundVertexFields, (t) -> {
80
            return t.getType() != DataTypes.GEOMETRY;
81
        });
82
        
83
        SpinnerNumberModel spnModel = new SpinnerNumberModel((int)DEFAULT_GAP_WIDTH_VALUE, 0, Integer.MAX_VALUE, 1);
84
        spnGapWith.setModel(spnModel);
85
        
86
        translateAll();
87
    }
88

    
89
    private void translateAll() {
90
        this.translate(this.lblWidthField);
91
        this.translate(this.lblContinuityField);
92
        this.translate(this.lblSegmentsColorField);
93
        this.translate(this.lblSegmentsLengthField);
94
        this.translate(this.lblHolesColorField);
95
        this.translate(this.lblPaintHolesField);
96
        this.translate(this.lblHolesLengthField);
97
        this.translate(this.lblRoundVertexField);
98
    }
99

    
100
    private void translate(AbstractButton component) {
101
        I18nManager i18n = ToolsLocator.getI18nManager();
102
        component.setText(i18n.getTranslation(component.getText()));
103
    }
104

    
105
    private void translate(JLabel component) {
106
        I18nManager i18n = ToolsLocator.getI18nManager();
107
        component.setText(i18n.getTranslation(component.getText()));
108
    }
109

    
110
    @Override
111
    public void setData(FLayer layer, ILegend legend) {
112
        if( layer == this.layer && legend == this.legend ) {
113
            return;
114
        }
115
        this.layer = layer;
116
        if( this.getLegendClass().isInstance(legend) ) {
117
            this.legend = (UrbanHorizontalSignageLegend) legend;
118
        } else {
119
            this.legend = UrbanHorizontalSignageLocator.getUrbanHorizontalSignageManager().create();
120
        }
121
               
122
        if( layer instanceof FLyrVect ) {
123
            FeatureStore store = ((FLyrVect) layer).getFeatureStore();
124
            if( store != null ) {
125
                try {
126
                    FeatureType ftype = store.getDefaultFeatureType();
127
                    this.widthFieldController.setFeatureType(ftype);
128
                    this.continuityFieldController.setFeatureType(ftype);
129
                    this.segmentsColorFieldController.setFeatureType(ftype);
130
                    this.segmentsLengthFieldController.setFeatureType(ftype);
131
                    this.paintHolesFieldController.setFeatureType(ftype);
132
                    this.holesColorFieldController.setFeatureType(ftype);
133
                    this.holesLengthFieldController.setFeatureType(ftype);
134
                    this.roundVertexFieldController.setFeatureType(ftype);
135
                    
136
                    
137
                    this.widthFieldController.set(this.legend.getWidthFieldName());
138
                    this.continuityFieldController.set(this.legend.getContinuityFieldName());
139
                    this.segmentsColorFieldController.set(this.legend.getSegmentsColorFieldName());
140
                    this.segmentsLengthFieldController.set(this.legend.getSegmentsLengthFieldName());
141
                    this.paintHolesFieldController.set(this.legend.getPaintHolesFieldName());
142
                    this.holesColorFieldController.set(this.legend.getHolesColorFieldName());
143
                    this.holesLengthFieldController.set(this.legend.getHolesLengthFieldName());
144
                    this.roundVertexFieldController.set(this.legend.getRoundVertexFieldName());
145

    
146
                    this.spnGapWith.getModel().setValue(this.legend.getGapWidth());
147

    
148
                } catch (Exception ex) {
149
                    LOGGER.warn("Can't fill data of legend.", ex);
150
                    //FIXME: ?hacemos algo m?s con la excepci?n?
151

    
152
                }
153
            }
154
        }
155
    }
156

    
157
    @Override
158
    public ILegend getLegend() {
159
        this.legend.setWidthFieldName((String) this.widthFieldController.getName());
160
        this.legend.setContinuityFieldName(this.continuityFieldController.getName());
161
        this.legend.setSegmentsColorFieldName(this.segmentsColorFieldController.getName());
162
        this.legend.setSegmentsLengthFieldName(this.segmentsLengthFieldController.getName());
163
        this.legend.setPaintHolesFieldName(this.paintHolesFieldController.getName());
164
        this.legend.setHolesColorFieldName(this.holesColorFieldController.getName());
165
        this.legend.setHolesLengthFieldName(this.holesLengthFieldController.getName());
166
        this.legend.setRoundVertexFieldName(this.roundVertexFieldController.getName());
167
        
168
        this.legend.setGapWith((int) spnGapWith.getValue());
169

    
170
        return legend;
171
    }
172

    
173
    @Override
174
    public String getDescription() {
175
        I18nManager i18n = ToolsLocator.getI18nManager();
176
        return i18n.getTranslation( "_Urban_horizontal_signage_legend_description");
177
    }
178

    
179
    @Override
180
    public ImageIcon getIcon() {
181
        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
182
        return theme.get("legend-overview-vectorial-urbanhorizontalsignage");
183
    }
184

    
185
    @Override
186
        public Class getParentClass() {
187
                return Features.class;
188
        }
189

    
190
    @Override
191
    public String getTitle() {
192
        I18nManager i18n = ToolsLocator.getI18nManager();
193
        return i18n.getTranslation( "_Urban_horizontal_signage_legend");
194
    }
195

    
196
    @Override
197
    public JPanel getPanel() {
198
        return this;
199
    }
200

    
201
    @Override
202
    public Class getLegendClass() {
203
        return this.legendClass;
204
    }
205

    
206
    @Override
207
    public boolean isSuitableFor(FLayer layer) {
208
        return true;
209
    }
210

    
211
}