Revision 16554
trunk/extensions/extRasterTools-SE/src/org/gvsig/raster/util/ExtendedFileFilter.java | ||
---|---|---|
1 |
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana |
|
2 |
* |
|
3 |
* Copyright (C) 2005 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.raster.util; |
|
20 |
|
|
21 |
import java.io.File; |
|
22 |
import java.util.ArrayList; |
|
23 |
|
|
24 |
import javax.swing.filechooser.FileFilter; |
|
25 |
|
|
26 |
import com.iver.andami.PluginServices; |
|
27 |
/** |
|
28 |
* ExtendedFileFilter es una clase para usarla junto a los JFileChooser. |
|
29 |
* Ofrece una funcionalidad simple para poder agregar extensiones de manera |
|
30 |
* comoda y rapida. Las descripciones ya las pone con un formato. |
|
31 |
* |
|
32 |
* @version 21/11/2007 |
|
33 |
* @author BorSanZa - Borja S?nchez Zamorano (borja.sanchez@iver.es) |
|
34 |
*/ |
|
35 |
public class ExtendedFileFilter extends FileFilter { |
|
36 |
String description = null; |
|
37 |
|
|
38 |
ArrayList extensions = new ArrayList(); |
|
39 |
|
|
40 |
/** |
|
41 |
* Constructor de un ExtendedFileFilter |
|
42 |
*/ |
|
43 |
public ExtendedFileFilter() { |
|
44 |
} |
|
45 |
|
|
46 |
/** |
|
47 |
* Construye un ExtendedFileFilter con una extensi?n ya agregada |
|
48 |
* @param extension |
|
49 |
*/ |
|
50 |
public ExtendedFileFilter(String extension) { |
|
51 |
addExtension(extension); |
|
52 |
} |
|
53 |
|
|
54 |
/** |
|
55 |
* A?ade una extensi?n a la lista de extensiones soportadas |
|
56 |
* @param extension |
|
57 |
*/ |
|
58 |
public void addExtension(String extension) { |
|
59 |
if (extension == null) |
|
60 |
return; |
|
61 |
|
|
62 |
extensions.add(extension); |
|
63 |
} |
|
64 |
|
|
65 |
/* |
|
66 |
* (non-Javadoc) |
|
67 |
* @see javax.swing.filechooser.FileFilter#accept(java.io.File) |
|
68 |
*/ |
|
69 |
public boolean accept(File f) { |
|
70 |
if (f.isDirectory()) |
|
71 |
return true; |
|
72 |
|
|
73 |
String s = f.getName(); |
|
74 |
int i = s.lastIndexOf('.'); |
|
75 |
|
|
76 |
if (i > 0 && i < s.length() - 1) { |
|
77 |
String extension = s.substring(i + 1).toLowerCase(); |
|
78 |
for (int j = 0; j < extensions.size(); j++) { |
|
79 |
if (extensions.get(j).toString().toLowerCase().equals(extension)) |
|
80 |
return true; |
|
81 |
} |
|
82 |
} |
|
83 |
|
|
84 |
return false; |
|
85 |
} |
|
86 |
|
|
87 |
/** |
|
88 |
* Normaliza el nombre de un fichero, a?adiendo la extension si fuera |
|
89 |
* necesario |
|
90 |
* @param file |
|
91 |
* @return |
|
92 |
*/ |
|
93 |
public String getNormalizedFilename(File file) { |
|
94 |
String s = file.getName(); |
|
95 |
int i = s.lastIndexOf('.'); |
|
96 |
|
|
97 |
if (i > 0 && i < s.length() - 1) { |
|
98 |
String extension = s.substring(i + 1).toLowerCase(); |
|
99 |
for (int j = 0; j < extensions.size(); j++) { |
|
100 |
if (extensions.get(j).toString().toLowerCase().equals(extension)) |
|
101 |
return file.toString(); |
|
102 |
} |
|
103 |
} |
|
104 |
|
|
105 |
return file.toString() + "." + extensions.get(0).toString().toLowerCase(); |
|
106 |
} |
|
107 |
|
|
108 |
/* |
|
109 |
* (non-Javadoc) |
|
110 |
* @see javax.swing.filechooser.FileFilter#getDescription() |
|
111 |
*/ |
|
112 |
public String getDescription() { |
|
113 |
String format1 = ""; |
|
114 |
String format2 = ""; |
|
115 |
for (int j = 0; j < extensions.size(); j++) { |
|
116 |
if (format1.length() != 0) { |
|
117 |
format1 = format1 + ", "; |
|
118 |
format2 = format2 + "; "; |
|
119 |
} |
|
120 |
format1 = format1 + extensions.get(j).toString().toUpperCase(); |
|
121 |
format2 = format2 + "*." + extensions.get(j).toString().toLowerCase(); |
|
122 |
} |
|
123 |
if (description == null) |
|
124 |
return PluginServices.getText(this, "files") + " " + format1 + " (" + format2 + ")"; |
|
125 |
|
|
126 |
return description + " (" + format2 + ")"; |
|
127 |
} |
|
128 |
|
|
129 |
/** |
|
130 |
* Especifica la descripcion del item |
|
131 |
* @param description the description to set |
|
132 |
*/ |
|
133 |
public void setDescription(String description) { |
|
134 |
this.description = description; |
|
135 |
} |
|
136 |
|
|
137 |
/** |
|
138 |
* Borra una extension de la lista de extensiones |
|
139 |
* @param extension |
|
140 |
*/ |
|
141 |
public void removeExtension(String extension){ |
|
142 |
extensions.remove(extension); |
|
143 |
} |
|
144 |
|
|
145 |
/** |
|
146 |
* Borra todas las extensiones existentes |
|
147 |
*/ |
|
148 |
public void clearExtensions(){ |
|
149 |
extensions.clear(); |
|
150 |
} |
|
151 |
|
|
152 |
/** |
|
153 |
* Devuelve una lista con las extensiones disponibles |
|
154 |
* @return |
|
155 |
*/ |
|
156 |
public ArrayList getExtensions(){ |
|
157 |
return extensions; |
|
158 |
} |
|
159 |
} |
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/saveraster/ui/panels/listener/DataInputListener.java | ||
---|---|---|
35 | 35 |
import org.gvsig.gui.beans.datainput.DataInputContainer; |
36 | 36 |
import org.gvsig.gui.beans.datainput.DataInputContainerListener; |
37 | 37 |
import org.gvsig.raster.dataset.GeoRasterWriter; |
38 |
import org.gvsig.raster.util.ExtendedFileFilter; |
|
38 | 39 |
import org.gvsig.raster.util.MathUtils; |
40 |
import org.gvsig.raster.util.RasterUtilities; |
|
39 | 41 |
import org.gvsig.rastertools.saveraster.ui.SaveRasterDialog; |
40 | 42 |
import org.gvsig.rastertools.saveraster.ui.SaveRasterPanel; |
41 | 43 |
|
... | ... | |
43 | 45 |
import com.iver.cit.gvsig.addlayer.fileopen.FileOpenWizard; |
44 | 46 |
/** |
45 | 47 |
* Panel encargado de manejar los eventos del los controles de Salvar a Raster |
46 |
*
|
|
48 |
* |
|
47 | 49 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
48 | 50 |
*/ |
49 | 51 |
public class DataInputListener implements ActionListener, MouseListener, FocusListener, KeyListener, DataInputContainerListener { |
... | ... | |
115 | 117 |
} |
116 | 118 |
|
117 | 119 |
/** |
118 |
* A partir del valor de tama?o de imagen de salida, comprueba el tipo de
|
|
120 |
* A partir del valor de tama?o de imagen de salida, comprueba el tipo de |
|
119 | 121 |
* dato seleccionado por el usuario (Pixels, mms, cms, mts, pulgadas) y devuelve |
120 | 122 |
* el valor en pixeles. |
121 | 123 |
* @param value Cadena introducida por el usuario |
... | ... | |
140 | 142 |
/** |
141 | 143 |
* Asigna al JTextField pasado como par?metro el valor en pixels, cms, mms ,mtrs, pulgadas dependiendo |
142 | 144 |
* de la selecci?n del combo |
143 |
* @param pixel Valor en pixels
|
|
145 |
* @param pixel Valor en pixels |
|
144 | 146 |
* @param field Campo donde se escribe el valor |
145 | 147 |
*/ |
146 | 148 |
private void setCorrectMeasure(double pixel, DataInputContainer field){ |
... | ... | |
270 | 272 |
//Validamos el ancho si se ha introducido algo |
271 | 273 |
if(!controlPanel.getTWidth().getValue().equals("")) |
272 | 274 |
validateTextField(controlPanel.getTWidth()); |
273 |
|
|
275 |
|
|
274 | 276 |
//Validamos el alto si se ha introducido algo |
275 | 277 |
if(!controlPanel.getTHeight().getValue().equals("")) |
276 | 278 |
validateTextField(controlPanel.getTHeight()); |
... | ... | |
290 | 292 |
double ulX = Double.parseDouble(controlPanel.getTSupIzqX().getValue()); |
291 | 293 |
double ulY = Double.parseDouble(controlPanel.getTSupIzqY().getValue()); |
292 | 294 |
|
293 |
if (ulX > lrX)
|
|
295 |
if (ulX > lrX) |
|
294 | 296 |
size[0] = ulX - lrX; |
295 |
else
|
|
297 |
else |
|
296 | 298 |
size[0] = lrX - ulX; |
297 |
|
|
298 |
if (ulY > lrY)
|
|
299 |
|
|
300 |
if (ulY > lrY) |
|
299 | 301 |
size[1] = ulY - lrY; |
300 |
else
|
|
302 |
else |
|
301 | 303 |
size[1] = lrY - ulY; |
302 |
|
|
304 |
|
|
303 | 305 |
return size; |
304 | 306 |
} |
305 | 307 |
|
... | ... | |
436 | 438 |
*/ |
437 | 439 |
public void enableButtons() { |
438 | 440 |
try { |
439 |
if (Double.parseDouble(controlPanel.getTWidth().getValue()) == 0 ||
|
|
441 |
if (Double.parseDouble(controlPanel.getTWidth().getValue()) == 0 || |
|
440 | 442 |
Double.parseDouble(controlPanel.getTHeight().getValue()) == 0 || |
441 | 443 |
controlPanel.getTWidth().getValue().equals("") || |
442 | 444 |
controlPanel.getTHeight().getValue().equals("") || |
443 | 445 |
this.fName == null || this.fName.equals("")) { |
444 |
if (dialog != null)
|
|
446 |
if (dialog != null) |
|
445 | 447 |
dialog.getButtonsPanel().getButton(ButtonsPanel.BUTTON_APPLY).setEnabled(false); |
446 | 448 |
return; |
447 | 449 |
} |
... | ... | |
469 | 471 |
// A?adimos las extensiones que hayan sido registradas en el driver |
470 | 472 |
String[] extList = GeoRasterWriter.getDriversExtensions(); |
471 | 473 |
for (int i = 0; i < extList.length; i++) |
472 |
chooser.addChoosableFileFilter(new WriterFilter(extList[i]));
|
|
474 |
chooser.addChoosableFileFilter(new ExtendedFileFilter(extList[i]));
|
|
473 | 475 |
|
474 | 476 |
int returnVal = chooser.showOpenDialog(controlPanel); |
475 | 477 |
|
476 | 478 |
if (returnVal == JFileChooser.APPROVE_OPTION) { |
477 |
this.fName = chooser.getSelectedFile().toString(); |
|
478 |
String ext = ((WriterFilter) chooser.getFileFilter()).getDescription(); |
|
479 |
ExtendedFileFilter fileFilter = ((ExtendedFileFilter) chooser.getFileFilter()); |
|
479 | 480 |
|
480 |
// FileFilter filter = chooser.getFileFilter();
|
|
481 |
ext = ext.toLowerCase().substring(ext.lastIndexOf(".") + 1, ext.length());
|
|
481 |
fName = fileFilter.getNormalizedFilename(new File(fName));
|
|
482 |
String ext = RasterUtilities.getExtensionFromFileName(fName);
|
|
482 | 483 |
|
483 |
if ((fName != null) && !fName.equals("")) { |
|
484 |
if (!fName.endsWith("." + ext)) |
|
485 |
fName = fName + "." + ext; |
|
484 |
controlPanel.getBProperties().setText( |
|
485 |
PluginServices.getText(this, "props") + " " + GeoRasterWriter.getDriverType(ext)); |
|
486 | 486 |
|
487 |
controlPanel.getBProperties().setText( |
|
488 |
PluginServices.getText(this, "props") + " " + GeoRasterWriter.getDriverType(ext)); |
|
489 |
} |
|
490 | 487 |
controlPanel.getBProperties().setEnabled(true); |
491 | 488 |
controlPanel.getLFileName().setText( |
492 | 489 |
fName.substring(fName.lastIndexOf(File.separator) + 1, fName.length())); |
... | ... | |
511 | 508 |
|
512 | 509 |
/** |
513 | 510 |
* Devuelve el nombre del fichero seleccionado |
514 |
*
|
|
511 |
* |
|
515 | 512 |
* @return Nombre del fichero seleccionado |
516 | 513 |
*/ |
517 | 514 |
public String getFileName() { |
... | ... | |
603 | 600 |
|
604 | 601 |
/** |
605 | 602 |
* Obtiene la altura en pixels de la imagen de salida |
606 |
*
|
|
603 |
* |
|
607 | 604 |
* @return entero con la altura en pixels |
608 | 605 |
*/ |
609 | 606 |
public double getHeightInPixels() { |
... | ... | |
612 | 609 |
|
613 | 610 |
/** |
614 | 611 |
* Obtiene la anchura en pixels de la imagen de salida |
615 |
*
|
|
612 |
* |
|
616 | 613 |
* @return entero con la anchura en pixels |
617 | 614 |
*/ |
618 | 615 |
public double getWidthInPixels() { |
619 | 616 |
return widthInPixels; |
620 | 617 |
} |
621 |
|
|
618 |
|
|
622 | 619 |
/** |
623 | 620 |
* Asigna el valor de ancho en pixels |
624 |
* @param value double
|
|
621 |
* @param value double |
|
625 | 622 |
*/ |
626 | 623 |
public void setWidthInPixels(double value) { |
627 | 624 |
this.widthInPixels = value; |
628 | 625 |
} |
629 |
|
|
626 |
|
|
630 | 627 |
/** |
631 | 628 |
* Asigna el valor de alto en pixels |
632 |
* @param value double
|
|
629 |
* @param value double |
|
633 | 630 |
*/ |
634 | 631 |
public void setHeightInPixels(double value) { |
635 | 632 |
this.heightInPixels = value; |
... | ... | |
642 | 639 |
enableButtons(); |
643 | 640 |
} |
644 | 641 |
} |
645 |
} |
|
646 |
|
|
647 |
/** |
|
648 |
* Filtro para el selector de formatos de escritura |
|
649 |
* |
|
650 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
|
651 |
*/ |
|
652 |
class WriterFilter extends javax.swing.filechooser.FileFilter { |
|
653 |
private String filter; |
|
654 |
|
|
655 |
public WriterFilter(String fil) { |
|
656 |
this.filter = fil; |
|
657 |
} |
|
658 |
|
|
659 |
public boolean accept(File f) { |
|
660 |
return f.isDirectory() || f.getName().toLowerCase().endsWith("." + filter); |
|
661 |
} |
|
662 |
|
|
663 |
public String getDescription() { |
|
664 |
return "." + filter; |
|
665 |
} |
|
666 | 642 |
} |
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/saveas/SaveAsTocMenuEntry.java | ||
---|---|---|
21 | 21 |
import java.awt.Component; |
22 | 22 |
import java.beans.PropertyChangeEvent; |
23 | 23 |
import java.beans.PropertyChangeListener; |
24 |
import java.io.File; |
|
25 | 24 |
import java.util.ArrayList; |
26 | 25 |
|
27 | 26 |
import javax.swing.JFileChooser; |
... | ... | |
41 | 40 |
import org.gvsig.raster.hierarchy.IRasterDataset; |
42 | 41 |
import org.gvsig.raster.hierarchy.IRasterGeoOperations; |
43 | 42 |
import org.gvsig.raster.hierarchy.IRasterOperations; |
43 |
import org.gvsig.raster.util.ExtendedFileFilter; |
|
44 | 44 |
import org.gvsig.raster.util.RasterToolsUtil; |
45 | 45 |
import org.gvsig.rastertools.clipping.ClippingProcess; |
46 | 46 |
import org.gvsig.rastertools.clipping.WriterBufferServer; |
... | ... | |
114 | 114 |
* @see com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction#isEnabled(com.iver.cit.gvsig.project.documents.view.toc.ITocItem, com.iver.cit.gvsig.fmap.layers.FLayer[]) |
115 | 115 |
*/ |
116 | 116 |
public boolean isEnabled(ITocItem item, FLayer[] selectedItems) { |
117 |
if(getNodeLayer(item) instanceof ILayerState)
|
|
118 |
if(!((ILayerState)getNodeLayer(item)).isOpen())
|
|
117 |
if(getNodeLayer(item) instanceof ILayerState) |
|
118 |
if(!((ILayerState)getNodeLayer(item)).isOpen()) |
|
119 | 119 |
return false; |
120 | 120 |
return selectedItems.length == 1; |
121 | 121 |
} |
... | ... | |
128 | 128 |
if (isTocItemBranch(item)) { |
129 | 129 |
if(selectedItems == null || selectedItems.length != 1) |
130 | 130 |
return false; |
131 |
return( getNodeLayer(item) instanceof FLyrRasterSE &&
|
|
132 |
((FLyrRasterSE)getNodeLayer(item)).isActionEnabled(IRasterLayerActions.SAVEAS));
|
|
131 |
return( getNodeLayer(item) instanceof FLyrRasterSE && |
|
132 |
((FLyrRasterSE)getNodeLayer(item)).isActionEnabled(IRasterLayerActions.SAVEAS));
|
|
133 | 133 |
} |
134 | 134 |
return false; |
135 | 135 |
} |
... | ... | |
163 | 163 |
return; |
164 | 164 |
} |
165 | 165 |
for (int i = 0; i < extList.size(); i++) |
166 |
chooser.addChoosableFileFilter(new WriterFilter((String) extList.get(i)));
|
|
166 |
chooser.addChoosableFileFilter(new ExtendedFileFilter((String) extList.get(i)));
|
|
167 | 167 |
|
168 | 168 |
// Cargamos el panel de propiedades en el selector |
169 | 169 |
panelProperty = loadPanelProperties((String) extList.get(extList.size() - 1)); |
170 | 170 |
chooser.setAccessory(panelProperty); |
171 |
chooser.setAcceptAllFileFilterUsed(false); |
|
171 | 172 |
|
172 | 173 |
if (w instanceof View) { |
173 |
if (chooser.showOpenDialog(((View) w).getComponent(0)) == JFileChooser.APPROVE_OPTION) {
|
|
174 |
if (chooser.showSaveDialog(((View) w).getComponent(0)) == JFileChooser.APPROVE_OPTION) {
|
|
174 | 175 |
// Creaci?n de par?metros |
175 | 176 |
String tit = PluginServices.getMDIManager().getWindowInfo(w).getTitle(); |
176 | 177 |
WriterBufferServer dataWriter = new WriterBufferServer(); |
... | ... | |
180 | 181 |
for (int i = 0; i < ((IRasterOperations) fLayer).getBandCount(); i++) |
181 | 182 |
drawableBands[i] = i; |
182 | 183 |
FileOpenWizard.setLastPath(chooser.getCurrentDirectory().toString()); |
183 |
String file = chooser.getSelectedFile().toString() + chooser.getFileFilter().getDescription();
|
|
184 |
String file = ((ExtendedFileFilter) chooser.getFileFilter()).getNormalizedFilename(chooser.getSelectedFile());
|
|
184 | 185 |
if (!RasterToolsUtil.canWrite(chooser.getCurrentDirectory().toString(), this)) |
185 | 186 |
return; |
186 | 187 |
Params params = null; |
... | ... | |
201 | 202 |
clippingProcess.setInterpolationMethod(BufferInterpolation.INTERPOLATION_NearestNeighbour); |
202 | 203 |
clippingProcess.setAffineTransform(dataset.getAffineTransform()); |
203 | 204 |
clippingProcess.setActions(new SaveAsActions()); |
204 |
|
|
205 |
|
|
205 | 206 |
if (params != null) |
206 | 207 |
RasterToolsUtil.loadWriterParamsFromPropertiesPanel(panelProperty, params); |
207 | 208 |
clippingProcess.setParams(params); |
... | ... | |
220 | 221 |
* sustituye el panel properties por el del nuevo driver seleccionado |
221 | 222 |
*/ |
222 | 223 |
public void propertyChange(PropertyChangeEvent evt) { |
223 |
if(evt.getNewValue() instanceof WriterFilter) {
|
|
224 |
String ext = ((WriterFilter)evt.getNewValue()).getDescription();
|
|
224 |
if (evt.getNewValue() instanceof ExtendedFileFilter) {
|
|
225 |
String ext = ((ExtendedFileFilter) evt.getNewValue()).getExtensions().get(0).toString();
|
|
225 | 226 |
panelProperty = loadPanelProperties(ext); |
226 | 227 |
chooser.setAccessory(panelProperty); |
227 | 228 |
chooser.revalidate(); |
... | ... | |
249 | 250 |
RasterToolsUtil.loadPropertiesFromWriterParams(panelProperty, params, null); |
250 | 251 |
return panelProperty; |
251 | 252 |
} |
252 |
|
|
253 |
/** |
|
254 |
* @author Nacho Brodin (nachobrodin@gmail.com) Filtro para el selector de |
|
255 |
* formatos de escritura |
|
256 |
*/ |
|
257 |
class WriterFilter extends javax.swing.filechooser.FileFilter { |
|
258 |
private String filter; |
|
259 |
|
|
260 |
public WriterFilter(String fil) { |
|
261 |
this.filter = fil; |
|
262 |
} |
|
263 |
|
|
264 |
public boolean accept(File f) { |
|
265 |
return f.isDirectory() || f.getName().toLowerCase().endsWith("." + filter); |
|
266 |
} |
|
267 |
|
|
268 |
public String getDescription() { |
|
269 |
return "." + filter; |
|
270 |
} |
|
271 |
} |
|
272 |
|
|
273 | 253 |
} |
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/filter/FilterListener.java | ||
---|---|---|
57 | 57 |
import org.gvsig.raster.grid.filter.RasterFilterListManager; |
58 | 58 |
import org.gvsig.raster.grid.filter.RegistrableFilterListener; |
59 | 59 |
import org.gvsig.raster.hierarchy.IRasterRendering; |
60 |
import org.gvsig.raster.util.ExtendedFileFilter; |
|
60 | 61 |
import org.gvsig.raster.util.RasterNotLoadException; |
61 | 62 |
import org.gvsig.raster.util.RasterToolsUtil; |
62 | 63 |
import org.gvsig.rastertools.RasterModule; |
... | ... | |
293 | 294 |
//A?adimos las extensiones que hayan sido registradas en el driver |
294 | 295 |
String[] extList = GeoRasterWriter.getDriversExtensions(); |
295 | 296 |
for(int i=0;i<extList.length;i++) |
296 |
chooser.addChoosableFileFilter(new WriterFilter(extList[i]));
|
|
297 |
chooser.addChoosableFileFilter(new ExtendedFileFilter(extList[i]));
|
|
297 | 298 |
|
298 | 299 |
if (chooser.showOpenDialog(getFilterPanel()) != JFileChooser.APPROVE_OPTION) |
299 | 300 |
return null; |
300 | 301 |
|
301 |
String fName = chooser.getSelectedFile().toString(); |
|
302 |
String ext = ((WriterFilter)chooser.getFileFilter()).getDescription(); |
|
303 |
|
|
304 |
ext = ext.toLowerCase().substring(ext.lastIndexOf(".") + 1, ext.length()); |
|
305 |
|
|
306 |
if ((fName != null) && !fName.equals("")) |
|
307 |
if (!fName.endsWith("." + ext)) |
|
308 |
fName = fName + "." + ext; |
|
309 |
|
|
310 | 302 |
FileOpenWizard.setLastPath(chooser.getSelectedFile().getPath().substring(0, chooser.getSelectedFile().getPath().lastIndexOf(File.separator))); |
311 |
path = fName; |
|
303 |
|
|
304 |
ExtendedFileFilter fileFilter = (ExtendedFileFilter) chooser.getFileFilter(); |
|
305 |
path = fileFilter.getNormalizedFilename(chooser.getSelectedFile()); |
|
312 | 306 |
} else { |
313 | 307 |
path = Utilities.createTempDirectory() + File.separator + getFilterPanel().getFilenameTextField().getText() + ".tif"; |
314 | 308 |
filterPanel.setNewLayerText(); |
... | ... | |
535 | 529 |
public void actionValuesCompleted(EventObject e) { |
536 | 530 |
actionChangeProperties(e); |
537 | 531 |
} |
538 |
} |
|
539 |
|
|
540 |
/** |
|
541 |
* @author Nacho Brodin <brodin_ign@gva.es> |
|
542 |
* Filtro para el selector de formatos de escritura |
|
543 |
*/ |
|
544 |
class WriterFilter extends javax.swing.filechooser.FileFilter { |
|
545 |
private String filter; |
|
546 |
|
|
547 |
public WriterFilter(String fil) { |
|
548 |
this.filter = fil; |
|
549 |
} |
|
550 |
|
|
551 |
public boolean accept(File f) { |
|
552 |
return f.isDirectory() || f.getName().toLowerCase().endsWith("." + filter); |
|
553 |
} |
|
554 |
|
|
555 |
public String getDescription() { |
|
556 |
return "." + filter; |
|
557 |
} |
|
558 | 532 |
} |
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/properties/control/BandSetupListener.java | ||
---|---|---|
25 | 25 |
|
26 | 26 |
import javax.swing.JFileChooser; |
27 | 27 |
import javax.swing.JOptionPane; |
28 |
import javax.swing.filechooser.FileFilter; |
|
29 | 28 |
|
30 |
import org.gvsig.fmap.raster.layers.FLyrRasterSE; |
|
31 | 29 |
import org.gvsig.raster.dataset.IRasterDataSource; |
32 | 30 |
import org.gvsig.raster.dataset.NotSupportedExtensionException; |
33 | 31 |
import org.gvsig.raster.dataset.RasterDataset; |
34 | 32 |
import org.gvsig.raster.dataset.RasterDriverException; |
35 | 33 |
import org.gvsig.raster.datastruct.Extent; |
34 |
import org.gvsig.raster.gui.wizards.DriverFileFilter; |
|
36 | 35 |
import org.gvsig.raster.hierarchy.IRasterDataset; |
37 | 36 |
import org.gvsig.raster.hierarchy.IRasterProperties; |
38 | 37 |
import org.gvsig.raster.hierarchy.IRasterRendering; |
39 | 38 |
import org.gvsig.raster.util.RasterToolsUtil; |
40 | 39 |
import org.gvsig.rastertools.properties.panels.BandSetupPanel; |
41 | 40 |
|
42 |
import com.hardcode.driverManager.DriverLoadException; |
|
43 | 41 |
import com.iver.andami.PluginServices; |
44 | 42 |
import com.iver.andami.messages.NotificationManager; |
45 | 43 |
import com.iver.cit.gvsig.addlayer.fileopen.FileOpenWizard; |
... | ... | |
71 | 69 |
protected RasterDataset[] grd = null; |
72 | 70 |
|
73 | 71 |
/** |
74 |
* Filtro para la selecci?n de ficheros raster |
|
75 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
|
76 |
*/ |
|
77 |
public class DriverFileFilter extends FileFilter { |
|
78 |
|
|
79 |
//private String driverName = null; |
|
80 |
|
|
81 |
public DriverFileFilter(String driverName) throws DriverLoadException { |
|
82 |
//this.driverName = driverName; |
|
83 |
} |
|
84 |
|
|
85 |
/** |
|
86 |
* @see javax.swing.filechooser.FileFilter#accept(java.io.File) |
|
87 |
*/ |
|
88 |
public boolean accept(File f) { |
|
89 |
if (f.isDirectory()) |
|
90 |
return true; |
|
91 |
if (fLayer instanceof FLyrRasterSE) |
|
92 |
return FLyrRasterSE.isFileAccepted(f); |
|
93 |
else |
|
94 |
throw new RuntimeException("Tipo no reconocido"); |
|
95 |
} |
|
96 |
|
|
97 |
/** |
|
98 |
* @see javax.swing.filechooser.FileFilter#getDescription() |
|
99 |
*/ |
|
100 |
public String getDescription() { |
|
101 |
return (String)dataset.getInfo("DriverName"); |
|
102 |
} |
|
103 |
} |
|
104 |
|
|
105 |
/** |
|
106 | 72 |
* Constructor |
107 | 73 |
* @param bs Panel del selector de bandas |
108 | 74 |
* @param lyr Capa raster |
... | ... | |
181 | 147 |
fileChooser.setMultiSelectionEnabled(true); |
182 | 148 |
fileChooser.setAcceptAllFileFilterUsed(false); |
183 | 149 |
|
184 |
try { |
|
185 |
FileFilter auxF = new DriverFileFilter((String) dataset.getInfo("DriverName")); |
|
186 |
fileChooser.addChoosableFileFilter(auxF); |
|
187 |
} catch (DriverLoadException e1) { |
|
188 |
NotificationManager.addError("No se pudo acceder a los drivers", e1); |
|
189 |
} |
|
150 |
fileChooser.addChoosableFileFilter(new DriverFileFilter()); |
|
190 | 151 |
|
191 | 152 |
int result = fileChooser.showOpenDialog(bandSetupPanel); |
192 | 153 |
|
trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/geolocation/listener/GeoLocationPanelListener.java | ||
---|---|---|
23 | 23 |
import java.awt.geom.AffineTransform; |
24 | 24 |
import java.awt.geom.Rectangle2D; |
25 | 25 |
import java.io.BufferedReader; |
26 |
import java.io.File; |
|
27 | 26 |
import java.io.FileInputStream; |
28 | 27 |
import java.io.FileNotFoundException; |
29 | 28 |
import java.io.IOException; |
... | ... | |
35 | 34 |
import org.gvsig.fmap.raster.layers.FLyrRasterSE; |
36 | 35 |
import org.gvsig.gui.beans.datainput.DataInputContainerListener; |
37 | 36 |
import org.gvsig.raster.datastruct.Extent; |
37 |
import org.gvsig.raster.util.ExtendedFileFilter; |
|
38 | 38 |
import org.gvsig.raster.util.Historical; |
39 | 39 |
import org.gvsig.raster.util.RasterToolsUtil; |
40 | 40 |
import org.gvsig.rastertools.geolocation.ui.GeoLocationPanel; |
... | ... | |
50 | 50 |
* |
51 | 51 |
*/ |
52 | 52 |
public class GeoLocationPanelListener implements ActionListener, DataInputContainerListener { |
53 |
|
|
53 |
|
|
54 | 54 |
private GeoLocationPanel panel = null; |
55 | 55 |
private boolean enableValueChangeEvent = false; |
56 |
|
|
56 |
|
|
57 | 57 |
/** |
58 |
* Crea un nuevo <code>GeoLocationPanelListener</code>
|
|
58 |
* Crea un nuevo <code>GeoLocationPanelListener</code> |
|
59 | 59 |
* @param panel |
60 | 60 |
*/ |
61 | 61 |
public GeoLocationPanelListener(GeoLocationPanel panel) { |
... | ... | |
78 | 78 |
} |
79 | 79 |
return; |
80 | 80 |
} |
81 |
|
|
81 |
|
|
82 | 82 |
//Asignamos la georreferenciaci?n que hay en ese momento en el dialogo |
83 | 83 |
if(e.getSource() == panel.getApplyButton()) { |
84 | 84 |
try { |
... | ... | |
97 | 97 |
return; |
98 | 98 |
} |
99 | 99 |
} |
100 |
|
|
100 |
|
|
101 | 101 |
Historical hist = panel.getHistorical(); |
102 | 102 |
if(hist == null) |
103 | 103 |
return; |
104 |
|
|
104 |
|
|
105 | 105 |
AffineTransform at = null; |
106 |
|
|
106 |
|
|
107 | 107 |
//Cargamos la primera transformaci?n |
108 |
if(e.getSource() == panel.getFirstButton())
|
|
108 |
if(e.getSource() == panel.getFirstButton()) |
|
109 | 109 |
at = (AffineTransform)hist.getFirst(); |
110 |
|
|
110 |
|
|
111 | 111 |
//Cargamos la transformaci?n anterior |
112 |
if(e.getSource() == panel.getBackButton())
|
|
112 |
if(e.getSource() == panel.getBackButton()) |
|
113 | 113 |
at = (AffineTransform)hist.getBack(); |
114 |
|
|
114 |
|
|
115 | 115 |
////Cargamos la transformaci?n siguiente |
116 | 116 |
if(e.getSource() == panel.getNextButton()) |
117 | 117 |
at = (AffineTransform)hist.getNext(); |
... | ... | |
119 | 119 |
//Cargamos la georreferenciaci?n del raster |
120 | 120 |
if(e.getSource() == panel.getResetButton()) |
121 | 121 |
at = panel.getLayer().getDataSource().getOwnAffineTransform(); |
122 |
|
|
122 |
|
|
123 | 123 |
//Cargar la georreferenciaci?n desde tfw |
124 | 124 |
if(e.getSource() == panel.getTfwLoad()) { |
125 | 125 |
JFileChooser chooser = new JFileChooser(FileOpenWizard.getLastPath()); |
126 | 126 |
chooser.setDialogTitle(PluginServices.getText(this, "seleccionar_fichero")); |
127 |
chooser.addChoosableFileFilter(new GeorreferencingFileFilter("tfw")); |
|
128 |
chooser.addChoosableFileFilter(new GeorreferencingFileFilter("wld")); |
|
127 |
chooser.addChoosableFileFilter(new ExtendedFileFilter("tfw")); |
|
128 |
chooser.addChoosableFileFilter(new ExtendedFileFilter("wld")); |
|
129 |
|
|
130 |
ExtendedFileFilter allFilters = new ExtendedFileFilter(); |
|
131 |
allFilters.addExtension("tfw"); |
|
132 |
allFilters.addExtension("wld"); |
|
133 |
allFilters.setDescription(PluginServices.getText(this, "todos_soportados")); |
|
134 |
chooser.addChoosableFileFilter(allFilters); |
|
135 |
chooser.setFileFilter(allFilters); |
|
136 |
|
|
129 | 137 |
int returnVal = chooser.showOpenDialog(panel); |
130 | 138 |
if (returnVal == JFileChooser.APPROVE_OPTION) { |
131 | 139 |
String fName = chooser.getSelectedFile().toString(); |
132 | 140 |
at = readTfw(fName); |
133 | 141 |
} |
134 | 142 |
} |
135 |
|
|
143 |
|
|
136 | 144 |
//Centrar el raster en la vista |
137 | 145 |
if(e.getSource() == panel.getCenterToView()) { |
138 | 146 |
Extent extentView = calcCenterExtent(panel.getViewPort()); |
... | ... | |
143 | 151 |
at = new AffineTransform(psX, 0, 0, psY, x, y); |
144 | 152 |
panel.setModify(true); |
145 | 153 |
} |
146 |
|
|
154 |
|
|
147 | 155 |
//Entrar? en el caso de que se haya seleccionado alguna transformaci?n |
148 | 156 |
if(at != null) { |
149 | 157 |
panel.getLayer().setAT(at); |
... | ... | |
152 | 160 |
panel.getMapCtrl().getMapContext().invalidate(); |
153 | 161 |
} |
154 | 162 |
} |
155 |
|
|
163 |
|
|
156 | 164 |
/** |
157 | 165 |
* Control del cambio de valor dentro de las cajas de texto. Cuando esto ocurre tiene |
158 | 166 |
* el mismo efecto que el bot?n "Aplicar" |
... | ... | |
182 | 190 |
public void setEnableValueChangeEvent(boolean enableValueChangeEvent) { |
183 | 191 |
this.enableValueChangeEvent = enableValueChangeEvent; |
184 | 192 |
} |
185 |
|
|
193 |
|
|
186 | 194 |
/** |
187 |
* Centra el raster asociado a la capa en al extent del viewport pasado
|
|
188 |
* por par?metro.
|
|
195 |
* Centra el raster asociado a la capa en al extent del viewport pasado |
|
196 |
* por par?metro. |
|
189 | 197 |
* @param vp ViewPort |
190 | 198 |
* @return Extent para la imagen |
191 | 199 |
*/ |
192 | 200 |
private Extent calcCenterExtent(ViewPort vp) { |
193 | 201 |
Extent tempExtent = null; |
194 | 202 |
double widthPxImg, heightPxImg; |
195 |
|
|
203 |
|
|
196 | 204 |
widthPxImg = ((FLyrRasterSE)panel.getLayer()).getPxWidth(); |
197 | 205 |
heightPxImg = ((FLyrRasterSE)panel.getLayer()).getPxHeight(); |
198 |
|
|
206 |
|
|
199 | 207 |
if(vp == null || vp.getAdjustedExtent() == null) { |
200 | 208 |
vp = new ViewPort(null); |
201 | 209 |
Rectangle2D r2d = new Rectangle2D.Double(0, 0, widthPxImg, heightPxImg); |
... | ... | |
224 | 232 |
} |
225 | 233 |
return new Extent(ulX, ulY, lrX, lrY); |
226 | 234 |
} |
227 |
|
|
235 |
|
|
228 | 236 |
/** |
229 |
* Lee las coordenadas de un fichero de tfw con una transformaci?n y
|
|
237 |
* Lee las coordenadas de un fichero de tfw con una transformaci?n y |
|
230 | 238 |
* devuelve la clase AffineTransform con dicha transformaci?n. Esta llamada gestiona los |
231 | 239 |
* errores producidos actuando en consecuencia. Muestra los mensajes al usuario y retorna |
232 | 240 |
* null en caso de tener problemas. |
... | ... | |
260 | 268 |
} |
261 | 269 |
return new AffineTransform(result[0], result[1], result[2], result[3], result[4], result[5]); |
262 | 270 |
} |
263 |
|
|
264 |
/** |
|
265 |
* Filtro para el selector de formatos de georreferenciaci?n |
|
266 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
|
267 |
*/ |
|
268 |
class GeorreferencingFileFilter extends javax.swing.filechooser.FileFilter { |
|
269 |
private String filter; |
|
270 |
|
|
271 |
public GeorreferencingFileFilter(String fil) { |
|
272 |
this.filter = fil; |
|
273 |
} |
|
274 |
|
|
275 |
public boolean accept(File f) { |
|
276 |
return f.isDirectory() || f.getName().toLowerCase().endsWith("." + filter); |
|
277 |
} |
|
278 |
|
|
279 |
public String getDescription() { |
|
280 |
return "." + filter; |
|
281 |
} |
|
282 |
} |
|
283 | 271 |
} |
Also available in: Unified diff