Revision 35485 branches/v2_0_0_prep/applications/appgvSIG/src/org/gvsig/app/project/documents/view/toolListeners/InfoListener.java

View differences:

InfoListener.java
41 41
package org.gvsig.app.project.documents.view.toolListeners;
42 42

  
43 43
import java.awt.Image;
44
import java.awt.Point;
45 44
import java.util.HashMap;
46 45
import java.util.Map;
47 46

  
48 47
import javax.swing.JDialog;
48
import javax.swing.JPanel;
49 49

  
50 50
import org.gvsig.andami.PluginServices;
51 51
import org.gvsig.andami.messages.NotificationManager;
52
import org.gvsig.andami.ui.mdiManager.IWindow;
53
import org.gvsig.app.ApplicationLocator;
54
import org.gvsig.app.ApplicationManager;
52 55
import org.gvsig.app.project.documents.view.info.gui.FInfoDialog;
56
import org.gvsig.fmap.geom.primitive.Point;
53 57
import org.gvsig.fmap.mapcontext.layers.FLayer;
54 58
import org.gvsig.fmap.mapcontext.layers.operations.InfoByPoint;
55 59
import org.gvsig.fmap.mapcontrol.MapControl;
......
58 62
import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
59 63
import org.gvsig.fmap.mapcontrol.tools.Events.PointEvent;
60 64
import org.gvsig.fmap.mapcontrol.tools.Listeners.PointListener;
65
import org.gvsig.tools.ToolsLocator;
61 66
import org.gvsig.tools.dynobject.DynObjectSet;
67
import org.gvsig.tools.extensionpoint.ExtensionPoint;
68
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
69
import org.gvsig.tools.extensionpoint.ExtensionSingleton;
62 70

  
63 71
/**
64 72
 * Listener that looks for information at the point selected by one
......
76 84
     */
77 85
//    private static final Logger logger = LoggerFactory.getLogger(InfoListener.class);
78 86

  
87
    private static final String EP_INFOTOOL_NAME = "org.gvsig.app.infotool"; 
88
    private static final String EP_INFOTOOL_RENDERER = "renderer"; 
89

  
90
    public static void initializeExtensionPoint() {
91
        ExtensionPointManager manager = ToolsLocator.getExtensionPointManager();
92
        ExtensionPoint point = manager.add(EP_INFOTOOL_NAME, "Register of data relative to infotool");
93
        point.append(
94
            EP_INFOTOOL_RENDERER, 
95
            "Renderer used to show in a panel the info by point tool.", 
96
            new DefaultInfoByPointRenderer()
97
        );
98
    }
99
    
79 100
    /**
80 101
     * The image to display when the cursor is active.
81 102
     */
......
107 128

  
108 129
    public void point(PointEvent event) throws BehaviorException {
109 130
        try {
110

  
111
            Point imagePoint =
112
                new Point((int) event.getPoint().getX(), (int) event.getPoint()
113
                    .getY());
114

  
131
            ApplicationManager application = ApplicationLocator.getManager();
115 132
            int numLayersInfoable = 0;
116
            double tol = mapCtrl.getViewPort().toMapDistance(TOL);
133
            Point point = event.getMapPoint();
134
            double tolerance = mapCtrl.getViewPort().toMapDistance(TOL);
117 135

  
118 136
            FLayer[] sel = mapCtrl.getMapContext().getLayers().getActives();
119 137
            Map<String, DynObjectSet> layer2info =
......
123 141
                FLayer laCapa = sel[i];
124 142
                if (laCapa instanceof InfoByPoint) {
125 143
                    InfoByPoint layer = (InfoByPoint) laCapa;
126
                    DynObjectSet info =
127
                        layer.getInfo(imagePoint, tol, null, false);
144
                    DynObjectSet info = layer.getInfo(point, tolerance);
128 145
                    layer2info.put(laCapa.getName(), info);
129 146
                    numLayersInfoable++;
130 147
                }
131 148
            }
132 149

  
133
            // TODO: set the writable parameter to true to activate
134
            // edition of the info by point information.
135
            LayersDynObjectSetComponent infoComponent =
136
                MapControlLocator.getMapControlManager()
137
                    .createLayersDynObjectSetComponent(layer2info, false);
138
            FInfoDialog dlgInfo = new FInfoDialog(infoComponent);
139

  
150
            ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
151
            InfoByPointRenderer renderer = (InfoByPointRenderer)extensionPoints.get(EP_INFOTOOL_NAME).create(EP_INFOTOOL_RENDERER);
152
            IWindow window = renderer.getPanel(layer2info); 
153
            
140 154
            if (numLayersInfoable > 0) {
141
                if (PluginServices.getMainFrame() == null) {
155
                if (PluginServices.getMainFrame() == null) {  // ?????????????????????
156
                    JPanel panel = (JPanel) window;
142 157
                    JDialog dialog = new JDialog();
143
                    dlgInfo.setPreferredSize(dlgInfo.getSize());
144
                    dialog.getContentPane().add(dlgInfo);
158
                    panel.setPreferredSize(panel.getSize());
159
                    dialog.getContentPane().add(panel);
145 160
                    dialog.setModal(false);
146 161
                    dialog.pack();
147 162
                    dialog.setVisible(true);
148 163

  
149 164
                } else {
150
                    dlgInfo =
151
                        (FInfoDialog) PluginServices.getMDIManager().addWindow(
152
                            dlgInfo);
165
                    application.getUIManager().addWindow(window);
153 166
                }
154 167

  
155 168
            }
......
170 183
    public void pointDoubleClick(PointEvent event) throws BehaviorException {
171 184
        // Nothing to do
172 185
    }
186
    
187
    public interface InfoByPointRenderer {
188
       public IWindow getPanel( Map<String, DynObjectSet> layersInfo);
189
    }
190
    
191
    public static class DefaultInfoByPointRenderer implements InfoByPointRenderer, ExtensionSingleton {
192
        public IWindow getPanel(Map<String, DynObjectSet> layersInfo) {
193
            // TODO: set the writable parameter to true to activate
194
            // edition of the info by point information.
195
            LayersDynObjectSetComponent infoComponent =
196
                MapControlLocator.getMapControlManager()
197
                    .createLayersDynObjectSetComponent(layersInfo, false);
198
            FInfoDialog dlgInfo = new FInfoDialog(infoComponent);
199
            return dlgInfo;
200
        }
201
       
202
    }
203
    
204
    
173 205
}

Also available in: Unified diff