Statistics
| Revision:

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

History | View | Annotate | Download (21 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.JFileChooser;
33
import javax.swing.JOptionPane;
34

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

    
50
import com.hardcode.driverManager.Driver;
51
import com.hardcode.driverManager.DriverLoadException;
52
import com.hardcode.gdbms.driver.exceptions.ReadDriverException;
53
import com.iver.andami.PluginServices;
54
import com.iver.andami.Utilities;
55
import com.iver.andami.ui.mdiManager.IWindow;
56
import com.iver.cit.gvsig.exceptions.expansionfile.ExpansionFileReadException;
57
import com.iver.cit.gvsig.fmap.layers.FLayer;
58
import com.iver.cit.gvsig.fmap.layers.LayerFactory;
59
import com.iver.cit.gvsig.fmap.tools.BehaviorException;
60
import com.iver.cit.gvsig.fmap.tools.Events.RectangleEvent;
61
import com.iver.cit.gvsig.fmap.tools.Listeners.RectangleListener;
62
import com.iver.cit.gvsig.project.documents.view.gui.View;
63
/**
64
 * <code>CuttingPanelListener</code>. Clase donde se recogeran y trataran
65
 * todos los eventos del panel de recorte
66
 * 
67
 * @version 19/04/2007
68
 * @author Borja S?nchez Zamorano (borja.sanchez@iver.es)
69
 */
70
public class CuttingPanelListener implements KeyListener, FocusListener, ActionListener, RectangleListener, ButtonsPanelListener {
71
        private Rectangle2D extent = null;
72
        CuttingPanel panel = null;
73
        private int widthPx = 0;
74
        private int heightPx = 0;
75

    
76
        /**
77
         * Recuerda la ?ltima ruta seleccionada por el usuario
78
         */
79
        private static String                                lastPath = "./";
80

    
81
        public CuttingPanelListener(CuttingPanel panel) {
82
                this.panel = panel;
83
        }
84
        
85
        public void setExtent(Rectangle2D extent) {
86
                this.extent = extent;
87
        }
88
        
89
        public void keyPressed(KeyEvent e) {
90
        }
91

    
92
        /**
93
         * Cuando se presiona la tecla enter sobre los campos de texto se recalculan
94
         * las coordenadas. Si se ha presionado sobre los cuadro correspondientes a
95
         * las coordenadas pixel se recalculan las coordenadas del mundo real y
96
         * viceversa.
97
         */
98
        public void keyReleased(KeyEvent e) {
99
                if (e.getKeyCode() == 10) {
100
                        if (e.getSource() == panel.getCoor_pixel().getPDataInput11().getJTextField()
101
                                || e.getSource() == panel.getCoor_pixel().getPDataInput12().getJTextField()
102
                                || e.getSource() == panel.getCoor_pixel().getPDataInput21().getJTextField()
103
                                || e.getSource() == panel.getCoor_pixel().getPDataInput22().getJTextField()) {
104
                                eventJTextField(e.getSource());
105
                                recalcCoordFields(true);
106
                        }
107
                        if (e.getSource() == panel.getCoor_reales().getPDataInput11().getJTextField()
108
                                        || e.getSource() == panel.getCoor_reales().getPDataInput12().getJTextField()
109
                                        || e.getSource() == panel.getCoor_reales().getPDataInput21().getJTextField()
110
                                        || e.getSource() == panel.getCoor_reales().getPDataInput22().getJTextField()) {
111
                                eventJTextField(e.getSource());
112
                                recalcCoordFields(false);
113
                        }
114
                        if (e.getSource() == panel.getPResolution().getCCellSize().getJTextField()) {
115
                                // Cambiamos PS ==> wPx=wWC/PS & hPx=wPx/rel
116
                                double ps = 0;
117
                                try {
118
                                        ps = Double.parseDouble(panel.getPResolution().getCCellSize().getJTextField().getText());
119
                                } catch (NumberFormatException ex) {
120
                                        return;
121
                                }
122
                                Rectangle2D mapWindow = getMapWindow();
123
                                Rectangle2D pxWindow = getPxWindow();
124
                                if (mapWindow == null || pxWindow == null)
125
                                        return;
126
                                panel.setWidthText(mapWindow.getWidth() / ps, 0);
127
                                panel.setHeightText((mapWindow.getWidth() / ps) / panel.getRelWidthHeight(), 0);
128
                        }
129
                        
130
                        if (e.getSource() == panel.getPResolution().getCWidth().getJTextField()) {
131
                                // Cambiamos wPx ==> hPx=wPx/rel & PS=wWC/wPx
132
                                double wPx = 0;
133
                                try {
134
                                        wPx = Double.parseDouble(panel.getPResolution().getCWidth().getJTextField().getText());
135
                                } catch (NumberFormatException ex) {
136
                                        return;
137
                                }
138
                                Rectangle2D mapWindow = getMapWindow();
139
                                Rectangle2D pxWindow = getPxWindow();
140
                                if (mapWindow == null || pxWindow == null)
141
                                        return;
142
                                panel.setWidthText(wPx, 0);
143
                                panel.setHeightText(wPx / panel.getRelWidthHeight(), 0);
144
                                panel.setCellSizeText((mapWindow.getWidth() / wPx), 4);
145
                        }
146
                        
147
                        if (e.getSource() == panel.getPResolution().getCHeight().getJTextField()) {
148
                                // Cambiamos hPx ==> wPx=rel*wPx & PS=hWC/hPx
149
                                double hPx = 0;
150
                                try {
151
                                        hPx = Double.parseDouble(panel.getPResolution().getCHeight().getJTextField().getText());
152
                                } catch (NumberFormatException ex) {
153
                                        return;
154
                                }
155
                                Rectangle2D mapWindow = getMapWindow();
156
                                Rectangle2D pxWindow = getPxWindow();
157
                                if (mapWindow == null || pxWindow == null)
158
                                        return;
159
                                panel.setWidthText(hPx * panel.getRelWidthHeight(), 0);
160
                                panel.setHeightText(hPx, 0);
161
                                panel.setCellSizeText((mapWindow.getHeight() / hPx), 4);
162
                        }
163
                }
164
        }
165

    
166
        public void keyTyped(KeyEvent e) {
167
        }
168

    
169
        public void focusGained(FocusEvent e) {
170
        }
171

    
172
        public void focusLost(FocusEvent e) {
173
                if (e.getSource() == panel.getCoor_pixel().getPDataInput11().getJTextField()
174
                        || e.getSource() == panel.getCoor_pixel().getPDataInput12().getJTextField()
175
                        || e.getSource() == panel.getCoor_pixel().getPDataInput21().getJTextField()
176
                        || e.getSource() == panel.getCoor_pixel().getPDataInput22().getJTextField()) {
177
                        eventJTextField(e.getSource());
178
                        recalcCoordFields(true);
179
                }
180
                if (e.getSource() == panel.getCoor_reales().getPDataInput11().getJTextField()
181
                        || e.getSource() == panel.getCoor_reales().getPDataInput12().getJTextField()
182
                        || e.getSource() == panel.getCoor_reales().getPDataInput21().getJTextField()
183
                        || e.getSource() == panel.getCoor_reales().getPDataInput22().getJTextField()) {
184
                        eventJTextField(e.getSource());
185
                        recalcCoordFields(false);
186
                }
187
        }
188

    
189
        public void actionPerformed(ActionEvent e) {
190
                // Bot?n de selecci?n del extent completo
191
                // Modificamos las coordenadas reales y recalculamos las coordenadas pixel
192
                if (e.getSource() == panel.getButtonBarContainer().getButton(0)) {
193
                        panel.setCoorRealFromDouble(extent.getMinX(), extent.getMaxY(), extent.getMaxX(), extent.getMinY(), 6);
194
                   Rectangle2D r = RasterUtilities.getPxRectFromMapRect(extent, widthPx, heightPx, extent);
195
                   panel.setCoorPixelFromDouble(r.getMinX(), r.getMinY(), r.getMaxX(), r.getMaxY(), 3);
196
                   panel.setWidthText(r.getWidth(), 0);
197
                        panel.setHeightText(r.getHeight(), 0);
198
                        panel.setCellSizeText((extent.getWidth() / r.getWidth()), 4);
199
                        panel.setRelWidthHeight((double) (r.getWidth() / r.getHeight()));
200
                        return;
201
                }
202
                
203
                // Bot?n de selecci?n de la herramienta de seleccionar desde la vista
204
                if (e.getSource() == panel.getButtonBarContainer().getButton(1)) {
205
                        panel.selectToolButton();
206
                        return;
207
                }
208
        }
209

    
210
        /**
211
         * Al producirse un evento de perdida de foco o pulsaci?n de "enter" en un campo de texto de coordenadas
212
         * hay que asignar el nuevo valor introducido. 
213
         * @param obj
214
         */
215
        private void eventJTextField(Object obj) {
216
                try {
217
                        if (obj == panel.getCoor_pixel().getPDataInput11().getJTextField())
218
                                panel.setCoorPixelFromDouble(Double.valueOf(panel.getCoor_pixel().getPDataInput11().getJTextField().getText()).doubleValue(), 
219
                                        panel.getPxMinY(), panel.getPxMaxX(), panel.getPxMaxY(), 3);
220
                        if (obj == panel.getCoor_pixel().getPDataInput12().getJTextField())
221
                                panel.setCoorPixelFromDouble(panel.getPxMinX(), Double.valueOf(panel.getCoor_pixel().getPDataInput12().getJTextField().getText()).doubleValue(), 
222
                                        panel.getPxMaxX(), panel.getPxMaxY(), 3);
223
                        if (obj == panel.getCoor_pixel().getPDataInput21().getJTextField())
224
                                panel.setCoorPixelFromDouble(panel.getPxMinX(), panel.getPxMinY(),
225
                                        Double.valueOf(panel.getCoor_pixel().getPDataInput21().getJTextField().getText()).doubleValue(), panel.getPxMaxY(), 3);
226
                        if (obj == panel.getCoor_pixel().getPDataInput22().getJTextField())
227
                                panel.setCoorPixelFromDouble(panel.getPxMinX(), panel.getPxMinY(),
228
                                        panel.getPxMaxX(), Double.valueOf(panel.getCoor_pixel().getPDataInput22().getJTextField().getText()).doubleValue(), 3);
229
                        
230
                        if(        obj == panel.getCoor_reales().getPDataInput11().getJTextField())
231
                                panel.setCoorRealFromDouble(Double.valueOf(panel.getCoor_reales().getPDataInput11().getJTextField().getText()).doubleValue(), 
232
                                        panel.getWcMinY(), panel.getWcMaxX(), panel.getWcMaxY(), 6);
233
                        if(        obj == panel.getCoor_reales().getPDataInput12().getJTextField())
234
                                panel.setCoorRealFromDouble(panel.getWcMinX(), Double.valueOf(panel.getCoor_reales().getPDataInput12().getJTextField().getText()).doubleValue(), 
235
                                        panel.getWcMaxX(), panel.getWcMaxY(), 6);
236
                        if(        obj == panel.getCoor_reales().getPDataInput21().getJTextField())
237
                                panel.setCoorRealFromDouble(panel.getWcMinX(), panel.getWcMinY(),
238
                                        Double.valueOf(panel.getCoor_reales().getPDataInput21().getJTextField().getText()).doubleValue(), panel.getWcMaxY(), 6);
239
                        if(        obj == panel.getCoor_reales().getPDataInput22().getJTextField())
240
                                panel.setCoorRealFromDouble(panel.getWcMinX(), panel.getWcMinY(),
241
                                        panel.getWcMaxX(), Double.valueOf(panel.getCoor_reales().getPDataInput22().getJTextField().getText()).doubleValue(), 6);
242
                }catch(NumberFormatException ex1){
243
                        //No hay valores parseables a decimal en las cajas de texto. No hacemos 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 (panel.getCoor_pixel().getPDataInput11().getJTextField().equals("")
253
                                || panel.getCoor_pixel().getPDataInput12().getJTextField().equals("")
254
                                || panel.getCoor_pixel().getPDataInput21().getJTextField().equals("")
255
                                || panel.getCoor_pixel().getPDataInput22().getJTextField().equals("")
256
                                || panel.getCoor_reales().getPDataInput11().getJTextField().equals("")
257
                                || panel.getCoor_reales().getPDataInput12().getJTextField().equals("")
258
                                || panel.getCoor_reales().getPDataInput21().getJTextField().equals("")
259
                                || panel.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(panel.getPxMinX() == 0 && panel.getPxMinY() == 0 && panel.getPxMaxX() == 0 && panel.getPxMaxY() == 0)
270
                        return null;
271
                return new Rectangle2D.Double(panel.getPxMinX(), panel.getPxMinY(), Math.abs(panel.getPxMaxX() - panel.getPxMinX()), Math.abs(panel.getPxMaxY() - panel.getPxMinY()));
272
        }
273
        
274
        /**
275
         * Obtiene un rectangulo con la ventana en coordenadas reales. Estos datos son leidos desde el interfaz.
276
         * @return Rectangle2D
277
         */
278
        private Rectangle2D getMapWindow(){
279
                if(panel.getWcMinX() == 0 && panel.getWcMinY() == 0 && panel.getWcMaxX() == 0 && panel.getWcMaxY() == 0)
280
                        return null;
281
                return new Rectangle2D.Double(panel.getWcMinX(), panel.getWcMaxY(), Math.abs(panel.getWcMaxX() - panel.getWcMinX()), Math.abs(panel.getWcMaxY() - panel.getWcMinY()));
282
        }
283
        
284
        /**
285
         * Recalcula el valor de los campos de coordenadas reales y pixel. Cuando modificamos alg?n campo
286
         * de las coordenadas reales se modifican los pixeles y viceversa.
287
         * @param modifyPx true si se ha modificado alg?n campo de coordenadas pixel y false si se ha modificado
288
         * alg?n campo de las coordenadas reales.
289
         */
290
        private void recalcCoordFields(boolean modifyPx) {
291
                if (isFieldsFill()) {
292
                        try {
293
                                if (modifyPx) {
294
                                        Rectangle2D pxWindow = getPxWindow();
295
                                        if (pxWindow == null)
296
                                                return;
297
                                        Rectangle2D newWC = RasterUtilities.getMapRectFromPxRect(extent, widthPx, heightPx, pxWindow);
298
                                        panel.setCoorRealFromDouble(newWC.getMinX(), newWC.getMaxY(), newWC.getMaxX(), newWC.getMinY(), 6);
299
                                        panel.setWidthText(pxWindow.getWidth(), 0);
300
                                        panel.setHeightText(pxWindow.getHeight(), 0);
301
                                        panel.setCellSizeText((newWC.getWidth() / pxWindow.getWidth()), 4);
302
                                        panel.setRelWidthHeight((double)(pxWindow.getWidth() / pxWindow.getHeight()));
303
                                } else {
304
                                        Rectangle2D mapWindow = getMapWindow();
305
                                        if(mapWindow == null)
306
                                                return;
307
                                        Rectangle2D newPx = RasterUtilities.getPxRectFromMapRect(extent, widthPx, heightPx, mapWindow);
308
                                        panel.setCoorPixelFromDouble(newPx.getMinX(), newPx.getMinY(), newPx.getMaxX(), newPx.getMaxY(), 3);
309
                                        panel.setWidthText(newPx.getWidth(), 0);
310
                                        panel.setHeightText(newPx.getHeight(), 0);
311
                                        panel.setCellSizeText((mapWindow.getWidth() / newPx.getWidth()), 4);
312
                                        panel.setRelWidthHeight((double)(newPx.getWidth() / newPx.getHeight()));
313
                                }
314
                        } catch (NumberFormatException ex) {
315
                                return;
316
                        }
317
                }
318
        }
319

    
320
        public void rectangle(RectangleEvent event) throws BehaviorException {
321
        }
322

    
323
        public boolean cancelDrawing() {
324
                return false;
325
        }
326

    
327
        public Cursor getCursor() {
328
                return null;
329
        }
330
        
331
        public void setWidthPx(int value) {
332
                widthPx = value;
333
        }
334
        
335
        public void setHeightPx(int value) {
336
                heightPx = value;
337
        }
338

    
339
        public void actionButtonPressed(ButtonsPanelEvent e) {
340
                // Bot?n de Aceptar
341
                if (e.getButton() == ButtonsPanel.BUTTON_ACCEPT) {
342
                        accept();
343
                        close();
344
                }
345

    
346
                // Bot?n de Aplicar
347
                if (e.getButton() == ButtonsPanel.BUTTON_APPLY) {
348
                        accept();
349
                        getCuttingPanel().setNewLayerText();
350
                }
351
                
352
                // Bot?n de Cerrar
353
                if (e.getButton() == ButtonsPanel.BUTTON_CANCEL) {
354
                        close();
355
                }
356

    
357
                getCuttingPanel().getFLayer().getMapContext().invalidate();                
358
        }
359
        
360
        private void close() {
361
                try {
362
                        if (getCuttingPanel().getLastTool() != null)
363
                                getCuttingPanel().getMapControl().setTool(getCuttingPanel().getLastTool());
364
                        PluginServices.getMDIManager().closeWindow(getCuttingPanel().getCuttingDialog());
365
                } catch (ArrayIndexOutOfBoundsException ex) {
366
                        // Si la ventana no se puede eliminar no hacemos nada
367
                }
368
        }
369
        
370
        public CuttingPanel getCuttingPanel() {
371
                return panel;
372
        }
373

    
374
        /**
375
         * Acciones realizadas cuando se acepta en el dialogo. Se obtendr?n los datos
376
         * de recorte desde el dialogo, crearemos el objeto CuttingProcess que
377
         * gestiona el recortado, ajustamos el tama?o del grid de salida y procesamos.
378
         */
379
        private void accept() {
380
                // Controlamos las coordenadas del recorte que no se salgan de la imagen.
381
                // De ser as? mostramos un error
382
                CoordDataInputContainer values = getCuttingPanel().getCoor_reales();
383
                double minX = 0;
384
                double maxY = 0;
385
                double maxX = 0;
386
                double minY = 0;
387
                try {
388
                        minX = Double.parseDouble(values.getPDataInput11().getValue());
389
                        maxY = Double.parseDouble(values.getPDataInput22().getValue());
390
                        maxX = Double.parseDouble(values.getPDataInput21().getValue());
391
                        minY = Double.parseDouble(values.getPDataInput12().getValue());
392
                        Rectangle2D ext = getCuttingPanel().getFLayer().getFullExtent();
393
                        if (minX > ext.getMaxX() || maxX < ext.getMinX()
394
                                || minY > ext.getMaxY() || maxY < ext.getMinY()) {
395
                                JOptionPane.showMessageDialog(
396
                                                (Component) PluginServices.getMainFrame(), PluginServices.getText(
397
                                                                this, "coordenadas_erroneas"));
398
                                return;
399
                        }
400
                } catch (NumberFormatException e) {
401
                        JOptionPane.showMessageDialog((Component) PluginServices.getMainFrame(),
402
                                        PluginServices.getText(this, "coordenadas_erroneas"));
403
                        return;
404
                } catch (ExpansionFileReadException e) {
405
                        e.printStackTrace();
406
                } catch (ReadDriverException e) {
407
                        e.printStackTrace();
408
                }
409

    
410
                // Obtenemos las coordenadas del recorte
411
                CoordDataInputContainer sValues = getCuttingPanel().getCoor_pixel();
412
                int[] dValues = new int[4];
413
                try {
414
                        dValues[0] = (int) Math.round(Double.valueOf(sValues.getPDataInput11().getValue()).doubleValue());
415
                        dValues[1] = (int) Math.round(Double.valueOf(sValues.getPDataInput22().getValue()).doubleValue());
416
                        dValues[2] = (int) Math.round(Double.valueOf(sValues.getPDataInput21().getValue()).doubleValue());
417
                        dValues[3] = (int) Math.round(Double.valueOf(sValues.getPDataInput12().getValue()).doubleValue());
418
                } catch (NumberFormatException exc) {
419
                        // Los valores de las cajas son incorrectos. Terminamos la funci?n
420
                        return;
421
                }
422
                
423
                // Seleccionamos las bandas que se usaran en el recorte a partir de la tabla
424
                int countBands = 0;
425
                int rowCount = ((CheckBoxModel) getCuttingPanel().getTSelection().getModel())
426
                                .getRowCount();
427
                for (int iRow = 0; iRow < rowCount; iRow++)
428
                        if ((((Boolean) ((CheckBoxModel) getCuttingPanel().getTSelection().getModel())
429
                                        .getValueAt(iRow, 0))).booleanValue())
430
                                countBands++;
431

    
432
                int[] drawableBands = new int[countBands];
433
                int i = 0;
434
                for (int iRow = 0; iRow < rowCount; iRow++) {
435
                        if ((((Boolean) ((CheckBoxModel) getCuttingPanel().getTSelection().getModel())
436
                                        .getValueAt(iRow, 0))).booleanValue()) {
437
                                drawableBands[i++] = iRow;
438
                        }
439
                }
440

    
441
                /**
442
                 * Donde se va a guardar el fichero
443
                 */
444
                String path = "";
445
                if (getCuttingPanel().getCbSaveFile().isSelected()) {
446
                        JFileChooser chooser = new JFileChooser(CuttingPanelListener.lastPath);
447
                        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
448
                        chooser.setDialogTitle(PluginServices.getText(this, "seleccionar_directorio"));
449
        
450
                        if (chooser.showOpenDialog(getCuttingPanel()) != JFileChooser.APPROVE_OPTION)
451
                                return;
452
                        CuttingPanelListener.lastPath = chooser.getSelectedFile().toString();
453
                        path = CuttingPanelListener.lastPath;
454
                } else {
455
                        path = Utilities.createTempDirectory();
456
                }
457

    
458
                String file = getCuttingPanel().getFilenameTextField().getText();
459
                if (file == "") file = "cutlayer";
460

    
461
                String filename = path + File.separator + file;
462

    
463
                /**
464
                 * Preparacion para la generacion del proceso del recorte
465
                 */
466
                RasterMultiDataset rasterMultiDataset = ((FLyrRasterSE) getCuttingPanel().getFLayer()).getGeoRasterMultiDataset();
467
                WriterBufferServer dataWriter1 = new WriterBufferServer();
468
                Extent extent = new Extent(minX, maxY, maxX, minY);
469

    
470
                CuttingProcess cuttingProcess = new CuttingProcess(this, dValues, filename, dataWriter1, rasterMultiDataset, extent, drawableBands, getCuttingPanel().getCbOneLyrPerBand().isSelected());
471
                cuttingProcess.setResolution((int) getCuttingPanel().getWidthText(), (int) getCuttingPanel().getHeightText());
472
                IncrementableTask incrementableTask = new IncrementableTask(dataWriter1);
473
                cuttingProcess.setIncrementableTask(incrementableTask);
474
                incrementableTask.showWindow();
475
                cuttingProcess.start();
476
                incrementableTask.start();                
477
        }
478
        
479
        /**
480
         * Acciones que se realizan al finalizar de crear los recortes de imagen.
481
         * Este m?todo es llamado por el thread TailRasterProcess al finalizar.
482
         */
483
        public void cutFinalize(String fileNames) {
484
                if (!getCuttingPanel().getCbLoadLayerInToc().isSelected())
485
                        return;
486
                // seleccionamos la vista de gvSIG
487
                com.iver.cit.gvsig.project.documents.view.gui.View theView = null;
488
                try {
489
                        IWindow[] allViews = PluginServices.getMDIManager().getAllWindows();
490
                        for (int i = 0; i < allViews.length; i++) {
491
                                if (allViews[i] instanceof com.iver.cit.gvsig.project.documents.view.gui.View
492
                                                && PluginServices.getMDIManager().getWindowInfo((View) allViews[i])
493
                                                                .getTitle().equals(getCuttingPanel().getViewName()))
494
                                        theView = (com.iver.cit.gvsig.project.documents.view.gui.View) allViews[i];
495
                        }
496
                        if (theView == null)
497
                                return;
498
                } catch (ClassCastException ex) {
499
                        // logger.error(PluginServices.getText(this,"cant_get_view "), ex);
500
                        return;
501
                }
502

    
503
                // Cargamos las capas
504
                theView.getMapControl().getMapContext().beginAtomicEvent();
505
                try {
506
                        Driver driver = LayerFactory.getDM().getDriver("gvSIG Raster Driver");
507
                        int endIndex = fileNames.lastIndexOf(".");
508
                        if (endIndex < 0)
509
                                endIndex = fileNames.length();
510
                        FLayer lyr = FLyrRasterSE.createLayer(fileNames.substring(
511
                                        fileNames.lastIndexOf(File.separator) + 1, endIndex),
512
                                        (GenericRasterDriver) driver, new File(fileNames), theView
513
                                                        .getMapControl().getProjection());
514
                        theView.getMapControl().getMapContext().getLayers().addLayer(lyr);
515
                        theView.getMapControl().getMapContext().endAtomicEvent();
516

    
517
                        theView.getMapControl().getMapContext().invalidate();
518
//                        grid.free();
519
                } catch (DriverLoadException e) {
520
                        e.printStackTrace();
521
                }
522
        }
523
}