Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.fmap.mapcontext.swing / org.gvsig.fmap.mapcontext.swing.impl / src / main / java / org / gvsig / fmap / mapcontext / raster / swing / impl / previewer / DefaultOneLayerPreviewer.java @ 44831

History | View | Annotate | Download (5.98 KB)

1
package org.gvsig.fmap.mapcontext.raster.swing.impl.previewer;
2

    
3
import java.awt.BorderLayout;
4
import java.awt.Dimension;
5
import java.awt.Rectangle;
6

    
7
import javax.swing.JComponent;
8
import javax.swing.JPanel;
9

    
10
import org.cresques.cts.IProjection;
11
import org.slf4j.Logger;
12
import org.slf4j.LoggerFactory;
13

    
14
import org.gvsig.fmap.dal.exception.ReadException;
15
import org.gvsig.fmap.mapcontext.MapContext;
16
import org.gvsig.fmap.mapcontext.MapContextLocator;
17
import org.gvsig.fmap.mapcontext.layers.FLayer;
18
import org.gvsig.fmap.mapcontext.layers.FLayers;
19
import org.gvsig.fmap.mapcontext.layers.FLyrDefault;
20
import org.gvsig.fmap.mapcontext.raster.swing.previewer.OneLayerPreviewer;
21
import org.gvsig.fmap.mapcontext.rendering.legend.events.LegendChangedEvent;
22
import org.gvsig.fmap.mapcontext.rendering.legend.events.listeners.LegendListener;
23
import org.gvsig.fmap.mapcontrol.MapControl;
24
import org.gvsig.fmap.mapcontrol.MapControlCreationException;
25
import org.gvsig.fmap.mapcontrol.MapControlLocator;
26
import org.gvsig.fmap.mapcontrol.tools.PanListenerImpl;
27
import org.gvsig.fmap.mapcontrol.tools.ZoomInListenerImpl;
28
import org.gvsig.fmap.mapcontrol.tools.ZoomOutListenerImpl;
29
import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
30
import org.gvsig.fmap.mapcontrol.tools.Behavior.MouseWheelBehavior;
31
import org.gvsig.fmap.mapcontrol.tools.Behavior.MoveBehavior;
32
import org.gvsig.fmap.mapcontrol.tools.Behavior.PointBehavior;
33
import org.gvsig.fmap.mapcontrol.tools.Behavior.RectangleBehavior;
34
import org.gvsig.fmap.mapcontrol.tools.Listeners.PanListener;
35
import org.gvsig.tools.dispose.Disposable;
36
import org.gvsig.tools.dispose.DisposeUtils;
37
import org.gvsig.tools.locator.LocatorException;
38

    
39

    
40
/**
41
 * @author fdiaz
42
 *
43
 */
