Statistics
| Revision:

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

History | View | Annotate | Download (4.08 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.layers.FLyrRasterSE;
27

    
28
import com.hardcode.gdbms.driver.exceptions.ReadDriverException;
29
import com.iver.andami.PluginServices;
30
import com.iver.cit.gvsig.exceptions.expansionfile.ExpansionFileReadException;
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.layers.FLyrRaster;
36
import com.iver.cit.gvsig.fmap.tools.SelectImageListenerImpl;
37
import com.iver.cit.gvsig.fmap.tools.Events.PointEvent;
38
import com.iver.cit.gvsig.project.documents.view.gui.View;
39

    
40

    
41
/**
42
* Extensi?n de la clase SelectImageListenerImple de FMap. Esta clase
43
* permite capturar el evento de la selecci?n de un punto sobre la vista
44
* . Controlara que capa de la pila que est? visible cae dentro del punto
45
* seleccionado poniendo esta capa como activa. En caso de que haya varias
46
* capas visibles sobre ese punto, pondr? como activa la capa superior.
47
*
48
* @author Nacho Brodin (nachobrodin@gmail.com)
49
*/
50
public class SelectImageListener extends SelectImageListenerImpl {
51

    
52
        FLyrRaster                         layer = null;
53
        Rectangle2D                 extentLayer = null;
54
        /**
55
         * Contructor
56
         * @param mapCtrl
57
         */
58
        public SelectImageListener(MapControl mapCtrl) {
59
                super(mapCtrl);
60
        }
61

    
62

    
63
        /* (non-Javadoc)
64
         * @see com.iver.cit.gvsig.fmap.tools.Listeners.PointListener#point(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
65
         */
66
        public void point(PointEvent event) {
67
                super.point(event);
68

    
69
                Point2D pointSelect = event.getPoint();
70

    
71
                if (PluginServices.getMainFrame() != null)
72
                                PluginServices.getMainFrame().enableControls();
73

    
74
                ViewPort vp = mapCtrl.getMapContext().getViewPort();
75

    
76
                wcPoint = vp.toMapPoint((int)pointSelect.getX(), (int)pointSelect.getY());
77

    
78
                FLayers layers = mapCtrl.getMapContext().getLayers();
79
                for(int i = 0; i < layers.getLayersCount(); i++)
80
                        layers.getLayer(i).setActive(false);
81

    
82
                for(int i = layers.getLayersCount() - 1; i >= 0; i--) {
83
                        if (select(layers.getLayer(i), i))
84
                                break;
85
                }
86
        }
87

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