Statistics
| Revision:

gvsig-raster / org.gvsig.raster / branches / org.gvsig.raster_dataaccess_refactoring / org.gvsig.raster.mainplugin / src / main / java / org / gvsig / raster / mainplugin / toolbar / GenericToolBarPanel.java @ 2424

History | View | Annotate | Download (11 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.mainplugin.toolbar;
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
import java.util.List;
34

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

    
38
import org.gvsig.fmap.mapcontext.layers.FLayer;
39
import org.gvsig.fmap.mapcontext.layers.FLayers;
40
import org.gvsig.gui.beans.comboboxconfigurablelookup.DefaultComboBoxConfigurableLookUpModel;
41
import org.gvsig.gui.beans.comboboxconfigurablelookup.JComboBoxConfigurableLookUp;
42
import org.gvsig.gui.beans.controls.IControl;
43
import org.gvsig.gui.beans.controls.combobutton.ComboButton;
44
import org.gvsig.gui.beans.controls.combobutton.ComboButtonEvent;
45
import org.gvsig.gui.beans.controls.combobutton.ComboButtonListener;
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
 * @author BorSanZa - Borja S?nchez Zamorano 
54
 */
55
public class GenericToolBarPanel extends JToolBar implements ComboButtonListener, ActionListener, MouseListener, ItemListener, IControl {
56
        private static final long serialVersionUID = -4382962282970490523L;
57
        private JComboBoxConfigurableLookUp jCBCLU = null;
58
        private ComboButton buttonGroup = new ComboButton();
59
        private ComboButton buttonMenu = new ComboButton();
60
        private FLayers lastLayers = null;
61

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

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

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

    
77
                if(layers != null) {
78
                        List<FLayer> lyrs = 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
                }
87
                reloadSubMenu();
88
                getComboBoxConfigurableLookUp().setBlockPopupHided(false);
89
        }
90
        
91
        /**
92
         * Devuelve un combo de busqueda de items.
93
         * @return
94
         */
95
        private JComboBoxConfigurableLookUp getComboBoxConfigurableLookUp() {
96
                if (jCBCLU == null) {
97
                        jCBCLU = new JComboBoxConfigurableLookUp();
98
                        jCBCLU.setOnlyOneColorOnText(true);
99
                        jCBCLU.setPrototypeDisplayValue(" ");
100
                        if (jCBCLU.getModel() instanceof DefaultComboBoxConfigurableLookUpModel) {
101
                                ((DefaultComboBoxConfigurableLookUpModel) jCBCLU.getModel()).setShowAllItemsInListBox(false);
102
                                ((DefaultComboBoxConfigurableLookUpModel) jCBCLU.getModel()).setLookUpAgent(new BinarySearch());
103
                                ((DefaultComboBoxConfigurableLookUpModel) jCBCLU.getModel()).setCaseSensitive(false);
104
                                jCBCLU.setToForceSelectAnItem(true);
105
                                jCBCLU.setDisplayAllItemsWithArrowButton(true);
106
                        }
107
                        jCBCLU.addActionListener(this);
108
                }
109
                return jCBCLU;
110
        }
111

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

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

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

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

    
139
                ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
140
                ExtensionPoint point = extensionPoints.get("GenericToolBarGroup");
141
                Iterator<?> iterator = point.iterator();
142
                while (iterator.hasNext()) {
143
                        ExtensionPoint.Extension extension = (ExtensionPoint.Extension) iterator.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.getName());
152
                }
153
                buttonItems.refresh();
154
                reloadSubMenu();
155
        }
156

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

    
185
        /**
186
         * Devuelve el layer seleccionado en el combobox
187
         * @return
188
         */
189
        public FLayer getLayerSelected() {
190
                if (lastLayers == null)
191
                        return null;
192
                List<FLayer> lyrs = getLayerList(lastLayers, null);
193
                for (int i = 0; i < lyrs.size(); i++)
194
                        if (((FLayer)lyrs.get(i)).getName().equals(getComboBoxConfigurableLookUp().getEditor().getItem()))
195
                                return (FLayer)lyrs.get(i);
196
                return null;
197
        }
198
        
199
        public static List<FLayer> getLayerList(FLayers srcLyrs, List<FLayer> destLyrs) {
200
                if(srcLyrs == null)
201
                        return null;
202
                if(destLyrs == null)
203
                        destLyrs = new ArrayList<FLayer>();
204
                for (int i = 0; i < srcLyrs.getLayersCount(); i++) {
205
                        if(srcLyrs.getLayer(i) instanceof FLayers)
206
                                destLyrs = getLayerList((FLayers)srcLyrs.getLayer(i), destLyrs);
207
                        else 
208
                                destLyrs.add(srcLyrs.getLayer(i));
209
                }
210
                return destLyrs;
211
        }
212

    
213
        public void actionPerformed(ActionEvent e) {
214
                if (e.getSource() == getComboBoxConfigurableLookUp()) {
215
//                        selectLayerInTOC(lastLayers, (String) getComboBoxConfigurableLookUp().getSelectedItem());
216
                }
217
        }
218

    
219
        public void actionComboButtonClicked(ComboButtonEvent e) {
220
                if (e.getSource() == buttonGroup) {
221
                        reloadSubMenu();
222
                        return;
223
                }
224
                if (e.getSource() == buttonMenu) {
225
                        ExtensionPointManager extensionPoints =ToolsLocator.getExtensionPointManager();
226
                        ExtensionPoint point=extensionPoints.add("GenericToolBarMenu");
227
                        Iterator<?> iterator = point.iterator();
228
                        while (iterator.hasNext()) {
229
                                ExtensionPoint.Extension entry = (ExtensionPoint.Extension) iterator
230
                                                .next();
231
                                if (!entry.getName().equals(
232
                                                ((JButton) e.getSource()).getActionCommand()))
233
                                        continue;
234
                                Object object;
235
                                try {
236
                                        object = entry.create();
237
                                } catch (Exception e1) {
238
                                        // TODO Auto-generated catch block
239
                                        throw new RuntimeException(e1);
240
                                }
241
                                if (object instanceof IGenericToolBarMenuItem) {
242
                                        IGenericToolBarMenuItem item = (IGenericToolBarMenuItem) object;
243

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

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

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

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

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

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

    
317
        public void addActionListener(ActionListener listener) {
318
                
319
        }
320

    
321
        public Object getValue() {
322
                return null;
323
        }
324

    
325
        public void removeActionListener(ActionListener listener) {
326
                
327
        }
328

    
329
        public Object setValue(Object value) {
330
                return null;
331
        }
332

    
333
}