Statistics
| Revision:

gvsig-raster / org.gvsig.raster / branches / org.gvsig.raster.2.4 / org.gvsig.raster / org.gvsig.fmap.mapcontext.raster.swing / org.gvsig.fmap.mapcontext.raster.swing.impl / src / main / java / org / gvsig / fmap / mapcontext / raster / swing / impl / previewer / DefaultOneLayerPreviewer.java @ 6900

History | View | Annotate | Download (4.67 KB)

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

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

    
6
import javax.swing.JComponent;
7

    
8
import org.cresques.cts.IProjection;
9
import org.slf4j.Logger;
10
import org.slf4j.LoggerFactory;
11

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

    
35

    
36
/**
37
 * @author fdiaz
38
 *
39
 */
40
public class DefaultOneLayerPreviewer implements OneLayerPreviewer, LegendListener {
41

    
42
    private static final Logger LOG = LoggerFactory.getLogger(DefaultOneLayerPreviewer.class);
43

    
44

    
45
    private MapControl mapControl;
46

    
47

    
48
    private FLayer layer;
49

    
50

    
51
    private boolean initialized;
52

    
53
    public DefaultOneLayerPreviewer() {
54
        try {
55
            MapContext mapContext = MapContextLocator.getMapContextManager().createMapContext();
56
            this.mapControl = MapControlLocator.getMapControlManager().createJMapControlPanel(mapContext);
57
        } catch (MapControlCreationException | LocatorException e) {
58
            LOG.warn("Can't create mapControl to preview.", e);
59
        }
60
        this.mapControl.setPreferredSize(new Dimension(300, 200));
61
        initialized = false;
62

    
63
    }
64

    
65
    @Override
66
    public JComponent asJComponent() {
67
        return mapControl;
68
    }
69

    
70
    @Override
71
    public void setProjection(IProjection projection) {
72
        MapContext mapContext = mapControl.getMapContext();
73
        mapContext.setProjection(projection);
74

    
75
    }
76

    
77
    @Override
78
    public void setLayer(FLayer layer) {
79
        MapContext mapContext = mapControl.getMapContext();
80
        if (mapContext.getProjection() == null) {
81
            setProjection(layer.getProjection());
82
        }
83
        FLayers layers = mapContext.getLayers();
84
        while (layers.size() > 0) {
85
            ((FLyrDefault)layers.get(0)).removeLegendListener(this);
86
            layers.remove(0);
87
        }
88
        layers.add(layer);
89
        this.layer = layer;
90
        ((FLyrDefault)this.layer).addLegendListener(this);
91
        init();
92
    }
93

    
94
    private void init(){
95

    
96
        try {
97
            mapControl.getViewPort().setEnvelope(layer.getFullEnvelope());
98
        } catch (ReadException e) {
99
            LOG.warn("Can't get the full envelope of the layer.", e);
100
        }
101

    
102
        if (!initialized) {
103
            // pan
104
            PanListener panListener = new PanListenerImpl(mapControl);
105
            mapControl.addBehavior("pan", new MoveBehavior(panListener, Behavior.BUTTON_LEFT));
106

    
107
            // Zoom out (pinchas y el mapa se centra y te muestra m?s).
108
            // No es dibujando un rect?ngulo, es solo pinchando.
109
            ZoomOutListenerImpl zoomOutListener = new ZoomOutListenerImpl(mapControl);
110
            mapControl.addBehavior("zoomOut", new PointBehavior(zoomOutListener));
111

    
112
         // Zoom por rect?ngulo
113
            ZoomInListenerImpl zoomInListener = new ZoomInListenerImpl(mapControl);
114
            mapControl.addBehavior("zoomIn", new Behavior[]{
115
                new RectangleBehavior(zoomInListener),
116
                new PointBehavior(zoomOutListener, Behavior.BUTTON_RIGHT)});
117

    
118
            mapControl.setTool("zoomIn");
119

    
120
            mapControl.addCombinedBehavior(new MouseWheelBehavior());
121
            mapControl.addCombinedBehavior(new MoveBehavior(panListener, Behavior.BUTTON_MIDDLE));
122
        }
123
        this.initialized = true;
124
    }
125

    
126
    @Override
127
    public void legendChanged(LegendChangedEvent e) {
128
//        mapControl.repaint();
129

    
130
        MapContext mapContext = mapControl.getMapContext();
131
      mapContext.invalidate();
132
      mapControl.paintImmediately(new Rectangle(mapControl.getSize()));
133
    }
134
}