Statistics
| Revision:

gvsig-raster / org.gvsig.raster.tools / trunk / org.gvsig.raster.tools / org.gvsig.raster.tools.app / org.gvsig.raster.tools.app.basic / src / main / java / org / gvsig / raster / tools / app / basic / tool / generictoolbar / GenericToolBarPanel.java @ 1151

History | View | Annotate | Download (10.7 KB)

1
/* 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.generictoolbar;
23

    
24
import java.awt.Insets;
25
import java.awt.event.ActionEvent;
26
import java.awt.event.ActionListener;
27
import java.awt.event.ItemEvent;
28
import java.awt.event.ItemListener;
29
import java.awt.event.MouseEvent;
30
import java.awt.event.MouseListener;
31
import java.util.ArrayList;
32
import java.util.Iterator;
33

    
34
import javax.swing.JButton;
35
import javax.swing.JToolBar;
36

    
37
import org.gvsig.fmap.mapcontext.layers.FLayer;
38
import org.gvsig.fmap.mapcontext.layers.FLayers;
39
import org.gvsig.gui.beans.comboboxconfigurablelookup.DefaultComboBoxConfigurableLookUpModel;
40
import org.gvsig.gui.beans.comboboxconfigurablelookup.JComboBoxConfigurableLookUp;
41
import org.gvsig.gui.beans.controls.combobutton.ComboButton;
42
import org.gvsig.gui.beans.controls.combobutton.ComboButtonEvent;
43
import org.gvsig.gui.beans.controls.combobutton.ComboButtonListener;
44
import org.gvsig.raster.tools.app.basic.RasterToolsUtil;
45
import org.gvsig.raster.tools.app.basic.raster.gui.IGenericToolBarMenuItem;
46
import org.gvsig.tools.ToolsLocator;
47
import org.gvsig.tools.extensionpoint.ExtensionPoint;
48
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
49
/**
50
 * Componente que contiene los objetos visuales de la barra de herramientas
51
 * generica
52
 *
53
 * @version 13/02/2008
54
 * @author BorSanZa - Borja S?nchez Zamorano (borja.sanchez@iver.es)
55
 */
