Revision 12181

View differences:

trunk/extensions/extRemoteSensing/src-test/es/idr/teledeteccion/gridmath/gui/CalculatorDialogTest.java
1
package es.idr.teledeteccion.gridmath.gui;
2

  
3
import javax.swing.JFrame;
4
import javax.swing.UIManager;
5

  
6
public class CalculatorDialogTest {
7

  
8
	/**
9
	 * @param args
10
	 */
11
	public static void main(String[] args) {
12
		
13
		try {
14
			UIManager.setLookAndFeel("com.jgoodies.looks.plastic.PlasticXPLookAndFeel");
15
		} catch (Exception e) {
16
			System.err.println("No se puede cambiar al LookAndFeel");
17
		}
18
		
19
		JFrame frame = new JFrame();
20
		CalculatorDialog dialog = new CalculatorDialog(null);
21
		frame.setSize(790,360);
22
		frame.getContentPane().add(dialog);
23
		frame.setVisible(true);
24
		frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
25
	}
26
}
0 27

  
trunk/extensions/extRemoteSensing/config/text.properties
1 1
#Translations for language [es]
2
a_fichero=Guardar en fichero
3
a_memoria=Generar en memoria
2 4
autovalor=Autovalor
3 5
autovector_matrix= Matriz autovectores
4 6
ajustar_entrada=Ajustar a datos de entrada
......
31 33
imagen_modis= Imagen Modis
32 34
no_capas_cargadas=No hay ninguna capa cargada
33 35
nombre_capa=Nombre de la capa:
34
nombre_capa= Nombre:
36
nombre_capa= Nombre de la capa:
35 37
num_filas_columnas=N?mero filas / columnas:
36 38
no_variables=Error.No hay variables
37 39
no_bandas= No hay bandas seleccionadas
......
52 54
sintaxis_error=Error de sintaxis. Revise la expresi?n.
53 55
salida_raster=Salida raster
54 56
seleccion_componente= Selecci?n de Componentes
55
tama?o_celda=Tama?o de celda:
57
tamaio_celda=Tama?o de celda:
56 58
tasseled_cap= Tasseled Cap
57 59
tipo= Tipo
58 60
todos= Todas
trunk/extensions/extRemoteSensing/doc/Notas.txt
2 2
- Ver que hacer con los tipos de dato (ej. en TasseledCap ha crecido mucho el c?digo por este motivo):
3 3
	- En realidad es lo mismo que pasa con los filtros: cada filtro est? implementado para cada tipo de dato.
4 4
	- ?Es muy descabellado poner en Grid una funcion: double getCellValue(x,y) que compruebe el tipo de dato y haga el
5
	casting (double) a la correspondiente funcion getCelValueAs___ ?
5
	casting (double) a la correspondiente funcion getCelValueAs___ ? 
6 6
- Desacoplar m?s la intefaz del proceso...
7 7
- El Grid interpolado parece que no funciona como el de standardExtension.
8
- Uso de  NODATA.
9
- Parece que los filtros no dan los mismos resultados que en el piloto: los colores aparecen un poco raros.
10
- Calculadora: Opciones de salida en otra solapa.
11
- Calculadora: Extent definido por el usuario-> est? admitiendo letras.
trunk/extensions/extRemoteSensing/src/es/idr/teledeteccion/GridCalculatorExtension.java
47 47
import com.iver.cit.gvsig.project.documents.view.IProjectView;
48 48
import com.iver.cit.gvsig.project.documents.view.gui.View;
49 49

  
50
import es.idr.teledeteccion.gridmath.gui.CalculatorPanel;
50
import es.idr.teledeteccion.gridmath.gui.CalculatorDialog;
51 51

  
52 52
/**
53 53
 * Extensi?n para el C?lculo de Raster (Band Math)
......
67 67

  
68 68
			//si la ventana activa es de tipo Vista 
69 69
			if (activeWindow instanceof View) {
70
				CalculatorPanel calculatorPanel=new CalculatorPanel((View)activeWindow);
70
				CalculatorDialog calculatorDialog =new CalculatorDialog((View)activeWindow);
71 71
				//Mostrar la calculadora.
72
				PluginServices.getMDIManager().addWindow(calculatorPanel);
72
				PluginServices.getMDIManager().addWindow(calculatorDialog);
73 73
			}
74 74
		}
75 75
	}
trunk/extensions/extRemoteSensing/src/es/idr/teledeteccion/gridmath/GridMathProcess.java
85 85
	HashMap 						params = null;   // Asignacion de variables a grids.
86 86
	JEP 							parser = null;
87 87
	String 							expression = null;
88
	Grid							resultGrid = null;
89 88
	GridExtent 						resultExtent = null;
90 89
	private IncrementableTask		incrementableTask 	= null;
91 90
	private Thread 					blinker				= null;
......
186 185
			resultExtent = ((Grid)params.values().iterator().next()).getGridExtent();
187 186

  
188 187
	   // Construccion del Grid para escritura
188
		Grid resultGrid = null;
189 189
		try {
190 190
			resultGrid = new Grid (resultExtent,resultExtent,IBuffer.TYPE_DOUBLE,new int[]{0});
191 191
		} catch (RasterBufferInvalidException e) {
......
398 398
	}
399 399

  
400 400
	public void actionCanceled(IncrementableEvent e) {
401
		if(writerBufferServer != null)
402
			writerBufferServer.setCanceled(true, 0);
401 403
		cancel = true;
402 404
		
403 405
	}
trunk/extensions/extRemoteSensing/src/es/idr/teledeteccion/gridmath/gui/RasterConfigurationPanel.java
1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2006 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 Iba?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 es.idr.teledeteccion.gridmath.gui;
42

  
43
import info.clearthought.layout.TableLayout;
44

  
45
import java.awt.BorderLayout;
46
import java.awt.Dimension;
47
import java.awt.FlowLayout;
48
import java.awt.event.ActionEvent;
49
import java.awt.event.ActionListener;
50
import java.awt.event.FocusEvent;
51
import java.awt.event.FocusListener;
52
import java.awt.event.KeyEvent;
53
import java.awt.event.KeyListener;
54

  
55
import javax.swing.BorderFactory;
56
import javax.swing.ComboBoxModel;
57
import javax.swing.DefaultComboBoxModel;
58
import javax.swing.JButton;
59
import javax.swing.JComboBox;
60
import javax.swing.JLabel;
61
import javax.swing.JPanel;
62
import javax.swing.JRadioButton;
63
import javax.swing.JTextField;
64
import javax.swing.SwingConstants;
65
import javax.swing.border.CompoundBorder;
66
import javax.swing.border.EmptyBorder;
67
import javax.swing.border.TitledBorder;
68

  
69
import org.gvsig.fmap.layers.FLyrRasterSE;
70
import org.gvsig.gui.beans.incrementabletask.IncrementableTask;
71
import org.gvsig.raster.buffer.RasterBufferInvalidException;
72
import org.gvsig.raster.grid.Grid;
73

  
74
import com.iver.andami.PluginServices;
75
import com.iver.andami.ui.mdiManager.IWindow;
76
import com.iver.andami.ui.mdiManager.WindowInfo;
77
import com.iver.cit.gvsig.fmap.MapContext;
78
import com.iver.cit.gvsig.fmap.layers.FLayer;
79
import com.iver.cit.gvsig.fmap.layers.FLayers;
80
import com.iver.cit.gvsig.fmap.layers.FLyrRaster;
81
import com.iver.cit.gvsig.project.documents.view.gui.View;
82

  
83
import es.idr.teledeteccion.gridmath.GridMathProcess;
84

  
85

  
86
/**Clase que implementa la interfaz de configuracion del extent de salida del resultado de 
87
 * @author Alejandro Mu?oz
88
 *
89
 */
