Revision 19285

View differences:

trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/filter/FilterProcess.java
158 158
			writerBufferServer.setBuffer(buffer, -1);
159 159
			// TODO: FUNCIONALIDAD: Poner los getWriter con la proyecci?n del fichero fuente
160 160
			
161
			//En el caso de que la imagen no tuviera una banda alpha creamos una y la asignamos en el WriteBufferServer
162
			if (rasterDataSource.getTransparencyFilesStatus().getAlphaBandNumber() < 0) {
163
				writerBufferServer.setAlphaBuffer(transparency.getAlphaBand());
164
				geoRasterWriter = GeoRasterWriter.getWriter(writerBufferServer, filename, buffer.getBandCount() + 1, rasterDataSource.getAffineTransform(), buffer.getWidth(), buffer.getHeight(), buffer.getDataType(), GeoRasterWriter.getWriter(filename).getParams(), null);
165
			} else //Si ya tiene una banda de transparencia se seguir? usando la que ten?a
166
				geoRasterWriter = GeoRasterWriter.getWriter(writerBufferServer, filename, buffer.getBandCount(), rasterDataSource.getAffineTransform(), buffer.getWidth(), buffer.getHeight(), buffer.getDataType(), GeoRasterWriter.getWriter(filename).getParams(), null);
161
			geoRasterWriter = GeoRasterWriter.getWriter(writerBufferServer, filename, buffer.getBandCount(), rasterDataSource.getAffineTransform(), buffer.getWidth(), buffer.getHeight(), buffer.getDataType(), GeoRasterWriter.getWriter(filename).getParams(), null);
167 162
			
168 163
			//Asignamos la interpretaci?n de color al escritor
169 164
			DatasetColorInterpretation colorInterpretation = getColorIntepretation(geoRasterWriter, buffer, grid);
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/filter/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
	/*
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/filter/ui/FilterPanel.java
1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2006 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.filter.ui;
20

  
21
import java.awt.BorderLayout;
22
import java.awt.Color;
23
import java.awt.Dimension;
24
import java.awt.GridBagConstraints;
25
import java.awt.GridBagLayout;
26
import java.awt.Insets;
27
import java.awt.event.ItemEvent;
28
import java.awt.event.ItemListener;
29
import java.util.ArrayList;
30
import java.util.Hashtable;
31

  
32
import javax.swing.BorderFactory;
33
import javax.swing.ButtonGroup;
34
import javax.swing.DefaultListModel;
35
import javax.swing.JCheckBox;
36
import javax.swing.JLabel;
37
import javax.swing.JPanel;
38
import javax.swing.JRadioButton;
39
import javax.swing.JSplitPane;
40
import javax.swing.JTextField;
41
import javax.swing.border.Border;
42
import javax.swing.plaf.basic.BasicSplitPaneDivider;
43
import javax.swing.plaf.basic.BasicSplitPaneUI;
44

  
45
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
46
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
47
import org.gvsig.gui.beans.defaultbuttonspanel.DefaultButtonsPanel;
48
import org.gvsig.gui.beans.imagenavigator.ImageNavigator;
49
import org.gvsig.gui.beans.propertiespanel.PropertiesComponent;
50
import org.gvsig.gui.beans.treelist.TreeListContainer;
51
import org.gvsig.raster.RasterLibrary;
52
import org.gvsig.raster.dataset.Params;
53
import org.gvsig.raster.dataset.Params.Param;
54
import org.gvsig.raster.datastruct.Extent;
55
import org.gvsig.raster.grid.filter.RasterFilter;
56
import org.gvsig.raster.grid.filter.RasterFilterList;
57
import org.gvsig.raster.grid.filter.RasterFilterListManager;
58
import org.gvsig.raster.grid.render.Rendering;
59
import org.gvsig.raster.util.PropertyEvent;
60
import org.gvsig.raster.util.PropertyListener;
61
import org.gvsig.raster.util.RasterToolsUtil;
62
import org.gvsig.rastertools.filter.FilterListener;
63
import org.gvsig.rastertools.filter.FilterListener.ParamStruct;
64

  
65
import com.iver.andami.PluginServices;
66
import com.iver.cit.gvsig.fmap.layers.FLayer;
67
import com.iver.cit.gvsig.project.documents.view.gui.View;
68
/**
69
 * <code>FilterPanel</code> es el panel para filtros donde se construye sus
70
 * componentes visuales b?sicos.
71
 *
72
 * @version 18/05/2007
73
 * @author BorSanZa - Borja S?nchez Zamorano (borja.sanchez@iver.es)
74
 */
