Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extRasterTools-SE / src / org / gvsig / raster / filter / regionalpha / RegionAlphaUI.java @ 19925

History | View | Annotate | Download (6.78 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2005 IVER T.I. 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
package org.gvsig.raster.filter.regionalpha;
20

    
21
import java.awt.BorderLayout;
22
import java.util.ArrayList;
23

    
24
import javax.swing.JCheckBox;
25
import javax.swing.JLabel;
26
import javax.swing.event.ChangeEvent;
27
import javax.swing.event.ChangeListener;
28
import javax.swing.event.TableModelEvent;
29
import javax.swing.event.TableModelListener;
30

    
31
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
32
import org.gvsig.gui.beans.table.TableContainer;
33
import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
34
import org.gvsig.raster.dataset.Params;
35
import org.gvsig.raster.grid.filter.RegistrableFilterListener;
36
import org.gvsig.raster.grid.roi.ROI;
37
import org.gvsig.raster.util.RasterToolsUtil;
38

    
39
import com.iver.cit.gvsig.fmap.layers.FLayer;
40
/**
41
 * Es el interfaz gr?fico que contiene el filtro de regiones de interes.
42
 * En el se muestra una tabla con las posibles Rois a seleccionar y tambi?n
43
 * un Checkbox para definir si la seleccion es normal o invertida.
44
 * 
45
 * @version 17/01/2008
46
 * @author BorSanZa - Borja S?nchez Zamorano (borja.sanchez@iver.es)
47
 */
48
public class RegionAlphaUI extends RegistrableFilterListener implements TableModelListener, ChangeListener {
49
        private static final long serialVersionUID = 4525736825113598035L;
50
        private TableContainer tableContainer = null;
51
        private FLayer         layer          = null;
52
        private JLabel         warning        = null;
53
        private ArrayList      rois           = null;
54
        private JCheckBox      negative       = null;
55
        private boolean        lastInv        = false;
56

    
57
        /**
58
         * Constructor de un RegionAlphaUI
59
         */
60
        public RegionAlphaUI() {
61
                initialize();
62
        }
63
        
64
        /**
65
         * Inicializa los elementos gr?ficos.
66
         */
67
        private void initialize() {
68
                setLayout(new BorderLayout());
69
                add(getTableContainer(), BorderLayout.CENTER);
70
                add(getWarning(), BorderLayout.NORTH);
71
                add(getInverse(), BorderLayout.SOUTH);
72
        }
73
        
74
        /**
75
         * Obtiene el contenedor con la tabla.
76
         * @return
77
         */
78
        private TableContainer getTableContainer() {
79
                if (tableContainer == null) {
80
                        String[] columnNames = {" ", "Nombre", ""};
81
                        int[] columnWidths = {22, 334, 0};
82
                        tableContainer = new TableContainer(columnNames, columnWidths);
83
                        tableContainer.setModel("CheckBoxModel");
84
                        tableContainer.initialize();
85
                        tableContainer.setControlVisible(false);
86
                        tableContainer.setMoveRowsButtonsVisible(false);
87
                        tableContainer.getTable().getJTable().getColumnModel().getColumn(0).setMinWidth(22);
88
                        tableContainer.getTable().getJTable().getColumnModel().getColumn(0).setMaxWidth(22);
89
                        tableContainer.getTable().getJTable().getColumnModel().getColumn(2).setMinWidth(0);
90
                        tableContainer.getTable().getJTable().getColumnModel().getColumn(2).setMaxWidth(0);
91
                        tableContainer.getModel().addTableModelListener(this);
92
                }
93
                return tableContainer;
94
        }
95
        
96
        /**
97
         * Obtiene el checkbox que informa de si selecciona lo que contiene las Rois
98
         * o su inversa.
99
         * @return JCheckBox
100
         */
101
        private JCheckBox getInverse() {
102
                if (negative == null) {
103
                        negative = new JCheckBox();
104
                        negative.setText(RasterToolsUtil.getText(this, "inversa"));
105
                        negative.addChangeListener(this);
106
                }
107
                return negative;
108
        }
109

    
110
        /**
111
         * Obtiene el mensaje de aviso de que no hay rois en la lista. Esta etiqueta solo
112
         * es mostrada en caso en que la capa no tenga ROIs asociadas.
113
         * @return JLabel Etiqueta con el mensaje de aviso.
114
         */
115
        public JLabel getWarning() {
116
                if(warning == null) {
117
                        warning = new JLabel(RasterToolsUtil.getText(this, "rois_needed"));
118
                        warning.setVisible(false);
119
                }
120
                return warning;
121
        }
122
        
123
        /**
124
         * Asigna la lista de regiones de inter?s.
125
         * @param rois Lista de ROIs
126
         */
127
        public void setRois(ArrayList rois) {
128
                this.rois = rois;
129
        }
130
        
131
        /**
132
         * Asigna la capa.
133
         * @param layer
134
         */
135
        public void setLayer(FLayer layer) {
136
                this.layer = layer;
137
                if (layer == null)
138
                        return;
139
                
140
                if(((FLyrRasterSE) layer).getRois() == null || ((FLyrRasterSE) layer).getRois().size() == 0)
141
                        getWarning().setVisible(true);
142
                
143
                ArrayList roisArray = ((FLyrRasterSE) layer).getRois();
144
                if (roisArray != null) {
145
                        for (int i = 0; i < roisArray.size(); i++) {
146
                                ROI roi = (ROI) roisArray.get(i);
147
        
148
                                Object row[] = {"", "", ""};
149
                                
150
                                boolean active = false;
151
                                
152
                                if (rois != null) {
153
                                        for (int r = 0; r < rois.size(); r++) {
154
                                                if (((ROI) rois.get(r)) == roi) {
155
                                                        active = true;
156
                                                        break;
157
                                                }
158
                                        }
159
                                }
160
                                
161
                                row[0] = new Boolean(active);
162
                                row[1] = roi.getName(); 
163
                                row[2] = new Integer(i);
164
                                try {
165
                                        getTableContainer().addRow(row);
166
                                } catch (NotInitializeException e) {
167
                                }
168
                        }
169
                }
170
        }
171
        
172
        /**
173
         * Obtiene la lista de ROIs seleccionadas
174
         * @return ArrayList con la lista de ROIs
175
         */
176
        private ArrayList getSelectedROIs() {
177
                if (layer == null)
178
                        return null;
179

    
180
                ArrayList roisArray = ((FLyrRasterSE) layer).getRois();
181
                ArrayList selected = new ArrayList();
182
                if (roisArray != null) {
183
                        for (int i = 0; i < roisArray.size(); i++) {
184
                                if (((Boolean) tableContainer.getModel().getValueAt(i, 0)).booleanValue()) {
185
                                        selected.add(roisArray.get(i));
186
                                }
187
                        }
188
                }
189
                return selected;
190
        }
191
        
192
        /**
193
         * Sobrecargamos el m?todo getParams para que siempre devuelva
194
         * algo.
195
         */
196
        public Params getParams() {
197
                params = new Params();
198
                params.setParam("rois",
199
                                getSelectedROIs(),
200
                                -1,
201
                                null);
202
                params.setParam("inverse",
203
                                new Boolean(getInverse().isSelected()),
204
                                -1,
205
                                null);
206
                return params;
207
        }
208

    
209
        /*
210
         * (non-Javadoc)
211
         * @see javax.swing.event.TableModelListener#tableChanged(javax.swing.event.TableModelEvent)
212
         */
213
        public void tableChanged(TableModelEvent e) {
214
                callStateChanged();
215
        }
216

    
217
        /**
218
         * Cambio de estado para el check de inversa
219
         * @param e
220
         */
221
        public void stateChanged(ChangeEvent e) {
222
                if (e.getSource().equals(getInverse())) {
223
                        if (((JCheckBox) e.getSource()).isSelected() != lastInv) {
224
                                callStateChanged();
225
                                lastInv = ((JCheckBox) e.getSource()).isSelected();
226
                        }
227
                }
228
        }
229
}