90
public class RasterConfigurationPanel extends JPanel implements IWindow,ActionListener,FocusListener,KeyListener {
91
	
92
	
93
	private static final long serialVersionUID = 1L;
94
	private JButton aceptar;
95
	private JButton cancelar;
96
	
97
	private JPanel southPanel;
98
	private JPanel centerPanel;
99
	private JPanel nombreCapa;
100
	private JPanel panelExtension;
101
	private JPanel paramPanel;
102
	
103
	private JTextField jTextNombreCapa;
104
	private JTextField  jTextRangoX1;
105
	private JTextField  jTextRangoX2;
106
	private JTextField jTextRangoY1;
107
	private JTextField jTextRangoY2;
108
	private JTextField jTextCellSize;
109
	private JTextField  jTextNumFiCol1;
110
	private JTextField jTextNumFiCol2;
111
	private FLayers layers;
112
	
113
	private JLabel etiq4;
114
	
115
	private JRadioButton rButtom1;
116
	private JRadioButton rButtom2;
117
	private JRadioButton rButtom3;
118
	private JRadioButton rButtom4;
119
	
120
	private JComboBox jComboCapas;
121
	private MapContext mapContext;
122
	
123
	private int wPanel=340;
124
	private int hPanel=500;
125
	private CalculatorPanel cp;
126
	
127
	
128
	// Constructor que toma como parametros la vista de la aplicacion y el 
129
	// CalculatorPanel desde el que se invoca.
130
	public RasterConfigurationPanel(View vista, CalculatorPanel cp) {
131
		
132
		super();	
133
		mapContext = vista.getModel().getMapContext();	
134
		layers = mapContext.getLayers();
135
		this.cp=cp;
136
		Inicializar();
137
		InicializarOpcion();
138
	}
139
	
140
	
141
	
142
	// Inicializa el cuadro de dialogo
143
	public void  Inicializar(){
144
		
145
		BorderLayout bd=new BorderLayout();
146
		this.setLayout(bd);
147
		this.setBorder( new EmptyBorder(10, 10, 10, 10));
148
		this.add(getSouthPanel(),BorderLayout.SOUTH);
149
		this.add(getCenterPanel(),BorderLayout.CENTER);
150
		
151
	}
152
	
153
	
154
	
155
	public WindowInfo getWindowInfo() {
156
		
157
		WindowInfo m_viewinfo = new WindowInfo(WindowInfo.RESIZABLE);
158
		//Establecer el tamao del formulario
159
		m_viewinfo.setWidth(wPanel);
160
		m_viewinfo.setHeight(hPanel);
161
		//Establecer el ttulo del formulario
162
		m_viewinfo.setTitle(PluginServices.getText(this,"Configuracion de salida raster"));
163
		//punto X de la pantalla donde se situa
164
		m_viewinfo.setX(80);
165
	
166
		return m_viewinfo;
167
	
168
}
169
	
170

  
171
	// Panel inferior, se a?aden los botones de aceptar y cancelar
172
	public JPanel getSouthPanel() {
173
		
174
		if (southPanel==null){
175
				
176
				southPanel=new JPanel();
177
		}
178
		
179
		southPanel.setLayout(new FlowLayout(FlowLayout.CENTER,5,5));
180
		southPanel.add(getAceptar());
181
		southPanel.add(getCancelar());
182
		
183
		return southPanel;
184
		
185
	}
186

  
187
	
188
	public JButton getAceptar() {
189
		
190
		if (aceptar==null){
191
			aceptar=new JButton();
192
			aceptar.setText(PluginServices.getText(this,"aceptar"));
193
			aceptar.addActionListener(this);
194
		}
195
		return aceptar;
196
		
197
	}
198

  
199

  
200
	public JButton getCancelar() {
201
		
202
		if (cancelar==null){
203
			cancelar=new JButton();
204
			cancelar.setText(PluginServices.getText(this,"cancelar"));
205
			cancelar.addActionListener(this);
206
		}
207
	
208
		return cancelar;
209
	}
210

  
211

  
212
    
213
	/*Panel central, que se divide en tres subpaneles: NombreCapa, 
214
	PanelExtension y ParameterPanel*/
215
	
216
	public JPanel getCenterPanel() {
217
		
218
		if (centerPanel==null){
219
			
220
			centerPanel=new JPanel();
221
			TitledBorder topBorder = BorderFactory.createTitledBorder((PluginServices.getText(this,"salida_raster")));
222
		    topBorder.setTitlePosition(TitledBorder.TOP);
223
		    centerPanel.setBorder(new CompoundBorder(topBorder,new EmptyBorder(0,5,6,5)));
224
		    JPanel p=new JPanel();
225
			TableLayout thisLayout = new TableLayout(new double[][] {
226
				 {2.0, TableLayout.PREFERRED},	 
227
				{40.0,180,180}});
228
			p.setLayout(thisLayout);
229
			p.add(getNombreCapa(),"1,0");
230
			p.add(getPanelExtension(),"1,1");
231
			p.add(getParameterPanel(),"1,2");
232
			centerPanel.add(p);
233
		
234
		}		
235
		
236
		return centerPanel;
237
	}
238

  
239

  
240

  
241
	/*Panel NombreCapa, tiene etiqueta y TextField */
242
	public JPanel getNombreCapa() {
243
		
244
		
245
		if (nombreCapa==null){
246
			nombreCapa=new JPanel();
247
			
248
			    // Nuevo panel al que se aaden los elementos
249
				JPanel p=new JPanel();
250
				TableLayout thisLayout = new TableLayout(new double[][] {
251
					 {5.0, TableLayout.PREFERRED,TableLayout.FILL},	 
252
					{TableLayout.PREFERRED}}); 
253
				
254
					//Establece la separacin entre los elementos
255
					thisLayout.setHGap(5);
256
					thisLayout.setVGap(5);
257
					p.setLayout(thisLayout);
258
					p.add(getJTextNombreCapa(),"2,0");
259
					p.add(getEtiq4(),"1,0");
260
								
261
			nombreCapa.add(p);
262
		}
263
			
264
		return nombreCapa;
265
	}
266

  
267

  
268

  
269
    // TextField NombreCapa
270
	public JTextField getJTextNombreCapa() {
271
		
272
		if (jTextNombreCapa==null){
273
			
274
			jTextNombreCapa=new JTextField(15);
275
			jTextNombreCapa.addFocusListener(this);
276

  
277
		}
278
		
279
		return jTextNombreCapa;
280
	}
281

  
282

  
283

  
284
	// Etiqueta 
285
	public JLabel getEtiq4() {
286
		
287
		if(etiq4==null){
288
			etiq4 = new JLabel( (PluginServices.getText(this,"nombre_capa")),SwingConstants.RIGHT );
289
			
290
		}		
291
		return etiq4;
292
	}
293

  
294

  
295

  
296
	/*Panel PanelExtension, los radioButton y el comboCapas */
297
	public JPanel getPanelExtension() {
298
		
299
		
300
		if (panelExtension==null){
301
			
302
			panelExtension=new JPanel();
303
			TitledBorder topBorder = BorderFactory.createTitledBorder((PluginServices.getText(this,"extension_from")));
304
		    topBorder.setTitlePosition(TitledBorder.TOP);
305
		    panelExtension.setBorder(new CompoundBorder(topBorder,new EmptyBorder(0,5,6,5)));
306
			
307
		    JPanel p=new JPanel();
308
		    p.setPreferredSize(new Dimension(260,150));
309
				TableLayout thisLayout = new TableLayout(new double[][] {
310
						{50, TableLayout.PREFERRED},	 
311
						{TableLayout.PREFERRED,TableLayout.PREFERRED,TableLayout.PREFERRED, TableLayout.PREFERRED,TableLayout.PREFERRED }}); 
312
						//Establece la separacin entre los elementos
313
						thisLayout.setHGap(5);
314
						thisLayout.setVGap(5);
315
						p.setLayout(thisLayout);
316
						p.add(getRButtom1(),"1,0");
317
						p.add(getRButtom2(),"1,1");
318
						p.add(getRButtom3(),"1,2");
319
						p.add(getRButtom4(),"1,3");
320
						p.add(getJComboCapas(),"1,4");
321
				
322
		     panelExtension.add(p);
323
		}
324
		
325
		return panelExtension;
326
	}
327

  
328

  
329
	/*Panel ParameterPanel, con cada uno de los parametros de configuracin de la salida raster. */
330
	public JPanel getParameterPanel() {
331
		
332
		
333
		if (paramPanel==null){
334
			paramPanel=new JPanel();
335
			TitledBorder topBorder = BorderFactory.createTitledBorder((PluginServices.getText(this,"parametros")));
336
		    topBorder.setTitlePosition(TitledBorder.TOP);
337
		    paramPanel.setBorder(new CompoundBorder(topBorder,new EmptyBorder(0,5,6,5)));
338
			
339
		    
340
		    JPanel p=new JPanel();
341
		    p.setPreferredSize(new Dimension(260,150));
342
			TableLayout thisLayout = new TableLayout(new double[][] {
343
				 {100,75, 75},	 
344
				{3,20,20,20,20}}); 
345
				//Establece la separacin entre los elementos
346
				thisLayout.setHGap(5);
347
				thisLayout.setVGap(10);
348
				p.setLayout(thisLayout);
349
				
350
				//Aado los diferentes elementos
351
				p.add(new JLabel((PluginServices.getText(this,"rangox"))),"0,1");
352
				p.add(new JLabel((PluginServices.getText(this,"rangoy"))),"0,2");
353
				p.add(new JLabel((PluginServices.getText(this,"tamao_celda"))),"0,3");
354
				p.add(new JLabel((PluginServices.getText(this,"num_filas_columnas"))),"0,4");
355
				p.add(getJTextCellSize(),"1,3");
356
				p.add(getJTextNumFiCol1(),"1,4");
357
				p.add(getJTextNumFiCol2(),"2,4");
358
				p.add(getJTextRangoX1(),"1,1");
359
				p.add(getJTextRangoX2(),"2,1");
360
				p.add(getJTextRangoY1(),"1,2");
361
				p.add(getJTextRangoY2(),"2,2");
362
				
363
				paramPanel.add(p);
364
		}
365
		return paramPanel;
366
	}
367

  
368
	
369

  
370
	//RadioButton1
371
	public JRadioButton getRButtom1() {
372
		if(rButtom1==null){
373
			rButtom1=new JRadioButton((PluginServices.getText(this,"ajustar_entrada")), true);
374
			rButtom1.addActionListener(this);
375
			
376
			
377
			}
378
			
379
		return rButtom1;
380
	}
381

  
382

  
383

  
384
	//RadioButton2
385
	public JRadioButton getRButtom2() {
386
		
387
		if(rButtom2==null){
388
			rButtom2=new JRadioButton((PluginServices.getText(this,"definida_usuario")), false);
389
			rButtom2.addActionListener(this);
390
		}
391

  
392
		return rButtom2;
393
	}
394

  
395

  
396

  
397
	//RadioButton3
398
	public JRadioButton getRButtom3() {
399
		if(rButtom3==null){
400
			rButtom3=new JRadioButton((PluginServices.getText(this,"extension_vista")), false);
401
			rButtom3.addActionListener(this);			
402
		}
403
		return rButtom3;
404
	}
405

  
406

  
407

  
408

  
409
	//RadioButton4
410
	public JRadioButton getRButtom4() {
411
		if(rButtom4==null){
412
			rButtom4=new JRadioButton((PluginServices.getText(this,"extension_capa")), false);
413
			rButtom4.addActionListener(this);	
414
		}
415
		return rButtom4;
416
	}
417

  
418

  
419

  
420
	
421
	// Tamo de celda
422
	public JTextField getJTextCellSize() {
423
		
424
		if (jTextCellSize==null){
425
			jTextCellSize=new JTextField();
426
			jTextCellSize.setEditable(false);
427
			jTextCellSize.addKeyListener(this);
428
	          
429
		}
430
		
431
		return jTextCellSize;
432
	}
433

  
434

  
435

  
436
	// Numero filas
437
	public JTextField getJTextNumFiCol1() {
438
		
439
		if (jTextNumFiCol1==null){
440
			jTextNumFiCol1=new JTextField ();
441
			jTextNumFiCol1.setEditable(false);
442
		
443
			
444
		}
445
		
446
		return jTextNumFiCol1;
447
	}
448

  
449

  
450

  
451
	// Rango x inferior
452
	public JTextField  getJTextRangoX1() {
453

  
454
		if (jTextRangoX1==null){
455
					
456
			jTextRangoX1 =new JTextField ();
457
			jTextRangoX1.setEditable(false);
458
			jTextRangoX1.addKeyListener(this);	
459
			
460
		}
461
		
462
		
463
		return jTextRangoX1;
464
	}
465

  
466

  
467

  
468
	// Rango x superior
469
	public JTextField getJTextRangoX2() {
470

  
471
		if (jTextRangoX2==null){
472
			jTextRangoX2=new JTextField ();
473
			jTextRangoX2.setEditable(false);
474
			jTextRangoX2.addKeyListener(this);
475
			
476
		}
477
		return jTextRangoX2;
478
	}
479

  
480

  
481

  
482
	// Rango y inferior
483
	public JTextField  getJTextRangoY1() {
484

  
485
		if (jTextRangoY1==null){
486
			jTextRangoY1=new JTextField ();
487
			jTextRangoY1.setEditable(false);
488
			jTextRangoY1.addKeyListener(this);
489
			}
490
		return jTextRangoY1;
491
	}
492

  
493

  
494
	// Rango y superior
495
	public JTextField  getJTextRangoY2() {
496

  
497
		if (jTextRangoY2==null){
498
			jTextRangoY2=new JTextField ();
499
			jTextRangoY2.setEditable(false);
500
			jTextRangoY2.addKeyListener(this);
501
		}
502
		return jTextRangoY2;
503
	}
504

  
505

  
506

  
507
	// Numero columnas
508
	public JTextField getJTextNumFiCol2() {
509
		
510
		if (jTextNumFiCol2==null){
511
			jTextNumFiCol2=new JTextField ();
512
			jTextNumFiCol2.setEditable(false);
513
			
514
		}
515
		return jTextNumFiCol2;
516
	}
517

  
518

  
519

  
520
    // JComboCapas
521
	public JComboBox getJComboCapas() {
522
		
523
		if (jComboCapas==null){
524
			ComboBoxModel jComboBoxLayersModel = new DefaultComboBoxModel(getLayerNames());
525
			jComboCapas = new JComboBox();
526
			jComboCapas.setModel(jComboBoxLayersModel);
527
			jComboCapas.setEnabled(false);
528
			jComboCapas.addActionListener(this);
529
		}
530
				
531
					
532
		return jComboCapas;
533
	}
534

  
535

  
536
	
537
	
538
	// Devuelve el nombre de los ficheros cargados actualmente
539
	private String[] getLayerNames() {
540
	
541
		int i;
542
		String[] sNames = new String[layers.getLayersCount()];
543

  
544
		for (i = 0; i < layers.getLayersCount(); i++) {      		
545
			sNames[i] = (layers.getLayer(i)).getName();
546
		}
547
    
548
		return sNames;
549
	}
550

  
551
	// Establece la opcion por defecto cuando se crea el cuadro de dialogo. El extent por defecto, 
552
	public void InicializarOpcion(){
553
		
554
		
555
		DesabilitarTodo();
556
		rButtom1.setSelected(true);
557
		
558
		String layerName = cp.getJTableVariables().getTableFormat().getValueAt(0,1).toString();
559
		layerName = layerName.substring(0,layerName.indexOf("["));
560
		FLyrRasterSE rasterLayer = (FLyrRasterSE)mapContext.getLayers().getLayer(layerName);
561
		
562
		double xMin =rasterLayer.getDatasource().getExtent().minX();
563
		double xMax =rasterLayer.getDatasource().getExtent().maxX();
564
		double yMin =rasterLayer.getDatasource().getExtent().minY();
565
		double yMax =rasterLayer.getDatasource().getExtent().maxY();
566
		double cellSize=rasterLayer.getDatasource().getXCellSize();
567
		
568
		for (int i=0;i<cp.getJTableVariables().getTableFormat().getRowCount();i++){
569
			layerName = cp.getJTableVariables().getTableFormat().getValueAt(i,1).toString();
570
			layerName = layerName.substring(0,layerName.indexOf("["));
571
			rasterLayer = (FLyrRasterSE)mapContext.getLayers().getLayer(layerName);
572
			
573
			xMin = Math.min(xMin,rasterLayer.getDatasource().getExtent().minX());
574
			xMax = Math.max(rasterLayer.getDatasource().getExtent().maxX(),xMax);
575
			yMin = Math.min(yMin,rasterLayer.getDatasource().getExtent().minY());
576
			yMax = Math.max(yMax,rasterLayer.getDatasource().getExtent().maxY());
577
			cellSize = Math.min(cellSize,rasterLayer.getDatasource().getXCellSize());				
578
		}
579
		cp.getOutputExtent().setXRange(xMin,xMax);
580
		cp.getOutputExtent().setYRange(yMin,yMax);
581
		cp.getOutputExtent().setCellSize(cellSize);
582
		getJTextRangoX1().setText(String.valueOf(cp.getOutputExtent().minX()));
583
		getJTextRangoX2().setText(String.valueOf(cp.getOutputExtent().maxX()));
584
		getJTextRangoY1().setText(String.valueOf(cp.getOutputExtent().minY()));
585
		getJTextRangoY2().setText(String.valueOf(cp.getOutputExtent().maxY()));
586
		getJTextCellSize().setText(String.valueOf(cellSize));
587
		cp.getOutputExtent().setCellSize(cellSize);
588
	}
589

  
590
	
591
	// Desabilita los componentes variables de la interfaz
592
	public void DesabilitarTodo(){
593
		
594
		rButtom1.setSelected(false);
595
		rButtom2.setSelected(false);
596
		rButtom3.setSelected(false);
597
		rButtom4.setSelected(false);
598
		jComboCapas.setEnabled(false);
599
		jTextRangoX1.setEditable(false);
600
	
601
		jTextRangoX1.setEnabled(false);
602
		jTextRangoX2.setEditable(false);
603
		jTextRangoX2.setEnabled(false);
604
		jTextRangoY1.setEditable(false);
605
		jTextRangoY1.setEnabled(false);
606
		jTextRangoY2.setEditable(false);
607
		jTextRangoY2.setEnabled(false);
608
		jTextNumFiCol1.setEditable(false);
609
		jTextCellSize.setEditable(false);
610
		jTextCellSize.setEnabled(false);
611
		jTextNumFiCol1.setEnabled(false);
612
		jTextNumFiCol2.setEditable(false);
613
		jTextNumFiCol2.setEnabled(false);
614
		jComboCapas.updateUI();
615
		
616
	}
617
	
618
	
619
private void extentHasChanged(){
620
		
621
		double dRangeX;
622
		double dRangeY;
623
		double dCellSize;
624
		int iRows;
625
		int iCols;
626
		// Se actualiza la X		
627
		try {
628
			dRangeX = Math.abs(Double.parseDouble(getJTextRangoX2().getText())
629
								- Double.parseDouble(getJTextRangoX1().getText()));
630
			dCellSize = Double.parseDouble(getJTextCellSize().getText());	
631
			iCols = (int) Math.floor(dRangeX / dCellSize);
632
			getJTextNumFiCol2().setText(Integer.toString(iCols));
633
		
634
		} catch (NumberFormatException e) {
635
				e.printStackTrace();
636
			return;
637
		}
638
		
639
		// Se actualiza la Y	
640
		try {
641
		dRangeY = Math.abs(Double.parseDouble(getJTextRangoY2().getText())
642
					- Double.parseDouble(getJTextRangoY1().getText()));
643
			dCellSize = Double.parseDouble(getJTextCellSize().getText());			
644
			iRows = (int) Math.floor(dRangeY / dCellSize);
645
			getJTextNumFiCol1().setText(Integer.toString(iRows));
646
			
647
			
648
		} catch (NumberFormatException e) {
649
			
650
			e.printStackTrace();
651
			return;
652
		}
653
}
654
	
655
	private void validateKeyTyping(KeyEvent event) {
656
		String text = ((JTextField)event.getSource()).getText();
657
		jComboCapas.updateUI();
658
		switch (event.getKeyChar()) {
659
			
660
			case KeyEvent.VK_ENTER:
661
				extentHasChanged();
662
				jComboCapas.updateUI();
663
				break;
664
			
665
			case KeyEvent.VK_BACK_SPACE:
666
				extentHasChanged();
667
				break;
668
			case KeyEvent.VK_0 :
669
				extentHasChanged();
670
				break;
671
			case KeyEvent.VK_1 :
672
				extentHasChanged();
673
				break;
674
			case KeyEvent.VK_2 :
675
				extentHasChanged();
676
				break;
677
			case KeyEvent.VK_3:
678
				extentHasChanged();
679
				break;
680
			case KeyEvent.VK_4:  
681
				extentHasChanged();
682
				break;
683
			case KeyEvent.VK_5: 
684
				extentHasChanged();
685
				break;
686
			case KeyEvent.VK_6: 
687
				extentHasChanged();
688
				break;
689
			case KeyEvent.VK_7: 
690
				extentHasChanged();
691
				break;
692
			case KeyEvent.VK_8: 
693
				extentHasChanged();
694
				break;
695
			case KeyEvent.VK_9 :			
696
				extentHasChanged();
697
				break;
698
		}
699
	}
700
	
701
	public void actionPerformed(ActionEvent e) {
702
		
703
		if (e.getSource()==getAceptar()){
704
				//FLyrRaster outpuLayer = null;
705
				//RasterMemoryDriver outputRMD = null;
706
				int nBand;
707
				String layerBand;
708
				String layerName;
709
				FLyrRasterSE rasterLayer;
710
				Grid qWindow;
711
				
712
				
713
				// Opcion  de RadioButton2
714
				if (getRButtom2().isSelected()){
715
					cp.getOutputExtent().setXRange(Double.parseDouble(jTextRangoX1.getText()),Double.parseDouble(jTextRangoX2.getText()));
716
					cp.getOutputExtent().setYRange(Double.parseDouble(jTextRangoY1.getText()), Double.parseDouble(jTextRangoY2.getText()));
717
					cp.getOutputExtent().setCellSize(Double.parseDouble(jTextCellSize.getText()));	
718
				}
719
		
720
				
721
				//	Opcion del RadioButton4
722
				if(getRButtom4().isSelected()){
723
					
724
					
725
					try {
726
						double dCoord;	
727
						FLayer layer = layers.getLayer(jComboCapas.getSelectedIndex());	
728
						
729
						cp.getOutputExtent().setXRange(layer.getFullExtent().getMinX(),
730
								layer.getFullExtent().getMaxX());
731
						cp.getOutputExtent().setYRange(dCoord = layer.getFullExtent().getMinY(),
732
								layer.getFullExtent().getMaxY());
733
						
734
						cp.getOutputExtent().setCellSize(Double.parseDouble(jTextCellSize.getText()));
735
						/*if (layer instanceof FLyrRaster){
736
							cp.getOutputExtent().setCellSize(((FLyrRaster) layer).getGrid().getXCellSize());
737
						}
738
						
739
						if (layer instanceof FLyrRaster){
740
							getJTextCellSize().setText(String.valueOf(cp.getOutputExtent().getCellSize()));
741
						}*/
742
					
743
						extentHasChanged();
744
					} catch (Exception ex) {
745
						ex.printStackTrace();
746
					}
747
				}
748
				
749
				cp.getGridMath().setResultExtent(cp.getOutputExtent());
750
				
751
				/*
752
				 * Rellenar el HasMap con el Grid corespondiente a cada variable.
753
				 */
754
				for (int i=0;i<cp.getJTableVariables().getTableFormat().getRowCount();i++){
755
					layerBand= cp.getJTableVariables().getTableFormat().getValueAt(i,1).toString();
756
					layerName = layerBand.substring(0,layerBand.indexOf("["));
757
					nBand = Integer.valueOf(layerBand.substring(layerBand.lastIndexOf("Band")+4,layerBand.lastIndexOf("]"))).intValue();
758
					rasterLayer = (FLyrRasterSE)mapContext.getLayers().getLayer(layerName);
759
					qWindow=null;
760
					try {
761
						qWindow = new Grid(rasterLayer.getDatasource(),new int[]{nBand-1});
762
					
763
					} catch (RasterBufferInvalidException e1) {
764
						// TODO Auto-generated catch block
765
						e1.printStackTrace();
766
					}
767
					// Establecer el método de interpolación.
768
					/*if (rasterLayer.getDatasource().getDataType() ==  DataBuffer.TYPE_FLOAT  ||
769
							rasterLayer.getDatasource().getDataType() ==  DataBuffer.TYPE_DOUBLE)
770
						qWindow.setInterpolationMethod(GrGridWrapperInterpolated.INTERPOLATION_BSpline);
771
					else
772
						qWindow.setInterpolationMethod(GridWrapperInterpolated.INTERPOLATION_NearestNeighbour);*/
773
					cp.getQWindowsHash().put(cp.getJTableVariables().getTableFormat().getValueAt(i,0).toString(),qWindow);
774
				}				
775
				cp.getGridMath().setParams(cp.getQWindowsHash());
776
				
777
				/*
778
				 * Lanzar el cálculo.
779
				 */
780
				//String expression, HashMap params
781
				
782
				GridMathProcess process = new GridMathProcess(cp.getJTextExpression().getText(),cp.getGridMath().getParams(),cp.getOutputExtent(),mapContext,getJTextNombreCapa().getText());
783
				IncrementableTask incrementableTask = new IncrementableTask(process);
784
				process.setIncrementableTask(incrementableTask);
785
				incrementableTask.showWindow();
786
			    process.start();
787
				incrementableTask.start();	
788
				PluginServices.getMDIManager().closeWindow(this);	
789
				
790
		}
791
		
792
	   	else if (e.getSource()==getCancelar()){
793
	   		
794
		PluginServices.getMDIManager().closeWindow(this);
795
		}
796
	
797
		//Radiobutton1
798
		else  if (e.getSource()==getRButtom1()){
799
			
800
			InicializarOpcion();
801
			
802
		}
803
	
804
		// RadioButtom2
805
		else  if (e.getSource()==getRButtom2()){
806
			
807
			DesabilitarTodo();
808
			rButtom2.setSelected(true);
809
			getJTextRangoX1().setEnabled(true);
810
			getJTextRangoX1().setEditable(true);
811
			getJTextRangoX2().setEnabled(true);
812
			getJTextRangoX2().setEditable(true);
813
			getJTextRangoY1().setEnabled(true);
814
			getJTextRangoY1().setEditable(true);
815
			getJTextRangoY2().setEditable(true);
816
			getJTextRangoY2().setEnabled(true);
817
			getJTextCellSize().setEditable(true);
818
			getJTextCellSize().setEnabled(true);
819
			getJTextCellSize().setText("1.0");
820
			
821
			/*try {
822
				//cp.getOutputExtent().setXRange
823
				cp.getOutputExtent().setXRange(new Double(getJTextRangoX1().getText()).doubleValue(), new Double(getJTextRangoX2().getText()).doubleValue());
824
				cp.getOutputExtent().setXRange(new Double(getJTextRangoY1().getText()).doubleValue(), new Double(getJTextRangoY2().getText()).doubleValue());
825
				cp.getOutputExtent().setCellSize(1.0);
826
				
827
				getJTextRangoX1().setText(String.valueOf(cp.getOutputExtent().getXMin()));
828
				getJTextRangoX2().setText(String.valueOf(cp.getOutputExtent().getXMax()));
829
				getJTextRangoY1().setText(String.valueOf(cp.getOutputExtent().getYMin()));
830
				getJTextRangoY2().setText(String.valueOf(cp.getOutputExtent().getYMax()));
831
				
832
				dCoord =m_MapContext.getViewPort().getAdjustedExtent().getMinX();
833
				getJTextRangoX1().setText(new Double(dCoord).toString());
834
				dCoord = m_MapContext.getViewPort().getAdjustedExtent().getMaxX();
835
				getJTextRangoX2().setText(new Double(dCoord).toString());
836
				dCoord =m_MapContext.getViewPort().getAdjustedExtent().getMinY();
837
				getJTextRangoY1().setText(new Double(dCoord).toString());
838
				dCoord = m_MapContext.getViewPort().getAdjustedExtent().getMaxY();
839
				getJTextRangoY2().setText(new Double(dCoord).toString());
840
				//setTextFieldsEnabled(false);						
841
				extentHasChanged();
842
			} catch (Exception ex) {}
843
			
844
			*/
845
		}
846
		
847
	
848
		// RadioButtom3
849
		else  if (e.getSource()==getRButtom3()){
850
			
851
			DesabilitarTodo();
852
			rButtom3.setSelected(true);
853
			jTextCellSize.setEditable(true);
854
			jTextCellSize.setEnabled(true);
855
			getJTextCellSize().setText("1.0");
856
			double dCoord;
857
			
858
			cp.getOutputExtent().setXRange(mapContext.getViewPort().getAdjustedExtent().getMinX(),
859
						mapContext.getViewPort().getAdjustedExtent().getMaxX());
860
				
861
			cp.getOutputExtent().setYRange(mapContext.getViewPort().getAdjustedExtent().getMinY(),
862
						mapContext.getViewPort().getAdjustedExtent().getMaxY());
863
				
864
				//Tomamos y Ajustamos para correcta visualizacion del double
865
				dCoord= cp.getOutputExtent().minX();
866
				getJTextRangoX1().setText(" "+String.valueOf(dCoord));
867
				getJTextRangoX1().setHorizontalAlignment(JTextField.LEFT);
868
				
869
				// Tomamos y Ajustamos para correcta visualizacin el double
870
				dCoord= cp.getOutputExtent().maxX();
871
				getJTextRangoX2().setText(" "+String.valueOf(dCoord));
872
				getJTextRangoX2().setHorizontalAlignment(JTextField.LEFT);
873
				
874
				//Tomamos y Ajustamos para correcta visualizacin el double
875
				dCoord= cp.getOutputExtent().minY();
876
				getJTextRangoY1().setText(" "+String.valueOf(dCoord));
877
				getJTextRangoY1().setAlignmentX(JTextField.LEFT);
878
				
879
				//Tomamos y Ajustamos para correcta visualizacin el double
880
				dCoord= cp.getOutputExtent().maxY();
881
				getJTextRangoY2().setText(" "+String.valueOf(dCoord));
882
				getJTextRangoY2().setAlignmentX(JTextField.LEFT);
883
				
884
				getJTextRangoX1().updateUI();	
885
				getJTextRangoX2().updateUI();	
886
				getJTextRangoY1().updateUI();	
887
				getJTextRangoY2().updateUI();	
888
				/*dCoord =m_MapContext.getViewPort().getAdjustedExtent().getMinX();
889
				getJTextRangoX1().setText(new Double(dCoord).toString());
890
				dCoord = m_MapContext.getViewPort().getAdjustedExtent().getMaxX();
891
				getJTextRangoX2().setText(new Double(dCoord).toString());
892
				dCoord =m_MapContext.getViewPort().getAdjustedExtent().getMinY();
893
				getJTextRangoY1().setText(new Double(dCoord).toString());
894
				dCoord = m_MapContext.getViewPort().getAdjustedExtent().getMaxY();
895
				getJTextRangoY2().setText(new Double(dCoord).toString());*/
896
				//setTextFieldsEnabled(false);						
897
				extentHasChanged();
898
		
899
			
900
		}
901
	
902
	
903
	
904
		// RadioButtom4
905
		else  if (e.getSource()==getRButtom4()){
906
			
907
			DesabilitarTodo();
908
			rButtom4.setSelected(true);
909
			jComboCapas.setEnabled(true);
910
			jTextCellSize.setEditable(true);
911
			jTextCellSize.setEnabled(true);
912
			getJComboCapas().updateUI();
913
			
914
		
915
		}
916
			
917
		// ComboCapas	
918
		else if (e.getSource()==getJComboCapas()){
919
				
920
				double dCoord;	
921
				if (getRButtom4().isSelected()){
922
					try {
923
						FLayer layer = layers.getLayer(jComboCapas.getSelectedIndex());	
924
						dCoord = layer.getFullExtent().getMinX();
925
						getJTextRangoX1().setText(new Double(dCoord).toString());
926
						dCoord = layer.getFullExtent().getMaxX();
927
						getJTextRangoX2().setText(new Double(dCoord).toString());
928
						dCoord = layer.getFullExtent().getMinY();
929
						getJTextRangoY1().setText(new Double(dCoord).toString());
930
						dCoord = layer.getFullExtent().getMaxY();
931
						getJTextRangoY2().setText(new Double(dCoord).toString());
932
						if (layer instanceof FLyrRaster){
933
							getJTextCellSize().setText(new Double(
934
									((FLyrRasterSE) layer).getDatasource().getXCellSize())
935
									.toString());
936
						}
937
						extentHasChanged();
938
					} catch (Exception ex) {}	
939
				}
940
		}
941
	}
942

  
943
	
944
	// Eventos de teclado
945
	public void keyReleased(KeyEvent e) {
946

  
947
		if(e.getSource()==getJTextRangoX1()){
948
			validateKeyTyping(e);
949
		}
950
		
951
		if(e.getSource()==getJTextRangoX2()){
952
			validateKeyTyping(e);
953
		}
954
		
955
		if(e.getSource()==getJTextRangoY1()){
956
			validateKeyTyping(e);
957
		}
958
		
959
		if(e.getSource()==getJTextRangoY2()){
960
			validateKeyTyping(e);
961
		}
962
		
963
		if (e.getSource()==getJTextCellSize()){
964
			
965
			validateKeyTyping(e);
966
		}
967
	}
968

  
969

  
970
	
971
	
972

  
973
	
974
	public void focusGained(FocusEvent arg0) {
975
		// TODO Auto-generated method stub
976
		
977
	}
978

  
979
	public void focusLost(FocusEvent arg0) {
980
		// TODO Auto-generated method stub
981
		
982
	}
983

  
984

  
985

  
986
	public void keyPressed(KeyEvent arg0) {
987
		// TODO Auto-generated method stub
988
		
989
	}
990

  
991
	
992
	
993
	public void keyTyped(KeyEvent arg0) {
994
		// TODO Auto-generated method stub
995
		
996
	}
997
}
trunk/extensions/extRemoteSensing/src/es/idr/teledeteccion/gridmath/gui/TableFormat.java
91 91
			jTableVariables.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
