Revision 19285 trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/filter/FilterListener.java

View differences:

FilterListener.java
18 18
 */
19 19
package org.gvsig.rastertools.filter;
20 20

  
21
import java.awt.Dimension;
22
import java.awt.Graphics2D;
23 21
import java.awt.event.ActionEvent;
24 22
import java.awt.event.ActionListener;
25
import java.awt.geom.AffineTransform;
26
import java.awt.geom.Dimension2D;
27
import java.awt.geom.Point2D;
28 23
import java.io.File;
29 24
import java.util.ArrayList;
30 25
import java.util.EventObject;
......
34 29
import javax.swing.ListModel;
35 30

  
36 31
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
37
import org.gvsig.gui.beans.imagenavigator.IClientImageNavigator;
38 32
import org.gvsig.gui.beans.propertiespanel.PropertiesComponent;
39 33
import org.gvsig.gui.beans.propertiespanel.PropertiesComponentListener;
40 34
import org.gvsig.gui.beans.propertiespanel.PropertyStruct;
......
46 40
import org.gvsig.raster.RasterLibrary;
47 41
import org.gvsig.raster.dataset.GeoRasterWriter;
48 42
import org.gvsig.raster.dataset.IRasterDataSource;
49
import org.gvsig.raster.dataset.InvalidSetViewException;
50 43
import org.gvsig.raster.dataset.Params;
51 44
import org.gvsig.raster.dataset.Params.Param;
52
import org.gvsig.raster.dataset.io.RasterDriverException;
53
import org.gvsig.raster.datastruct.Extent;
54
import org.gvsig.raster.datastruct.ViewPortData;
55 45
import org.gvsig.raster.grid.filter.FilterTypeException;
56 46
import org.gvsig.raster.grid.filter.FilterUIListener;
57 47
import org.gvsig.raster.grid.filter.IRasterFilterListManager;
......
63 53
import org.gvsig.raster.util.ExtendedFileFilter;
64 54
import org.gvsig.raster.util.RasterNotLoadException;
65 55
import org.gvsig.raster.util.RasterToolsUtil;
66
import org.gvsig.rastertools.filter.ui.FilterPanel;
56
import org.gvsig.rastertools.filter.ui.FilterDialog;
67 57

  
68 58
import com.iver.andami.PluginServices;
69 59
import com.iver.andami.Utilities;
70 60
import com.iver.cit.gvsig.addlayer.fileopen.FileOpenWizard;
71
import com.iver.cit.gvsig.fmap.ViewPort;
72
import com.iver.cit.gvsig.fmap.layers.FLayer;
73 61
/**
74 62
 * <code>FilterListener</code> es la clase donde se procesar? gran parte del
75 63
 * c?digo que controla el panel para el manejo de un layer en la aplicaci?n de
......
78 66
 * @version 24/05/2007
79 67
 * @author BorSanZa - Borja S?nchez Zamorano (borja.sanchez@iver.es)
80 68
 */
