source: josm/trunk/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java@ 6149

Last change on this file since 6149 was 6069, checked in by stoecker, 11 years ago

see #8853 remove tabs, trailing spaces, windows line ends, strange characters

  • Property svn:eol-style set to native
File size: 5.9 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.actions;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.Dimension;
7import java.awt.GridBagLayout;
8import java.awt.event.ActionEvent;
9import java.io.IOException;
10import java.net.MalformedURLException;
11import javax.swing.Action;
12import javax.swing.ImageIcon;
13import javax.swing.JComboBox;
14import javax.swing.JOptionPane;
15import javax.swing.JPanel;
16import javax.swing.JScrollPane;
17import org.openstreetmap.josm.Main;
18import org.openstreetmap.josm.data.imagery.ImageryInfo;
19import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
20import org.openstreetmap.josm.gui.ExtendedDialog;
21import org.openstreetmap.josm.gui.actionsupport.AlignImageryPanel;
22import org.openstreetmap.josm.gui.layer.ImageryLayer;
23import org.openstreetmap.josm.io.imagery.WMSImagery;
24import org.openstreetmap.josm.gui.preferences.imagery.WMSLayerTree;
25import org.openstreetmap.josm.tools.GBC;
26import org.openstreetmap.josm.tools.ImageProvider;
27
28public class AddImageryLayerAction extends JosmAction implements AdaptableAction {
29
30 private static final int MAX_ICON_SIZE = 24;
31 private final ImageryInfo info;
32
33 public AddImageryLayerAction(ImageryInfo info) {
34 super(info.getMenuName(), /* ICON */"imagery_menu", tr("Add imagery layer {0}",info.getName()), null, false, false);
35 putValue("toolbar", "imagery_" + info.getToolbarName());
36 this.info = info;
37 installAdapters();
38
39 // change toolbar icon from if specified
40 try {
41 if (info.getIcon() != null) {
42 ImageIcon i = new ImageProvider(info.getIcon()).setOptional(true).
43 setMaxHeight(MAX_ICON_SIZE).setMaxWidth(MAX_ICON_SIZE).get();
44 if (i != null) {
45 putValue(Action.SMALL_ICON, i);
46 }
47 }
48 } catch (Exception ex) {
49 throw new RuntimeException(ex.getMessage(), ex);
50 }
51 }
52
53 @Override
54 public void actionPerformed(ActionEvent e) {
55 if (!isEnabled()) return;
56 try {
57 final ImageryInfo infoToAdd = ImageryType.WMS_ENDPOINT.equals(info.getImageryType())
58 ? getWMSLayerInfo() : info;
59 if (infoToAdd != null) {
60 Main.main.addLayer(ImageryLayer.create(infoToAdd));
61 AlignImageryPanel.addNagPanelIfNeeded();
62 }
63 } catch (IllegalArgumentException ex) {
64 if (ex.getMessage() == null || ex.getMessage().isEmpty()) {
65 throw ex;
66 } else {
67 JOptionPane.showMessageDialog(Main.parent,
68 ex.getMessage(), tr("Error"),
69 JOptionPane.ERROR_MESSAGE);
70 }
71 }
72 }
73
74 protected ImageryInfo getWMSLayerInfo() {
75 try {
76 assert (ImageryType.WMS_ENDPOINT.equals(info.getImageryType()));
77 final WMSImagery wms = new WMSImagery();
78 wms.attemptGetCapabilities(info.getUrl());
79
80 System.out.println(wms.getLayers());
81 final WMSLayerTree tree = new WMSLayerTree();
82 tree.updateTree(wms);
83 final JComboBox formats = new JComboBox(wms.getFormats().toArray());
84 formats.setToolTipText(tr("Select image format for WMS layer"));
85
86 if (1 != new ExtendedDialog(Main.parent, tr("Select WMS layers"), new String[]{tr("Add layers"), tr("Cancel")}) {{
87 final JScrollPane scrollPane = new JScrollPane(tree.getLayerTree());
88 scrollPane.setPreferredSize(new Dimension(400, 400));
89 final JPanel panel = new JPanel(new GridBagLayout());
90 panel.add(scrollPane, GBC.eol().fill());
91 panel.add(formats, GBC.eol().fill(GBC.HORIZONTAL));
92 setContent(panel);
93 }}.showDialog().getValue()) {
94 return null;
95 }
96
97 final String url = wms.buildGetMapUrl(
98 tree.getSelectedLayers(), (String) formats.getSelectedItem());
99 return new ImageryInfo(info.getName(), url, "wms", info.getEulaAcceptanceRequired(), info.getCookies());
100 } // exception handling from AddWMSLayerPanel.java
101 catch (MalformedURLException ex) {
102 JOptionPane.showMessageDialog(Main.parent, tr("Invalid service URL."),
103 tr("WMS Error"), JOptionPane.ERROR_MESSAGE);
104 } catch (IOException ex) {
105 JOptionPane.showMessageDialog(Main.parent, tr("Could not retrieve WMS layer list."),
106 tr("WMS Error"), JOptionPane.ERROR_MESSAGE);
107 } catch (WMSImagery.WMSGetCapabilitiesException ex) {
108 JOptionPane.showMessageDialog(Main.parent, tr("Could not parse WMS layer list."),
109 tr("WMS Error"), JOptionPane.ERROR_MESSAGE);
110 System.err.println("Could not parse WMS layer list. Incoming data:");
111 System.err.println(ex.getIncomingData());
112 }
113 return null;
114 }
115
116 protected boolean isLayerAlreadyPresent() {
117 if (Main.isDisplayingMapView()) {
118 for (ImageryLayer layer : Main.map.mapView.getLayersOfType(ImageryLayer.class)) {
119 if (info.equals(layer.getInfo())) {
120 return true;
121 }
122 }
123 }
124 return false;
125 }
126
127 @Override
128 protected void updateEnabledState() {
129 // never enable blacklisted entries. Do not add same imagery layer twice (fix #2519)
130 if (info.isBlacklisted() /*|| isLayerAlreadyPresent()*/) { // FIXME check disabled to allow several instances with different settings (see #7981)
131 setEnabled(false);
132 } else if (info.getImageryType() == ImageryType.TMS || info.getImageryType() == ImageryType.BING || info.getImageryType() == ImageryType.SCANEX) {
133 setEnabled(true);
134 } else if (Main.isDisplayingMapView() && !Main.map.mapView.getAllLayers().isEmpty()) {
135 setEnabled(true);
136 } else {
137 setEnabled(false);
138 }
139 }
140}
Note: See TracBrowser for help on using the repository browser.