92 92
			jTableVariables.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
93 93
			jTableVariables.getTableHeader().setReorderingAllowed( false ); 
94
			jTableVariables.getColumn("Variable").setResizable(true);
95
			jTableVariables.getColumn("Variable").setPreferredWidth(60);
96
			jTableVariables.getColumn("Valor").setResizable(true);
94
			jTableVariables.getColumn(PluginServices.getText(this, "variable")).setResizable(true);
95
			jTableVariables.getColumn(PluginServices.getText(this, "variable")).setPreferredWidth(60);
96
			jTableVariables.getColumn(PluginServices.getText(this, "valor")).setResizable(true);
97 97
			jTableVariables.setAutoscrolls(true);	 
98 98
				
99 99
			// Generar los eventos de raton correspondientes
trunk/extensions/extRemoteSensing/src/es/idr/teledeteccion/gridmath/gui/listener/GridMathListener.java
48 48
import javax.swing.JTable;
49 49
import javax.swing.table.DefaultTableModel;
50 50

  
51
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
52
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent;
53
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
51 54
import org.nfunk.jep.Variable;
52 55

  
56
import com.iver.andami.PluginServices;
57

  
53 58
import es.idr.teledeteccion.gridmath.gui.CalculatorPanel;
54 59

  
55 60
/**
trunk/extensions/extRemoteSensing/src/es/idr/teledeteccion/gridmath/gui/listener/CalculatorPanelListener.java
1
package es.idr.teledeteccion.gridmath.gui.listener;
2

  
3
import java.awt.event.ActionEvent;
4
import java.awt.event.ActionListener;
5
import java.awt.event.KeyEvent;
6
import java.awt.event.KeyListener;
7
import java.io.File;
8
import java.io.FileInputStream;
9
import java.io.FileNotFoundException;
10
import java.io.FileOutputStream;
11
import java.io.IOException;
12
import java.io.InputStream;
13
import java.io.OutputStream;
14

  
15
import javax.swing.JFileChooser;
16
import javax.swing.JOptionPane;
17
import javax.swing.event.TableModelEvent;
18
import javax.swing.event.TableModelListener;
19
import javax.swing.filechooser.FileFilter;
20
import javax.swing.table.DefaultTableModel;
21

  
22
import org.gvsig.fmap.layers.FLyrRasterSE;
23
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
24
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent;
25
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
26
import org.gvsig.gui.beans.incrementabletask.IncrementableTask;
27
import org.gvsig.raster.buffer.RasterBufferInvalidException;
28
import org.gvsig.raster.grid.Grid;
29

  
30
import com.iver.andami.PluginServices;
31
import com.iver.cit.gvsig.fmap.layers.FLayer;
32
import com.iver.cit.gvsig.fmap.layers.FLayers;
33

  
34
import es.idr.teledeteccion.gridmath.GridMathProcess;
35
import es.idr.teledeteccion.gridmath.gui.CalculatorPanel;
36

  
37
public class CalculatorPanelListener implements ActionListener, ButtonsPanelListener, TableModelListener {
38
	
39
	private CalculatorPanel calculatorPanel = null;
40

  
41
	public CalculatorPanelListener(CalculatorPanel calculatorPanel) {
42
		this.calculatorPanel = calculatorPanel;
43
	}
44

  
45
	/**
46
	 * Fija las acciones que se realizan cuando se produce un evento
47
	 * @param e Objeto que genera el evento
48
	 */
