47 |
47 |
import javax.swing.JDialog;
|
48 |
48 |
import javax.swing.JPanel;
|
49 |
49 |
|
|
50 |
import org.slf4j.Logger;
|
|
51 |
import org.slf4j.LoggerFactory;
|
|
52 |
|
50 |
53 |
import org.gvsig.andami.PluginServices;
|
51 |
54 |
import org.gvsig.andami.messages.NotificationManager;
|
52 |
55 |
import org.gvsig.andami.ui.mdiManager.IWindow;
|
... | ... | |
82 |
85 |
/**
|
83 |
86 |
* Object used to log messages for this listener.
|
84 |
87 |
*/
|
85 |
|
// private static final Logger logger = LoggerFactory.getLogger(InfoListener.class);
|
|
88 |
//
|
|
89 |
private static final Logger logger = LoggerFactory.getLogger(InfoListener.class);
|
86 |
90 |
|
87 |
91 |
private static final String EP_INFOTOOL_NAME = "org.gvsig.app.infotool";
|
88 |
92 |
private static final String EP_INFOTOOL_RENDERER = "renderer";
|
... | ... | |
146 |
150 |
numLayersInfoable++;
|
147 |
151 |
}
|
148 |
152 |
}
|
|
153 |
|
|
154 |
if (numLayersInfoable == 0) {
|
|
155 |
return;
|
|
156 |
}
|
149 |
157 |
|
150 |
158 |
ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
|
151 |
159 |
InfoByPointRenderer renderer = (InfoByPointRenderer)extensionPoints.get(EP_INFOTOOL_NAME).create(EP_INFOTOOL_RENDERER);
|
152 |
|
IWindow window = renderer.getPanel(layer2info);
|
153 |
160 |
|
154 |
|
if (numLayersInfoable > 0) {
|
155 |
|
if (PluginServices.getMainFrame() == null) { // ?????????????????????
|
156 |
|
JPanel panel = (JPanel) window;
|
157 |
|
JDialog dialog = new JDialog();
|
158 |
|
panel.setPreferredSize(panel.getSize());
|
159 |
|
dialog.getContentPane().add(panel);
|
160 |
|
dialog.setModal(false);
|
161 |
|
dialog.pack();
|
162 |
|
dialog.setVisible(true);
|
|
161 |
IWindow window = renderer.getPanel();
|
|
162 |
boolean first_time = (window == null);
|
|
163 |
renderer.resetPanel(layer2info);
|
|
164 |
|
|
165 |
window = renderer.getPanel();
|
|
166 |
if (window == null) {
|
|
167 |
logger.info("Error. Unable to create info panel.");
|
|
168 |
return;
|
|
169 |
}
|
|
170 |
|
|
171 |
|
|
172 |
if (first_time) {
|
|
173 |
PluginServices.getMDIManager().addCentredWindow(window);
|
|
174 |
} else {
|
|
175 |
// perhaps bring to front
|
|
176 |
}
|
|
177 |
|
163 |
178 |
|
164 |
|
} else {
|
165 |
|
application.getUIManager().addWindow(window);
|
166 |
|
}
|
167 |
|
|
168 |
|
}
|
169 |
179 |
} catch (Exception e) {
|
170 |
180 |
NotificationManager.addError("Info by Point", e);
|
171 |
181 |
e.printStackTrace();
|
... | ... | |
185 |
195 |
}
|
186 |
196 |
|
187 |
197 |
public interface InfoByPointRenderer {
|
188 |
|
public IWindow getPanel( Map<String, DynObjectSet> layersInfo);
|
|
198 |
|
|
199 |
public FInfoDialog getPanel();
|
|
200 |
public void resetPanel(Map<String, DynObjectSet> layersInfo);
|
|
201 |
|
189 |
202 |
}
|
190 |
203 |
|
191 |
204 |
public static class DefaultInfoByPointRenderer implements InfoByPointRenderer, ExtensionSingleton {
|
192 |
|
public IWindow getPanel(Map<String, DynObjectSet> layersInfo) {
|
|
205 |
|
|
206 |
private FInfoDialog dlgInfo = null;
|
|
207 |
|
|
208 |
public FInfoDialog getPanel() {
|
|
209 |
return dlgInfo;
|
|
210 |
}
|
|
211 |
|
|
212 |
|
|
213 |
public void resetPanel(Map<String, DynObjectSet> layersInfo) {
|
193 |
214 |
// TODO: set the writable parameter to true to activate
|
194 |
215 |
// edition of the info by point information.
|
195 |
216 |
LayersDynObjectSetComponent infoComponent =
|
196 |
217 |
MapControlLocator.getMapControlManager()
|
197 |
218 |
.createLayersDynObjectSetComponent(layersInfo, false);
|
198 |
|
FInfoDialog dlgInfo = new FInfoDialog(infoComponent);
|
199 |
|
return dlgInfo;
|
|
219 |
|
|
220 |
if (dlgInfo == null) {
|
|
221 |
dlgInfo = new FInfoDialog(infoComponent);
|
|
222 |
} else {
|
|
223 |
dlgInfo.setInfo(infoComponent);
|
|
224 |
}
|
200 |
225 |
}
|
201 |
226 |
|
202 |
227 |
}
|