Statistics
| Revision:

root / org.gvsig.legend.heatmap / trunk / org.gvsig.legend.heatmap / org.gvsig.legend.heatmap.swing / org.gvsig.legend.heatmap.swing.impl / src / main / java / org / gvsig / legend / heatmap / swing / impl / DefaultHeatmapLegendEditor.java @ 1847

History | View | Annotate | Download (8.59 KB)

1

    
2
package org.gvsig.legend.heatmap.swing.impl;
3

    
4
import java.awt.Color;
5
import javax.swing.ImageIcon;
6
import javax.swing.JFormattedTextField;
7
import javax.swing.JPanel;
8
import javax.swing.event.ChangeEvent;
9
import javax.swing.event.ChangeListener;
10
import org.apache.commons.lang3.StringUtils;
11
import org.gvsig.app.gui.styling.ColorSchemeSelector;
12
import org.gvsig.app.project.documents.view.legend.gui.Features;
13
import org.gvsig.fmap.dal.exception.DataException;
14
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
15
import org.gvsig.fmap.dal.feature.FeatureStore;
16
import org.gvsig.fmap.dal.feature.FeatureType;
17
import org.gvsig.fmap.mapcontext.layers.FLayer;
18
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
19
import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
20
import org.gvsig.legend.heatmap.lib.api.HeatmapLegend;
21
import org.gvsig.legend.heatmap.lib.api.HeatmapLegendLocator;
22
import org.gvsig.legend.heatmap.swing.api.HeatmapLegendEditor;
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.api.ColorChooserController;
28
import org.gvsig.tools.swing.icontheme.IconTheme;
29

    
30

    
31
public class DefaultHeatmapLegendEditor extends DefaultHeatmapLegendEditorView implements HeatmapLegendEditor {
32

    
33
    private static final long serialVersionUID = 4307714097793669675L;
34

    
35
    private HeatmapLegend legend;
36
    private FLayer layer;
37
    private final Class<? extends HeatmapLegend> legendClass;
38
    private ColorChooserController hotColorChooser;
39
    private ColorChooserController coldColorChooser;
40
    private ColorSchemeSelector colorSchemaSelector;
41

    
42
    public DefaultHeatmapLegendEditor() {
43
        this.legendClass = HeatmapLegendLocator.getHeatmapLegendManager().getLegendClass();
44
    }
45

    
46
    @Override
47
    public void setData(FLayer layer, ILegend legend) {
48
        if( layer == this.layer && legend == this.legend ) {
49
            return;
50
        }
51
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
52
        this.layer = layer;
53
        if( this.getLegendClass().isInstance(legend) ) {
54
            this.legend = (HeatmapLegend) legend;
55
        } else {
56
            this.legend = HeatmapLegendLocator.getHeatmapLegendManager().create();
57
        }
58
        this.hotColorChooser = toolsSwingManager.createColorChooserController(txtHotColorLabel, btnHotColor, sldHotColorAlpha);
59
        this.coldColorChooser = toolsSwingManager.createColorChooserController(txtColdColorLabel, btnColdColor, sldColdColorAlpha);
60
        this.colorSchemaSelector = new ColorSchemeSelector(cboColorTable, false);
61
        this.rdbUseColorRamp.addChangeListener(new ChangeListener() {
62
            @Override
63
            public void stateChanged(ChangeEvent e) {
64
                useColorModeChanged();
65
            }
66
        });
67
        this.chkUseField.addChangeListener(new ChangeListener() {
68
            @Override
69
            public void stateChanged(ChangeEvent e) {
70
                useFieldChanged();
71
            }
72
        });
73
        this.chkColorTableUseAlpha.addChangeListener(new ChangeListener() {
74
            @Override
75
            public void stateChanged(ChangeEvent e) {
76
                useAlphaInColorTableChanged();
77
            }
78
        });
79

    
80
        this.spnDistance.setValue(this.legend.getDistance());
81
        if( this.legend.useRamp() ) {
82
            this.rdbUseColorRamp.setSelected(true);
83
        } else {
84
            this.rdbUseColorTable.setSelected(true);
85
        }
86
        if( this.legend.useAlphaInColorTable() ) {
87
            this.chkColorTableUseAlpha.setSelected(true);
88
        } else {
89
            this.chkColorTableUseAlpha.setSelected(false);
90
        }
91
        this.sldColorTableColdAlpha.setValue(this.legend.getColorTableColdColorAlpha());
92
        this.sldColorTableHotAlpha.setValue(this.legend.getColorTableHotColorAlpha());
93

    
94
        this.chkUseField.setEnabled(false);
95
        this.chkUseField.setSelected(false);
96
        this.cboFields.setEnabled(false);
97
        this.cboFields.removeAllItems();
98
        if( layer instanceof FLyrVect ) {
99
            FeatureStore store = ((FLyrVect) layer).getFeatureStore();
100
            if( store != null ) {
101
                try {
102
                    FeatureType ftype = store.getDefaultFeatureType();
103
                    for( FeatureAttributeDescriptor attr : ftype ) {
104
                        this.cboFields.addItem(attr.getName());
105
                    }
106
                    if( this.cboFields.getItemCount()>0 ) {
107
                        this.chkUseField.setEnabled(true);
108
                        if( !StringUtils.isEmpty(this.legend.getFieldName()) ) {
109
                            this.chkUseField.setSelected(true);
110
                            this.cboFields.setSelectedItem(this.legend.getFieldName());
111
                            this.cboFields.setEnabled(true);
112
                        }
113
                    }
114
                } catch (Exception ex) {
115

    
116
                }
117
            }
118
        }
119
    }
120

    
121
    private void useColorModeChanged() {
122
        if( this.rdbUseColorRamp.isSelected() ) {
123
            this.hotColorChooser.setEnabled(true);
124
            this.coldColorChooser.setEnabled(true);
125
            this.spnNumberOfColors.setEnabled(true);
126
            this.cboColorTable.setEnabled(false);
127
            this.chkColorTableUseAlpha.setEnabled(false);
128
            this.sldColorTableColdAlpha.setEnabled(false);
129
            this.sldColorTableHotAlpha.setEnabled(false);
130
            Color[] table = this.legend.getSourceColorTable();
131
            this.spnNumberOfColors.setValue(table.length);
132
            this.coldColorChooser.set(table[0]);
133
            this.hotColorChooser.set(table[table.length-1]);
134
        } else {
135
            this.hotColorChooser.setEnabled(false);
136
            this.coldColorChooser.setEnabled(false);
137
            this.spnNumberOfColors.setEnabled(false);
138
            this.cboColorTable.setEnabled(true);
139
            this.chkColorTableUseAlpha.setEnabled(true);
140
            this.sldColorTableColdAlpha.setEnabled(true);
141
            this.sldColorTableHotAlpha.setEnabled(true);
142
            this.colorSchemaSelector.setSelectedColors(this.legend.getSourceColorTable());
143
        }
144
    }
145

    
146
    private void useFieldChanged() {
147
        this.cboFields.setEnabled(this.chkUseField.isSelected());
148
    }
149

    
150
    private void useAlphaInColorTableChanged() {
151
        boolean x = this.chkColorTableUseAlpha.isSelected();
152
        this.sldColorTableColdAlpha.setEnabled(x);
153
        this.sldColorTableHotAlpha.setEnabled(x);
154
    }
155

    
156
    @Override
157
    public ILegend getLegend() {
158
        legend.setDistance((int) spnDistance.getValue());
159
        if( this.rdbUseColorRamp.isSelected() ) {
160
            legend.setColorTable(
161
                (int) spnNumberOfColors.getValue(),
162
                coldColorChooser.get(),
163
                hotColorChooser.get()
164
            );
165
        } else {
166
            legend.setColorTable( this.colorSchemaSelector.getSelectedColors());
167
        }
168
        if( this.chkUseField.isSelected() ) {
169
            String fieldName = (String) this.cboFields.getSelectedItem();
170
            if( fieldName != null ) {
171
                this.legend.setFieldName(fieldName);
172
            }
173
        }
174
        this.legend.setColorTableColdColorAlpha(this.sldColorTableColdAlpha.getValue());
175
        this.legend.setColorTableHotColorAlpha(this.sldColorTableHotAlpha.getValue());
176
        this.legend.setUseAlphaInColorTable(this.chkColorTableUseAlpha.isSelected());
177

    
178
        return legend;
179
    }
180

    
181
    @Override
182
    public String getDescription() {
183
        I18nManager i18n = ToolsLocator.getI18nManager();
184
        return i18n.getTranslation( "_Heatmap_legend_description");
185
    }
186

    
187
    @Override
188
    public ImageIcon getIcon() {
189
        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
190
        return theme.get("legend-overview-vectorial-heatmap");
191
    }
192

    
193
    @Override
194
        public Class getParentClass() {
195
                return Features.class;
196
        }
197

    
198
    @Override
199
    public String getTitle() {
200
        I18nManager i18n = ToolsLocator.getI18nManager();
201
        return i18n.getTranslation( "_Heatmap_legend");
202
    }
203

    
204
    @Override
205
    public JPanel getPanel() {
206
        return this;
207
    }
208

    
209
    @Override
210
    public Class getLegendClass() {
211
        return this.legendClass;
212
    }
213

    
214
    @Override
215
    public boolean isSuitableFor(FLayer layer) {
216
        return true;
217
    }
218

    
219
    private int getIntValue(JFormattedTextField text, int defaultValue) {
220
        String s = text.getText();
221
        if( StringUtils.isEmpty(s) ) {
222
            return defaultValue;
223
        }
224
        int value = defaultValue;
225
        try {
226
            value = Integer.parseInt(s);
227
        } catch(Throwable th) {
228

    
229
        }
230
        return value;
231
    }
232

    
233
}