Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.raster.legend / org.gvsig.raster.legend.swing / org.gvsig.raster.legend.swing.impl / src / main / java / org / gvsig / raster / swing / legend / impl / colortable / editor / ColorTableEditorPanelController.java @ 44831

History | View | Annotate | Download (11.9 KB)

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

    
25
import java.awt.Color;
26
import java.awt.event.ActionEvent;
27
import java.awt.event.ActionListener;
28
import java.awt.event.ItemEvent;
29
import java.awt.event.ItemListener;
30
import java.util.Locale;
31

    
32
import javax.swing.JComponent;
33
import javax.swing.JFormattedTextField;
34
import javax.swing.ListSelectionModel;
35
import javax.swing.event.CellEditorListener;
36
import javax.swing.event.ChangeEvent;
37
import javax.swing.event.ChangeListener;
38
import javax.swing.event.DocumentEvent;
39
import javax.swing.event.DocumentListener;
40
import javax.swing.event.ListSelectionEvent;
41
import javax.swing.event.ListSelectionListener;
42
import javax.swing.event.TableModelEvent;
43
import javax.swing.event.TableModelListener;
44
import javax.swing.table.DefaultTableColumnModel;
45
import javax.swing.table.TableCellEditor;
46
import javax.swing.table.TableColumn;
47
import javax.swing.table.TableColumnModel;
48

    
49
import org.slf4j.Logger;
50
import org.slf4j.LoggerFactory;
51

    
52
import org.gvsig.raster.lib.legend.api.RasterLegendLocator;
53
import org.gvsig.raster.lib.legend.api.colortable.ColorTable;
54
import org.gvsig.raster.lib.legend.api.colortable.colortableclass.ColorTableClass;
55
import org.gvsig.raster.swing.legend.colortable.editor.ColorTableClassesTableModel;
56
import org.gvsig.raster.swing.legend.colortable.editor.ColorTableEditorPanel;
57
import org.gvsig.tools.ToolsLocator;
58
import org.gvsig.tools.i18n.I18nManager;
59
import org.gvsig.tools.swing.api.ToolsSwingLocator;
60
import org.gvsig.tools.swing.icontheme.IconTheme;
61

    
62

    
63
/**
64
 * @author fdiaz
65
 *
66
 */
67
public class ColorTableEditorPanelController extends ColorTableEditorPanelView implements ColorTableEditorPanel {
68

    
69
    /**
70
     *
71
     */
72
    private static final long serialVersionUID = -3073969545920834926L;
73

    
74
    private static final Logger LOG = LoggerFactory.getLogger(ColorTableEditorPanelController.class);
75

    
76
    private ColorTable colorTable;
77
    private boolean isModified;
78

    
79
    private ColorTableClassesTableModel tableModel;
80

    
81

    
82
    /**
83
     *
84
     */
85
    public ColorTableEditorPanelController() {
86
        isModified = false;
87
        translate();
88
        initializeComponents();
89
    }
90

    
91
    /* (non-Javadoc)
92
     * @see org.gvsig.tools.swing.api.Component#asJComponent()
93
     */
94
    @Override
95
    public JComponent asJComponent() {
96
        return this;
97
    }
98

    
99
    private void initializeComponents() {
100
        IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
101
        btnAdd.setIcon(iconTheme.get("add-color-table-class-icon"));
102
        btnRemove.setIcon(iconTheme.get("remove-color-table-class-icon"));
103
        btnRemoveAll.setIcon(iconTheme.get("remove-all-color-table-class-icon"));
104

    
105
        btnAdd.addActionListener(new ActionListener() {
106
            @Override
107
            public void actionPerformed(ActionEvent e) {
108
                doAddColorTableClass();
109
            }
110
        });
111

    
112
        btnRemove.addActionListener(new ActionListener() {
113
            @Override
114
            public void actionPerformed(ActionEvent e) {
115
                doRemoveColorTableClass();
116
            }
117
        });
118

    
119
        btnRemoveAll.addActionListener(new ActionListener() {
120
            @Override
121
            public void actionPerformed(ActionEvent e) {
122
                doRemoveAllColorTableClasses();
123
            }
124
        });
125

    
126
        tblColorTableClasses.setRowSelectionAllowed(true);
127
        tblColorTableClasses.setColumnSelectionAllowed(true);
128
        tblColorTableClasses.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
129
        tblColorTableClasses.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
130
            @Override
131
            public void valueChanged(ListSelectionEvent e) {
132
                updateComponents();
133
            }
134
        });
