gvsig-raster / org.gvsig.raster.tools / trunk / org.gvsig.raster.tools / org.gvsig.raster.tools.app.basic / src / main / java / org / gvsig / raster / tools / app / basic / tool / roi / ROIManagerTocMenuEntry.java @ 4181
History | View | Annotate | Download (6.31 KB)
1 | 2480 | nbrodin | /* gvSIG. Geographic Information System of the Valencian Government
|
---|---|---|---|
2 | *
|
||
3 | * Copyright (C) 2007-2008 Infrastructures and Transports Department
|
||
4 | * of the Valencian Government (CIT)
|
||
5 | *
|
||
6 | * This program is free software; you can redistribute it and/or
|
||
7 | * modify it under the terms of the GNU General Public License
|
||
8 | * as published by the Free Software Foundation; either version 2
|
||
9 | * of the License, or (at your option) any later version.
|
||
10 | *
|
||
11 | * This program is distributed in the hope that it will be useful,
|
||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
14 | * GNU General Public License for more details.
|
||
15 | *
|
||
16 | * You should have received a copy of the GNU General Public License
|
||
17 | * along with this program; if not, write to the Free Software
|
||
18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||
19 | * MA 02110-1301, USA.
|
||
20 | *
|
||
21 | */
|
||
22 | package org.gvsig.raster.tools.app.basic.tool.roi; |
||
23 | |||
24 | import java.io.File; |
||
25 | 4181 | fdiaz | import java.net.URI; |
26 | 2480 | nbrodin | import java.util.ArrayList; |
27 | import java.util.List; |
||
28 | |||
29 | import javax.swing.Icon; |
||
30 | |||
31 | import org.gvsig.andami.IconThemeHelper; |
||
32 | import org.gvsig.andami.PluginServices; |
||
33 | import org.gvsig.andami.ui.mdiManager.IWindow; |
||
34 | import org.gvsig.app.project.documents.view.gui.AbstractViewPanel; |
||
35 | import org.gvsig.app.project.documents.view.toc.AbstractTocContextMenuAction; |
||
36 | import org.gvsig.app.project.documents.view.toc.ITocItem; |
||
37 | import org.gvsig.fmap.dal.coverage.exception.GridException; |
||
38 | import org.gvsig.fmap.mapcontext.layers.FLayer; |
||
39 | import org.gvsig.fmap.mapcontext.layers.FLayers; |
||
40 | import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect; |
||
41 | import org.gvsig.raster.fmap.layers.FLyrRaster; |
||
42 | import org.gvsig.raster.fmap.layers.ILayerState; |
||
43 | import org.gvsig.raster.mainplugin.toolbar.IGenericToolBarMenuItem; |
||
44 | import org.gvsig.raster.swing.RasterSwingLocator; |
||
45 | import org.gvsig.raster.swing.roi.ROIPanel; |
||
46 | import org.gvsig.raster.tools.app.basic.RasterToolsUtil; |
||
47 | import org.gvsig.raster.tools.app.basic.tool.roi.ui.ROIWindow; |
||
48 | import org.gvsig.raster.tools.app.basic.tool.roi.ui.listener.ROIPanelListener; |
||
49 | import org.gvsig.raster.tools.app.basic.tool.roi.ui.listener.ROIsTablePanelListener; |
||
50 | |||
51 | /**
|
||
52 | * Punto de entrada del menu del gestor de ROIs.
|
||
53 | *
|
||
54 | * @author Diego Guerrero Sevilla (diego.guerrero@uclm.es
|
||
55 | */
|
||
56 | public class ROIManagerTocMenuEntry extends AbstractTocContextMenuAction implements IGenericToolBarMenuItem { |
||
57 | static private ROIManagerTocMenuEntry singleton = null; |
||
58 | |||
59 | /**
|
||
60 | * Nadie puede crear una instancia a esta clase ?nica, hay que usar el
|
||
61 | * getSingleton()
|
||
62 | */
|
||
63 | private ROIManagerTocMenuEntry() {}
|
||
64 | |||
65 | /**
|
||
66 | * Devuelve un objeto unico a dicha clase
|
||
67 | * @return
|
||
68 | */
|
||
69 | static public ROIManagerTocMenuEntry getSingleton() { |
||
70 | if (singleton == null) |
||
71 | singleton = new ROIManagerTocMenuEntry();
|
||
72 | return singleton;
|
||
73 | } |
||
74 | |||
75 | public String getGroup() { |
||
76 | return "RasterLayer"; |
||
77 | } |
||
78 | |||
79 | public int getGroupOrder() { |
||
80 | return 10; |
||
81 | } |
||
82 | |||
83 | public int getOrder() { |
||
84 | return 60; |
||
85 | } |
||
86 | |||
87 | public String getText() { |
||
88 | return RasterToolsUtil.getText(this, "regiones_interes"); |
||
89 | } |
||
90 | |||
91 | public boolean isEnabled(ITocItem item, FLayer[] selectedItems) { |
||
92 | if ((selectedItems == null) || (selectedItems.length != 1)) |
||
93 | return false; |
||
94 | |||
95 | if (!(selectedItems[0] instanceof ILayerState)) |
||
96 | return false; |
||
97 | |||
98 | if (!((ILayerState) selectedItems[0]).isOpen()) |
||
99 | return false; |
||
100 | |||
101 | return true; |
||
102 | } |
||
103 | |||
104 | public boolean isVisible(ITocItem item, FLayer[] selectedItems) { |
||
105 | if ((selectedItems == null) || (selectedItems.length != 1)) |
||
106 | return false; |
||
107 | |||
108 | if (!(selectedItems[0] instanceof FLyrRaster)) |
||
109 | return false; |
||
110 | 4181 | fdiaz | |
111 | 2480 | nbrodin | return true; |
112 | } |
||
113 | |||
114 | public void execute(ITocItem item, FLayer[] selectedItems) { |
||
115 | FLayer fLayer = null;
|
||
116 | |||
117 | if (selectedItems.length != 1) |
||
118 | return;
|
||
119 | |||
120 | fLayer = selectedItems[0];
|
||
121 | |||
122 | if (!(fLayer instanceof FLyrRaster)) |
||
123 | return;
|
||
124 | 4181 | fdiaz | |
125 | |||
126 | 2480 | nbrodin | ROIPanel panel = RasterSwingLocator.getSwingManager().createROIPanel(); |
127 | ROIDataModel dataModel = new ROIDataModel(getLFLyrVects());
|
||
128 | dataModel.setROIPanel(panel); |
||
129 | ROIWindow window = new ROIWindow(panel.getComponent(), "ROI", 500, 265); |
||
130 | try {
|
||
131 | dataModel.setLayer(selectedItems[0]);
|
||
132 | } catch (GridException e) {
|
||
133 | 4181 | fdiaz | |
134 | 2480 | nbrodin | } |
135 | 4181 | fdiaz | |
136 | 2480 | nbrodin | ROIPanelListener panelListener = new ROIPanelListener(window, dataModel);
|
137 | ROIsTablePanelListener tableListener = new ROIsTablePanelListener(panel, dataModel, window);
|
||
138 | tableListener.setPathToROI(getROIDefaultPath(fLayer)); |
||
139 | tableListener.setDefaultROIFileName(getDefaultROIFileName(fLayer)); |
||
140 | 4181 | fdiaz | |
141 | 2480 | nbrodin | panel.addButtonsListener(tableListener, panelListener); |
142 | panel.addTableListeners(tableListener, tableListener); |
||
143 | window.addIWindowListener(panelListener); |
||
144 | 4181 | fdiaz | |
145 | 2480 | nbrodin | RasterToolsUtil.addWindow(window); |
146 | } |
||
147 | 4181 | fdiaz | |
148 | 2480 | nbrodin | private String getDefaultROIFileName(FLayer fLayer) { |
149 | return fLayer.getName() + "_ROI.shp"; |
||
150 | } |
||
151 | |||
152 | private File getROIDefaultPath(FLayer layer) { |
||
153 | File path = getROIPathFromLayer(layer);
|
||
154 | if(path != null) |
||
155 | return path;
|
||
156 | else
|
||
157 | return getPathFromLayer(layer);
|
||
158 | } |
||
159 | 4181 | fdiaz | |
160 | 2480 | nbrodin | /**
|
161 | * Gets the path of the first provider
|
||
162 | * @param layer
|
||
163 | * @return
|
||
164 | */
|
||
165 | private File getPathFromLayer(FLayer layer) { |
||
166 | if(!(layer instanceof FLyrRaster)) |
||
167 | return null; |
||
168 | 4181 | fdiaz | URI[] uriList = ((FLyrRaster)layer).getDataStore().getURIByProvider(); |
169 | 2480 | nbrodin | if(uriList != null && uriList.length > 0) { |
170 | 4181 | fdiaz | URI uri = uriList[0]; |
171 | return new File(uri).getParentFile(); |
||
172 | 2480 | nbrodin | } |
173 | return null; |
||
174 | } |
||
175 | 4181 | fdiaz | |
176 | 2480 | nbrodin | /**
|
177 | * Gets the path of the first ROI file
|
||
178 | * @param layer
|
||
179 | * @return
|
||
180 | */
|
||
181 | private File getROIPathFromLayer(FLayer layer) { |
||
182 | if(!(layer instanceof FLyrRaster)) |
||
183 | return null; |
||
184 | List<File> uriList = ((FLyrRaster)layer).getDataStore().getROIFileListFromRmf(); |
||
185 | if(uriList != null && uriList.size() > 0) { |
||
186 | String path = uriList.get(0).getAbsolutePath(); |
||
187 | String uri = path.substring(0, path.lastIndexOf(File.separator)); |
||
188 | if(uri != null) |
||
189 | return new File(uri); |
||
190 | } |
||
191 | return null; |
||
192 | } |
||
193 | 4181 | fdiaz | |
194 | |||
195 | 2480 | nbrodin | /**
|
196 | * Gets the list of vectorial layers loaded in all views
|
||
197 | * @return
|
||
198 | */
|
||
199 | public List<FLyrVect> getLFLyrVects() { |
||
200 | List<FLyrVect> list = new ArrayList<FLyrVect>(); |
||
201 | IWindow[] w = PluginServices.getMDIManager().getAllWindows();
|
||
202 | for (int i = 0; i < w.length; i++) { |
||
203 | if(w[i] instanceof AbstractViewPanel) { |
||
204 | FLayers lys = ((AbstractViewPanel)w[i]).getMapControl().getMapContext().getLayers(); |
||
205 | for (int j = 0; j < lys.getLayersCount(); j++) { |
||
206 | if(lys.getLayer(j) instanceof FLyrVect) |
||
207 | list.add((FLyrVect)lys.getLayer(j)); |
||
208 | } |
||
209 | } |
||
210 | } |
||
211 | return list;
|
||
212 | } |
||
213 | 4181 | fdiaz | |
214 | 2480 | nbrodin | public Icon getIcon() { |
215 | return IconThemeHelper.getImageIcon("layer-modify-roi"); |
||
216 | } |
||
217 | 4181 | fdiaz | |
218 | 2480 | nbrodin | } |