44
public class DefaultOneLayerPreviewer extends JPanel implements OneLayerPreviewer, Disposable {
45

    
46
    /**
47
     *
48
     */
49
    private static final long serialVersionUID = -2657400357281080433L;
50

    
51
    private static final Logger LOG = LoggerFactory.getLogger(DefaultOneLayerPreviewer.class);
52

    
53
    private MapControl mapControl;
54

    
55
    private FLayer layer;
56

    
57
    private LegendListener legendListener;
58

    
59
    /**
60
     *
61
     */
62
    public DefaultOneLayerPreviewer() {
63

    
64
        this.setPreferredSize(new Dimension(300, 200));
65

    
66
        legendListener = new LegendListener() {
67

    
68
            @Override
69
            public void legendChanged(LegendChangedEvent e) {
70
                doLegendChanged(e);
71

    
72
            }
73
        };
74

    
75
        this.setLayout(new BorderLayout());
76
        this.add(getMapControl(), BorderLayout.CENTER);
77
    }
78

    
79
    @Override
80
    public JComponent asJComponent() {
81
        return this;
82
    }
83

    
84
    @Override
85
    public void setProjection(IProjection projection) {
86
        MapContext mapContext = mapControl.getMapContext();
87
        mapContext.setProjection(projection);
88

    
89
    }
90

    
91
    @Override
92
    public void setLayer(FLayer layer) {
93
        this.layer = layer;
94
        MapControl mapControl = getMapControl();
95
        MapContext mapContext = mapControl.getMapContext();
96
        FLayers layers = mapContext.getLayers();
97

    
98
        while (layers.size() > 0) {
99
            layers.remove(0);
100
        }
101
        if (layer != null) {
102
            DisposeUtils.bind(layer);
103

    
104
            if (mapContext.getProjection() == null) {
105
                setProjection(layer.getProjection());
106
            }
107
            layers.add(layer);
108
            ((FLyrDefault) this.layer).addLegendListener(legendListener);
109
            try {
110
                mapControl.getViewPort().setEnvelope(layer.getFullEnvelope());
111
            } catch (ReadException e) {
112
                LOG.warn("Can't get the full envelope of the layer.", e);
113
            }
114
        }
115
    }
116

    
117

    
118
    /**
119
     *
120
     */
121
    protected MapControl getMapControl() {
122
        if (mapControl == null) {
123
            try {
124
                final MapContext mapContext = MapContextLocator.getMapContextManager().createMapContext();
125
                mapControl = MapControlLocator.getMapControlManager().createJMapControlPanel(mapContext);
126

    
127
                // pan
128
                PanListener panListener = new PanListenerImpl(mapControl);
129
                mapControl.addBehavior("pan", new MoveBehavior(panListener, Behavior.BUTTON_LEFT));
130

    
131
                // Zoom out (pinchas y el mapa se centra y te muestra m?s).
132
                // No es dibujando un rect?ngulo, es solo pinchando.
133
                ZoomOutListenerImpl zoomOutListener = new ZoomOutListenerImpl(mapControl);
134
                mapControl.addBehavior("zoomOut", new PointBehavior(zoomOutListener));
135

    
136
                // Zoom por rect?ngulo
137
                ZoomInListenerImpl zoomInListener = new ZoomInListenerImpl(mapControl);
138
                mapControl.addBehavior("zoomIn", new Behavior[] { new RectangleBehavior(zoomInListener),
139
                    new PointBehavior(zoomOutListener, Behavior.BUTTON_RIGHT) });
140

    
141
                mapControl.setTool("zoomIn");
142

    
143
                mapControl.addCombinedBehavior(new MouseWheelBehavior());
144
                mapControl.addCombinedBehavior(new MoveBehavior(panListener, Behavior.BUTTON_MIDDLE));
145

    
146
            } catch (MapControlCreationException | LocatorException e) {
147
                LOG.warn("Can't create mapControl to preview.", e);
148
            }
149
        }
150
        return mapControl;
151
    }
152

    
153
    /**
154
     * @param e
155
     */
156
    private void doLegendChanged(LegendChangedEvent e) {
157
        MapContext mapContext = mapControl.getMapContext();
158
        mapContext.invalidate();
159
        mapControl.paintImmediately(new Rectangle(mapControl.getSize()));
160
    }
161

    
162
    @Override
163
    public FLayer getLayer() {
164
        return layer;
165
    }
166

    
167
    @Override
168
    public void dispose() {
169
        if(mapControl==null){
170
            return;
171
        }
172
        MapContext mapContext = mapControl.getMapContext();
173
        FLayers layers = mapContext.getLayers();
174
        while (layers.size() > 0) {
175
            ((FLyrDefault)layers.get(0)).removeLegendListener(legendListener);
176
            layers.remove(0);
177
        }
178
        DisposeUtils.dispose(layer);
179
        layer = null;
180
        DisposeUtils.dispose(mapContext);
181
        mapContext = null;
182
        mapControl.dispose();
183
    }
184

    
185
}