Statistics
| Revision:

root / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / vectorizacion / VectorizationTocMenuEntry.java @ 27442

History | View | Annotate | Download (8.68 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2007 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.vectorizacion;
20

    
21
import javax.swing.Icon;
22

    
23
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
24
import org.gvsig.fmap.raster.layers.ILayerState;
25
import org.gvsig.fmap.raster.layers.IRasterLayerActions;
26
import org.gvsig.raster.IProcessActions;
27
import org.gvsig.raster.gui.IGenericToolBarMenuItem;
28
import org.gvsig.raster.util.RasterToolsUtil;
29
import org.gvsig.raster.util.RasterUtilities;
30
import org.gvsig.rastertools.statistics.StatisticsProcess;
31
import org.gvsig.rastertools.vectorizacion.clip.ClipData;
32
import org.gvsig.rastertools.vectorizacion.clip.ClipListener;
33
import org.gvsig.rastertools.vectorizacion.clip.ui.ClipPanel;
34
import org.gvsig.rastertools.vectorizacion.filter.GrayConversionData;
35
import org.gvsig.rastertools.vectorizacion.filter.GrayConversionListener;
36
import org.gvsig.rastertools.vectorizacion.filter.ui.GrayConversionPanel;
37
import org.gvsig.rastertools.vectorizacion.stretch.StretchData;
38
import org.gvsig.rastertools.vectorizacion.stretch.StretchListener;
39
import org.gvsig.rastertools.vectorizacion.stretch.ui.StretchPanel;
40
import org.gvsig.rastertools.vectorizacion.vector.VectorData;
41
import org.gvsig.rastertools.vectorizacion.vector.VectorListener;
42
import org.gvsig.rastertools.vectorizacion.vector.ui.VectorPanel;
43

    
44
import com.iver.cit.gvsig.fmap.layers.FLayer;
45
import com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction;
46
import com.iver.cit.gvsig.project.documents.view.toc.ITocItem;
47
/**
48
 * <code>VectorizationTocMenuEntry</code> es el punto de entrada del menu de vectorizaci?n.
49
 *
50
 * @version 12/06/2008
51
 * @author Nacho Brodin nachobrodin@gmail.com
52
 */
53
public class VectorizationTocMenuEntry extends AbstractTocContextMenuAction implements IGenericToolBarMenuItem, IProcessActions {
54
        static private VectorizationTocMenuEntry   singleton              = null;
55
        private boolean                            grayScaleConversion    = true;
56
        private static final int                   SIZE_MAX               = 20; 
57
        
58

    
59
        /**
60
         * Nadie puede crear una instancia a esta clase ?nica, hay que usar el
61
         * getSingleton()
62
         */
63
        private VectorizationTocMenuEntry() {}
64

    
65
        /**
66
         * Devuelve un objeto unico a dicha clase
67
         * @return
68
         */
69
        static public VectorizationTocMenuEntry getSingleton() {
70
                if (singleton == null)
71
                        singleton = new VectorizationTocMenuEntry();
72
                return singleton;
73
        }
74

    
75
        /*
76
         * (non-Javadoc)
77
         * @see com.iver.cit.gvsig.project.documents.contextMenu.AbstractContextMenuAction#getGroup()
78
         */
79
        public String getGroup() {
80
                return "RasterProcess";
81
        }
82

    
83
        /*
84
         * (non-Javadoc)
85
         * @see com.iver.cit.gvsig.project.documents.contextMenu.AbstractContextMenuAction#getGroupOrder()
86
         */
87
        public int getGroupOrder() {
88
                return 50;
89
        }
90

    
91
        /*
92
         * (non-Javadoc)
93
         * @see com.iver.cit.gvsig.project.documents.contextMenu.AbstractContextMenuAction#getOrder()
94
         */
95
        public int getOrder() {
96
                return 1;
97
        }
98

    
99
        /*
100
         * (non-Javadoc)
101
         * @see com.iver.cit.gvsig.project.documents.IContextMenuAction#getText()
102
         */
103
        public String getText() {
104
                return RasterToolsUtil.getText(this, "vectorization");
105
        }
106

    
107
        /*
108
         * (non-Javadoc)
109
         * @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[])
110
         */
111
        public boolean isEnabled(ITocItem item, FLayer[] selectedItems) {
112
                if ((selectedItems == null) || (selectedItems.length != 1))
113
                        return false;
114

    
115
                if (!(selectedItems[0] instanceof ILayerState))
116
                        return false;
117

    
118
                if (!((ILayerState) selectedItems[0]).isOpen())
119
                        return false;
120
                return true;
121
        }
122

    
123
        /*
124
         * (non-Javadoc)
125
         * @see com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction#isVisible(com.iver.cit.gvsig.project.documents.view.toc.ITocItem, com.iver.cit.gvsig.fmap.layers.FLayer[])
126
         */
127
        public boolean isVisible(ITocItem item, FLayer[] selectedItems) {
128
                if ((selectedItems == null) || (selectedItems.length != 1))
129
                        return false;
130

    
131
                if (!(selectedItems[0] instanceof FLyrRasterSE))
132
                        return false;
133
                
134
                return ((FLyrRasterSE) selectedItems[0]).isActionEnabled(IRasterLayerActions.FILTER);
135
        }
136

    
137
        /*
138
         * (non-Javadoc)
139
         * @see com.iver.cit.gvsig.project.documents.view.toc.AbstractTocContextMenuAction#execute(com.iver.cit.gvsig.project.documents.view.toc.ITocItem, com.iver.cit.gvsig.fmap.layers.FLayer[])
140
         */
141
        public void execute(ITocItem item, FLayer[] selectedItems) {
142
                FLayer fLayer = null;
143

    
144
                if (selectedItems.length != 1)
145
                        return;
146

    
147
                fLayer = selectedItems[0];
148

    
149
                if (!(fLayer instanceof FLyrRasterSE))
150
                        return;
151

    
152
                FLyrRasterSE lyr = (FLyrRasterSE)fLayer;
153
                grayScaleConversion = true;
154
                
155
                long size = RasterUtilities.getBytesFromRasterBufType(lyr.getDataType()[0]);
156
                
157
                if((lyr.getBandCount() * lyr.getPxWidth() * lyr.getPxHeight() * size) > (SIZE_MAX * 1000000)) {
158
                        if(!RasterToolsUtil.messageBoxYesOrNot("source_too_big", this)) {
159
                                return;
160
                        }
161
                }
162
                
163
                if(lyr.getBandCount() == 1) {
164
                        if(RasterToolsUtil.messageBoxYesOrNot("datatype_not_byte", this)) {
165
                                grayScaleConversion = false;
166
                        }
167
                }
168
                StatisticsProcess.launcher(lyr, this);
169
        }
170

    
171
        /*
172
         * (non-Javadoc)
173
         * @see org.gvsig.rastertools.generictoolbar.IGenericToolBarMenuItem#getIcon()
174
         */
175
        public Icon getIcon() {
176
                return RasterToolsUtil.getIcon("vectorization-icon");
177
        }
178

    
179
        public void end(Object param) {
180
                FLyrRasterSE lyr = null;
181
                if(param instanceof FLyrRasterSE)
182
                        lyr = (FLyrRasterSE)param;
183
                else return;
184
                
185
                //1-Creamos los modelos de datos
186
                ClipData clipData = new ClipData();
187
                GrayConversionData grayConvData = new GrayConversionData();
188
                StretchData stretchData = new StretchData();
189
                VectorData vectorData = new VectorData();
190
                vectorData.setProjLayer(lyr.getMapContext().getProjection());
191

    
192
                //2-Creamos los paneles
193
                ClipPanel clipPanel = new ClipPanel();
194
                GrayConversionPanel grayConvPanel = new GrayConversionPanel();
195
                StretchPanel stretchPanel = new StretchPanel();
196
                VectorPanel vectorPanel = new VectorPanel();
197
                
198
                //3-Creamos los listener
199
                ClipListener clipList = new ClipListener(lyr, clipPanel, clipData);
200
                GrayConversionListener grayConvList = new GrayConversionListener(lyr, grayConvPanel, grayConvData);
201
                StretchListener stretchListener = new StretchListener(lyr, stretchPanel, stretchData);
202
                VectorListener vectorList = new VectorListener(lyr, vectorPanel, vectorData); 
203
                
204
                //4-Asignamos los observadores
205
                clipData.addObserver(clipPanel);
206
                grayConvData.addObserver(grayConvPanel);
207
                vectorData.addObserver(vectorPanel);
208
                stretchData.addObserver(stretchPanel);
209
                
210
                //5-Panel general: creamos el modelo de datos, panel y listener
211
                MainPanel mainPanel = null;
212
                if(grayScaleConversion) {
213
                        mainPanel = new MainPanel(lyr, grayConvList.getPreviewRender());
214
                        mainPanel.setPanel(clipPanel);
215
                        mainPanel.setPanel(grayConvPanel);
216
                } else {
217
                        mainPanel = new MainPanel(lyr, stretchListener.getPreviewRender());
218
                        mainPanel.setPanel(clipPanel);
219
                        mainPanel.setPanel(stretchPanel);
220
                }
221
                mainPanel.setPanel(vectorPanel);
222
                mainPanel.initialize();
223
                
224
                MainListener vectListener = new MainListener(lyr, mainPanel, grayConvList, clipList, vectorList, stretchListener);
225
                if(grayScaleConversion) {
226
                        vectListener.setPreviewRender(grayConvList.getPreviewRender());
227
                        grayConvList.setPreviewPanel(mainPanel.getPreviewBasePanel());
228
                } else {
229
                        vectListener.setPreviewRender(stretchListener.getPreviewRender());
230
                        stretchListener.setPreviewPanel(mainPanel.getPreviewBasePanel());
231
                }
232
                        
233
                //6-Actualizamos los datos
234
                clipData.updateObservers();
235
                grayConvData.updateObservers();
236
                vectorData.updateObservers();
237
                stretchData.updateObservers();
238
                
239
                //7-Creamos el dialogo 
240
                MainDialog dialog = new MainDialog(620, 468, lyr.getName(), mainPanel);
241
                vectListener.setDialog(dialog);
242
                RasterToolsUtil.addWindow(dialog);
243
        }
244

    
245
        public void interrupted() {
246
        }
247
}