49
	
50
	public void actionPerformed(ActionEvent e) {
51

  
52
		calculatorPanel.getGridMath().setExpression(calculatorPanel.getJTextExpression().getText());
53
		
54
		if (e.getSource().equals(calculatorPanel.getSalvar())){
55
			//realizar acciones de salvar
56
			JFileChooser openFileChooser;
57
			
58
			openFileChooser = new JFileChooser();			
59
			openFileChooser.setEnabled(false);
60
			openFileChooser.addChoosableFileFilter(new ExpresionFileFilter());
61
			int returnVal = openFileChooser.showSaveDialog(calculatorPanel);
62
	        if (returnVal == JFileChooser.APPROVE_OPTION) {
63
	        	File outFile = new File(openFileChooser.getSelectedFile().getAbsolutePath()+".exp");
64
	            try {
65
	            	OutputStream outputStream = new FileOutputStream(outFile);
66
					outputStream.write(calculatorPanel.getJTextExpression().getText().getBytes());
67
					outputStream.close();
68
				} catch (FileNotFoundException e1) {
69
					e1.printStackTrace();
70
				} catch (IOException e1) {
71
					e1.printStackTrace();
72
				}
73
	        }
74
			
75
			//Desactiva click sobre tabla 
76
	        calculatorPanel.getJTableVariables().setEnEspera(false);
77
			
78
		}else if (e.getSource().equals(calculatorPanel.getRecuperar())){
79
			//realizar acciones de recuperar			
80
			JFileChooser openFileChooser;
81
			openFileChooser = new JFileChooser();			
82
			openFileChooser.setEnabled(false);
83
			openFileChooser.addChoosableFileFilter(new ExpresionFileFilter());
84
			int returnVal = openFileChooser.showOpenDialog(calculatorPanel);
85
	        if (returnVal == JFileChooser.APPROVE_OPTION) {
86
	            File inFile = openFileChooser.getSelectedFile();
87
	            InputStream inputStream = null;
88
	            byte[] buf = new byte[1];
89
	            calculatorPanel.getJTextExpression().setText("");
90
	            try {
91
					inputStream = new FileInputStream(inFile);
92
					while (inputStream.read(buf)> 0) {
93
						calculatorPanel.getJTextExpression().setText(calculatorPanel.getJTextExpression().getText()+new String(buf));
94
					}
95
					inputStream.close();
96
				} catch (FileNotFoundException e1) {
97
					// TODO Auto-generated catch block
98
					e1.printStackTrace();
99
				} catch (IOException e1) {
100
					// TODO Auto-generated catch block
101
					e1.printStackTrace();
102
				}
103
				KeyListener[] kls = (KeyListener[])(calculatorPanel.getJTextExpression().getListeners(KeyListener.class));
104
				kls[0].keyReleased(new KeyEvent(calculatorPanel,1,1L,1,1,(char)1));
105
	        }
106
	        
107
	        //	Desactiva click sobre tabla
108
	        calculatorPanel.getJTableVariables().setEnEspera(false);
109
		}
110
		
111
		if(e.getSource().equals(calculatorPanel.getJCheckExtent())){
112
			int cont=((DefaultTableModel)calculatorPanel.getJTableVariables().getTableFormat().getModel()).getRowCount();
113
			if (cont>0){
114
			
115
				for(int row=0;row<cont;row++)
116
					((DefaultTableModel)calculatorPanel.getJTableVariables().getTableFormat().getModel()).removeRow(0);
117
		
118
				calculatorPanel.getQWindowsHash().clear();
119
				calculatorPanel.getJTextExpression().setText("");
120
				calculatorPanel.getJTableVariables().getTableFormat().updateUI();
121
			}	
122
		}	
123
	}