81
public class FilterListener implements ActionListener, IClientImageNavigator, TreeListComponentListener, TreeListChangeListener, PropertiesComponentListener, FilterUIListener, IProcessActions {
82
	private FilterPanel  filterPanel  = null;
69
public class FilterListener implements ActionListener, TreeListComponentListener, TreeListChangeListener, PropertiesComponentListener, FilterUIListener, IProcessActions {
70
	private FilterDialog filterDialog  = null;
83 71
	private int          actualParam  = -1;
84 72
	private ArrayList    paramsList   = new ArrayList();
85
	private FLyrRasterSE previewLayer = null;
86 73
	/**
87 74
	 * Cuando est? a false genera un TIFF de salida. Cuando est? a true un JPEG2000
88 75
	 */
......
138 125

  
139 126
	/**
140 127
	 * Construye un FilterListener especificando el FilterPanel asociado
141
	 * @param fp
128
	 * @param filterDialog
142 129
	 */
143
	public FilterListener(FilterPanel fp) {
144
		filterPanel = fp;
130
	public FilterListener(FilterDialog filterDialog) {
131
		this.filterDialog = filterDialog;
145 132
	}
146 133

  
147 134
	/**
......
151 138
	 * @param compress true para comprimir el raster de salida y false para no hacerlo.
152 139
	 */
153 140
	public void setCompress(boolean compress) {
154
		this.     compress = compress;
141
		this.compress = compress;
155 142
	}
156 143
	
157 144
	/**
158
	 * Asigna la capa raster de la vista
159
	 * @param fLayer
160
	 */
161
	public void setLayer(FLayer fLayer) {
162
		if (fLayer instanceof FLyrRasterSE) {
163
			try {
164
				previewLayer = (FLyrRasterSE) fLayer.cloneLayer();
165
			} catch (Exception e) {
166
				RasterToolsUtil.messageBoxError("preview_not_available", filterPanel, e);
167
			}
168
		}
169
	}
170

  
171
	/**
172 145
	 * Asignamos los valores del PropertiesComponent al Params seleccionado
173 146
	 */
174 147
	public void RefreshDataProperties() {
175 148
		if (actualParam == -1)
176 149
			return;
177 150

  
178
		ArrayList listValues = getFilterPanel().getPropertiesComponent().getValues();
151
		ArrayList listValues = getFilterDialog().getPropertiesComponent().getValues();
179 152

  
180 153
		Params params = ((ParamStruct) paramsList.get(actualParam)).getFilterParam();
181 154
		for (int j = 0; j < listValues.size(); j++) {
......
219 192
				RasterToolsUtil.loadPropertiesFromWriterParams(propertiesComponent, params, new String[]{"FilterName"});
220 193
			}
221 194
		}
222
		getFilterPanel().setNewPropertiesComponent(propertiesComponent, filter);
195
		getFilterDialog().setNewPropertiesComponent(propertiesComponent, filter);
223 196
	}
224 197

  
225 198
	/**
......
245 218
	 */
246 219
	public void actionChangeProperties(EventObject e) {
247 220
		RefreshDataProperties();
248
		getFilterPanel().refreshPreview();
221
		getFilterDialog().refreshPreview();
249 222
	}
250 223

  
251 224
	/*
......
261 234
	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
262 235
	 */
263 236
	public void actionPerformed(ActionEvent e) {
264
		getFilterPanel().refreshPreview();
237
		getFilterDialog().refreshPreview();
265 238
	}
266 239

  
267 240
	/*
......
269 242
	 * @see org.gvsig.gui.beans.treelist.listeners.TreeListComponentListener#elementAdded(org.gvsig.gui.beans.treelist.event.TreeListEvent)
270 243
	 */
271 244
	public void elementAdded(TreeListEvent e) {
272
		getFilterPanel().refreshPreview();
245
		getFilterDialog().refreshPreview();
273 246
	}
274 247

  
275 248
	/*
......
277 250
	 * @see org.gvsig.gui.beans.treelist.listeners.TreeListComponentListener#elementMoved(org.gvsig.gui.beans.treelist.event.TreeListEvent)
278 251
	 */
279 252
	public void elementMoved(TreeListEvent e) {
280
		getFilterPanel().refreshPreview();
253
		getFilterDialog().refreshPreview();
281 254
	}
282 255

  
283 256
	/*
......
285 258
	 * @see org.gvsig.gui.beans.treelist.listeners.TreeListComponentListener#elementRemoved(org.gvsig.gui.beans.treelist.event.TreeListEvent)
286 259
	 */
287 260
	public void elementRemoved(TreeListEvent e) {
288
		getFilterPanel().refreshPreview();
261
		getFilterDialog().refreshPreview();
289 262
	}
290 263

  
291 264
	/**
......
302 275
	 */
303 276
	public String getFileSelected() {
304 277
		String path = "";
305
		if (getFilterPanel().getRadioFileGenerate().isSelected()) {
278
		if (getFilterDialog().getRadioFileGenerate().isSelected()) {
306 279
			JFileChooser chooser = new JFileChooser(FileOpenWizard.getLastPath());
307 280
			chooser.setDialogTitle(PluginServices.getText(this, "seleccionar_fichero"));
308 281

  
......
311 284
			for(int i=0;i<extList.length;i++)
312 285
				chooser.addChoosableFileFilter(new ExtendedFileFilter(extList[i]));
313 286

  
314
			if (chooser.showOpenDialog(getFilterPanel()) != JFileChooser.APPROVE_OPTION)
287
			if (chooser.showOpenDialog(getFilterDialog()) != JFileChooser.APPROVE_OPTION)
315 288
				return null;
316 289

  
317 290
			FileOpenWizard.setLastPath(chooser.getSelectedFile().getPath().substring(0, chooser.getSelectedFile().getPath().lastIndexOf(File.separator)));
......
320 293
			path = fileFilter.getNormalizedFilename(chooser.getSelectedFile());
321 294
		} else {
322 295

  
323
			String file = getFilterPanel().getFilenameTextField().getText();
296
			String file = getFilterDialog().getMainPanel().getFilenameTextField().getText();
324 297
			if(file.compareTo(RasterLibrary.getOnlyLayerName()) == 0) 
325 298
				RasterLibrary.usesOnlyLayerName();
326 299
							
......
328 301
				path = Utilities.createTempDirectory() + File.separator + file + ".tif";
329 302
			else
330 303
				path = Utilities.createTempDirectory() + File.separator + file + ".jp2";
331
			filterPanel.updateNewLayerText();
304
			filterDialog.updateNewLayerText();
332 305
		}
333 306
		return path;
334 307
	}
......
347 320
		RasterFilterListManager stackManager = new RasterFilterListManager(filterList);
348 321

  
349 322
		// Conservamos filtros no visibles ya existentes
350
		ArrayList filtersInit = getFilterPanel().getFilterStatus();
323
		ArrayList filtersInit = getFilterDialog().getFilterStatus();
351 324
		for (int i = 0; i < filtersInit.size(); i++) {
352 325
			// Si es visible no hacemos nada
353 326
			if (((RasterFilter) filtersInit.get(i)).isVisible())
......
388 361
		}
389 362

  
390 363
		// Metemos los filtros seleccionados en el panel
391
		ListModel list = getFilterPanel().getTreeListContainer().getListModel();
364
		ListModel list = getFilterDialog().getMainPanel().getTreeListContainer().getListModel();
392 365
		for (int i = 0; i < list.getSize(); i++) {
393
			Hashtable hastTable = getFilterPanel().getTreeListContainer().getMap();
366
			Hashtable hastTable = getFilterDialog().getMainPanel().getTreeListContainer().getMap();
394 367
			for (int j = 0; j < paramsList.size(); j++) {
395 368
				boolean active = true;
396 369
				Param param = ((ParamStruct) paramsList.get(j)).getFilterParam().getParamById("enabled");
......
424 397
	 * (non-Javadoc)
425 398
	 * @see org.gvsig.gui.beans.imagenavigator.IClientImageNavigator#drawImage(java.awt.Graphics2D, double, double, double, double, double, int, int)
426 399
	 */
427
	public void drawImage(Graphics2D g, double x1, double y1, double x2, double y2, double zoom, int width, int height) {
428
		if (previewLayer == null || !(previewLayer instanceof IRasterRendering))
429
			return;
430

  
431
		IRasterRendering rendering = ((IRasterRendering) previewLayer);
432

  
433
		((FLyrRasterSE) getFilterPanel().getLayer()).setRenderBands(((FLyrRasterSE) getFilterPanel().getLayer()).getRenderBands());
434

  
435
		if ((rendering == null) || ((x2 - x1) == 0.0) || ((y2 - y1) == 0.0))
436
			return;
437

  
438
		rendering.getRenderFilterList().pushStatus();
439
		rendering.setRenderBands(((FLyrRasterSE) getFilterPanel().getLayer()).getRenderBands());
400
	public void drawImage(IRasterRendering rendering) {
401
		rendering.setRenderBands(((FLyrRasterSE) getFilterDialog().getLayer()).getRenderBands());
440 402
		rendering.getRenderFilterList().clear();
441 403

  
442
		if (getFilterPanel().getCBShowFilters().isSelected()) {
404
		if (getFilterDialog().getCBShowFilters().isSelected()) {
443 405
			RasterFilterList filterList = rendering.getRenderFilterList();
444 406
			RasterFilterListManager stackManager = new RasterFilterListManager(filterList);
445 407

  
......
458 420
				exc.clear();
459 421
			}
460 422
		}
461

  
462
		ViewPort vp = new ViewPort(null);
463

  
464
		Dimension2D dimension = new Dimension(width, height);
465
		Extent extent = new Extent(new Point2D.Double(x1, y1), new Point2D.Double(x2, y2), new Point2D.Double(x2, y1), new Point2D.Double(x1, y2));
466
		//Extent extent = new Extent(x1, y1, x2, y2);
467

  
468
		ViewPortData vp2 = new ViewPortData(vp.getProjection(), extent, dimension);
469
		vp2.setMat(new AffineTransform(zoom, 0.0, 0.0, zoom, -x1*zoom, -y1*zoom));
470

  
471
		Extent extent2 = ((FLyrRasterSE) getFilterPanel().getLayer()).getFullRasterExtent();//.getBufferFactory().getDataSource().getExtent();
472

  
473
		AffineTransform trans = g.getTransform();
474
		// Calcular cuanto sobresale la imagen y rectificar ese desplazamiento
475
		if (y1 > extent2.maxY()) {
476
			g.translate(0.0, (-(extent2.maxY() - y1) * zoom)*2.0);
477
		}
478

  
479
		try {
480
			previewLayer.getRender().draw(g, vp2);
481
		} catch (RasterDriverException e) {
482
			RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_render_preview"), this, e);
483
		} catch (InvalidSetViewException e) {
484
			RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_setview_preview"), this, e);
485
		} catch (InterruptedException e) {
486
		}
487
		g.setTransform(trans);
488

  
489
		rendering.getRenderFilterList().popStatus();
490 423
	}
491 424

  
492 425
	/**
493 426
	 * Que acciones se ejecutaran al haber presionado el bot?n aceptar o aplicar
494 427
	 */
495 428
	public void accept() {
496
		IRasterDataSource raster = ((FLyrRasterSE) getFilterPanel().getLayer()).getDataSource();
429
		IRasterDataSource raster = ((FLyrRasterSE) getFilterDialog().getLayer()).getDataSource();
497 430
		if (raster == null)
498 431
			return;
499 432

  
500 433
		String path = null;
501
		if (!getFilterPanel().getRadioOnlyView().isSelected()) {
434
		if (!getFilterDialog().getRadioOnlyView().isSelected()) {
502 435
			path = getFileSelected();
503 436
			if (path == null)
504 437
				return;
505 438
		}
506 439

  
507 440
		//Rendering rendering = ((FLyrRasterSE) getFilterPanel().getLayer()).getRender();
508
		IRasterRendering rendering = (IRasterRendering) getFilterPanel().getLayer();
441
		IRasterRendering rendering = (IRasterRendering) getFilterDialog().getLayer();
509 442

  
510 443
		// Array para guardar los filtros que se van a usar en forma de ParamStruct
511 444
		ArrayList listFilterUsed = applyFilters(rendering);
512 445

  
513
		if (filterPanel.getRadioOnlyView().isSelected()) {
446
		if (filterDialog.getRadioOnlyView().isSelected()) {
514 447
			try {
515 448
				FilterProcess.addSelectedFilters(rendering.getRenderFilterList(), listFilterUsed);
516
				((FLyrRasterSE) getFilterPanel().getLayer()).setRenderFilterList(rendering.getRenderFilterList());
517
				getFilterPanel().getLayer().getMapContext().invalidate();
449
				((FLyrRasterSE) getFilterDialog().getLayer()).setRenderFilterList(rendering.getRenderFilterList());
450
				getFilterDialog().getLayer().getMapContext().invalidate();
518 451
			} catch (FilterTypeException e) {
519 452
				RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_adding_filters"), this, e);
520 453
			}
......
533 466
	 * Devuelve el FilterPanel asociado al FilterListener
534 467
	 * @return
535 468
	 */
536
	public FilterPanel getFilterPanel() {
537
		return filterPanel;
469
	public FilterDialog getFilterDialog() {
470
		return filterDialog;
538 471
	}
539 472

  
540 473
	/**
......
542 475
	 * Este m?todo es llamado por el thread TailRasterProcess al finalizar.
543 476
	 */
544 477
	public void loadLayerInToc(String fileName) {
545
		if (!getFilterPanel().getRadioNewLayer().isSelected())
478
		if (!getFilterDialog().getRadioNewLayer().isSelected())
546 479
			return;
547 480
		if(!new File(fileName).exists())
548 481
			return;
549 482
		try {
550
			RasterToolsUtil.loadLayer(getFilterPanel().getViewName(), fileName, null);
483
			RasterToolsUtil.loadLayer(getFilterDialog().getViewName(), fileName, null);
551 484
		} catch (RasterNotLoadException e) {
552 485
			RasterToolsUtil.messageBoxError("error_cargar_capa", this, e);
553 486
		}
554 487

  
555
		if(filterPanel != null)
556
			filterPanel.updateNewLayerText();
488
		if(filterDialog != null)
489
			filterDialog.updateNewLayerText();
557 490
	}
558 491

  
559 492
	/*

Also available in: Unified diff