135

    
136
        chkInterpolated.addItemListener(new ItemListener() {
137

    
138
            @Override
139
            public void itemStateChanged(ItemEvent e) {
140
                if(colorTable!=null){
141
                    colorTable.setInterpolated(chkInterpolated.isSelected());
142
                }
143
                isModified = true;
144
            }
145
        });
146

    
147
        txtName.getDocument().addDocumentListener(new DocumentListener() {
148

    
149
            int countChanges = 0;
150

    
151
            @Override
152
            public void removeUpdate(DocumentEvent e) {
153
                doChangedColorTableName();
154
            }
155
            @Override
156
            public void insertUpdate(DocumentEvent e) {
157
                doChangedColorTableName();
158
            }
159

    
160
            @Override
161
            public void changedUpdate(DocumentEvent e) {
162
                doChangedColorTableName();
163
            }
164
        });
165

    
166
        updateComponents();
167

    
168
    }
169

    
170
    protected void doChangedColorTableName() {
171
        if(this.colorTable!=null){
172
            this.colorTable.setName(txtName.getText());
173
            isModified = true;
174
        }
175

    
176
    }
177

    
178
    protected void doRemoveColorTableClass() {
179
        ((ColorTableClassesTableModel)tblColorTableClasses.getModel()).removeColorTableClass(tblColorTableClasses.getSelectedRow());
180
        isModified = true;
181
    }
182

    
183
    protected void doRemoveAllColorTableClasses() {
184
        ((ColorTableClassesTableModel)tblColorTableClasses.getModel()).removeAllColorTableClasses();
185
        isModified = true;
186
    }
187

    
188
    protected void doAddColorTableClass() {
189
        ColorTableClass newclass = RasterLegendLocator.getRasterLegendManager().createColorTableClass();
190
        ColorTableClassesTableModel colorTableClassesTableModel = (ColorTableClassesTableModel)tblColorTableClasses.getModel();
191
        newclass.setColor(new Color(0, 0, 0, 255));
192
        colorTableClassesTableModel.addColorTableClass(newclass);
193
        isModified = true;
194
    }
195

    
196
    private void translate() {
197
        I18nManager i18nManager = ToolsLocator.getI18nManager();
198

    
199
        btnAdd.setText(i18nManager.getTranslation(btnAdd.getText()));
200
        btnRemove.setText(i18nManager.getTranslation(btnRemove.getText()));
201
        btnRemoveAll.setText(i18nManager.getTranslation(btnRemoveAll.getText()));
202

    
203
        btnAdd.setToolTipText(i18nManager.getTranslation(btnAdd.getToolTipText()));
204
        btnRemove.setToolTipText(i18nManager.getTranslation(btnRemove.getToolTipText()));
205
        btnRemoveAll.setToolTipText(i18nManager.getTranslation(btnRemoveAll.getToolTipText()));
206

    
207
        chkInterpolated.setText(i18nManager.getTranslation(chkInterpolated.getText()));
208
        lblName.setText(i18nManager.getTranslation(lblName.getText()));
209
    }
210

    
211
    /**
212
     * @param locale
213
     *
214
     */
215
    public void setLocate(Locale locale) {
216
        Locale l = super.getLocale();
217
        if (!l.equals(locale)) {
218
            translate();
219
        }
220
        super.setLocale(locale);
221
    }
222

    
223

    
224
    /* (non-Javadoc)
225
     * @see org.gvsig.raster.tools.swing.api.colortable.ColorTableSelector#fetch(org.gvsig.raster.lib.legend.api.ColorTable)
226
     */
227
    @Override
228
    public ColorTableClass getSelected() {
229
        int row = tblColorTableClasses.getSelectedRow();
230
        return (ColorTableClass)((ColorTableClassesTableModel)tblColorTableClasses.getModel()).getColorTableClass(row);
231
    }
232

    
233
    /* (non-Javadoc)
234
     * @see org.gvsig.raster.tools.swing.api.colortable.ColorTableSelector#set(java.util.List)
235
     */
236
    @Override