124

  
125
	public void actionButtonPressed(ButtonsPanelEvent e) {
126
		// Bot?n de Aceptar
127
		if (e.getButton() == ButtonsPanel.BUTTON_ACCEPT) {
128
			checkExpresion();
129
			close();
130
		}
131

  
132
		// Bot?n de Aplicar
133
		if (e.getButton() == ButtonsPanel.BUTTON_APPLY) {
134
			checkExpresion();
135
		}
136

  
137
		// Bot?n de Cerrar
138
		if (e.getButton() == ButtonsPanel.BUTTON_CANCEL) {
139
			close();
140
		}
141
	}
142

  
143
	private void checkExpresion(){
144
		if (calculatorPanel.getJTableVariables().getTableFormat().getRowCount()>0){
145
			
146
			boolean allAsigned=true;
147
	
148
			// Comprobar que todas las variables estan asignadas
149
			for (int i=0; i<calculatorPanel.getJTableVariables().getTableFormat().getRowCount(); i++){
150
				if (calculatorPanel.getJTableVariables().getTableFormat().getValueAt(i,1).toString().equals(""))
151
				{ allAsigned=false; break;}
152
			}
153
	
154
			if (allAsigned){
155
				if(!calculatorPanel.getGridMath().hasError()){
156
					//OutputOptionsPanel rcp = new OutputOptionsPanel(calculatorPanel.getView(),calculatorPanel);
157
					//PluginServices.getMDIManager().addWindow(rcp);
158
					calculate();
159
				}
160
				else
161
					JOptionPane.showMessageDialog(null,
162
						PluginServices.getText(this,"sintaxis_error"), PluginServices.getText(this,"band_math"),
163
						JOptionPane.WARNING_MESSAGE);
164
	
165
			}else{			
166
		
167
				JOptionPane.showMessageDialog(null,
168
				PluginServices.getText(this,"variables_sin_asignar"), PluginServices.getText(this,"band_math"),
169
				JOptionPane.WARNING_MESSAGE);
170
		
171
			}
172
		
173
		}else {JOptionPane.showMessageDialog(null,
174
				PluginServices.getText(this,"no_variables"), PluginServices.getText(this,"band_math"),
175
		JOptionPane.WARNING_MESSAGE);}
176
	}