75
public class FilterPanel extends DefaultButtonsPanel implements PropertyListener {
76
	private static final long		serialVersionUID = -5406900542488229074L;
77

  
78
	private JCheckBox                     jCBShowFilters = null;
79
	private JPanel                        jPanelOptions = null;
80
	private JPanel                        jPreview = null;
81
	private JRadioButton                  jRBFileGenerate = null;
82
	private JRadioButton                  jRBNewLayer = null;
83
	private JRadioButton                  jRBOnlyView = null;
84
	private JRadioButton                  jRBOpenMemory = null;
85
	private ImageNavigator                imageNavigator = null;
86
	private PropertiesComponent           propertiesComponent = null;
87
	private TreeListContainer             treeListContainer = null;
88
	private JPanel                        jPNameFile = null;
89
	private JPanel                        centralPanel = null;
90
	private JTextField                    filenameTextField = null;
91
	private JLabel                        labelFilename = null;
92
	private FilterListener                filterListener = null;
93
	private FLayer                        fLayer = null;
94
	private String                        viewName = null;
95
	private ArrayList                     filterStatus = null;
96

  
97
	/**
98
	 * Constructor de un FilterPanel
99
	 */
100
	public FilterPanel(FLayer layer) {
101
		super(ButtonsPanel.BUTTONS_ACCEPTCANCELAPPLY);
102
		
103
		this.fLayer = layer;
104
		this.setLayout(new BorderLayout(5, 5));
105
		initialize();
106
		getPropertiesComponent();
107
		translate();
108
	}
109

  
110
	/**
111
	 * Seccion donde ir?n todas las traducciones invariables del componente
112
	 */
113
	private void translate() {
114
		getCBShowFilters().setText(PluginServices.getText(this, "aplicar_vista_previa"));
115
		getRadioOnlyView().setText(PluginServices.getText(this, "solo_visualizacion"));
116
		getRadioFileGenerate().setText(PluginServices.getText(this, "generar_fichero"));
117
		getRadioNewLayer().setText(PluginServices.getText(this, "capa_nueva"));
118
		getRadioOpenMemory().setText(PluginServices.getText(this, "abrir_memoria"));
119
		getLabelFilename().setText(PluginServices.getText(this, "nombre_capa") + ":");
120
	}
121

  
122
	/**
123
	 * This method initializes this
124
	 */
125
	private void initialize() {
126
		
127
		JPanel panelLeft = new JPanel();
128
		panelLeft.setPreferredSize(new Dimension(390,0));
129
		panelLeft.setLayout(new BorderLayout(5, 5));
130
		panelLeft.add(getTreeListContainer(), BorderLayout.WEST);
131
		panelLeft.add(getCentralPanel(), BorderLayout.CENTER);
132
		
133
		
134
		JSplitPane jSplitPane1 = new JSplitPane();
135
		jSplitPane1.setLeftComponent(panelLeft);
136
		jSplitPane1.setRightComponent(getPanelRight());
137
		jSplitPane1.setResizeWeight(1.0);
138
		jSplitPane1.setContinuousLayout(true);
139
		jSplitPane1.setUI(new BasicSplitPaneUI() {
140
			public BasicSplitPaneDivider createDefaultDivider() {
141
				return new BasicSplitPaneDivider(this) {
142
					public void setBorder(Border b) {
143
					}
144
				};
145
			}
146
		});
147
		jSplitPane1.setBorder(null);
148

  
149
		add(jSplitPane1, BorderLayout.CENTER);
150
		
151
		
152
//		this.add(getPPreview(), BorderLayout.EAST);
153
	}
154
	
155
	JSplitPane jPanelRight = null;
156
	/**
157
	 * Devuelve el panel donde estar? el widget de preview
158
	 * @return
159
	 */
160
	private JSplitPane getPanelRight() {
161
		if (jPanelRight == null) {
162
			jPanelRight = new JSplitPane();
163
			jPanelRight.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
164
			jPanelRight.setContinuousLayout(true);
165
			jPanelRight.setResizeWeight(0.0);
166
			jPanelRight.setPreferredSize(new Dimension(220, 0));
167
			jPanelRight.setMinimumSize(new Dimension(220, 0));
168

  
169
			jPanelRight.setTopComponent(getPPreview());
170
			jPanelRight.setBottomComponent(panelOptions());
171
			jPanelRight.setUI(new BasicSplitPaneUI() {
172
				public BasicSplitPaneDivider createDefaultDivider() {
173
					return new BasicSplitPaneDivider(this) {
174
						public void setBorder(Border b) {
175
						}
176
					};
177
				}
178
			});
179
			jPanelRight.setBorder(null);
180
		}
181
		return jPanelRight;
182
	}	
183

  
184
	/**
185
	 * Obtener y generar el JPanel central que contendr? las propiedades
186
	 * @return
187
	 */
188
	private JPanel getCentralPanel() {
189
		if (centralPanel == null) {
190
			centralPanel = new JPanel();
191
			centralPanel.setLayout(new BorderLayout());
192
			centralPanel.add(getJPNameFile(), BorderLayout.SOUTH);
193
		}
194
		return centralPanel;
195
	}
196

  
197
	/**
198
	 * Construye el arbol para el men? de filtros disponibles
199
	 */
200
	private void menuBuild() {
201
		Hashtable keys = new Hashtable();
202
		RasterFilterList filterList = ((FLyrRasterSE) fLayer).getRenderFilterList();
203
		// Creamos un stackManager para recorrer los filtros registrados en gvSIG
204
		RasterFilterListManager stackManager = new RasterFilterListManager(filterList);
205

  
206
		int count = 0;
207
		RasterFilter obj = null;
208

  
209
		for (int i = 0; i < stackManager.getRasterFilterList().size(); i++) {
210
			Class classFilter = (Class) stackManager.getRasterFilterList().get(i);
211

  
212
			try {
213
				obj = (RasterFilter) classFilter.newInstance();
214

  
215
				initFilter(obj);
216
				
217
				if (!obj.isVisible())
218
					continue;
219
				
220
				// Crear grupos de los filtros
221
				if (!keys.containsKey(PluginServices.getText(this, new String(obj.getGroup())))) {
222
					keys.put(PluginServices.getText(this, new String(obj.getGroup())), obj);
223
					getTreeListContainer().addClass(PluginServices.getText(this, new String(obj.getGroup())), count);
224
					count++;
225
						
226
				}
227
				// Crear cada entrada de los filtro
228
				String[] names = obj.getNames();
229
				for (int j = 0; j < names.length; j++) {
230
					obj.setName(names[j]);
231
					getFilterListener().addNewParam(names[j], initFilterParam(obj.getUIParams(names[j])), classFilter);
232
					getTreeListContainer().addEntry(PluginServices.getText(this, names[j]), PluginServices.getText(this, obj.getGroup()), names[j]);
233
				}
234
			} catch (InstantiationException e) {
235
				RasterToolsUtil.debug("No se ha podido meter el filtro en la lista", this, e);
236
			} catch (IllegalAccessException e) {
237
				RasterToolsUtil.debug("No se ha podido meter el filtro en la lista", this, e);
238
			}
239
		}
240

  
241
		getTreeListContainer().getTree().expandRow(0);
242
	}
243

  
244
	/**
245
	 * Comprueba que el nombre del filtro esta cargado en las extensiones
246
	 * @param filter
247
	 * @return
248
	 */
249
	private boolean hasThisFilter(String filter) {
250
		RasterFilterList filterList = new RasterFilterList();
251
		RasterFilterListManager stackManager = new RasterFilterListManager(filterList);
252

  
253
		boolean error;
254
		RasterFilter obj = null;
255

  
256
		for (int i = 0; i < stackManager.getRasterFilterList().size(); i++) {
257
			Class classFilter = (Class) stackManager.getRasterFilterList().get(i);
258
			error = true;
259

  
260
			try {
261
				obj = (RasterFilter) classFilter.newInstance();
262
				error = false;
263
			} catch (InstantiationException e) {
264
			} catch (IllegalAccessException e) {
265
			}
266

  
267
			if (!error) {
268
				String[] names = obj.getNames();
269
				for (int j = 0; j < names.length; j++)
270
					if (filter.equals(names[j]))
271
						return true;
272
			}
273
		}
274
		return false;
275
	}
276

  
277
	/**
278
	 * Pasamos los parametros basicos a un filtro
279
	 * @param filter
280
	 */
281
	private void initFilter(RasterFilter filter) {
282
		if (fLayer != null) {
283
			filter.getEnv().put("MultiRasterDataset", ((FLyrRasterSE) fLayer).getDataSource());
284
			filter.getEnv().put("initRaster", fLayer);
285
		}
286
	}
287

  
288
	/**
289
	 * Sirve para a?adir mas parametros genericos por defecto al panel, de momento
290
	 * solo he puesto para activar o desactivar un filtro.
291
	 * @param params
292
	 * @return
293
	 */
294
	private Params initFilterParam(Params params) {
295
		params.setParam("enabled", new Boolean(true), Params.CHECK, null);
296
		Param param = params.getParamById("enabled");
297
		params.getParams().remove(params.getParams().size() - 1);
298
		params.getParams().add(0, param);
299
		return params;
300
	}
301

  
302
	/**
303
	 * This method initializes jPanel
304
	 * @return javax.swing.JPanel
305
	 */
306
	public TreeListContainer getTreeListContainer() {
307
		if (treeListContainer == null) {
308
			treeListContainer = new TreeListContainer();
309
			treeListContainer.getTree().expandRow(0);
310
			treeListContainer.addTreeListListener(getFilterListener());
311
			treeListContainer.addChangeSelectionListener(getFilterListener());
312
		}
313
		return treeListContainer;
314
	}
315

  
316
	/**
317
	 * Obtener el PropertiesComponent del panel de filtros, en caso de no existir,
318
	 * lo crea.
319
	 * @return
320
	 */
321
	public PropertiesComponent getPropertiesComponent() {
322
		if (propertiesComponent == null) {
323
			propertiesComponent = new PropertiesComponent();
324
			getCentralPanel().add(propertiesComponent, BorderLayout.CENTER);
325

  
326
			propertiesComponent.addStateChangedListener(getFilterListener());
327
		}
328
		return propertiesComponent;
329
	}
330

  
331
	/**
332
	 * Devuelve el panel donde estar? el widget de preview
333
	 * @return
334
	 */
335
	private JPanel getPPreview() {
336
		if (jPreview == null) {
337
			jPreview = new JPanel();
338
			JPanel jsubpanel = new JPanel();
339
			jPreview.setBorder(javax.swing.BorderFactory.createTitledBorder(null, PluginServices.getText(this, "vista_previa"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
340
			jPreview.setLayout(new BorderLayout());
341
			jsubpanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(8, 8, 8, 8));
342
			jsubpanel.setLayout(new BorderLayout());
343

  
344
			jPreview.setPreferredSize(new Dimension(192, 192));
345
			jPreview.setMinimumSize(new Dimension(192, 192));
346
			jPreview.setMaximumSize(new Dimension(192, 192));
347

  
348
			jsubpanel.add(getImageNavigator(), BorderLayout.CENTER);
349
			jPreview.add(jsubpanel, BorderLayout.CENTER);
350

  
351
			panelOptions().setPreferredSize(new Dimension(192, 132));
352
			panelOptions().setMinimumSize(new Dimension(192, 132));
353
			panelOptions().setMaximumSize(new Dimension(192, 132));
354
		}
355
		return jPreview;
356
	}
357

  
358
	/**
359
	 * @return the jLabelShowFilters
360
	 */
361
	public JCheckBox getCBShowFilters() {
362
		if (jCBShowFilters == null) {
363
			jCBShowFilters = new JCheckBox();
364
			jCBShowFilters.addActionListener(getFilterListener());
365
			jCBShowFilters.setSelected(true);
366
		}
367
		return jCBShowFilters;
368
	}
369

  
370
	/**
371
	 * Devuelve el Widget del preview, en caso de no existir lo crea.
372
	 * @return
373
	 */
374
	private ImageNavigator getImageNavigator() {
375
		if (imageNavigator == null) {
376
			imageNavigator = new ImageNavigator(getFilterListener());
377
			imageNavigator.setFocusable(true);
378
			imageNavigator.setBorder(javax.swing.BorderFactory.createLineBorder(Color.gray, 1));
379
		}
380
		return imageNavigator;
381
	}
382

  
383
	/**
384
	 * Devuelve el panel de Opciones, en caso de no existir, lo crea.
385
	 * @return
386
	 */
387
	private JPanel panelOptions() {
388
		if (jPanelOptions == null) {
389
			JPanel jPanel2 = null;
390

  
391
			ButtonGroup buttonGroup1;
392
			ButtonGroup buttonGroup2;
393

  
394
			GridBagConstraints gridBagConstraints;
395

  
396
			buttonGroup1 = new javax.swing.ButtonGroup();
397
			buttonGroup2 = new ButtonGroup();
398
			jPanelOptions = new JPanel();
399
			jPanel2 = new JPanel();
400

  
401
			jPanelOptions.setLayout(new GridBagLayout());
402

  
403
			gridBagConstraints = new GridBagConstraints();
404
			gridBagConstraints.gridx = 0;
405
			gridBagConstraints.gridy = 1;
406
			gridBagConstraints.anchor = GridBagConstraints.WEST;
407
			gridBagConstraints.insets = new Insets(2, 2, 2, 2);
408
			jPanelOptions.add(getCBShowFilters(), gridBagConstraints);
409

  
410
			buttonGroup1.add(getRadioOnlyView());
411

  
412
			gridBagConstraints = new GridBagConstraints();
413
			gridBagConstraints.gridx = 0;
414
			gridBagConstraints.gridy = 2;
415
			gridBagConstraints.anchor = GridBagConstraints.WEST;
416
			gridBagConstraints.insets = new Insets(3, 3, 3, 3);
417
			jPanelOptions.add(getRadioOnlyView(), gridBagConstraints);
418

  
419
			buttonGroup1.add(getRadioNewLayer());
420

  
421
			gridBagConstraints = new GridBagConstraints();
422
			gridBagConstraints.gridx = 0;
423
			gridBagConstraints.gridy = 3;
424
			gridBagConstraints.anchor = GridBagConstraints.WEST;
425
			gridBagConstraints.insets = new Insets(3, 3, 3, 3);
426
			jPanelOptions.add(getRadioNewLayer(), gridBagConstraints);
427
			
428
			jPanel2.setLayout(new GridBagLayout());
429

  
430
			jPanel2.setBorder(BorderFactory.createTitledBorder(""));
431
			buttonGroup2.add(getRadioFileGenerate());
432
			gridBagConstraints = new GridBagConstraints();
433
			gridBagConstraints.anchor = GridBagConstraints.WEST;
434
			gridBagConstraints.insets = new Insets(3, 3, 3, 3);
435
			gridBagConstraints.weightx = 1.0;
436
			jPanel2.add(getRadioFileGenerate(), gridBagConstraints);
437

  
438
			buttonGroup2.add(getRadioOpenMemory());
439
			gridBagConstraints = new GridBagConstraints();
440
			gridBagConstraints.gridx = 0;
441
			gridBagConstraints.gridy = 1;
442
			gridBagConstraints.anchor = GridBagConstraints.WEST;
443
			gridBagConstraints.insets = new Insets(3, 3, 3, 3);
444
			jPanel2.add(getRadioOpenMemory(), gridBagConstraints);
445

  
446
			gridBagConstraints = new GridBagConstraints();
447
			gridBagConstraints.gridx = 0;
448
			gridBagConstraints.gridy = 4;
449
			gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
450
			gridBagConstraints.insets = new Insets(3, 3, 3, 3);
451
			jPanelOptions.add(jPanel2, gridBagConstraints);
452

  
453
			gridBagConstraints = new GridBagConstraints();
454
			gridBagConstraints.gridx = 0;
455
			gridBagConstraints.gridy = 5;
456
			gridBagConstraints.weightx = 1.0;
457
			gridBagConstraints.weighty = 1.0;
458
			jPanelOptions.add(new JPanel(), gridBagConstraints);
459
		}
460

  
461
		return jPanelOptions;
462
	}
463

  
464
	/**
465
	 * Devuelve el JRadioButton de generar fichero
466
	 * @return
467
	 */
468
	public JRadioButton getRadioFileGenerate() {
469
		if (jRBFileGenerate == null) {
470
			jRBFileGenerate = new JRadioButton();
471
			jRBFileGenerate.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
472
			jRBFileGenerate.setMargin(new Insets(0, 0, 0, 0));
473
		}
474
		return jRBFileGenerate;
475
	}
476

  
477
	/**
478
	 * Devuelve el JRadioButton de Solo vista
479
	 * @return
480
	 */
481
	public JRadioButton getRadioOnlyView() {
482
		if (jRBOnlyView == null) {
483
			jRBOnlyView = new JRadioButton();
484
			jRBOnlyView.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
485
			jRBOnlyView.setMargin(new Insets(0, 0, 0, 0));
486
		}
487
		return jRBOnlyView;
488
	}
489

  
490
	/**
491
	 * Devuelve el JRadioButton de nueva capa
492
	 * @return
493
	 */
494
	public JRadioButton getRadioNewLayer() {
495
		if (jRBNewLayer == null) {
496
			jRBNewLayer = new JRadioButton();
497
			jRBNewLayer.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
498
			jRBNewLayer.setMargin(new Insets(0, 0, 0, 0));
499
			jRBNewLayer.addItemListener(new ItemListener() {
500
				public void itemStateChanged(ItemEvent evt) {
501
					jRBNewLayerStateChanged(evt);
502
				}
503
			});
504
			jRBNewLayer.setSelected(true);
505
		}
506
		return jRBNewLayer;
507
	}
508

  
509
	/**
510
	 * Devuelve el JRadioButton de Abrir en memoria
511
	 * @return
512
	 */
513
	public JRadioButton getRadioOpenMemory() {
514
		if (jRBOpenMemory == null) {
515
			jRBOpenMemory = new JRadioButton();
516
			jRBOpenMemory.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
517
			jRBOpenMemory.setMargin(new Insets(0, 0, 0, 0));
518

  
519
			jRBOpenMemory.addItemListener(new ItemListener() {
520
				public void itemStateChanged(ItemEvent evt) {
521
					jRBOpenMemoryStateChanged(evt);
522
				}
523
			});
524
			jRBOpenMemory.setSelected(true);
525
		}
526
		return jRBOpenMemory;
527
	}
528

  
529
	/**
530
	 * Especificar el nombre de la nueva capa para el recuadro de texto asign?ndo
531
	 * en cada llamada un nombre consecutivo.
532
	 */
533
	public void updateNewLayerText() {
534
		filenameTextField.setText(RasterLibrary.getOnlyLayerName());
535
	}
536

  
537
	/**
538
	 * This method initializes jPNameFile
539
	 *
540
	 * @return javax.swing.JPanel
541
	 */
542
	private JPanel getJPNameFile() {
543
		if (jPNameFile == null) {
544
			jPNameFile = new JPanel();
545
			jPNameFile.setBorder(javax.swing.BorderFactory.createTitledBorder(null, PluginServices.getText(this, "nombre_capa"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
546
			jPNameFile.add(getLabelFilename());
547
			jPNameFile.add(getFilenameTextField());
548
			updateNewLayerText();
549
		}
550
		return jPNameFile;
551
	}
552

  
553
	private JLabel getLabelFilename() {
554
		if (labelFilename == null) {
555
			labelFilename = new JLabel();
556
		}
557
		return labelFilename;
558
	}
559

  
560
	/**
561
	 * This method initializes filenameTextField
562
	 *
563
	 * @return javax.swing.JTextField
564
	 */
565
	public JTextField getFilenameTextField() {
566
		if (filenameTextField == null) {
567
			filenameTextField = new JTextField();
568
			filenameTextField.setPreferredSize(new Dimension(150, filenameTextField.getPreferredSize().height));
569
			RasterLibrary.addOnlyLayerNameListener(this);
570
		}
571
		return filenameTextField;
572
	}
573

  
574
	/**
575
	 * Devuelve el componente <code>FilterListener</code>, que contendr? el
576
	 * proceso en si del panel
577
	 */
578
	private FilterListener getFilterListener() {
579
		if (filterListener == null) {
580
			filterListener = new FilterListener(this);
581
		}
582

  
583
		return filterListener;
584
	}
585

  
586
	/**
587
	 * Devuelve el FLayer asignado al panel
588
	 * @return
589
	 */
590
	public FLayer getLayer() {
591
		return fLayer;
592
	}
593

  
594
	/**
595
	 * Definir el FLayer del panel, haciendo todas las cargas necesarias despues
596
	 * de especificarlo.
597
	 * @param layer
598
	 */
599
	public void setLayer(FLayer layer) {
600
		this.fLayer = layer;
601

  
602
		// Construimos el arbol de filtros
603
		menuBuild();
604

  
605
		View view = (View) PluginServices.getMDIManager().getActiveWindow();
606
		viewName = PluginServices.getMDIManager().getWindowInfo(view).getTitle();
607

  
608
		//Comprobamos que el raster de salida no exceda los 4GB que es el m?ximo 
609
		//admisible por un TIFF. Si es as? se hace un setCompress para salvar en JPEG2000
610
		long sizeB = (long)((((FLyrRasterSE) layer).getPxWidth() * ((FLyrRasterSE) layer).getPxWidth() * ((FLyrRasterSE) layer).getBandCount())); 
611
		int sizeMB = (int)(sizeB / 1048576);
612
		if(sizeMB >= 4096) {
613
			RasterToolsUtil.messageBoxInfo("file_too_big", this);
614
			filterListener.setCompress(true);
615
		}
616
		Extent extent2 = ((FLyrRasterSE) fLayer).getFullRasterExtent();//.getBufferFactory().getExtent();
617

  
618
		double x1 = extent2.getULX();
619
		double y1 = extent2.getULY();
620
		double x2 = extent2.getLRX();
621
		double y2 = extent2.getLRY();
622

  
623
		getImageNavigator().setViewDimensions(x1, y1, x2, y2);
624
		getImageNavigator().setZoom(1.0/((FLyrRasterSE) fLayer).getBufferFactory().getDataSource().getCellSize());
625
		getImageNavigator().imageCenter();
626
		getImageNavigator().updateBuffer();
627

  
628
		RasterFilterList rfl = ((FLyrRasterSE) layer).getRenderFilterList();
629

  
630
		filterStatus = rfl.getStatusCloned();
631

  
632
		//Carga el listado de filtros que ya estaban aplicados en la capa al abrir
633
		 
634
		int i = 0;
635
		boolean filters = false;
636
		while (rfl.get(i) != null) {
637
			DefaultListModel list = (DefaultListModel) getTreeListContainer().getListModel();
638
			if (rfl.get(i).isVisible() && hasThisFilter(rfl.get(i).getName())) {
639
				list.addElement(PluginServices.getText(this, rfl.get(i).getName()));
640
				for (int j = 0; j < getFilterListener().getParamsList().size(); j++) {
641
					if (((ParamStruct) getFilterListener().getParamsList().get(j)).getFilterName().equals(rfl.get(i).getName())) {
642
						filters = true;
643
						initFilter(rfl.get(i));
644
						((ParamStruct) getFilterListener().getParamsList().get(j)).setFilterParam(initFilterParam(rfl.get(i).getUIParams(rfl.get(i).getName())));
645
					}
646
				}
647
			}
648

  
649
			i++;
650
		}
651

  
652
		// Si existen filtros ya en la capa, pondremos los RadioButton para que
653
		// los cambios se hagan sobre la visualizaci?n
654
		if (filters)
655
			getRadioOnlyView().setSelected(true);
656

  
657
		// Selecciona el primer item del arbol
658
		TreeListContainer lc = getTreeListContainer();
659
		lc.getTree().expandRow(1);
660
		lc.getTree().setSelectionInterval(2, 2);
661
		
662
		filterListener.setLayer(fLayer);
663
	}
664

  
665
	/**
666
	 * Obtiene el nombre de la vista
667
	 * @return
668
	 */
669
	public String getViewName() {
670
		return viewName;
671
	}
672

  
673
	/**
674
	 * Poner los estados de los RadioButton en caso de que cambien de valor
675
	 * @param evt
676
	 */
677
	private void jRBNewLayerStateChanged(ItemEvent evt) {
678
		if (getRadioNewLayer().getSelectedObjects() != null) {
679
			getRadioFileGenerate().setEnabled(true);
680
			getRadioOpenMemory().setEnabled(true);
681
			if (getRadioOpenMemory().getSelectedObjects() != null)
682
				setFilenameEnabled(true);
683
			else
684
				setFilenameEnabled(false);
685
		} else {
686
			getRadioFileGenerate().setEnabled(false);
687
			getRadioOpenMemory().setEnabled(false);
688
			setFilenameEnabled(false);
689
		}
690
	}
691

  
692
	private void setFilenameEnabled(boolean value) {
693
		getFilenameTextField().setEnabled(value);
694
		getLabelFilename().setEnabled(value);
695
	}
696

  
697
	/**
698
	 * Poner los estados de los RadioButton en caso de que cambien de valor
699
	 * @param evt
700
	 */
701
	private void jRBOpenMemoryStateChanged(ItemEvent evt) {
702
		if (getRadioOpenMemory().getSelectedObjects() != null) {
703
			setFilenameEnabled(true);
704
		} else {
705
			setFilenameEnabled(false);
706
		}
707
	}
708

  
709
	/**
710
	 * Asigna el t?tulo al panel
711
	 * @param title T?tulo del panel
712
	 */
713
	public void setTitle(String title) {
714
		getPropertiesComponent().setBorder(BorderFactory.createTitledBorder(null, PluginServices.getText(this, "filtro_de") + " " + PluginServices.getText(this, title), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
715
	}
716

  
717
	/**
718
	 * Actualizamos la vista previa
719
	 */
720
	public void refreshPreview() {
721
		getImageNavigator().updateBuffer();
722
	}
723

  
724
	/**
725
	 * Volvemos todo a la normalidad cuando se cancela
726
	 */
727
	public void cancel() {
728
		getLayer().getMapContext().invalidate();
729
	}
730

  
731
	/**
732
	 * Volvemos todo a la normalidad cuando se cancela
733
	 */
734
	public void restoreFilters() {
735
		Rendering rendering = ((FLyrRasterSE) getLayer()).getRender();
736
		rendering.getFilterList().setStatus(getFilterStatus());
737
	}
738

  
739
	/**
740
	 * Asignar un nuevo componente de PropertiesComponent, eliminando el anterior
741
	 * que hubiera.
742
	 * @param component
743
	 * @param name
744
	 */
745
	public void setNewPropertiesComponent(PropertiesComponent component, String name) {
746
		getPropertiesComponent().setVisible(false);
747
		this.remove(propertiesComponent);
748
		propertiesComponent = null;
749
		propertiesComponent = component;
750
		getCentralPanel().add(propertiesComponent, BorderLayout.CENTER);
751
		propertiesComponent.addStateChangedListener(getFilterListener());
752
		setTitle(name);
753
		this.validate();
754
	}
755

  
756
	/**
757
	 * Cuando se aceptan los cambios en el panel ejecutaremos el aceptar del
758
	 * listener
759
	 */
760
	public void accept() {
761
		filterListener.accept();
762
	}
763

  
764
	/**
765
	 * Devuelve el arrayList de filtros inicial
766
	 * @return
767
	 */
768
	public ArrayList getFilterStatus() {
769
		return filterStatus;
770
	}
771

  
772
	/**
773
	 * Cuando alguien ha cambiado la propiedad del nombre de la 
774
	 * capa se actualiza autom?ticamente
775
	 */
776
	public void actionValueChanged(PropertyEvent e) {
777
		updateNewLayerText();
778
	}
779
}
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/filter/ui/FilterDialog.java
19 19
package org.gvsig.rastertools.filter.ui;
20 20

  
21 21
import java.awt.BorderLayout;
22
import java.awt.Dimension;
23
import java.awt.GridBagConstraints;
24
import java.awt.GridBagLayout;
25
import java.awt.Insets;
26
import java.awt.event.ItemEvent;
27
import java.awt.event.ItemListener;
28
import java.util.ArrayList;
29
import java.util.Hashtable;
22 30

  
31
import javax.swing.BorderFactory;
32
import javax.swing.ButtonGroup;
33
import javax.swing.DefaultListModel;
34
import javax.swing.JCheckBox;
23 35
import javax.swing.JPanel;
36
import javax.swing.JRadioButton;
24 37

  
38
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
25 39
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
26 40
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent;
27 41
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
42
import org.gvsig.gui.beans.propertiespanel.PropertiesComponent;
43
import org.gvsig.gui.beans.treelist.TreeListContainer;
28 44
import org.gvsig.raster.RasterLibrary;
45
import org.gvsig.raster.beans.previewbase.IPreviewRenderProcess;
46
import org.gvsig.raster.beans.previewbase.PreviewBasePanel;
47
import org.gvsig.raster.dataset.Params;
48
import org.gvsig.raster.dataset.Params.Param;
49
import org.gvsig.raster.grid.filter.FilterTypeException;
50
import org.gvsig.raster.grid.filter.RasterFilter;
51
import org.gvsig.raster.grid.filter.RasterFilterList;
52
import org.gvsig.raster.grid.filter.RasterFilterListManager;
53
import org.gvsig.raster.grid.render.Rendering;
54
import org.gvsig.raster.hierarchy.IRasterRendering;
55
import org.gvsig.raster.util.RasterToolsUtil;
56
import org.gvsig.rastertools.filter.FilterListener;
57
import org.gvsig.rastertools.filter.FilterListener.ParamStruct;
29 58

  
30 59
import com.iver.andami.PluginServices;
31 60
import com.iver.andami.ui.mdiManager.IWindow;
32 61
import com.iver.andami.ui.mdiManager.IWindowListener;
33 62
import com.iver.andami.ui.mdiManager.WindowInfo;
34 63
import com.iver.cit.gvsig.fmap.layers.FLayer;
64
import com.iver.cit.gvsig.project.documents.view.gui.View;
35 65
/**
36 66
 * Dialogo para los filtros de raster.
37 67
 *
......
39 69
 * @author Nacho Brodin <brodin_ign@gva.es>
40 70
 * @author BorSanZa - Borja S?nchez Zamorano (borja.sanchez@iver.es)
41 71
 */
42
public class FilterDialog extends JPanel implements IWindow, IWindowListener, ButtonsPanelListener {
72
public class FilterDialog extends JPanel implements IWindow, IWindowListener, IPreviewRenderProcess, ButtonsPanelListener {
43 73
	private static final long serialVersionUID = 7152780112689637266L;
44 74

  
45
	private FilterPanel	 filterPanel = null;
46
	private FLayer       lyr = null;
75
	private PreviewBasePanel    previewBasePanel    = null;
76
	private FLayer              layer               = null;
77
	private FilterListener      filterListener      = null;
78
	private PropertiesComponent propertiesComponent = null;
47 79

  
80
	private ArrayList           filterStatus        = null;
81
	private JRadioButton        jRBFileGenerate     = null;
82
	private JCheckBox           jCBShowFilters      = null;
83
	private JRadioButton        jRBOnlyView         = null;
84
	private JRadioButton        jRBNewLayer         = null;
85
	private String              viewName            = null;
86
	private JRadioButton        jRBOpenMemory       = null;
87
	private JPanel              jPanelOptions       = null;
88
	private FilterMainPanel     filterMain          = null;
89

  
48 90
	/**
49 91
	 * Controla si se ha presionado el boton aceptar para el cerrado de la ventana
50 92
	 */
......
56 98
	 * @param height Alto del panel
57 99
	 */
58 100
	public FilterDialog(FLayer layer, int width, int height) {
59
		this.lyr = layer;
60
		this.setSize(width, height);
61
		this.setLayout(new BorderLayout());
62
		this.add(getFilterPanel(), BorderLayout.CENTER);
63
		this.setLayer(lyr);
101
		setLayer(layer);
102
		initialize();
103
		setSize(width, height);
64 104
	}
65

  
105
	
106
	private void initialize() {
107
		translate();
108
		setLayout(new BorderLayout());
109
		add(getPreviewBasePanel(), BorderLayout.CENTER);
110
	}
111
	
66 112
	/**
67
	 * Definir el layer a tratar para el filterPanel
68
	 * @param layer
113
	 * Seccion donde ir?n todas las traducciones invariables del componente
69 114
	 */
70
	private void setLayer(FLayer layer) {
71
		getFilterPanel().setLayer(layer);
115
	private void translate() {
116
		getCBShowFilters().setText(PluginServices.getText(this, "aplicar_vista_previa"));
117
		getRadioOnlyView().setText(PluginServices.getText(this, "solo_visualizacion"));
118
		getRadioFileGenerate().setText(PluginServices.getText(this, "generar_fichero"));
119
		getRadioNewLayer().setText(PluginServices.getText(this, "capa_nueva"));
120
		getRadioOpenMemory().setText(PluginServices.getText(this, "abrir_memoria"));
72 121
	}
73

  
122
	
74 123
	/**
75
	 * Obtiene el panel de filtros
124
	 * Obtiene el panel con el histograma
76 125
	 * @return HistogramPanel
77 126
	 */
78
	private FilterPanel getFilterPanel() {
79
		if (filterPanel == null) {
80
			filterPanel = new FilterPanel(lyr);
81
			filterPanel.addButtonPressedListener(this);
127
	private PreviewBasePanel getPreviewBasePanel() {
128
		if (previewBasePanel == null) {
129
			ArrayList list = new ArrayList();
130
			list.add(getMainPanel());
131
			previewBasePanel = new PreviewBasePanel(list, null, panelOptions(), this, (FLyrRasterSE) layer);
132
			previewBasePanel.setPreviewSize(new Dimension(190, 190));
133
			previewBasePanel.addButtonPressedListener(this);
82 134
		}
83
		return filterPanel;
135
		return previewBasePanel;
84 136
	}
85 137

  
86 138
	/**
87
	 * @see com.iver.mdiApp.ui.MDIManager.View#getViewInfo()
139
	 * Devuelve el componente <code>FilterListener</code>, que contendr? el
140
	 * proceso en si del panel
88 141
	 */
89
	public WindowInfo getWindowInfo() {
90
		WindowInfo m_viewinfo = new WindowInfo(WindowInfo.MODELESSDIALOG | WindowInfo.RESIZABLE | WindowInfo.MAXIMIZABLE);
91
		if (getFilterPanel().getLayer() != null)
92
			m_viewinfo.setAdditionalInfo(getFilterPanel().getLayer().getName());
93
		m_viewinfo.setTitle(PluginServices.getText(this, "filtros"));
94
		m_viewinfo.setHeight(this.getHeight());
95
		m_viewinfo.setWidth(this.getWidth());
96
		return m_viewinfo;
142
	private FilterListener getFilterListener() {
143
		if (filterListener == null) {
144
			filterListener = new FilterListener(this);
145
		}
146

  
147
		return filterListener;
97 148
	}
98 149

  
99 150
	/**
151
	 * Devuelve el panel de Opciones, en caso de no existir, lo crea.
152
	 * @return
153
	 */
154
	private JPanel panelOptions() {
155
		if (jPanelOptions == null) {
156
			JPanel jPanel2 = null;
157

  
158
			ButtonGroup buttonGroup1;
159
			ButtonGroup buttonGroup2;
160

  
161
			GridBagConstraints gridBagConstraints;
162

  
163
			buttonGroup1 = new javax.swing.ButtonGroup();
164
			buttonGroup2 = new ButtonGroup();
165
			jPanelOptions = new JPanel();
166
			jPanel2 = new JPanel();
167

  
168
			jPanelOptions.setLayout(new GridBagLayout());
169

  
170
			gridBagConstraints = new GridBagConstraints();
171
			gridBagConstraints.gridx = 0;
172
			gridBagConstraints.gridy = 1;
173
			gridBagConstraints.anchor = GridBagConstraints.WEST;
174
			gridBagConstraints.insets = new Insets(2, 2, 2, 2);
175
			jPanelOptions.add(getCBShowFilters(), gridBagConstraints);
176

  
177
			buttonGroup1.add(getRadioOnlyView());
178

  
179
			gridBagConstraints = new GridBagConstraints();
180
			gridBagConstraints.gridx = 0;
181
			gridBagConstraints.gridy = 2;
182
			gridBagConstraints.anchor = GridBagConstraints.WEST;
183
			gridBagConstraints.insets = new Insets(3, 3, 3, 3);
184
			jPanelOptions.add(getRadioOnlyView(), gridBagConstraints);
185

  
186
			buttonGroup1.add(getRadioNewLayer());
187

  
188
			gridBagConstraints = new GridBagConstraints();
189
			gridBagConstraints.gridx = 0;
190
			gridBagConstraints.gridy = 3;
191
			gridBagConstraints.anchor = GridBagConstraints.WEST;
192
			gridBagConstraints.insets = new Insets(3, 3, 3, 3);
193
			jPanelOptions.add(getRadioNewLayer(), gridBagConstraints);
194
			
195
			jPanel2.setLayout(new GridBagLayout());
196

  
197
			jPanel2.setBorder(BorderFactory.createTitledBorder(""));
198
			buttonGroup2.add(getRadioFileGenerate());
199
			gridBagConstraints = new GridBagConstraints();
200
			gridBagConstraints.anchor = GridBagConstraints.WEST;
201
			gridBagConstraints.insets = new Insets(3, 3, 3, 3);
202
			gridBagConstraints.weightx = 1.0;
203
			jPanel2.add(getRadioFileGenerate(), gridBagConstraints);
204

  
205
			buttonGroup2.add(getRadioOpenMemory());
206
			gridBagConstraints = new GridBagConstraints();
207
			gridBagConstraints.gridx = 0;
208
			gridBagConstraints.gridy = 1;
209
			gridBagConstraints.anchor = GridBagConstraints.WEST;
210
			gridBagConstraints.insets = new Insets(3, 3, 3, 3);
211
			jPanel2.add(getRadioOpenMemory(), gridBagConstraints);
212

  
213
			gridBagConstraints = new GridBagConstraints();
214
			gridBagConstraints.gridx = 0;
215
			gridBagConstraints.gridy = 4;
216
			gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
217
			gridBagConstraints.insets = new Insets(3, 3, 3, 3);
218
			jPanelOptions.add(jPanel2, gridBagConstraints);
219

  
220
			gridBagConstraints = new GridBagConstraints();
221
			gridBagConstraints.gridx = 0;
222
			gridBagConstraints.gridy = 5;
223
			gridBagConstraints.weightx = 1.0;
224
			gridBagConstraints.weighty = 1.0;
225
			jPanelOptions.add(new JPanel(), gridBagConstraints);
226
		}
227

  
228
		return jPanelOptions;
229
	}
230

  
231
	/**
232
	 * Construye el arbol para el men? de filtros disponibles
233
	 */
234
	private void menuBuild() {
235
		Hashtable keys = new Hashtable();
236
		RasterFilterList filterList = ((FLyrRasterSE) layer).getRenderFilterList();
237
		// Creamos un stackManager para recorrer los filtros registrados en gvSIG
238
		RasterFilterListManager stackManager = new RasterFilterListManager(filterList);
239

  
240
		int count = 0;
241
		RasterFilter obj = null;
242

  
243
		for (int i = 0; i < stackManager.getRasterFilterList().size(); i++) {
244
			Class classFilter = (Class) stackManager.getRasterFilterList().get(i);
245

  
246
			try {
247
				obj = (RasterFilter) classFilter.newInstance();
248

  
249
				initFilter(obj);
250
				
251
				if (!obj.isVisible())
252
					continue;
253
				
254
				// Crear grupos de los filtros
255
				if (!keys.containsKey(PluginServices.getText(this, new String(obj.getGroup())))) {
256
					keys.put(PluginServices.getText(this, new String(obj.getGroup())), obj);
257
					getMainPanel().getTreeListContainer().addClass(PluginServices.getText(this, new String(obj.getGroup())), count);
258
					count++;
259
						
260
				}
261
				// Crear cada entrada de los filtro
262
				String[] names = obj.getNames();
263
				for (int j = 0; j < names.length; j++) {
264
					obj.setName(names[j]);
265
					getFilterListener().addNewParam(names[j], initFilterParam(obj.getUIParams(names[j])), classFilter);
266
					getMainPanel().getTreeListContainer().addEntry(PluginServices.getText(this, names[j]), PluginServices.getText(this, obj.getGroup()), names[j]);
267
				}
268
			} catch (InstantiationException e) {
269
				RasterToolsUtil.debug("No se ha podido meter el filtro en la lista", this, e);
270
			} catch (IllegalAccessException e) {
271
				RasterToolsUtil.debug("No se ha podido meter el filtro en la lista", this, e);
272
			}
273
		}
274

  
275
		getMainPanel().getTreeListContainer().getTree().expandRow(0);
276
	}
277
	
278
	/**
279
	 * Pasamos los parametros basicos a un filtro
280
	 * @param filter
281
	 */
282
	private void initFilter(RasterFilter filter) {
283
		if (layer != null) {
284
			filter.getEnv().put("MultiRasterDataset", ((FLyrRasterSE) layer).getDataSource());
285
			filter.getEnv().put("initRaster", layer);
286
		}
287
	}
288
	
289
	/**
290
	 * Sirve para a?adir mas parametros genericos por defecto al panel, de momento
291
	 * solo he puesto para activar o desactivar un filtro.
292
	 * @param params
293
	 * @return
294
	 */
295
	private Params initFilterParam(Params params) {
296
		params.setParam("enabled", new Boolean(true), Params.CHECK, null);
297
		Param param = params.getParamById("enabled");
298
		params.getParams().remove(params.getParams().size() - 1);
299
		params.getParams().add(0, param);
300
		return params;
301
	}
302
	
303
	/**
100 304
	 * Acciones a ejecutar cuando se cancela
101 305
	 */
102 306
	private void close() {
103 307
		try {
104
			RasterLibrary.removeOnlyLayerNameListener(getFilterPanel());
308
			RasterLibrary.removeOnlyLayerNameListener(getMainPanel());
105 309
			PluginServices.getMDIManager().closeWindow(this);
106 310
		} catch (ArrayIndexOutOfBoundsException e) {
107 311
			//Si la ventana no se puede eliminar no hacemos nada
108 312
		}
109 313
	}
110 314

  
315
	/**
316
	 * Poner los estados de los RadioButton en caso de que cambien de valor
317
	 * @param evt
318
	 */
319
	private void jRBNewLayerStateChanged(ItemEvent evt) {
320
		if (getRadioNewLayer().getSelectedObjects() != null) {
321
			getRadioFileGenerate().setEnabled(true);
322
			getRadioOpenMemory().setEnabled(true);
323
			if (getRadioOpenMemory().getSelectedObjects() != null)
324
				getMainPanel().setFilenameEnabled(true);
325
			else
326
				getMainPanel().setFilenameEnabled(false);
327
		} else {
328
			getRadioFileGenerate().setEnabled(false);
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff