Changeset 23207 in osm for applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSPreferenceEditor.java
- Timestamp:
- 2010-09-16T11:32:35+02:00 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSPreferenceEditor.java
r22936 r23207 2 2 3 3 import static org.openstreetmap.josm.tools.I18n.tr; 4 import static org.openstreetmap.josm.tools.I18n.trc; 4 5 5 6 import java.awt.Dimension; … … 8 9 import java.awt.event.ActionEvent; 9 10 import java.awt.event.ActionListener; 11 import java.awt.event.MouseEvent; 12 import java.util.ArrayList; 10 13 import java.util.HashMap; 11 14 import java.util.Map; … … 23 26 import javax.swing.SpinnerNumberModel; 24 27 import javax.swing.table.DefaultTableModel; 28 import javax.swing.table.TableColumnModel; 25 29 26 30 import org.openstreetmap.josm.Main; … … 30 34 31 35 public class WMSPreferenceEditor implements PreferenceSetting { 32 private DefaultTableModel model;36 private WMSLayerTableModel model; 33 37 private JComboBox browser; 34 private HashMap<Integer, WMSInfo> oldValues = new HashMap<Integer, WMSInfo>();35 38 36 39 JCheckBox overlapCheckBox; … … 40 43 JCheckBox remoteCheckBox; 41 44 boolean allowRemoteControl = true; 45 WMSPlugin plugin = WMSPlugin.instance; 42 46 43 47 public void addGui(final PreferenceTabbedPane gui) { 44 48 JPanel p = gui.createPreferenceTab("wms", tr("WMS Plugin Preferences"), tr("Modify list of WMS servers displayed in the WMS plugin menu")); 45 49 46 model = new DefaultTableModel(new String[]{tr("Menu Name"), tr("WMS URL")}, 0); 47 final JTable list = new JTable(model); 50 model = new WMSLayerTableModel(); 51 final JTable list = new JTable(model) { 52 @Override 53 public String getToolTipText(MouseEvent e) { 54 java.awt.Point p = e.getPoint(); 55 return (String) model.getValueAt(rowAtPoint(p), columnAtPoint(p)); 56 } 57 }; 48 58 JScrollPane scroll = new JScrollPane(list); 49 59 p.add(scroll, GBC.eol().fill(GridBagConstraints.BOTH)); 50 60 scroll.setPreferredSize(new Dimension(200,200)); 51 61 52 for (WMSInfo i : WMSPlugin.wmsList) { 53 oldValues.put(i.prefid, i); 54 model.addRow(new String[]{i.name, i.url}); 55 } 56 57 final DefaultTableModel modeldef = new DefaultTableModel( 58 new String[]{tr("Menu Name (Default)"), tr("WMS URL (Default)")}, 0); 59 final JTable listdef = new JTable(modeldef){ 62 final WMSDefaultLayerTableModel modeldef = new WMSDefaultLayerTableModel(); 63 final JTable listdef = new JTable(modeldef) { 60 64 @Override 61 public boolean isCellEditable(int row,int column){return false;} 65 public String getToolTipText(MouseEvent e) { 66 java.awt.Point p = e.getPoint(); 67 return (String) modeldef.getValueAt(rowAtPoint(p), columnAtPoint(p)); 68 } 62 69 }; 63 70 JScrollPane scrolldef = new JScrollPane(listdef); … … 66 73 scrolldef.setPreferredSize(new Dimension(200,200)); 67 74 68 for (Map.Entry<String,String> i : WMSPlugin.wmsListDefault.entrySet()) { 69 modeldef.addRow(new String[]{i.getKey(), i.getValue()}); 70 } 75 TableColumnModel mod = listdef.getColumnModel(); 76 mod.getColumn(1).setPreferredWidth(800); 77 mod.getColumn(0).setPreferredWidth(200); 78 mod = list.getColumnModel(); 79 mod.getColumn(2).setPreferredWidth(50); 80 mod.getColumn(1).setPreferredWidth(800); 81 mod.getColumn(0).setPreferredWidth(200); 71 82 72 83 JPanel buttonPanel = new JPanel(new FlowLayout()); … … 82 93 JOptionPane.OK_CANCEL_OPTION); 83 94 if (answer == JOptionPane.OK_OPTION) { 84 model.addRow(new String[]{p.getUrlName(), p.getUrl()});95 model.addRow(new WMSInfo(p.getUrlName(), p.getUrl())); 85 96 } 86 97 } … … 118 129 119 130 outer: for(int i = 0; i < lines.length; i++) { 120 String c1 = modeldef.getValueAt(lines[i], 0).toString(); 121 String c2 = modeldef.getValueAt(lines[i], 1).toString(); 131 WMSInfo info = modeldef.getRow(lines[i]); 122 132 123 133 // Check if an entry with exactly the same values already 124 134 // exists 125 135 for(int j = 0; j < model.getRowCount(); j++) { 126 if(c1.equals(model.getValueAt(j, 0).toString()) 127 && c2.equals(model.getValueAt(j, 1).toString())) { 136 if(info.equalsBaseValues(model.getRow(j))) { 128 137 // Select the already existing row so the user has 129 138 // some feedback in case an entry exists … … 134 143 } 135 144 136 model.addRow(new String[] {c1, c2});145 model.addRow(new WMSInfo(info)); 137 146 int lastLine = model.getRowCount() - 1; 138 147 list.getSelectionModel().setSelectionInterval(lastLine, lastLine); … … 151 160 "gnome-web-photo --mode=photo --format=png {0} /dev/stdout", 152 161 "gnome-web-photo-fixed {0}", 153 "webkit-image-gtk {0}"}); 162 "webkit-image-gtk {0}"}); 154 163 browser.setEditable(true); 155 164 browser.setSelectedItem(Main.pref.get("wmsplugin.browser", "webkit-image {0}")); … … 160 169 p.add(Box.createHorizontalGlue(), GBC.eol().fill(GridBagConstraints.HORIZONTAL)); 161 170 162 overlapCheckBox = new JCheckBox(tr("Overlap tiles"), WMSPlugin.PROP_OVERLAP.get() );171 overlapCheckBox = new JCheckBox(tr("Overlap tiles"), plugin.PROP_OVERLAP.get() ); 163 172 JLabel labelEast = new JLabel(tr("% of east:")); 164 173 JLabel labelNorth = new JLabel(tr("% of north:")); 165 spinEast = new JSpinner(new SpinnerNumberModel( WMSPlugin.PROP_OVERLAP_EAST.get(), 1, 50, 1));166 spinNorth = new JSpinner(new SpinnerNumberModel( WMSPlugin.PROP_OVERLAP_NORTH.get(), 1, 50, 1));174 spinEast = new JSpinner(new SpinnerNumberModel(plugin.PROP_OVERLAP_EAST.get(), 1, 50, 1)); 175 spinNorth = new JSpinner(new SpinnerNumberModel(plugin.PROP_OVERLAP_NORTH.get(), 1, 50, 1)); 167 176 168 177 JPanel overlapPanel = new JPanel(new FlowLayout()); … … 178 187 p.add(Box.createHorizontalGlue(), GBC.eol().fill(GridBagConstraints.HORIZONTAL)); 179 188 JLabel labelSimConn = new JLabel(tr("Simultaneous connections")); 180 spinSimConn = new JSpinner(new SpinnerNumberModel( WMSPlugin.PROP_SIMULTANEOUS_CONNECTIONS.get(), 1, 30, 1));189 spinSimConn = new JSpinner(new SpinnerNumberModel(plugin.PROP_SIMULTANEOUS_CONNECTIONS.get(), 1, 30, 1)); 181 190 JPanel overlapPanelSimConn = new JPanel(new FlowLayout()); 182 191 overlapPanelSimConn.add(labelSimConn); … … 191 200 192 201 p.add(remotePanel); 193 194 202 } 195 203 196 204 public boolean ok() { 197 boolean change = false; 198 for (int i = 0; i < model.getRowCount(); ++i) { 199 String name = model.getValueAt(i,0).toString(); 200 String url = model.getValueAt(i,1).toString(); 201 202 WMSInfo origValue = oldValues.get(i); 203 if (origValue == null) 204 { 205 new WMSInfo(name, url, i).save(); 206 change = true; 207 } 208 else 209 { 210 if (!origValue.name.equals(name) || !origValue.url.equals(url)) 211 { 212 origValue.name = name; 213 origValue.url = url; 214 origValue.save(); 215 change = true; 216 } 217 oldValues.remove(i); 218 } 219 } 220 221 // using null values instead of empty string really deletes 222 // the preferences entry 223 for (WMSInfo i : oldValues.values()) 224 { 225 i.url = null; 226 i.name = null; 227 i.save(); 228 change = true; 229 } 230 231 if (change) WMSPlugin.refreshMenu(); 232 233 WMSPlugin.PROP_OVERLAP.put(overlapCheckBox.getModel().isSelected()); 234 WMSPlugin.PROP_OVERLAP_EAST.put((Integer) spinEast.getModel().getValue()); 235 WMSPlugin.PROP_OVERLAP_NORTH.put((Integer) spinNorth.getModel().getValue()); 236 WMSPlugin.PROP_SIMULTANEOUS_CONNECTIONS.put((Integer) spinSimConn.getModel().getValue()); 205 plugin.info.save(); 206 plugin.refreshMenu(); 207 208 plugin.PROP_OVERLAP.put(overlapCheckBox.getModel().isSelected()); 209 plugin.PROP_OVERLAP_EAST.put((Integer) spinEast.getModel().getValue()); 210 plugin.PROP_OVERLAP_NORTH.put((Integer) spinNorth.getModel().getValue()); 211 plugin.PROP_SIMULTANEOUS_CONNECTIONS.put((Integer) spinSimConn.getModel().getValue()); 237 212 allowRemoteControl = remoteCheckBox.getModel().isSelected(); 238 213 … … 279 254 return null; 280 255 } 256 257 /** 258 * The table model for the WMS layer 259 * 260 */ 261 class WMSLayerTableModel extends DefaultTableModel { 262 public WMSLayerTableModel() { 263 setColumnIdentifiers(new String[]{tr("Menu Name"), tr("WMS URL"), trc("layer", "Zoom")}); 264 } 265 266 public WMSInfo getRow(int row) { 267 return plugin.info.layers.get(row); 268 } 269 270 public void addRow(WMSInfo i) { 271 plugin.info.add(i); 272 int p = getRowCount()-1; 273 fireTableRowsInserted(p,p); 274 } 275 276 public void removeRow(int i) { 277 plugin.info.remove(getRow(i)); 278 fireTableRowsDeleted(i,i); 279 } 280 281 @Override 282 public int getRowCount() { 283 return plugin.info.layers.size(); 284 } 285 286 @Override 287 public Object getValueAt(int row, int column) { 288 WMSInfo info = plugin.info.layers.get(row); 289 switch(column) { 290 case 0: return info.name; 291 case 1: return info.getFullURL(); 292 case 2: return info.pixelPerDegree == 0.0 ? "" : info.pixelPerDegree; 293 } 294 return null; 295 } 296 297 @Override 298 public boolean isCellEditable(int row, int column) { 299 return (column != 2); 300 } 301 } 302 303 /** 304 * The table model for the WMS layer 305 * 306 */ 307 class WMSDefaultLayerTableModel extends DefaultTableModel { 308 public WMSDefaultLayerTableModel() { 309 setColumnIdentifiers(new String[]{tr("Menu Name (Default)"), tr("WMS URL (Default)")}); 310 } 311 312 public WMSInfo getRow(int row) { 313 return plugin.info.defaultLayers.get(row); 314 } 315 316 @Override 317 public int getRowCount() { 318 return plugin.info.defaultLayers.size(); 319 } 320 321 @Override 322 public Object getValueAt(int row, int column) { 323 WMSInfo info = plugin.info.defaultLayers.get(row); 324 switch(column) { 325 case 0: return info.name; 326 case 1: return info.getFullURL(); 327 } 328 return null; 329 } 330 331 @Override 332 public boolean isCellEditable(int row, int column) { 333 return false; 334 } 335 } 281 336 } 282
Note:
See TracChangeset
for help on using the changeset viewer.