Statistics
| Revision:

gvsig-raster / org.gvsig.raster.tasseledcap / trunk / org.gvsig.raster.tasseledcap / org.gvsig.raster.tasseledcap.app.tasseledcapclient / src / main / java / org / gvsig / raster / tasseledcap / app / TasseledCapExtension.java @ 3379

History | View | Annotate | Download (5.88 KB)

1 2641 nbrodin
package org.gvsig.raster.tasseledcap.app;
2
3
import java.awt.event.ActionEvent;
4
import java.awt.event.ActionListener;
5
6
import org.gvsig.andami.IconThemeHelper;
7
import org.gvsig.andami.PluginServices;
8
import org.gvsig.andami.plugins.Extension;
9
import org.gvsig.andami.ui.mdiManager.IWindow;
10
import org.gvsig.app.project.documents.view.gui.IView;
11
import org.gvsig.fmap.mapcontext.layers.FLayer;
12
import org.gvsig.fmap.mapcontrol.MapControl;
13
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
14
import org.gvsig.gui.beans.defaultbuttonspanel.DefaultButtonsPanel;
15
import org.gvsig.i18n.Messages;
16
import org.gvsig.raster.algorithm.BasicAPISwingPanel;
17
import org.gvsig.raster.algorithm.process.DataProcess;
18 3330 mcompany
import org.gvsig.raster.fmap.layers.*;
19 2641 nbrodin
import org.gvsig.raster.swing.RasterSwingLibrary;
20
import org.gvsig.raster.tasseledcap.app.toolbox.ToolboxTasseledCapLoader;
21
import org.gvsig.raster.tasseledcap.swing.TasseledCapSwingLocator;
22
import org.gvsig.tools.ToolsLocator;
23
import org.gvsig.tools.extensionpoint.ExtensionPoint;
24
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
25
26
27
public class TasseledCapExtension extends Extension implements ActionListener {
28
    private BasicAPISwingPanel   mainPanel              = null;
29
    private MainWindow           windowMainPanel        = null;
30 2811 fdiaz
    private FLyrRaster           lyr                    = null;
31
32 2641 nbrodin
    public void initialize() {
33 2811 fdiaz
34 2641 nbrodin
            // Adds an entry to the TOC's floating menu to those layers defined in this extension
35 2811 fdiaz
36 2641 nbrodin
                //ExtensionPoint exPoint = ToolsLocator.getExtensionPointManager().add("My_TocActions");
37
                //exPoint.append("MyMenuEntry", "", new PrincipalComponentsTocMenuEntry());
38
39
        // Adds a new tab to the "add layer" dialog
40 2811 fdiaz
41 2641 nbrodin
            //AddLayer.addWizard(PrincipalComponentsWizard.class);
42 2811 fdiaz
43 2641 nbrodin
            // Adds a new button in the raster bar
44
            // TODO: Remove for providers
45
                ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
46
                ExtensionPoint point = extensionPoints.add("GenericToolBarMenu");
47
                point.append("TasseledCap", "", TasseledCapTocMenuEntry.getSingleton());
48
                TasseledCapTocMenuEntry.setExtension(this);
49 2811 fdiaz
50 2641 nbrodin
        Messages.addResourceFamily("org.gvsig.raster.tasseledcap.app.i18n.text",
51
                        TasseledCapExtension.class.getClassLoader(),
52 2811 fdiaz
                        TasseledCapExtension.class.getClass().getName());
53 2641 nbrodin
54
            initilizeIcons();
55
    }
56 2811 fdiaz
57 2641 nbrodin
        public void postInitialize() {
58
                new ToolboxTasseledCapLoader().registerTool();
59
        }
60
61
    public void execute(String actionCommand) {
62
            if (actionCommand.compareTo("TasseledCap") == 0) {
63
                    lyr = getSelectedLayer();
64
                    if(lyr == null) {
65
                            RasterSwingLibrary.messageBoxError(Messages.getText("layer_not_found"), null);
66
                            return;
67
                    }
68 2811 fdiaz
69 2641 nbrodin
                        String defaultROIEPSG = getFirstMapCtrl().getProjection().getAbrev();
70 2811 fdiaz
71 2641 nbrodin
                    mainPanel = TasseledCapSwingLocator.getSwingManager().createTasseledCapMainPanel(
72
                                    lyr.getDataStore(),
73
                                    lyr.getName(),
74
                                    lyr.getDataStore().getBandCount(),
75
                                    defaultROIEPSG);
76 2811 fdiaz
77
                    windowMainPanel = new MainWindow(mainPanel.getComponent(),
78 3192 fdiaz
                                    Messages.getText("tasseled_cap"),
79 2811 fdiaz
                                    400, 420,
80 2641 nbrodin
                                    this);
81 2811 fdiaz
82 2641 nbrodin
                    PluginServices.getMDIManager().addCentredWindow(windowMainPanel);
83 2811 fdiaz
84 2641 nbrodin
                    mainPanel.initialize();
85
            }
86
    }
87 2811 fdiaz
88 2641 nbrodin
        /**
89
         * Gets the Mapcontrol for the first view found.
90
         * @return
91
         */
92
    private MapControl getFirstMapCtrl() {
93 2811 fdiaz
            IWindow[] windowList = PluginServices.getMDIManager().getOrderedWindows();
94 2641 nbrodin
            for (int i = 0; i < windowList.length; i++) {
95
                    if(windowList[i] instanceof IView) {
96
                            return ((IView)windowList[i]).getMapControl();
97
                    }
98 2811 fdiaz
            }
99 2641 nbrodin
            return null;
100
    }
101
102
    /**
103
     * Gets the selected and valid layer
104
     * @return
105
         */
106 3379 fdiaz
    private FLyrRaster getSelectedLayer() {
107
        MapControl firstMapCtrl = getFirstMapCtrl();
108
        if (firstMapCtrl != null) {
109
110
            FLayer[] lyrList =
111
                getFirstMapCtrl().getMapContext().getLayers().getActives();
112
            if (lyrList.length <= 1) {
113
114
                for (int i = 0; i < lyrList.length; i++) {
115
                    if (lyrList[i] instanceof FLyrRaster) {
116
                        return (FLyrRaster) lyrList[i];
117
                    }
118
                }
119
            }
120 3330 mcompany
        }
121 3379 fdiaz
        return null;
122
    }
123 2641 nbrodin
124
    public boolean isEnabled() {
125 3330 mcompany
      FLyrRaster selectedLayer = getSelectedLayer();
126
      if (selectedLayer == null) {
127 2641 nbrodin
        return false;
128 3330 mcompany
      }
129
130
      if (!(selectedLayer instanceof ILayerState))
131
        return false;
132
133
      if (!((ILayerState) selectedLayer).isOpen())
134
        return false;
135
136
      if((selectedLayer).getRender().getFilterList().get("colortable") != null)
137
        return false;
138
139
      if(selectedLayer.getDataStore().getBandCount() < 4)
140
        return false;
141
142
      return true;
143 2641 nbrodin
    }
144
145
    public boolean isVisible() {
146 3330 mcompany
      FLyrRaster selectedLayer = getSelectedLayer();
147
      if (selectedLayer == null)
148 2641 nbrodin
        return false;
149 3330 mcompany
150
      if (!(selectedLayer instanceof IRasterLayerActions))
151
        return false;
152
153
      return ((IRasterLayerActions) selectedLayer).isActionEnabled(IRasterLayerActions.ENHANCED);
154 2641 nbrodin
    }
155
156
    void initilizeIcons(){
157
                IconThemeHelper.registerIcon(null, "tasseled-cab", this);
158
                IconThemeHelper.registerIcon(null, "gvsig-icon", this);
159
                IconThemeHelper.registerIcon(null, "gvsig-icon16x16", this);
160
    }
161
162
        public void actionPerformed(ActionEvent e) {
163 2811 fdiaz
                //ACCEPT MAIN PANEL
164 2641 nbrodin
                if( e.getSource() == ((DefaultButtonsPanel)windowMainPanel).getButtonsPanel().getButton(ButtonsPanel.BUTTON_APPLY) ||
165
                        e.getSource() == ((DefaultButtonsPanel)windowMainPanel).getButtonsPanel().getButton(ButtonsPanel.BUTTON_ACCEPT)) {
166
                        DataProcess task = null;
167
                        try {
168
                                task = (DataProcess)mainPanel.getResult();
169
                        } catch (Exception e1) {
170
                                RasterSwingLibrary.messageBoxError(Messages.getText("problems_creating_process"), null);
171
                                return;
172
                        }
173
                        task.setActions(new ProcessEndActions(windowMainPanel, lyr));
174
                        task.init();
175
                        task.start();
176
                }
177
        }
178
179
        public void interrupted() {
180 2811 fdiaz
181 2641 nbrodin
        }
182 2811 fdiaz
183 2641 nbrodin
        public void updateProgress(int current, int total) {
184 2811 fdiaz
185 2641 nbrodin
        }
186
}