Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / roi / ui / listener / ROIsTablePanelListener.java @ 25985

History | View | Annotate | Download (9.25 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2007 Instituto de Desarrollo Regional and Generalitat Valenciana.
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., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 * For more information, contact:
20
 *
21
 *  Generalitat Valenciana
22
 *   Conselleria d'Infraestructures i Transport
23
 *   Av. Blasco Ib??ez, 50
24
 *   46010 VALENCIA
25
 *   SPAIN
26
 *
27
 *      +34 963862235
28
 *   gvsig@gva.es
29
 *      www.gvsig.gva.es
30
 *
31
 *    or
32
 *
33
 *   Instituto de Desarrollo Regional (Universidad de Castilla La-Mancha)
34
 *   Campus Universitario s/n
35
 *   02071 Alabacete
36
 *   Spain
37
 *
38
 *   +34 967 599 200
39
 */
40

    
41
package org.gvsig.rastertools.roi.ui.listener;
42

    
43
import java.awt.Color;
44
import java.awt.event.ActionEvent;
45
import java.awt.event.ActionListener;
46
import java.io.File;
47
import java.util.ArrayList;
48

    
49
import javax.swing.JFileChooser;
50
import javax.swing.event.ListSelectionEvent;
51
import javax.swing.event.ListSelectionListener;
52
import javax.swing.event.TableModelEvent;
53
import javax.swing.event.TableModelListener;
54
import javax.swing.filechooser.FileFilter;
55
import javax.swing.table.DefaultTableModel;
56

    
57
import org.gvsig.fmap.raster.grid.roi.VectorialROI;
58
import org.gvsig.fmap.raster.grid.roi.VectorialROIsReader;
59
import org.gvsig.fmap.raster.grid.roi.VectorialROIsWriter;
60
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent;
61
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
62
import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
63
import org.gvsig.gui.beans.table.models.IModel;
64
import org.gvsig.raster.dataset.FileNotExistsException;
65
import org.gvsig.raster.grid.GridException;
66
import org.gvsig.raster.grid.roi.ROI;
67
import org.gvsig.rastertools.roi.ui.ROIsTablePanel;
68

    
69
import com.hardcode.gdbms.driver.exceptions.ReadDriverException;
70
import com.iver.cit.gvsig.exceptions.layers.LoadLayerException;
71
import com.iver.cit.gvsig.fmap.core.SymbologyFactory;
72
import com.iver.cit.gvsig.fmap.core.symbols.ISymbol;
73
import com.iver.cit.gvsig.fmap.layers.GraphicLayer;
74
import com.iver.cit.gvsig.fmap.rendering.FGraphic;
75

    
76
/**
77
 * Listener para el panel ROIsTablPanel
78
 * 
79
 * @author Diego Guerrero Sevilla (diego.guerrero@uclm.es)
80
 *
81
 */
82
public class ROIsTablePanelListener implements ButtonsPanelListener, ActionListener, ListSelectionListener, TableModelListener{
83
        
84
        private ROIsTablePanel tablePanel = null;
85
        private String                    roiSelectedName = "";
86

    
87
        public ROIsTablePanelListener(ROIsTablePanel tablePanel) {
88
                this.tablePanel = tablePanel;
89
        }
90

    
91
        public void actionButtonPressed(ButtonsPanelEvent e) {
92
        }
93

    
94
        public void actionPerformed(ActionEvent e) {
95
                if (e.getSource() == tablePanel.getNewButton()){
96
                        String roiName;
97
                        try {
98
                                roiName = "ROI" + String.valueOf(tablePanel.getTable().getRowCount());
99
                                Object row [] = ((IModel)tablePanel.getTable().getModel()).getNewLine();
100
                                row[0]= roiName;
101
                                ((DefaultTableModel)tablePanel.getTable().getModel()).addRow(row);
102
                                if (tablePanel.getGrid()!=null){
103
                                        
104
                                        //ROI roi = new VectorialROI(tablePanel.getGrid(),tablePanel.getView());
105
                                        ROI roi = new VectorialROI(tablePanel.getGrid());
106
                                        roi.setName(roiName);
107
                                        roi.setColor((Color)row[4]);
108
                                        tablePanel.addROI(roi);
109
                                }
110
                                tablePanel.getTable().setSelectedIndex(tablePanel.getTable().getRowCount()-1);
111
                                tablePanel.selectDrawRoiTool();
112
                                tablePanel.setToolsEnabled(true);
113
                        } catch (NotInitializeException e1) {
114
                                // TODO Auto-generated catch block
115
                                e1.printStackTrace();
116
                        }
117
                }else if (e.getSource() == tablePanel.getDeleteButton()){
118
                        try {
119
                                if (tablePanel.getTable().getSelectedRows().length>0){
120
                                        String className = (String)tablePanel.getTable().getModel().getValueAt(tablePanel.getTable().getSelectedRow(),0);
121
                                        tablePanel.removeROI(className);
122
                                        ((DefaultTableModel)tablePanel.getTable().getModel()).removeRow(tablePanel.getTable().getSelectedRow());
123
                                }
124
                        } catch (NotInitializeException e1) {
125
                                // TODO Auto-generated catch block
126
                                e1.printStackTrace();
127
                        }
128
                }else if (e.getSource() == tablePanel.getPointToolButton()){
129
                        tablePanel.getPointToolButton().setSelected(true);
130
                        tablePanel.getLineToolButton().setSelected(false);
131
                        tablePanel.getPolygonToolButton().setSelected(false);
132
                        tablePanel.selectDrawRoiTool();
133
                }else if (e.getSource() == tablePanel.getLineToolButton()){
134
                        tablePanel.getLineToolButton().setSelected(true);
135
                        tablePanel.getPointToolButton().setSelected(false);
136
                        tablePanel.getPolygonToolButton().setSelected(false);
137
                        tablePanel.selectDrawRoiTool();
138
                }else if (e.getSource() == tablePanel.getPolygonToolButton()){
139
                        tablePanel.getPolygonToolButton().setSelected(true);
140
                        tablePanel.getLineToolButton().setSelected(false);
141
                        tablePanel.getPointToolButton().setSelected(false);
142
                        tablePanel.selectDrawRoiTool();
143
                }
144
                else if (e.getSource() == tablePanel.getExportButton()){
145
                        JFileChooser fileChooser = new JFileChooser();
146
                        fileChooser.removeChoosableFileFilter(fileChooser.getAcceptAllFileFilter());
147
                        fileChooser.addChoosableFileFilter(new ShpFileFilter());
148
                        if (fileChooser.showSaveDialog(tablePanel) == JFileChooser.APPROVE_OPTION){
149
                                File file = fileChooser.getSelectedFile();
150
                                VectorialROIsWriter writer = new VectorialROIsWriter(file.getPath(),tablePanel.getFLayer().getProjection());
151
                                writer.write((VectorialROI[])tablePanel.getROIs().toArray(new VectorialROI[0]));
152
                        }
153
                }else if (e.getSource() == tablePanel.getImportButton()){
154
                        JFileChooser fileChooser = new JFileChooser();
155
                        fileChooser.removeChoosableFileFilter(fileChooser.getAcceptAllFileFilter());
156
                        fileChooser.addChoosableFileFilter(new ShpFileFilter());
157
                        if (fileChooser.showOpenDialog(tablePanel) == JFileChooser.APPROVE_OPTION){
158
                                File file = fileChooser.getSelectedFile();
159
                                try {
160
                                        VectorialROIsReader reader = new VectorialROIsReader(file.getPath(),tablePanel.getGrid(),tablePanel.getFLayer().getProjection());
161
                                        ArrayList rois = reader.read(tablePanel.getROIs());
162
                                        tablePanel.clearROIs();
163
                                        tablePanel.setROIs(rois);
164
                                } catch (LoadLayerException e1) {
165
                                        // TODO Auto-generated catch block
166
                                        e1.printStackTrace();
167
                                } catch (FileNotExistsException e1) {
168
                                        // TODO Auto-generated catch block
169
                                        e1.printStackTrace();
170
                                } catch (ReadDriverException e2) {
171
                                        // TODO Auto-generated catch block
172
                                        e2.printStackTrace();
173
                                } catch (GridException e3) {
174
                                        // TODO Auto-generated catch block
175
                                        e3.printStackTrace();
176
                                }
177
                        }
178
                }
179
        }
180

    
181
        public void valueChanged(ListSelectionEvent e) {
182
                try {
183
                        if (tablePanel.getTable().getSelectedRows().length<=0){
184
                                tablePanel.setToolsEnabled(false);
185
                                tablePanel.setPreviousTool();
186
                        }
187
                        else{
188
                                tablePanel.setToolsEnabled(true);
189
                                tablePanel.selectDrawRoiTool();
190
                                
191
                                int selectedRow = tablePanel.getTable().getSelectedRow();
192
                                roiSelectedName = (String)tablePanel.getTable().getTable().getJTable().getValueAt(selectedRow,0);
193
                                }
194
                } catch (NotInitializeException e1) {
195
                        // TODO Auto-generated catch block
196
                        e1.printStackTrace();
197
                }        
198
        }
199

    
200
        public void tableChanged(TableModelEvent e) {
201
                /*
202
                 * Cambio de color en una ROI:
203
                 */
204
                if(e.getColumn()==4){
205
                        String roiName = (String)tablePanel.getTable().getTable().getJTable().getValueAt(e.getFirstRow(),0);
206
                        ArrayList graphics = tablePanel.getRoiGraphics(roiName);
207
                        if(tablePanel.getMapControl()!=null){
208
                                GraphicLayer graphicLayer = tablePanel.getMapControl().getMapContext().getGraphicsLayer();
209
                                ISymbol symbol = null;
210
                                Color color = (Color)tablePanel.getTable().getTable().getJTable().getValueAt(e.getFirstRow(),4);
211
                                for (int i = 0; i< graphics.size(); i++){
212
                                        symbol = SymbologyFactory.createDefaultSymbolByShapeType(((FGraphic)graphics.get(i)).getGeom().getGeometryType(), color);
213
                                        ((FGraphic)graphics.get(i)).setIdSymbol(graphicLayer.addSymbol(symbol));
214
                                }
215
                                tablePanel.getROI(roiName).setColor(color);
216
                                tablePanel.getMapControl().drawGraphics();
217
                        }
218
                }else if(e.getColumn()==0){
219
                        String newName = (String)tablePanel.getTable().getTable().getJTable().getValueAt(e.getFirstRow(),0);
220
                        tablePanel.changeRoiName(roiSelectedName,newName);
221
                        roiSelectedName = newName;
222
                }
223
        }
224
}
225

    
226
/**
227
 * Filtro para el selector de expresiones matem?ticas.
228
 * @author Alejandro Mu?oz (alejandro.munoz@uclm.es)
229
 *
230
 */
231
class ShpFileFilter extends FileFilter {
232

    
233
        final static String exp = "shp";
234
        public boolean accept(File f) {
235
                if (f.isDirectory()) {
236
           return true;
237
       }
238
       String s = f.getName();
239
       int i = s.lastIndexOf('.');
240

    
241
       if (i > 0 &&  i < s.length() - 1) {
242
           String extension = s.substring(i+1).toLowerCase();
243
           if (exp.equals(extension)){
244
                   return true;
245
           } else {
246
               return false;
247
           }
248
       }
249
       return false;
250
        }
251

    
252
        public String getDescription() {
253
                 return "Shape file .shp";
254
        }
255
        
256
}