Statistics
| Revision:

root / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / selectrasterlayer / SelectImageListener.java @ 20947

History | View | Annotate | Download (3.96 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 */
19
package org.gvsig.rastertools.selectrasterlayer;
20

    
21
import java.awt.geom.Point2D;
22
import java.awt.geom.Rectangle2D;
23

    
24
import javax.swing.JScrollBar;
25

    
26
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
27

    
28
import com.hardcode.gdbms.driver.exceptions.ReadDriverException;
29
import com.iver.andami.PluginServices;
30
import com.iver.andami.messages.NotificationManager;
31
import com.iver.cit.gvsig.fmap.MapControl;
32
import com.iver.cit.gvsig.fmap.ViewPort;
33
import com.iver.cit.gvsig.fmap.layers.FLayer;
34
import com.iver.cit.gvsig.fmap.layers.FLayers;
35
import com.iver.cit.gvsig.fmap.tools.SelectImageListenerImpl;
36
import com.iver.cit.gvsig.fmap.tools.Events.PointEvent;
37
import com.iver.cit.gvsig.project.documents.view.gui.View;
38
/**
39
* Extensi?n de la clase SelectImageListenerImple de FMap. Esta clase
40
* permite capturar el evento de la selecci?n de un punto sobre la vista
41
* . Controlara que capa de la pila que est? visible cae dentro del punto
42
* seleccionado poniendo esta capa como activa. En caso de que haya varias
43
* capas visibles sobre ese punto, pondr? como activa la capa superior.
44
*
45
* @author Nacho Brodin (nachobrodin@gmail.com)
46
*/
47
public class SelectImageListener extends SelectImageListenerImpl {
48

    
49
        Rectangle2D                 extentLayer = null;
50
        /**
51
         * Contructor
52
         * @param mapCtrl
53
         */
54
        public SelectImageListener(MapControl mapCtrl) {
55
                super(mapCtrl);
56
        }
57

    
58

    
59
        /* (non-Javadoc)
60
         * @see com.iver.cit.gvsig.fmap.tools.Listeners.PointListener#point(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
61
         */
62
        public void point(PointEvent event) {
63
                super.point(event);
64

    
65
                Point2D pointSelect = event.getPoint();
66

    
67
                if (PluginServices.getMainFrame() != null)
68
                                PluginServices.getMainFrame().enableControls();
69

    
70
                ViewPort vp = mapCtrl.getMapContext().getViewPort();
71

    
72
                wcPoint = vp.toMapPoint((int)pointSelect.getX(), (int)pointSelect.getY());
73

    
74
                FLayers layers = mapCtrl.getMapContext().getLayers();
75
                for(int i = 0; i < layers.getLayersCount(); i++)
76
                        layers.getLayer(i).setActive(false);
77

    
78
                for(int i = layers.getLayersCount() - 1; i >= 0; i--) {
79
                        if (select(layers.getLayer(i), i))
80
                                break;
81
                }
82
        }
83

    
84
        private boolean select(FLayer layer,int pos) {
85
                if (layer instanceof FLayers) {
86
                        FLayers laux=(FLayers)layer;
87
                        for (int j = laux.getLayersCount() - 1; j >= 0; j--) {
88
                                if (select(laux.getLayer(j), j)) {
89
                                        return true;
90
                                }
91
                        }
92
                } else {
93
                        try {
94
                                extentLayer = layer.getFullExtent();
95
                        } catch(ReadDriverException exc) {
96
                                NotificationManager.addError("Error al obtener el extent", exc);
97
                        } 
98
                        
99
                        if(        extentLayer.getMaxX() >= wcPoint.getX() &&
100
                                extentLayer.getMinX() <= wcPoint.getX() &&
101
                                extentLayer.getMaxY() >= wcPoint.getY() &&
102
                                extentLayer.getMinY() <= wcPoint.getY() &&
103
                                layer.isVisible() &&
104
                                layer instanceof FLyrRasterSE) {
105
                                layer.setActive(true);
106
                                View view = (View) PluginServices.getMDIManager().getActiveWindow();
107
                                JScrollBar verticalBar = view.getTOC().getJScrollPane().getVerticalScrollBar();
108
                                double widthPerEntry = verticalBar.getMaximum() / layer.getMapContext().getLayers().getLayersCount();
109
                                verticalBar.setValue((int)widthPerEntry * (layer.getMapContext().getLayers().getLayersCount() - pos - 1));
110
                                return true;
111
                        }
112
                }
113
                return false;
114
        }
115
}