Ignore:
Timestamp:
2018-05-12T14:19:28+02:00 (6 years ago)
Author:
wiktorn
Message:

GUI for imagery definitions refactor

Extend preferences panel by:

  • allowing setting default layers for WMS / WMTS
  • allowing setting minimum expires (expert mode)
  • allowing setting custom headers (expert mode)

See: #15981, #7953, #16224, #15940, #16249

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/preferences/imagery/WMSLayerTree.java

    r8840 r13734  
    22package org.openstreetmap.josm.gui.preferences.imagery;
    33
    4 import static org.openstreetmap.josm.tools.I18n.tr;
    5 
    64import java.awt.Component;
     5import java.util.Collection;
    76import java.util.LinkedList;
    87import java.util.List;
    98
    10 import javax.swing.JOptionPane;
    119import javax.swing.JTree;
    1210import javax.swing.event.TreeSelectionEvent;
     
    1816import javax.swing.tree.TreePath;
    1917
     18import org.openstreetmap.josm.data.imagery.LayerDetails;
    2019import org.openstreetmap.josm.io.imagery.WMSImagery;
    2120
     
    2726    private final DefaultTreeModel treeData = new DefaultTreeModel(treeRootNode);
    2827    private final JTree layerTree = new JTree(treeData);
    29     private final List<WMSImagery.LayerDetails> selectedLayers = new LinkedList<>();
    30     private boolean previouslyShownUnsupportedCrsError;
     28    private final List<LayerDetails> selectedLayers = new LinkedList<>();
    3129
    3230    /**
     
    5048     * @return the list of selected layers
    5149     */
    52     public List<WMSImagery.LayerDetails> getSelectedLayers() {
     50    public List<LayerDetails> getSelectedLayers() {
    5351        return selectedLayers;
    5452    }
     
    6260    }
    6361
    64     void addLayersToTreeData(MutableTreeNode parent, List<WMSImagery.LayerDetails> layers) {
    65         for (WMSImagery.LayerDetails layerDetails : layers) {
     62    void addLayersToTreeData(MutableTreeNode parent, Collection<LayerDetails> layers) {
     63        for (LayerDetails layerDetails : layers.stream()
     64                .sorted((l1, l2) -> -1 * l1.toString().compareTo(l2.toString()))
     65                .toArray(LayerDetails[]::new)
     66                ) {
    6667            DefaultMutableTreeNode treeNode = new DefaultMutableTreeNode(layerDetails);
    67             addLayersToTreeData(treeNode, layerDetails.children);
     68            addLayersToTreeData(treeNode, layerDetails.getChildren());
    6869            treeData.insertNodeInto(treeNode, parent, 0);
    6970        }
     
    7172
    7273    /**
    73      * Updates the whole tree with the given WMS imagery info.
     74     * Updates the whole tree with the given WMS imagery info. All previous content is removed
    7475     * @param wms The imagery info for a given WMS server
    7576     */
    7677    public void updateTree(WMSImagery wms) {
    77         treeRootNode.setUserObject(wms.getServiceUrl().getHost());
     78        // treeRootNode = new DefaultMutableTreeNode();
     79        while (treeRootNode.getChildCount() > 0) {
     80            treeRootNode.remove(0);
     81        }
     82        treeRootNode.setUserObject(wms.buildRootUrl());
    7883        updateTreeList(wms.getLayers());
    7984    }
     
    8388     * @param layers The list of layers to add to the root node
    8489     */
    85     public void updateTreeList(List<WMSImagery.LayerDetails> layers) {
     90    public void updateTreeList(Collection<LayerDetails> layers) {
    8691        addLayersToTreeData(getTreeRootNode(), layers);
    8792        getLayerTree().expandRow(0);
     
    98103            DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) value;
    99104            Object userObject = treeNode.getUserObject();
    100             if (userObject instanceof WMSImagery.LayerDetails) {
    101                 WMSImagery.LayerDetails layer = (WMSImagery.LayerDetails) userObject;
    102                 setEnabled(layer.isSupported());
     105            if (userObject instanceof LayerDetails) {
     106                LayerDetails ld = (LayerDetails) userObject;
     107                setEnabled(ld.isSelectable());
    103108            }
    104109            return this;
     
    118123            for (TreePath i : selectionRows) {
    119124                Object userObject = ((DefaultMutableTreeNode) i.getLastPathComponent()).getUserObject();
    120                 if (userObject instanceof WMSImagery.LayerDetails) {
    121                     WMSImagery.LayerDetails detail = (WMSImagery.LayerDetails) userObject;
    122                     if (!detail.isSupported()) {
    123                         layerTree.removeSelectionPath(i);
    124                         if (!previouslyShownUnsupportedCrsError) {
    125                             JOptionPane.showMessageDialog(null, tr("That layer does not support any of JOSM''s projections,\n" +
    126                                     "so you can not use it. This message will not show again."),
    127                                     tr("WMS Error"), JOptionPane.ERROR_MESSAGE);
    128                             previouslyShownUnsupportedCrsError = true;
    129                         }
    130                     } else if (detail.ident != null) {
     125                if (userObject instanceof LayerDetails) {
     126                    LayerDetails detail = (LayerDetails) userObject;
     127                    if (detail.isSelectable()) {
    131128                        selectedLayers.add(detail);
    132129                    }
Note: See TracChangeset for help on using the changeset viewer.