56
@SuppressWarnings("unchecked")
57
public class GenericToolBarPanel extends JToolBar implements ComboButtonListener, ActionListener, MouseListener, ItemListener {
58
        private static final long serialVersionUID = -4382962282970490523L;
59
        private JComboBoxConfigurableLookUp jCBCLU = null;
60
        private ComboButton buttonGroup = new ComboButton();
61
        private ComboButton buttonMenu = new ComboButton();
62
        private FLayers lastLayers = null;
63

    
64
        public GenericToolBarPanel() {
65
                super("GenericToolBarPanel");
66
                initialize();
67
        }
68

    
69
        /**
70
         * Especifica que las capas de la vista han cambiado.
71
         * @param layers
72
         */
73
        public void setLayers(FLayers layers) {
74
                lastLayers = layers;
75

    
76
                getComboBoxConfigurableLookUp().setBlockPopupHided(true);
77
                getComboBoxConfigurableLookUp().removeAllItems();
78

    
79
                if(layers != null) {
80
                        ArrayList lyrs = RasterToolsUtil.getLayerList(layers, null);
81
                        for (int i = 0; i < lyrs.size(); i++)
82
                                getComboBoxConfigurableLookUp().addItem(((FLayer)lyrs.get(i)).getName());
83

    
84
                        if (layers.getActives().length > 0)
85
                                getComboBoxConfigurableLookUp().setSelectedItem(layers.getActives()[0].getName());
86
                        else if (layers.getLayersCount() > 0)
87
                                getComboBoxConfigurableLookUp().setSelectedItem(layers.getLayer(0).getName());
88
                }
89
                reloadSubMenu();
90
                getComboBoxConfigurableLookUp().setBlockPopupHided(false);
91
        }
92

    
93
        /**
94
         * Devuelve un combo de busqueda de items.
95
         * @return
96
         */
97
        private JComboBoxConfigurableLookUp getComboBoxConfigurableLookUp() {
98
                if (jCBCLU == null) {
99
                        jCBCLU = new JComboBoxConfigurableLookUp();
100
                        jCBCLU.setOnlyOneColorOnText(true);
101
                        jCBCLU.setPrototypeDisplayValue(" ");
102
                        if (jCBCLU.getModel() instanceof DefaultComboBoxConfigurableLookUpModel) {
103
                                ((DefaultComboBoxConfigurableLookUpModel) jCBCLU.getModel()).setShowAllItemsInListBox(false);
104
                                ((DefaultComboBoxConfigurableLookUpModel) jCBCLU.getModel()).setLookUpAgent(new BinarySearch());
105
                                ((DefaultComboBoxConfigurableLookUpModel) jCBCLU.getModel()).setCaseSensitive(false);
106
                                jCBCLU.setToForceSelectAnItem(true);
107
                                jCBCLU.setDisplayAllItemsWithArrowButton(true);
108
                        }
109
                        jCBCLU.addActionListener(this);
110
                }
111
                return jCBCLU;
112
        }
113

    
114
        private void initialize() {
115
                buttonGroup.addComboButtonClickedListener(this);
116
                buttonGroup.setName("Menu principal");
117
                buttonGroup.setMargin(new Insets(0, 0, 0, 0));
118
                buttonGroup.setAlwaysMenuOnClick(true);
119
                reloadMenuGroup();
120
                add(buttonGroup);
121

    
122
                buttonMenu.addComboButtonClickedListener(this);
123
                buttonMenu.setName("Submenus");
124
                buttonMenu.addMouseListener(this);
125
                buttonMenu.setMargin(new Insets(0, 0, 0, 0));
126
                reloadMenuGroup();
127
                add(buttonMenu);
128

    
129
                add(getComboBoxConfigurableLookUp());
130
                this.setRollover(true);
131
        }
132

    
133
        /**
134
         * Recarga los items del menu global dejando seleccionado el item que habia
135
         * previamente, en caso de que exista
136
         */
137
        public void reloadMenuGroup() {
138
                FLayer[] layers = new FLayer[] { getLayerSelected() };
139
                ButtonItems buttonItems = new ButtonItems(buttonGroup, layers);
140

    
141
                ExtensionPointManager extensionPoints =ToolsLocator.getExtensionPointManager();
142
                ExtensionPoint point=extensionPoints.get("GenericToolBarGroup");
143
                Iterator iterator = point.iterator();
144
                while (iterator.hasNext()) {
145
                        ExtensionPoint.Extension extension = (ExtensionPoint.Extension) iterator
146
                                        .next();
147
                        Object object;
148
                        try {
149
                                object = extension.create();
150
                        } catch (Exception e) {
151
                                throw new RuntimeException(e);
152
                        }
153
                        if (object instanceof IGenericToolBarMenuItem)
154
                                buttonItems.addButton((IGenericToolBarMenuItem) object, extension
155
                                                .getName());
156
                }
157
                buttonItems.refresh();
158
                reloadSubMenu();
159
        }
160

    
161
        /**
162
         * Recarga los items del submenu dejando seleccionado el item que habia
163
         * previamente, en caso de que exista
164
         */
165
        public void reloadSubMenu() {
166
                FLayer[] layers = new FLayer[] { getLayerSelected() };
167
                ButtonItems buttonItems = new ButtonItems(buttonMenu, layers);
168
                ExtensionPointManager extensionPoints =ToolsLocator.getExtensionPointManager();
169
                ExtensionPoint point=extensionPoints.add("GenericToolBarMenu");
170
                Iterator iterator = point.iterator();
171
                while (iterator.hasNext()) {
172
                        ExtensionPoint.Extension entry = (ExtensionPoint.Extension) iterator
173
                                        .next();
174
                        Object object;
175
                        try {
176
                                object = entry.create();
177
                        } catch (Exception e) {
178
                                throw new RuntimeException(e);
179
                        }
180
                        if (object instanceof IGenericToolBarMenuItem) {
181
                                IGenericToolBarMenuItem item = (IGenericToolBarMenuItem) object;
182
                                if (!buttonGroup.getActionCommand().equals(item.getGroup()))
183
                                        continue;
184
                                buttonItems.addButton(item, entry.getName());
185
                        }
186
                }
187
                buttonItems.refresh();
188
        }
189

    
190
        /**
191
         * Devuelve el layer seleccionado en el combobox
192
         * @return
193
         */
194
        public FLayer getLayerSelected() {
195
                if (lastLayers == null)
196
                        return null;
197
                ArrayList lyrs = RasterToolsUtil.getLayerList(lastLayers, null);
198
                for (int i = 0; i < lyrs.size(); i++)
199
                        if (((FLayer)lyrs.get(i)).getName().equals(getComboBoxConfigurableLookUp().getEditor().getItem()))
200
                                return (FLayer)lyrs.get(i);
201
                return null;
202
        }
203

    
204
        /*
205
         * (non-Javadoc)
206
         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
207
         */
208
        public void actionPerformed(ActionEvent e) {
209
                if (e.getSource() == getComboBoxConfigurableLookUp()) {
210
//                        selectLayerInTOC(lastLayers, (String) getComboBoxConfigurableLookUp().getSelectedItem());
211
                }
212
        }
213

    
214
                /*
215
         * (non-Javadoc)
216
         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
217
         */
218
        public void actionComboButtonClicked(ComboButtonEvent e) {
219
                if (e.getSource() == buttonGroup) {
220
                        reloadSubMenu();
221
                        return;
222
                }
223
                if (e.getSource() == buttonMenu) {
224
                        ExtensionPointManager extensionPoints =ToolsLocator.getExtensionPointManager();
225
                        ExtensionPoint point=extensionPoints.add("GenericToolBarMenu");
226
                        Iterator iterator = point.iterator();
227
                        while (iterator.hasNext()) {
228
                                ExtensionPoint.Extension entry = (ExtensionPoint.Extension) iterator
229
                                                .next();
230
                                if (!entry.getName().equals(
231
                                                ((JButton) e.getSource()).getActionCommand()))
232
                                        continue;
233
                                Object object;
234
                                try {
235
                                        object = entry.create();
236
                                } catch (Exception e1) {
237
                                        // TODO Auto-generated catch block
238
                                        throw new RuntimeException(e1);
239
                                }
240
                                if (object instanceof IGenericToolBarMenuItem) {
241
                                        IGenericToolBarMenuItem item = (IGenericToolBarMenuItem) object;
242

    
243
                                        FLayer[] layers = new FLayer[] { getLayerSelected() };
244
                                        if (!item.isVisible(null, layers))
245
                                                continue;
246
                                        if (!item.isEnabled(null, layers))
247
                                                continue;
248

    
249
                                        if (getLayerSelected() != null) {
250
                                                item.execute(null, new FLayer[] { getLayerSelected() });
251
                                        } else
252
                                                item.execute(null, null);
253
                                        reloadSubMenu();
254
                                        return;
255
                                }
256
                        }
257
                        return;
258
                }
259
        }
260

    
261
        /**
262
         * Selecciona una capa en el TOC
263
         * @param layers
264
         * @param nameLayer
265
         */
266
//        private void selectLayerInTOC(FLayers layers, String nameLayer) {
267
//                if (layers == null)
268
//                        return;
269
//                for (int i = 0; i < layers.getLayersCount(); i++) {
270
//                        if (layers.getLayer(i) instanceof FLayers) {
271
//                                selectLayerInTOC((FLayers) layers.getLayer(i), nameLayer);
272
//                        } else {
273
//                                if (layers.getLayer(i) instanceof FLayer) {
274
//                                        FLayer layer = ((FLayer) layers.getLayer(i));
275
//                                        if (layer.getName().equals(nameLayer) && !layer.isActive()) {
276
//                                                layer.setActive(true);
277
//                                        }
278
//                                }
279
//                        }
280
//                }
281
//        }
282

    
283
        /**
284
         * Recargo el menu cada vez que entra el raton en el boton, para ahorrar tiempo en
285
         * la visualizacion del mismo
286
         */
287
        public void mouseEntered(MouseEvent e) {
288
                this.reloadSubMenu();
289
        }
290

    
291
        public void itemStateChanged(ItemEvent e) {
292
//                if (e.getStateChange() != ItemEvent.SELECTED)
293
//                        return;
294
//
295
//                FLayer layer = getLayerSelected();
296
//
297
//                if (layer == null)
298
//                        return;
299
//
300
//                FLayers layers = lastLayers;
301
//                for(int i = 0; i < layers.getLayersCount(); i++)
302
//                        layers.getLayer(i).setActive(false);
303
//
304
//                layer.setActive(true);
305
//                View view = (View) PluginServices.getMDIManager().getActiveWindow();
306
//                JScrollBar verticalBar = view.getTOC().getJScrollPane().getVerticalScrollBar();
307
//                double widthPerEntry = verticalBar.getMaximum() / layer.getMapContext().getLayers().getLayersCount();
308
//                verticalBar.setValue((int)widthPerEntry * (layer.getMapContext().getLayers().getLayersCount() - pos - 1));
309
        }
310

    
311
        public void mouseClicked(MouseEvent e) {}
312
        public void mouseExited(MouseEvent e) {}
313
        public void mousePressed(MouseEvent e) {}
314
        public void mouseReleased(MouseEvent e) {}
315

    
316
}