237
    public void set(ColorTable colorTable) {
238
        this.colorTable = null;
239
        isModified = false;
240
        if(colorTable!=null){
241
            this.colorTable = colorTable;
242
        }
243
        this.init();
244
        updateComponents();
245
    }
246

    
247
    private void init() {
248

    
249
        if(this.colorTable!=null){
250
            txtName.setText(this.colorTable.getName());
251
            chkInterpolated.setSelected(this.colorTable.isInterpolated());
252
        } else {
253
            txtName.setText("");
254
            chkInterpolated.setSelected(false);
255
        }
256
        if(tableModel == null){
257
            tableModel = new DefaultColorTableClassesTableModel(this.colorTable);
258
            tableModel.addTableModelListener(new TableModelListener() {
259

    
260
                @Override
261
                public void tableChanged(TableModelEvent e) {
262
                    isModified = true;
263
                }
264
            });
265
        } else {
266
            tableModel.setColorTable(colorTable);
267
        }
268
        tblColorTableClasses.setModel(tableModel);
269
        tblColorTableClasses.setRowHeight((int)(new JFormattedTextField()).getPreferredSize().getHeight());
270

    
271
        tblColorTableClasses.setColumnModel(new DefaultTableColumnModel());
272
        TableColumnModel columnModel = tblColorTableClasses.getColumnModel();
273
        columnModel.setColumnSelectionAllowed(false);
274
        for (int i = 0; i < tableModel.getColumnCount(); i++) {
275
            TableColumn tableColumn = new TableColumn(i);
276
            tableColumn.setIdentifier(tableModel.getColumnName(i));
277
            tableColumn.setHeaderValue(tableModel.getColumnName(i));
278
            if(i==DefaultColorTableClassesTableModel.COLUMN_COLOR){
279
                tableColumn.setCellRenderer(new PreviewerColorTableClassCellRenderer());
280
                TableCellEditor editor = new ColorChooserEditor();
281
                tableColumn.setCellEditor(editor);
282
                editor.addCellEditorListener(new CellEditorListener() {
283

    
284
                    @Override
285
                    public void editingStopped(ChangeEvent e) {
286
                        isModified=true;
287
                    }
288
                    @Override
289
                    public void editingCanceled(ChangeEvent e) {
290
                        //Do nothing
291
                    }
292
                });
293
            } else if (i == DefaultColorTableClassesTableModel.COLUMN_VALUE) {
294
                tableColumn.setCellRenderer(new PerhapsNotValidValueCellRenderer());
295
            }
296

    
297
            columnModel.addColumn(tableColumn);
298
        }
299

    
300

    
301
    }
302

    
303
    private void updateComponents() {
304
        boolean selected = tblColorTableClasses.getSelectedRowCount() >= 1;
305
        btnRemove.setEnabled(selected);
306
        if(this.colorTable==null){
307
            btnRemoveAll.setEnabled(false);
308
            btnAdd.setEnabled(false);
309
            chkInterpolated.setEnabled(false);
310
            lblName.setEnabled(false);
311
            txtName.setEnabled(false);
312
        } else {
313
            btnRemoveAll.setEnabled(this.colorTable.getClasses().size()>0);
314
            btnAdd.setEnabled(true);
315
            chkInterpolated.setEnabled(true);
316
            lblName.setEnabled(true);
317
            txtName.setEnabled(true);
318
        }
319
    }
320

    
321
    @Override
322
    public ColorTable getColorTable() {
323
        if(this.colorTable==null){
324
            return null;
325
        }
326
        this.colorTable.setInterpolated(chkInterpolated.isSelected());
327
        this.colorTable.setName(txtName.getText());
328
        return this.colorTable;
329
    }
330

    
331
    @Override
332
    public boolean isModified() {
333
        return this.isModified;
334
    }
335

    
336
    public void addTableModelListener(TableModelListener listener) {
337
        ((ColorTableClassesTableModel)tblColorTableClasses.getModel()).addTableModelListener(listener);
338
    }
339

    
340
    public void removeTableModelListener(TableModelListener listener) {
341
        if(tableModel != null){
342
            tableModel.removeTableModelListener(listener);
343
        }
344
    }
345

    
346
    @Override
347
    public void addChkInterpolatedItemListener(ItemListener listener) {
348
        chkInterpolated.addItemListener(listener);
349
    }
350

    
351
}