Statistics
| Revision:

root / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / cutting / ui / listener / CuttingPanelListener.java @ 12425

History | View | Annotate | Download (21.9 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2007 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.rastertools.cutting.ui.listener;
20

    
21
import java.awt.Component;
22
import java.awt.Cursor;
23
import java.awt.event.ActionEvent;
24
import java.awt.event.ActionListener;
25
import java.awt.event.FocusEvent;
26
import java.awt.event.FocusListener;
27
import java.awt.event.KeyEvent;
28
import java.awt.event.KeyListener;
29
import java.awt.geom.Rectangle2D;
30
import java.io.File;
31

    
32
import javax.swing.JOptionPane;
33

    
34
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
35
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
36
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent;
37
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
38
import org.gvsig.gui.beans.coorddatainput.CoordDataInputContainer;
39
import org.gvsig.gui.beans.incrementabletask.IncrementableTask;
40
import org.gvsig.gui.beans.table.models.CheckBoxModel;
41
import org.gvsig.raster.dataset.MultiRasterDataset;
42
import org.gvsig.raster.datastruct.Extent;
43
import org.gvsig.raster.util.RasterUtilities;
44
import org.gvsig.rastertools.RasterModule;
45
import org.gvsig.rastertools.cutting.CuttingProcess;
46
import org.gvsig.rastertools.cutting.WriterBufferServer;
47
import org.gvsig.rastertools.cutting.ui.CuttingPanel;
48

    
49
import com.hardcode.gdbms.driver.exceptions.ReadDriverException;
50
import com.iver.andami.PluginServices;
51
import com.iver.andami.Utilities;
52
import com.iver.cit.gvsig.exceptions.expansionfile.ExpansionFileReadException;
53
import com.iver.cit.gvsig.fmap.tools.BehaviorException;
54
import com.iver.cit.gvsig.fmap.tools.Events.RectangleEvent;
55
import com.iver.cit.gvsig.fmap.tools.Listeners.RectangleListener;
56
/**
57
 * <code>CuttingPanelListener</code> es una clase donde se recoger?n y
58
 * tratar?n todos los eventos del panel de recorte
59
 *
60
 * @version 19/04/2007
61
 * @author BorSanZa - Borja S?nchez Zamorano (borja.sanchez@iver.es)
62
 */
63
public class CuttingPanelListener implements KeyListener, FocusListener, ActionListener, RectangleListener, ButtonsPanelListener {
64
        private Rectangle2D extent = null;
65
        CuttingPanel cuttingPanel = null;
66
        private int widthPx = 0;
67
        private int heightPx = 0;
68

    
69
        /**
70
         * Crea un nuevo <code>CuttingPanelListener</code> con el
71
         * <code>CuttingPanel</code> asociado
72
         *
73
         * @param panel
74
         */
75
        public CuttingPanelListener(CuttingPanel panel) {
76
                this.cuttingPanel = panel;
77
        }
78

    
79
        /**
80
         * Definir la extensi?n completa de la capa
81
         * @param extent
82
         */
83
        public void setExtent(Rectangle2D extent) {
84
                this.extent = extent;
85
        }
86

    
87
        /**
88
         * Cuando se presiona la tecla enter sobre los campos de texto se recalculan
89
         * las coordenadas. Si se ha presionado sobre los cuadro correspondientes a
90
         * las coordenadas pixel se recalculan las coordenadas del mundo real y
91
         * viceversa.
92
         */
93
        public void keyReleased(KeyEvent e) {
94
                if (e.getKeyCode() == 10) {
95
                        if (e.getSource() == getCuttingPanel().getCoor_pixel().getPDataInput11().getJTextField()
96
                                || e.getSource() == getCuttingPanel().getCoor_pixel().getPDataInput12().getJTextField()
97
                                || e.getSource() == getCuttingPanel().getCoor_pixel().getPDataInput21().getJTextField()
98
                                || e.getSource() == getCuttingPanel().getCoor_pixel().getPDataInput22().getJTextField()) {
99
                                eventJTextField(e.getSource());
100
                                recalcCoordFields(true);
101
                        }
102
                        if (e.getSource() == getCuttingPanel().getCoor_reales().getPDataInput11().getJTextField()
103
                                        || e.getSource() == getCuttingPanel().getCoor_reales().getPDataInput12().getJTextField()
104
                                        || e.getSource() == getCuttingPanel().getCoor_reales().getPDataInput21().getJTextField()
105
                                        || e.getSource() == getCuttingPanel().getCoor_reales().getPDataInput22().getJTextField()) {
106
                                eventJTextField(e.getSource());
107
                                recalcCoordFields(false);
108
                        }
109
                        if (e.getSource() == getCuttingPanel().getPResolution().getCCellSize().getJTextField()) {
110
                                // Cambiamos PS ==> wPx=wWC/PS & hPx=wPx/rel
111
                                double ps = 0;
112
                                try {
113
                                        ps = Double.parseDouble(getCuttingPanel().getPResolution().getCCellSize().getJTextField().getText());
114
                                } catch (NumberFormatException ex) {
115
                                        return;
116
                                }
117
                                Rectangle2D mapWindow = getMapWindow();
118
                                Rectangle2D pxWindow = getPxWindow();
119
                                if (mapWindow == null || pxWindow == null)
120
                                        return;
121
                                getCuttingPanel().setWidthText(mapWindow.getWidth() / ps, 0);
122
                                getCuttingPanel().setHeightText((mapWindow.getWidth() / ps) / getCuttingPanel().getRelWidthHeight(), 0);
123
                        }
124

    
125
                        if (e.getSource() == getCuttingPanel().getPResolution().getCWidth().getJTextField()) {
126
                                // Cambiamos wPx ==> hPx=wPx/rel & PS=wWC/wPx
127
                                double wPx = 0;
128
                                try {
129
                                        wPx = Double.parseDouble(getCuttingPanel().getPResolution().getCWidth().getJTextField().getText());
130
                                } catch (NumberFormatException ex) {
131
                                        return;
132
                                }
133
                                Rectangle2D mapWindow = getMapWindow();
134
                                Rectangle2D pxWindow = getPxWindow();
135
                                if (mapWindow == null || pxWindow == null)
136
                                        return;
137
                                getCuttingPanel().setWidthText(wPx, 0);
138
                                getCuttingPanel().setHeightText(wPx / getCuttingPanel().getRelWidthHeight(), 0);
139
                                getCuttingPanel().setCellSizeText((mapWindow.getWidth() / wPx), 4);
140
                        }
141

    
142
                        if (e.getSource() == getCuttingPanel().getPResolution().getCHeight().getJTextField()) {
143
                                // Cambiamos hPx ==> wPx=rel*wPx & PS=hWC/hPx
144
                                double hPx = 0;
145
                                try {
146
                                        hPx = Double.parseDouble(getCuttingPanel().getPResolution().getCHeight().getJTextField().getText());
147
                                } catch (NumberFormatException ex) {
148
                                        return;
149
                                }
150
                                Rectangle2D mapWindow = getMapWindow();
151
                                Rectangle2D pxWindow = getPxWindow();
152
                                if (mapWindow == null || pxWindow == null)
153
                                        return;
154
                                getCuttingPanel().setWidthText(hPx * getCuttingPanel().getRelWidthHeight(), 0);
155
                                getCuttingPanel().setHeightText(hPx, 0);
156
                                getCuttingPanel().setCellSizeText((mapWindow.getHeight() / hPx), 4);
157
                        }
158
                }
159
        }
160

    
161
        /**
162
         * Metodo que se ejecuta cuando se sale de un cuadro de texto para
163
         * actualizarlos todos a los valores correctos
164
         */
165
        public void focusLost(FocusEvent e) {
166
                if (e.getSource() == getCuttingPanel().getCoor_pixel().getPDataInput11().getJTextField()
167
                        || e.getSource() == getCuttingPanel().getCoor_pixel().getPDataInput12().getJTextField()
168
                        || e.getSource() == getCuttingPanel().getCoor_pixel().getPDataInput21().getJTextField()
169
                        || e.getSource() == getCuttingPanel().getCoor_pixel().getPDataInput22().getJTextField()) {
170
                        eventJTextField(e.getSource());
171
                        recalcCoordFields(true);
172
                }
173
                if (e.getSource() == getCuttingPanel().getCoor_reales().getPDataInput11().getJTextField()
174
                        || e.getSource() == getCuttingPanel().getCoor_reales().getPDataInput12().getJTextField()
175
                        || e.getSource() == getCuttingPanel().getCoor_reales().getPDataInput21().getJTextField()
176
                        || e.getSource() == getCuttingPanel().getCoor_reales().getPDataInput22().getJTextField()) {
177
                        eventJTextField(e.getSource());
178
                        recalcCoordFields(false);
179
                }
180
        }
181

    
182
        /**
183
         * M?todo que se invoca cuando se disparan los eventos de los botones de
184
         * extensi?n completa o de seleccion de extensi?n con el rat?n
185
         */
186
        public void actionPerformed(ActionEvent e) {
187
                // Bot?n de selecci?n del extent completo
188
                // Modificamos las coordenadas reales y recalculamos las coordenadas pixel
189
                if (e.getSource() == getCuttingPanel().getButtonBarContainer().getButton(0)) {
190
                        getCuttingPanel().setCoorRealFromDouble(extent.getMinX(), extent.getMaxY(), extent.getMaxX(), extent.getMinY(), 6);
191
                        Rectangle2D r = RasterUtilities.getPxRectFromMapRect(extent, widthPx, heightPx, extent);
192
                        getCuttingPanel().setCoorPixelFromDouble(r.getMinX(), r.getMinY(), r.getMaxX(), r.getMaxY(), 3);
193
                        getCuttingPanel().setWidthText(r.getWidth(), 0);
194
                        getCuttingPanel().setHeightText(r.getHeight(), 0);
195
                        getCuttingPanel().setCellSizeText((extent.getWidth() / r.getWidth()), 4);
196
                        getCuttingPanel().setRelWidthHeight((double) (r.getWidth() / r.getHeight()));
197
                        return;
198
                }
199

    
200
                // Bot?n de selecci?n de la herramienta de seleccionar desde la vista
201
                if (e.getSource() == getCuttingPanel().getButtonBarContainer().getButton(1)) {
202
                        getCuttingPanel().selectToolButton();
203
                        return;
204
                }
205
        }
206

    
207
        /**
208
         * Al producirse un evento de perdida de foco o pulsaci?n de "enter" en un campo de texto de coordenadas
209
         * hay que asignar el nuevo valor introducido.
210
         * @param obj
211
         */
212
        private void eventJTextField(Object obj) {
213
                try {
214
                        if (obj == getCuttingPanel().getCoor_pixel().getPDataInput11().getJTextField())
215
                                getCuttingPanel().setCoorPixelFromDouble(Double.valueOf(getCuttingPanel().getCoor_pixel().getPDataInput11().getJTextField().getText()).doubleValue(),
216
                                                getCuttingPanel().getPxMinY(), getCuttingPanel().getPxMaxX(), getCuttingPanel().getPxMaxY(), 3);
217
                        if (obj == getCuttingPanel().getCoor_pixel().getPDataInput12().getJTextField())
218
                                getCuttingPanel().setCoorPixelFromDouble(getCuttingPanel().getPxMinX(),
219
                                                Double.valueOf(getCuttingPanel().getCoor_pixel().getPDataInput12().getJTextField().getText()).doubleValue(), getCuttingPanel().getPxMaxX(),
220
                                                getCuttingPanel().getPxMaxY(), 3);
221
                        if (obj == getCuttingPanel().getCoor_pixel().getPDataInput21().getJTextField())
222
                                getCuttingPanel().setCoorPixelFromDouble(getCuttingPanel().getPxMinX(), getCuttingPanel().getPxMinY(),
223
                                                Double.valueOf(getCuttingPanel().getCoor_pixel().getPDataInput21().getJTextField().getText()).doubleValue(), getCuttingPanel().getPxMaxY(), 3);
224
                        if (obj == getCuttingPanel().getCoor_pixel().getPDataInput22().getJTextField())
225
                                getCuttingPanel().setCoorPixelFromDouble(getCuttingPanel().getPxMinX(), getCuttingPanel().getPxMinY(), getCuttingPanel().getPxMaxX(),
226
                                                Double.valueOf(getCuttingPanel().getCoor_pixel().getPDataInput22().getJTextField().getText()).doubleValue(), 3);
227

    
228
                        if (obj == getCuttingPanel().getCoor_reales().getPDataInput11().getJTextField())
229
                                getCuttingPanel().setCoorRealFromDouble(Double.valueOf(getCuttingPanel().getCoor_reales().getPDataInput11().getJTextField().getText()).doubleValue(),
230
                                                getCuttingPanel().getWcMinY(), getCuttingPanel().getWcMaxX(), getCuttingPanel().getWcMaxY(), 6);
231
                        if (obj == getCuttingPanel().getCoor_reales().getPDataInput12().getJTextField())
232
                                getCuttingPanel().setCoorRealFromDouble(getCuttingPanel().getWcMinX(),
233
                                                Double.valueOf(getCuttingPanel().getCoor_reales().getPDataInput12().getJTextField().getText()).doubleValue(), getCuttingPanel().getWcMaxX(),
234
                                                getCuttingPanel().getWcMaxY(), 6);
235
                        if (obj == getCuttingPanel().getCoor_reales().getPDataInput21().getJTextField())
236
                                getCuttingPanel().setCoorRealFromDouble(getCuttingPanel().getWcMinX(), getCuttingPanel().getWcMinY(),
237
                                                Double.valueOf(getCuttingPanel().getCoor_reales().getPDataInput21().getJTextField().getText()).doubleValue(), getCuttingPanel().getWcMaxY(), 6);
238
                        if (obj == getCuttingPanel().getCoor_reales().getPDataInput22().getJTextField())
239
                                getCuttingPanel().setCoorRealFromDouble(getCuttingPanel().getWcMinX(), getCuttingPanel().getWcMinY(), getCuttingPanel().getWcMaxX(),
240
                                                Double.valueOf(getCuttingPanel().getCoor_reales().getPDataInput22().getJTextField().getText()).doubleValue(), 6);
241
                } catch (NumberFormatException ex1) {
242
                        // No hay valores parseables a decimal en las cajas de texto. No hacemos
243
                        // nada
244
                }
245
        }
246

    
247
        /**
248
         * Comprueba si todos los campos de coordenadas est?n llenos
249
         * @return true si todos los campos de coordenadas est?n llenos y false si hay alguno vacio.
250
         */
251
        private boolean isFieldsFill() {
252
                if (getCuttingPanel().getCoor_pixel().getPDataInput11().getJTextField().equals("")
253
                                || getCuttingPanel().getCoor_pixel().getPDataInput12().getJTextField().equals("")
254
                                || getCuttingPanel().getCoor_pixel().getPDataInput21().getJTextField().equals("")
255
                                || getCuttingPanel().getCoor_pixel().getPDataInput22().getJTextField().equals("")
256
                                || getCuttingPanel().getCoor_reales().getPDataInput11().getJTextField().equals("")
257
                                || getCuttingPanel().getCoor_reales().getPDataInput12().getJTextField().equals("")
258
                                || getCuttingPanel().getCoor_reales().getPDataInput21().getJTextField().equals("")
259
                                || getCuttingPanel().getCoor_reales().getPDataInput22().getJTextField().equals(""))
260
                        return false;
261
                return true;
262
        }
263

    
264
        /**
265
         * Obtiene un rectangulo con la ventana en pixeles. Estos datos son leidos desde el interfaz.
266
         * @return Rectangle2D
267
         */
268
        private Rectangle2D getPxWindow(){
269
                if (getCuttingPanel().getPxMinX() == 0
270
                                && getCuttingPanel().getPxMinY() == 0
271
                                && getCuttingPanel().getPxMaxX() == 0
272
                                && getCuttingPanel().getPxMaxY() == 0)
273
                        return null;
274
                return new Rectangle2D.Double(getCuttingPanel().getPxMinX(),
275
                        getCuttingPanel().getPxMinY(),
276
                        Math.abs(getCuttingPanel().getPxMaxX() - getCuttingPanel().getPxMinX()),
277
                        Math.abs(getCuttingPanel().getPxMaxY() - getCuttingPanel().getPxMinY()));
278
        }
279

    
280
        /**
281
         * Obtiene un rectangulo con la ventana en coordenadas reales. Estos datos son leidos desde el interfaz.
282
         * @return Rectangle2D
283
         */
284
        private Rectangle2D getMapWindow(){
285
                if (getCuttingPanel().getWcMinX() == 0
286
                                && getCuttingPanel().getWcMinY() == 0
287
                                && getCuttingPanel().getWcMaxX() == 0
288
                                && getCuttingPanel().getWcMaxY() == 0)
289
                        return null;
290
                return new Rectangle2D.Double(getCuttingPanel().getWcMinX(),
291
                        getCuttingPanel().getWcMaxY(),
292
                        Math.abs(getCuttingPanel().getWcMaxX() - getCuttingPanel().getWcMinX()),
293
                        Math.abs(getCuttingPanel().getWcMaxY() - getCuttingPanel().getWcMinY()));
294
        }
295

    
296
        /**
297
         * Recalcula el valor de los campos de coordenadas reales y pixel. Cuando modificamos alg?n campo
298
         * de las coordenadas reales se modifican los pixeles y viceversa.
299
         * @param modifyPx true si se ha modificado alg?n campo de coordenadas pixel y false si se ha modificado
300
         * alg?n campo de las coordenadas reales.
301
         */
302
        private void recalcCoordFields(boolean modifyPx) {
303
                if (isFieldsFill()) {
304
                        try {
305
                                if (modifyPx) {
306
                                        Rectangle2D pxWindow = getPxWindow();
307
                                        if (pxWindow == null)
308
                                                return;
309
                                        Rectangle2D newWC = RasterUtilities.getMapRectFromPxRect(extent, widthPx, heightPx, pxWindow);
310
                                        getCuttingPanel().setCoorRealFromDouble(newWC.getMinX(), newWC.getMaxY(), newWC.getMaxX(), newWC.getMinY(), 6);
311
                                        getCuttingPanel().setWidthText(pxWindow.getWidth(), 0);
312
                                        getCuttingPanel().setHeightText(pxWindow.getHeight(), 0);
313
                                        getCuttingPanel().setCellSizeText((newWC.getWidth() / pxWindow.getWidth()), 4);
314
                                        getCuttingPanel().setRelWidthHeight((double)(pxWindow.getWidth() / pxWindow.getHeight()));
315
                                } else {
316
                                        Rectangle2D mapWindow = getMapWindow();
317
                                        if (mapWindow == null)
318
                                                return;
319
                                        Rectangle2D newPx = RasterUtilities.getPxRectFromMapRect(extent, widthPx, heightPx, mapWindow);
320
                                        getCuttingPanel().setCoorPixelFromDouble(newPx.getMinX(), newPx.getMinY(), newPx.getMaxX(), newPx.getMaxY(), 3);
321
                                        getCuttingPanel().setWidthText(newPx.getWidth(), 0);
322
                                        getCuttingPanel().setHeightText(newPx.getHeight(), 0);
323
                                        getCuttingPanel().setCellSizeText((mapWindow.getWidth() / newPx.getWidth()), 4);
324
                                        getCuttingPanel().setRelWidthHeight((double)(newPx.getWidth() / newPx.getHeight()));
325
                                }
326
                        } catch (NumberFormatException ex) {
327
                                return;
328
                        }
329
                }
330
        }
331

    
332
        /**
333
         * Definir el ancho de la vista en pixeles
334
         * @param value
335
         */
336
        public void setWidthPx(int value) {
337
                widthPx = value;
338
        }
339

    
340
        /**
341
         * Definir el alto de la vista en pixeles
342
         * @param value
343
         */
344
        public void setHeightPx(int value) {
345
                heightPx = value;
346
        }
347

    
348
        /**
349
         * Invocaci?n de los eventos de la ventana de <code>DefaultButtonsPanel</code>
350
         */
351
        public void actionButtonPressed(ButtonsPanelEvent e) {
352
                // Bot?n de Aceptar
353
                if (e.getButton() == ButtonsPanel.BUTTON_ACCEPT) {
354
                        accept();
355
                        close();
356
                }
357

    
358
                // Bot?n de Aplicar
359
                if (e.getButton() == ButtonsPanel.BUTTON_APPLY) {
360
                        accept();
361
                        getCuttingPanel().setNewLayerText();
362
                }
363

    
364
                // Bot?n de Cerrar
365
                if (e.getButton() == ButtonsPanel.BUTTON_CANCEL) {
366
                        close();
367
                }
368

    
369
                getCuttingPanel().getFLayer().getMapContext().invalidate();
370
        }
371

    
372
        /**
373
         * Cerrar la ventana del recorte
374
         */
375
        private void close() {
376
                try {
377
                        if (getCuttingPanel().getLastTool() != null)
378
                                getCuttingPanel().getMapControl().setTool(getCuttingPanel().getLastTool());
379
                        PluginServices.getMDIManager().closeWindow(getCuttingPanel().getCuttingDialog());
380
                } catch (ArrayIndexOutOfBoundsException ex) {
381
                        // Si la ventana no se puede eliminar no hacemos nada
382
                }
383
        }
384

    
385
        /**
386
         * Obtener el <code>CuttingPanel</code> asociado
387
         * @return CuttingPanel
388
         */
389
        private CuttingPanel getCuttingPanel() {
390
                return cuttingPanel;
391
        }
392

    
393
        /**
394
         * Acciones realizadas cuando se acepta en el dialogo. Se obtendr?n los datos
395
         * de recorte desde el dialogo, crearemos el objeto CuttingProcess que
396
         * gestiona el recortado, ajustamos el tama?o del grid de salida y procesamos.
397
         */
398
        private void accept() {
399
                // Controlamos las coordenadas del recorte que no se salgan de la imagen.
400
                // De ser as? mostramos un error
401
                CoordDataInputContainer values = getCuttingPanel().getCoor_reales();
402
                double minX = 0;
403
                double maxY = 0;
404
                double maxX = 0;
405
                double minY = 0;
406
                try {
407
                        minX = Double.parseDouble(values.getPDataInput11().getValue());
408
                        maxY = Double.parseDouble(values.getPDataInput22().getValue());
409
                        maxX = Double.parseDouble(values.getPDataInput21().getValue());
410
                        minY = Double.parseDouble(values.getPDataInput12().getValue());
411
                        Rectangle2D ext = getCuttingPanel().getFLayer().getFullExtent();
412
                        if (minX > ext.getMaxX() || maxX < ext.getMinX()
413
                                || minY > ext.getMaxY() || maxY < ext.getMinY()) {
414
                                JOptionPane.showMessageDialog(
415
                                                (Component) PluginServices.getMainFrame(), PluginServices.getText(
416
                                                                this, "coordenadas_erroneas"));
417
                                return;
418
                        }
419
                } catch (NumberFormatException e) {
420
                        JOptionPane.showMessageDialog((Component) PluginServices.getMainFrame(),
421
                                        PluginServices.getText(this, "coordenadas_erroneas"));
422
                        return;
423
                } catch (ExpansionFileReadException e) {
424
                        e.printStackTrace();
425
                } catch (ReadDriverException e) {
426
                        e.printStackTrace();
427
                }
428

    
429
                // Obtenemos las coordenadas del recorte
430
                CoordDataInputContainer sValues = getCuttingPanel().getCoor_pixel();
431
                int[] dValues = new int[4];
432
                try {
433
                        dValues[0] = (int) Math.round(Double.valueOf(sValues.getPDataInput11().getValue()).doubleValue());
434
                        dValues[1] = (int) Math.round(Double.valueOf(sValues.getPDataInput22().getValue()).doubleValue());
435
                        dValues[2] = (int) Math.round(Double.valueOf(sValues.getPDataInput21().getValue()).doubleValue());
436
                        dValues[3] = (int) Math.round(Double.valueOf(sValues.getPDataInput12().getValue()).doubleValue());
437
                } catch (NumberFormatException exc) {
438
                        // Los valores de las cajas son incorrectos. Terminamos la funci?n
439
                        return;
440
                }
441

    
442
                // Seleccionamos las bandas que se usaran en el recorte a partir de la tabla
443
                int countBands = 0;
444
                int rowCount = ((CheckBoxModel) getCuttingPanel().getTSelection().getModel()).getRowCount();
445
                for (int iRow = 0; iRow < rowCount; iRow++)
446
                        if ((((Boolean) ((CheckBoxModel) getCuttingPanel().getTSelection().getModel()).getValueAt(iRow, 0))).booleanValue())
447
                                countBands++;
448

    
449
                int[] drawableBands = new int[countBands];
450
                int i = 0;
451
                for (int iRow = 0; iRow < rowCount; iRow++) {
452
                        if ((((Boolean) ((CheckBoxModel) getCuttingPanel().getTSelection().getModel()).getValueAt(iRow, 0))).booleanValue())
453
                                drawableBands[i++] = iRow;
454
                }
455

    
456
                /**
457
                 * Donde se va a guardar el fichero
458
                 */
459
                String path = RasterModule.getPath();
460
                if (getCuttingPanel().getCbSaveFile().isSelected()) {
461
                        path = RasterModule.getPath();
462
                } else {
463
                        path = Utilities.createTempDirectory();
464
                }
465

    
466
                String file = getCuttingPanel().getFilenameTextField().getText();
467
                if (file == "") file = "cutlayer";
468

    
469
                String filename = path + File.separator + file;
470

    
471
                /**
472
                 * Preparacion para la generacion del proceso del recorte
473
                 */
474
                MultiRasterDataset multiRasterDataset = (MultiRasterDataset)((FLyrRasterSE) getCuttingPanel().getFLayer()).getGeoRasterMultiDataset();
475

    
476
                if(multiRasterDataset == null)
477
                        return;
478

    
479
                WriterBufferServer dataWriter1 = new WriterBufferServer();
480
                Extent extent = new Extent(minX, maxY, maxX, minY);
481

    
482
                int interpMethod = getCuttingPanel().getPResolution().getSelectedInterpolationMethod();
483

    
484
                CuttingProcess cuttingProcess = new CuttingProcess( getCuttingPanel().getCbLoadLayerInToc().isSelected(),
485
                                                                                                                        getCuttingPanel().getViewName() , dValues, filename,
486
                                                                                                                        dataWriter1, multiRasterDataset, extent, drawableBands,
487
                                                                                                                        getCuttingPanel().getCbOneLyrPerBand().isSelected(), interpMethod);
488
                cuttingProcess.setResolution((int) getCuttingPanel().getWidthText(),
489
                        (int) getCuttingPanel().getHeightText());
490
                IncrementableTask incrementableTask = new IncrementableTask(dataWriter1);
491
                cuttingProcess.setIncrementableTask(incrementableTask);
492
                incrementableTask.showWindow();
493
                cuttingProcess.start();
494
                incrementableTask.start();
495
        }
496

    
497
        /*
498
         * (non-Javadoc)
499
         * @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent)
500
         */
501
        public void keyPressed(KeyEvent e) {
502
        }
503

    
504
        /*
505
         * (non-Javadoc)
506
         * @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent)
507
         */
508
        public void keyTyped(KeyEvent e) {
509
        }
510

    
511
        /*
512
         * (non-Javadoc)
513
         * @see java.awt.event.FocusListener#focusGained(java.awt.event.FocusEvent)
514
         */
515
        public void focusGained(FocusEvent e) {
516
        }
517

    
518
        /*
519
         * (non-Javadoc)
520
         * @see com.iver.cit.gvsig.fmap.tools.Listeners.RectangleListener#rectangle(com.iver.cit.gvsig.fmap.tools.Events.RectangleEvent)
521
         */
522
        public void rectangle(RectangleEvent event) throws BehaviorException {
523
        }
524

    
525
        /*
526
         * (non-Javadoc)
527
         * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#cancelDrawing()
528
         */
529
        public boolean cancelDrawing() {
530
                return false;
531
        }
532

    
533
        /*
534
         * (non-Javadoc)
535
         * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#getCursor()
536
         */
537
        public Cursor getCursor() {
538
                return null;
539
        }
540
}