Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extArcims / src / es / prodevelop / cit / gvsig / arcims / gui / toc / ArcImsRasterPropsTocMenuEntry.java @ 8300

History | View | Annotate | Download (8.02 KB)

1
/**
2
 * 
3
 */
4
package es.prodevelop.cit.gvsig.arcims.gui.toc;
5

    
6
import java.awt.event.ActionEvent;
7
import java.util.ArrayList;
8

    
9
import javax.swing.JMenuItem;
10

    
11
import org.cresques.io.GeoRasterFile;
12
import org.cresques.filter.RasterFilter;
13
import org.cresques.filter.RasterFilterStackManager;
14
import org.cresques.px.PxRaster;
15
import org.cresques.ui.BrightnessContrast.EnhancedBrightnessContrastPanel;
16
import org.cresques.ui.raster.BandSetupPanel;
17
import org.cresques.ui.raster.EnhancedPanel;
18
import org.cresques.ui.raster.FilterRasterDialogPanel;
19
import org.cresques.ui.raster.InfoPanel;
20
import org.cresques.ui.raster.RasterTransparencyPanel;
21

    
22
import com.iver.andami.PluginServices;
23
import com.iver.cit.gvsig.fmap.layers.FLayer;
24
import com.iver.cit.gvsig.fmap.layers.FLyrRaster;
25
import com.iver.cit.gvsig.project.documents.view.toc.TocMenuEntry;
26
import com.iver.cit.gvsig.project.documents.view.toc.gui.FPopupMenu;
27

    
28
import es.prodevelop.cit.gvsig.arcims.fmap.layers.FRasterLyrArcIMS;
29
import es.prodevelop.cit.gvsig.arcims.gui.dialogs.ArcImsRasterPropsDialog;
30

    
31
/**
32
 * This class implements the raster properties menu item that is
33
 * added to the ArcIMS layer's popup menu.
34
 *   
35
 * @author jldominguez
36
 * @author Nacho Brodin (brodin_ign@gva.es)
37
 */
