Ignore:
Timestamp:
2010-09-16T11:32:35+02:00 (14 years ago)
Author:
stoecker
Message:

rework preferences and layer storage

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSPreferenceEditor.java

    r22936 r23207  
    22
    33import static org.openstreetmap.josm.tools.I18n.tr;
     4import static org.openstreetmap.josm.tools.I18n.trc;
    45
    56import java.awt.Dimension;
     
    89import java.awt.event.ActionEvent;
    910import java.awt.event.ActionListener;
     11import java.awt.event.MouseEvent;
     12import java.util.ArrayList;
    1013import java.util.HashMap;
    1114import java.util.Map;
     
    2326import javax.swing.SpinnerNumberModel;
    2427import javax.swing.table.DefaultTableModel;
     28import javax.swing.table.TableColumnModel;
    2529
    2630import org.openstreetmap.josm.Main;
     
    3034
    3135public class WMSPreferenceEditor implements PreferenceSetting {
    32     private DefaultTableModel model;
     36    private WMSLayerTableModel model;
    3337    private JComboBox browser;
    34     private HashMap<Integer, WMSInfo> oldValues = new HashMap<Integer, WMSInfo>();
    3538
    3639    JCheckBox overlapCheckBox;
     
    4043    JCheckBox remoteCheckBox;
    4144    boolean allowRemoteControl = true;
     45    WMSPlugin plugin = WMSPlugin.instance;
    4246
    4347    public void addGui(final PreferenceTabbedPane gui) {
    4448        JPanel p = gui.createPreferenceTab("wms", tr("WMS Plugin Preferences"), tr("Modify list of WMS servers displayed in the WMS plugin menu"));
    4549
    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        };
    4858        JScrollPane scroll = new JScrollPane(list);
    4959        p.add(scroll, GBC.eol().fill(GridBagConstraints.BOTH));
    5060        scroll.setPreferredSize(new Dimension(200,200));
    5161
    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) {
    6064            @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            }
    6269        };
    6370        JScrollPane scrolldef = new JScrollPane(listdef);
     
    6673        scrolldef.setPreferredSize(new Dimension(200,200));
    6774
    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);
    7182
    7283        JPanel buttonPanel = new JPanel(new FlowLayout());
     
    8293                        JOptionPane.OK_CANCEL_OPTION);
    8394                if (answer == JOptionPane.OK_OPTION) {
    84                     model.addRow(new String[]{p.getUrlName(), p.getUrl()});
     95                    model.addRow(new WMSInfo(p.getUrlName(), p.getUrl()));
    8596                }
    8697            }
     
    118129
    119130                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]);
    122132
    123133                    // Check if an entry with exactly the same values already
    124134                    // exists
    125135                    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))) {
    128137                            // Select the already existing row so the user has
    129138                            // some feedback in case an entry exists
     
    134143                    }
    135144
    136                     model.addRow(new String[] {c1, c2});
     145                    model.addRow(new WMSInfo(info));
    137146                    int lastLine = model.getRowCount() - 1;
    138147                    list.getSelectionModel().setSelectionInterval(lastLine, lastLine);
     
    151160                "gnome-web-photo --mode=photo --format=png {0} /dev/stdout",
    152161                "gnome-web-photo-fixed {0}",
    153         "webkit-image-gtk {0}"});
     162                "webkit-image-gtk {0}"});
    154163        browser.setEditable(true);
    155164        browser.setSelectedItem(Main.pref.get("wmsplugin.browser", "webkit-image {0}"));
     
    160169        p.add(Box.createHorizontalGlue(), GBC.eol().fill(GridBagConstraints.HORIZONTAL));
    161170
    162         overlapCheckBox = new JCheckBox(tr("Overlap tiles"), WMSPlugin.PROP_OVERLAP.get() );
     171        overlapCheckBox = new JCheckBox(tr("Overlap tiles"), plugin.PROP_OVERLAP.get() );
    163172        JLabel labelEast = new JLabel(tr("% of east:"));
    164173        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));
    167176
    168177        JPanel overlapPanel = new JPanel(new FlowLayout());
     
    178187        p.add(Box.createHorizontalGlue(), GBC.eol().fill(GridBagConstraints.HORIZONTAL));
    179188        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));
    181190        JPanel overlapPanelSimConn = new JPanel(new FlowLayout());
    182191        overlapPanelSimConn.add(labelSimConn);
     
    191200
    192201        p.add(remotePanel);
    193 
    194202    }
    195203
    196204    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());
    237212        allowRemoteControl = remoteCheckBox.getModel().isSelected();
    238213
     
    279254        return null;
    280255    }
     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    }
    281336}
    282 
Note: See TracChangeset for help on using the changeset viewer.