177
	
178
	private void calculate(){
179

  
180
		int nBand;
181
		String layerBand;
182
		String layerName;
183
		FLyrRasterSE rasterLayer;
184
		Grid grid;
185
		
186
		FLayers layers = calculatorPanel.getView().getModel().getMapContext().getLayers();
187
		
188
		// Opcion  de RadioButton2
189
		if (calculatorPanel.getOptionsPanel().getRButtom2().isSelected()){
190
			calculatorPanel.getOutputExtent().setXRange(Double.parseDouble(calculatorPanel.getOptionsPanel().getJTextRangoX1().getText()),Double.parseDouble(calculatorPanel.getOptionsPanel().getJTextRangoY2().getText()));
191
			calculatorPanel.getOutputExtent().setYRange(Double.parseDouble(calculatorPanel.getOptionsPanel().getJTextRangoY1().getText()), Double.parseDouble(calculatorPanel.getOptionsPanel().getJTextRangoY2().getText()));
192
			calculatorPanel.getOutputExtent().setCellSize(Double.parseDouble(calculatorPanel.getOptionsPanel().getJTextCellSize().getText()));	
193
		}
194
		
195
		//	Opcion del RadioButton4
196
		if(calculatorPanel.getOptionsPanel().getRButtom4().isSelected()){
197
			
198
			try {
199
				double dCoord;	
200
				FLayer layer = layers.getLayer(calculatorPanel.getOptionsPanel().getJComboCapas().getSelectedIndex());	
201
				
202
				calculatorPanel.getOutputExtent().setXRange(layer.getFullExtent().getMinX(),
203
						layer.getFullExtent().getMaxX());
204
				calculatorPanel.getOutputExtent().setYRange(dCoord = layer.getFullExtent().getMinY(),
205
						layer.getFullExtent().getMaxY());
206
				
207
				calculatorPanel.getOutputExtent().setCellSize(Double.parseDouble(calculatorPanel.getOptionsPanel().getJTextCellSize().getText()));
208
				/*if (layer instanceof FLyrRaster){
209
					calculatorPanel.getOutputExtent().setCellSize(((FLyrRaster) layer).getGrid().getXCellSize());
210
				}
211
				
212
				if (layer instanceof FLyrRaster){
213
					getJTextCellSize().setText(String.valueOf(calculatorPanel.getOutputExtent().getCellSize()));
214
				}*/
215
			
216
				calculatorPanel.getOptionsPanel().extentHasChanged();
217
			} catch (Exception ex) {
218
				ex.printStackTrace();
219
			}
220
		}
221
		
222
		calculatorPanel.getGridMath().setResultExtent(calculatorPanel.getOutputExtent());
223
		
224
		/*
225
		 * Rellenar el HasMap con el Grid corespondiente a cada variable.
226
		 */
227
		for (int i=0;i<calculatorPanel.getJTableVariables().getTableFormat().getRowCount();i++){
228
			layerBand= calculatorPanel.getJTableVariables().getTableFormat().getValueAt(i,1).toString();
229
			layerName = layerBand.substring(0,layerBand.indexOf("["));
230
			nBand = Integer.valueOf(layerBand.substring(layerBand.lastIndexOf("Band")+4,layerBand.lastIndexOf("]"))).intValue();
231
			rasterLayer = (FLyrRasterSE)layers.getLayer(layerName);
232
			grid=null;
233
			try {
234
				grid = new Grid(rasterLayer.getDatasource(),new int[]{nBand-1});
235
			
236
			} catch (RasterBufferInvalidException e1) {
237
				// TODO Auto-generated catch block
238
				e1.printStackTrace();
239
			}
240
			// Establecer el método de interpolación.
241
			/*if (rasterLayer.getDatasource().getDataType() ==  DataBuffer.TYPE_FLOAT  ||
242
					rasterLayer.getDatasource().getDataType() ==  DataBuffer.TYPE_DOUBLE)
243
				qWindow.setInterpolationMethod(GrGridWrapperInterpolated.INTERPOLATION_BSpline);
244
			else
245
				qWindow.setInterpolationMethod(GridWrapperInterpolated.INTERPOLATION_NearestNeighbour);*/
246
			calculatorPanel.getQWindowsHash().put(calculatorPanel.getJTableVariables().getTableFormat().getValueAt(i,0).toString(),grid);
247
		}				
248
		calculatorPanel.getGridMath().setParams(calculatorPanel.getQWindowsHash());
249
		
250
		/*
251
		 * Lanzar el c?lculo.
252
		 */
253
		//String expression, HashMap params
254
		
255
		GridMathProcess process = new GridMathProcess(calculatorPanel.getJTextExpression().getText(),calculatorPanel.getGridMath().getParams(),
256
				calculatorPanel.getOutputExtent(),calculatorPanel.getView().getModel().getMapContext(),
257
				calculatorPanel.getOptionsPanel().getJTextNombreCapa().getText());
258
		IncrementableTask incrementableTask = new IncrementableTask(process);
259
		process.setIncrementableTask(incrementableTask);
260
		incrementableTask.showWindow();
261
	    process.start();
262
		incrementableTask.start();	
263
	}