38
public class ArcImsRasterPropsTocMenuEntry extends TocMenuEntry {
39
        private JMenuItem propsMenuItem;
40
        FLayer lyr = null;
41
        private ArcImsRasterPropsDialog        propsDialog = null;
42
        private BandSetupPanel bandSetup = null;
43

    
44
        public void initialize(FPopupMenu m) {
45
                super.initialize(m);
46
                
47
                if (isTocItemBranch()) {
48
                        lyr = getNodeLayer();
49
                    // ArcIMS layer
50
                    if ((lyr instanceof FRasterLyrArcIMS)) {
51
                            propsMenuItem = new JMenuItem(PluginServices.getText(this, "propiedades_raster"));
52
                            getMenu().add( propsMenuItem );
53
                            propsMenuItem.setFont(FPopupMenu.theFont);
54
                            getMenu().setEnabled(true);
55
                            propsMenuItem.addActionListener(this);                           
56
                     }
57
                }
58
        }
59

    
60
        /**
61
         * Creates an ArcImsRasterPropsDialog object and adds it to the MDIManager.
62
         */
63
        public void actionPerformed(ActionEvent e) {
64
                lyr = getNodeLayer();
65
        
66
                if(lyr instanceof FRasterLyrArcIMS && ((FRasterLyrArcIMS) lyr).getPxRaster()!=null){
67
                        RasterFilterStackManager stackManager = null;
68
                        
69
                        FRasterLyrArcIMS layer = (FRasterLyrArcIMS) lyr;
70

    
71
                        stackManager = new RasterFilterStackManager(layer.getFilterStack());
72
                        
73
                        propsDialog = new ArcImsRasterPropsDialog(layer, stackManager.getTransparencyRGB());
74
                                               
75
                        int alpha = layer.getPxRaster().getAlpha();
76
                        
77
                        bandSetup = (BandSetupPanel)((FilterRasterDialogPanel)propsDialog.getContentPane()).getPanelByClassName("BandSetupPanel");
78
                        GeoRasterFile[] files = layer.getPxRaster().getFiles();
79
                        bandSetup.addFiles(files);
80
                        for(int i=0; i< files.length;i++) 
81
                                propsDialog.addNumBands(files[i].getBandCount());
82
                                
83
                        PxRaster px = layer.getPxRaster();
84
                        int posR = 0, posG = 0, posB = 0;
85
                        
86
                        for(int i=0;i<px.getPosFile(GeoRasterFile.RED_BAND);i++)
87
                                posR += files[i].getBandCount();
88
                        posR += px.getBand(GeoRasterFile.RED_BAND);
89
                        
90
                        for(int i=0;i<px.getPosFile(GeoRasterFile.GREEN_BAND);i++)
91
                                posG += files[i].getBandCount();
92
                        posG += px.getBand(GeoRasterFile.GREEN_BAND);
93
                        
94
                        for(int i=0;i<px.getPosFile(GeoRasterFile.BLUE_BAND);i++)
95
                                posB += files[i].getBandCount();
96
                        posB += px.getBand(GeoRasterFile.BLUE_BAND);
97
                        
98
                                        
99
                        bandSetup.assignBand(posR, GeoRasterFile.RED_BAND);
100
                        bandSetup.assignBand(posG, GeoRasterFile.GREEN_BAND);
101
                        bandSetup.assignBand(posB, GeoRasterFile.BLUE_BAND);        
102
                                                                        
103
                        InfoPanel pInfo = (InfoPanel)this.propsDialog.getPanelByClassName("InfoPanel");
104
                        pInfo.setBands(posR, posG, posB);
105
                        pInfo.addFiles(files);
106
                                                                        
107
                        //Asignaci?n del alpha actual de la imagen al dialogo
108
                        RasterTransparencyPanel rasterTrans = (RasterTransparencyPanel)((FilterRasterDialogPanel)propsDialog.getContentPane()).getPanelByClassName("RasterTransparencyPanel");
109
                        rasterTrans.setOpacity(alpha);
110
                        
111
                        propsDialog.setRasterFilterStackManager(stackManager);
112
                        bandSelector(stackManager, posR, posG, posB);
113
                        propsDialog.readStat();
114
                        actionPerformed(stackManager, propsDialog, null);
115
                        
116
                        PluginServices.getMDIManager().addWindow(propsDialog);               
117
                }
118
        }
119
        
120
        /**
121
         * Selects the active bands in the band panel
122
         * from the filters retrieved from the FilterStack
123
         *  
124
         * @param stackManager RasterFilterStackManager
125
         * @param posR R-band position
126
         * @param posG G-band position
127
         * @param posB B-band position
128
         */
129
        private void bandSelector(RasterFilterStackManager stackManager, int posR, int posG, int posB){
130
                ArrayList stackList = stackManager.getStringsFromStack();
131
                String hideBands = null;
132
                for(int i=0;i<stackList.size();i++){
133
                        if(((String)stackList.get(i)).startsWith("filter.removebands.bands"))
134
                                hideBands = stackManager.getValue((String)stackList.get(i));
135
                }
136
                
137
                // 1, 2 or 3 bands to show
138
                if(hideBands != null){
139
                        int pos = 2;
140
                        if(hideBands.length() == 1)
141
                                pos = 1;
142
                        else if(hideBands.length() == 2)
143
                                pos = 0;
144
                        bandSetup.getFileList().getJComboBox().setSelectedIndex(pos);
145
                        
146
                        // Reset table controls
147
                        
148
                        for(int i=0;i<bandSetup.getRGBTable().getModel().getRowCount();i++)
149
                                for(int j=0;j<3;j++)
150
                                        bandSetup.getRGBTable().getModel().setValueAt(new Boolean(false), i, j);
151
                        
152
                        if(hideBands.equals("GB") || hideBands.equals("G") || hideBands.equals("B") )
153
                                bandSetup.getRGBTable().getModel().setValueAt(new Boolean(true), posR, 0);
154
                        
155
                        if(hideBands.equals("RB") || hideBands.equals("R") || hideBands.equals("B") )
156
                                bandSetup.getRGBTable().getModel().setValueAt(new Boolean(true), posG, 1);
157
                        
158
                        if(hideBands.equals("RG") || hideBands.equals("R") || hideBands.equals("G") )
159
                                bandSetup.getRGBTable().getModel().setValueAt(new Boolean(true), posB, 2);
160
                }
161
        }
162
        
163
        /**
164
         * Modificaci?n del estado de los controles del panel de brillo y contraste
165
         */
166
        public void actionPerformed(RasterFilterStackManager stackManager, ArcImsRasterPropsDialog propsDialog, FLyrRaster fLayer) {
167
                EnhancedBrightnessContrastPanel bcPanel = (EnhancedBrightnessContrastPanel)((FilterRasterDialogPanel)propsDialog.getContentPane()).getPanelByClassName("EnhancedBrightnessContrastPanel"); 
168
                //bcPanel.setPropertiesDialog(propsDialog);
169
                
170
                if(stackManager.isActive(stackManager.getTypeFilter("brightness"))){
171
                        bcPanel.getCBrightC().setSelected(true);
172
                        bcPanel.setBCControlEnabled(true);
173
                        
174
                        RasterFilter bright = stackManager.getFilter("brightness");
175
                        
176
                        if(bright.getParam("incrBrillo") != null){
177
                                int incr = ((Integer)bright.getParam("incrBrillo")).intValue();
178
                                bcPanel.getLabelSliderText().setSliderValue(incr);
179
                                bcPanel.getLabelSliderText().setTextValue(String.valueOf(incr));
180
                        }
181
                }
182
                
183
                if(stackManager.isActive(stackManager.getTypeFilter("contrast"))){
184
                        bcPanel.getCBrightC().setSelected(true);
185
                        bcPanel.setBCControlEnabled(true);
186
                        
187
                        RasterFilter cont = stackManager.getFilter("contrast");
188
                        
189
                        if(cont.getParam("incrContraste") != null){
190
                                int incr = ((Integer)cont.getParam("incrContraste")).intValue();
191
                                bcPanel.getLabelSliderText1().setSliderValue(incr);
192
                                bcPanel.getLabelSliderText1().setTextValue(String.valueOf(incr));
193
                        }
194
                }
195
                
196
                if(stackManager.isActive(stackManager.getTypeFilter("enhanced"))){
197
                        bcPanel.getCEnhanced().setSelected(true);
198
                        bcPanel.setEControlEnabled(true);
199
                        
200
                        RasterFilter enhan = stackManager.getFilter("enhanced");
201
                        RasterFilter tail = stackManager.getFilter("tail");
202
                        
203
                        
204
                                boolean rem = ((Boolean)enhan.getParam("remove")).booleanValue();
205
                                bcPanel.getJCheckBox().setSelected(rem);
206
                        
207
                        if(stackManager.isActive(stackManager.getTypeFilter("tail"))){
208
                                double percent = (stackManager.getStackStats().tailPercent)*100;
209
                                bcPanel.getCheckSliderText().setTextValue(String.valueOf(percent));
210
                                bcPanel.getCheckSliderText().setSliderValue((int)percent);
211
                                bcPanel.getCheckSliderText().setSelected(true);
212
                                bcPanel.getCheckSliderText().setControlEnabled(true);
213
                                boolean remove = ((Boolean)tail.getParam("remove")).booleanValue();
214
                                if((remove == true) || (rem == true))
215
                                        bcPanel.getJCheckBox().setSelected(true);
216
                                else 
217
                                        bcPanel.getJCheckBox().setSelected(false);
218
                                
219
                        }
220
                }
221
        }        
222
        
223

    
224
}