Statistics
| Revision:

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

History | View | Annotate | Download (10.6 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.app.extension.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.app.extension.RasterToolsUtil;
45
import org.gvsig.raster.app.extension.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
public class GenericToolBarPanel extends JToolBar implements ComboButtonListener, ActionListener, MouseListener, ItemListener {
57
        private static final long serialVersionUID = -4382962282970490523L;
58
        private JComboBoxConfigurableLookUp jCBCLU = null;
59
        private ComboButton buttonGroup = new ComboButton();
60
        private ComboButton buttonMenu = new ComboButton();
61
        private FLayers lastLayers = null;
62

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

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

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

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

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

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

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

    
119
                buttonMenu.addComboButtonClickedListener(this);
120
                buttonMenu.setName("Submenus");
121
                buttonMenu.addMouseListener(this);
122
                buttonMenu.setMargin(new Insets(0, 0, 0, 0));
123
                reloadMenuGroup();
124
                add(buttonMenu);
125

    
126
                add(getComboBoxConfigurableLookUp());
127
                this.setRollover(true);
128
        }
129

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

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

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

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

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

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

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

    
246
                                        if (getLayerSelected() != null) {
247
                                                item.execute(null, new FLayer[] { getLayerSelected() });
248
                                                reloadSubMenu();
249
                                        }
250
                                        return;
251
                                }
252
                        }
253
                        return;
254
                }
255
        }
256

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

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

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

    
307
        public void mouseClicked(MouseEvent e) {}
308
        public void mouseExited(MouseEvent e) {}
309
        public void mousePressed(MouseEvent e) {}
310
        public void mouseReleased(MouseEvent e) {}
311

    
312
}