264
	
265
	private void close() {
266
		PluginServices.getMDIManager().closeWindow(calculatorPanel.getCalculatorDialog());
267
	}
268
	
269
	class ExpresionFileFilter extends FileFilter {
270

  
271
		final static String exp = "exp";
272
		public boolean accept(File f) {
273
			if (f.isDirectory()) {
274
	           return true;
275
	       }
276
	       String s = f.getName();
277
	       int i = s.lastIndexOf('.');
278

  
279
	       if (i > 0 &&  i < s.length() - 1) {
280
	           String extension = s.substring(i+1).toLowerCase();
281
	           if (exp.equals(extension)){
282
	                   return true;
283
	           } else {
284
	               return false;
285
	           }
286
	       }
287
	       return false;
288
		}
289

  
290
		public String getDescription() {
291
			 return "Archivos .exp";
292
		}
293
		
294
	}
295

  
296
	public void tableChanged(TableModelEvent e) {
297
		calculatorPanel.getOptionsPanel().InicializarOpcion();
298
	}
299
}
0 300

  
trunk/extensions/extRemoteSensing/src/es/idr/teledeteccion/gridmath/gui/CalculatorDialog.java
1
package es.idr.teledeteccion.gridmath.gui;
2

  
3
import java.awt.BorderLayout;
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff