Changeset 3733 in josm


Ignore:
Timestamp:
2010-12-20T18:00:55+01:00 (11 years ago)
Author:
Upliner
Message:

Offset bookmarks: don't create submenus when only 1 choice is available.
Also, make possible to add TMS layers from "Getting started" screen.

Location:
trunk/src/org/openstreetmap/josm
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java

    r3720 r3733  
    88import org.openstreetmap.josm.Main;
    99import org.openstreetmap.josm.data.imagery.ImageryInfo;
     10import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
    1011import org.openstreetmap.josm.gui.layer.ImageryLayer;
    1112
     
    1516
    1617    public AddImageryLayerAction(ImageryInfo info) {
    17         super(info.getMenuName(), "imagery_menu", tr("Add imagery layer {0}",info.getName()), null, false);
     18        super(info.getMenuName(), "imagery_menu", tr("Add imagery layer {0}",info.getName()), null, false, false);
    1819        putValue("toolbar", "imagery_" + info.getToolbarName());
    1920        this.info = info;
     21        installAdapters();
    2022    }
    2123
    2224    @Override
    2325    public void actionPerformed(ActionEvent e) {
     26        if (!isEnabled()) return;
    2427        ImageryLayer wmsLayer = ImageryLayer.create(info);
    2528        Main.main.addLayer(wmsLayer);
    2629    }
    27 };
     30
     31    @Override
     32    protected void updateEnabledState() {
     33        setEnabled(info.getImageryType() == ImageryType.TMS
     34                || info.getImageryType() == ImageryType.BING
     35                || (Main.map != null && Main.map.mapView != null
     36                        && !Main.map.mapView.getAllLayers().isEmpty()));
     37    }
     38}
  • trunk/src/org/openstreetmap/josm/actions/Map_Rectifier_WMSmenuAction.java

    r3720 r3733  
    112112    @Override
    113113    public void actionPerformed(ActionEvent e) {
     114        if (!isEnabled()) return;
    114115        JPanel panel = new JPanel(new GridBagLayout());
    115116        panel.add(new JLabel(tr("Supported Rectifier Services:")), GBC.eol());
     
    123124        for(RectifierService s : services) {
    124125            JRadioButton serviceBtn = new JRadioButton(s.name);
    125             if(firstBtn == null)
     126            if(firstBtn == null) {
    126127                firstBtn = serviceBtn;
     128            }
    127129            // Checks clipboard contents against current service if no match has been found yet.
    128130            // If the contents match, they will be inserted into the text field and the corresponding
     
    138140                panel.add(serviceBtn, GBC.std());
    139141                panel.add(new UrlLabel(s.url, tr("Visit Homepage")), GBC.eol().anchor(GridBagConstraints.EAST));
    140             } else
     142            } else {
    141143                panel.add(serviceBtn, GBC.eol().anchor(GridBagConstraints.WEST));
     144            }
    142145        }
    143146
    144147        // Fallback in case no match was found
    145         if(tfWmsUrl.getText().equals("") && firstBtn != null)
     148        if(tfWmsUrl.getText().equals("") && firstBtn != null) {
    146149            firstBtn.setSelected(true);
     150        }
    147151
    148152        panel.add(new JLabel(tr("WMS URL or Image ID:")), GBC.eol());
     
    162166            int answer = diag.getValue();
    163167            // Break loop when the user cancels
    164             if(answer != 1)
     168            if(answer != 1) {
    165169                break;
     170            }
    166171
    167172            String text = tfWmsUrl.getText().trim();
    168173            // Loop all services until we find the selected one
    169174            for(RectifierService s : services) {
    170                 if(!s.isSelected())
     175                if(!s.isSelected()) {
    171176                    continue;
     177                }
    172178
    173179                // We've reached the custom WMS URL service
     
    237243        return result.trim();
    238244    }
     245
     246    @Override
     247    protected void updateEnabledState() {
     248        setEnabled(Main.map != null && Main.map.mapView != null && !Main.map.mapView.getAllLayers().isEmpty());
     249    }
    239250}
  • trunk/src/org/openstreetmap/josm/gui/MainMenu.java

    r3715 r3733  
    77import static org.openstreetmap.josm.tools.I18n.trc;
    88
    9 import java.awt.Component;
    109import java.awt.event.ActionEvent;
    1110import java.awt.event.KeyEvent;
     
    5857import org.openstreetmap.josm.actions.OpenLocationAction;
    5958import org.openstreetmap.josm.actions.OrthogonalizeAction;
     59import org.openstreetmap.josm.actions.OrthogonalizeAction.Undo;
    6060import org.openstreetmap.josm.actions.PasteAction;
    6161import org.openstreetmap.josm.actions.PasteTagsAction;
     
    8282import org.openstreetmap.josm.actions.ZoomInAction;
    8383import org.openstreetmap.josm.actions.ZoomOutAction;
    84 import org.openstreetmap.josm.actions.OrthogonalizeAction.Undo;
    8584import org.openstreetmap.josm.actions.audio.AudioBackAction;
    8685import org.openstreetmap.josm.actions.audio.AudioFasterAction;
     
    9897import org.openstreetmap.josm.gui.layer.WMSLayer;
    9998import org.openstreetmap.josm.gui.tagging.TaggingPresetSearchAction;
     99import org.openstreetmap.josm.tools.ImageProvider;
    100100import org.openstreetmap.josm.tools.Shortcut;
    101101
     
    392392
    393393    public class ImageryMenuUpdater implements MapView.LayerChangeListener {
    394         JMenu offsetSubMenu = new JMenu(trc("layer","Offset"));
     394        JMenuItem disabledOffset = new JMenuItem(trc("layer","Offset"));
     395        JMenuItem offsetSubMenu = disabledOffset;
     396        int offsPos;
    395397
    396398        public ImageryMenuUpdater() {
    397399            MapView.addLayerChangeListener(this);
     400            disabledOffset.setEnabled(false);
    398401        }
    399402
     
    403406            // for each configured WMSInfo, add a menu entry.
    404407            for (final ImageryInfo u : ImageryLayerInfo.instance.getLayers()) {
    405                 imageryMenu.add(new JMenuItem(new AddImageryLayerAction(u)));
     408                imageryMenu.add(new AddImageryLayerAction(u));
    406409            }
    407410            imageryMenu.addSeparator();
     
    409412
    410413            imageryMenu.addSeparator();
     414            offsPos = imageryMenu.getMenuComponentCount();
    411415            imageryMenu.add(offsetSubMenu);
    412416            imageryMenu.addSeparator();
    413             imageryMenu.add(new JMenuItem(new
    414                     JosmAction(tr("Blank Layer"), "blankmenu", tr("Open a blank WMS layer to load data from a file"), null, false) {
     417            imageryMenu.add(new JMenuItem(new JosmAction(
     418                    tr("Blank Layer"), "blankmenu", tr("Open a blank WMS layer to load data from a file"), null, false) {
    415419                @Override
    416420                public void actionPerformed(ActionEvent ev) {
     421                    if (!isEnabled()) return;
    417422                    Main.main.addLayer(new WMSLayer());
    418423                }
     424
     425                @Override
     426                protected void updateEnabledState() {
     427                    setEnabled(Main.map != null && Main.map.mapView != null && !Main.map.mapView.getAllLayers().isEmpty());
     428                }
    419429            }));
    420             refreshEnabled();
    421         }
    422 
    423         public void refreshEnabled() {
    424             imageryMenu.setEnabled(Main.map != null
    425                     && Main.map.mapView !=null
    426             );
     430        }
     431
     432        private JMenuItem getNewOffsetMenu(){
     433            if (Main.map == null || Main.map.mapView == null)
     434                return disabledOffset;
     435            List<ImageryLayer> layers = Main.map.mapView.getLayersOfType(ImageryLayer.class);
     436            if (layers.isEmpty())
     437                return disabledOffset;
     438            if (layers.size() == 1)
     439                return layers.get(0).getOffsetMenuItem();
     440            JMenu newMenu = new JMenu(trc("layer","Offset"));
     441            newMenu.setIcon(ImageProvider.get("mapmode", "adjustimg"));
     442            for (ImageryLayer layer : layers) {
     443                JMenuItem layerMenu = layer.getOffsetMenuItem();
     444                layerMenu.setText(layer.getName());
     445                layerMenu.setIcon(layer.getIcon());
     446                newMenu.add(layerMenu);
     447            }
     448            return newMenu;
    427449        }
    428450
    429451        public void refreshOffsetMenu() {
    430             offsetSubMenu.removeAll();
    431             if (Main.map == null || Main.map.mapView == null) {
    432                 offsetSubMenu.setEnabled(false);
    433                 return;
    434             }
    435             List<ImageryLayer> layers = Main.map.mapView.getLayersOfType(ImageryLayer.class);
    436             if (layers.isEmpty()) {
    437                 offsetSubMenu.setEnabled(false);
    438                 return;
    439             }
    440             offsetSubMenu.setEnabled(true);
    441             if (layers.size() == 1) {
    442                 for (Component c : layers.get(0).getOffsetMenu()) {
    443                     offsetSubMenu.add(c);
    444                 }
    445                 return;
    446             }
    447             for (ImageryLayer layer : layers) {
    448                 JMenu subMenu = new JMenu(layer.getName());
    449                 subMenu.setIcon(layer.getIcon());
    450                 for (Component c : layer.getOffsetMenu()) {
    451                     subMenu.add(c);
    452                 }
    453                 offsetSubMenu.add(subMenu);
    454             }
     452            JMenuItem newItem = getNewOffsetMenu();
     453            imageryMenu.remove(offsetSubMenu);
     454            imageryMenu.add(newItem, offsPos);
     455            offsetSubMenu = newItem;
    455456        }
    456457
     
    464465                refreshOffsetMenu();
    465466            }
    466             refreshEnabled();
    467467        }
    468468
     
    472472                refreshOffsetMenu();
    473473            }
    474             refreshEnabled();
    475474        }
    476475    }
  • trunk/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java

    r3729 r3733  
    77import java.awt.Color;
    88import java.awt.Component;
    9 import java.awt.Container;
    109import java.awt.Font;
    1110import java.awt.Graphics;
     
    1514import java.awt.image.ConvolveOp;
    1615import java.awt.image.Kernel;
    17 import java.util.ArrayList;
    1816import java.util.List;
    1917
     
    3230import org.openstreetmap.josm.data.imagery.OffsetBookmark;
    3331import org.openstreetmap.josm.data.preferences.IntegerProperty;
    34 import org.openstreetmap.josm.gui.MapView;
    3532import org.openstreetmap.josm.tools.ImageProvider;
    3633
     
    5552
    5653    protected final ImageryInfo info;
    57     protected MapView mv;
    5854
    5955    protected double dx = 0.0;
     
    6561        super(info.getName());
    6662        this.info = info;
    67         this.mv = Main.map.mapView;
    6863        this.sharpenLevel = PROP_SHARPEN_LEVEL.get();
    6964    }
    7065
    7166    public double getPPD(){
    72         ProjectionBounds bounds = mv.getProjectionBounds();
    73         return mv.getWidth() / (bounds.max.east() - bounds.min.east());
     67        if (Main.map == null || Main.map.mapView == null) return Main.proj.getDefaultZoomInPPD();
     68        ProjectionBounds bounds = Main.map.mapView.getProjectionBounds();
     69        return Main.map.mapView.getWidth() / (bounds.max.east() - bounds.min.east());
    7470    }
    7571
     
    132128        public void actionPerformed(ActionEvent ev) {
    133129            setOffset(b.dx, b.dy);
     130            Main.main.menu.imageryMenuUpdater.refreshOffsetMenu();
    134131            Main.map.repaint();
    135             if (!(ev.getSource() instanceof Component)) return;
    136             Component source = (Component)ev.getSource();
    137             if (source.getParent() == null) return;
    138             Container m = source.getParent();
    139             for (Component c : m.getComponents()) {
    140                 if (c instanceof JCheckBoxMenuItem && c != source) {
    141                     ((JCheckBoxMenuItem)c).setSelected(false);
    142                 }
    143             }
    144132        }
    145133    }
     
    149137        public void actionPerformed(ActionEvent e) {
    150138        }
     139
    151140        @Override
    152141        public Component createMenuComponent() {
    153             JMenu menu = new JMenu(trc("layer", "Offset"));
    154             menu.setIcon(ImageProvider.get("mapmode", "adjustimg"));
    155             for (Component item : getOffsetMenu()) {
    156                 menu.add(item);
    157             }
    158             return menu;
    159         }
     142            return getOffsetMenuItem();
     143        }
     144
    160145        @Override
    161146        public boolean supportLayers(List<Layer> layers) {
     
    164149    }
    165150
    166     public List<Component> getOffsetMenu() {
    167         List<Component> result = new ArrayList<Component>();
    168         result.add(new JMenuItem(new ImageryAdjustAction(this)));
    169         if (OffsetBookmark.allBookmarks.isEmpty()) return result;
    170 
    171         result.add(new JSeparator(JSeparator.HORIZONTAL));
     151    ImageryAdjustAction adjustAction = new ImageryAdjustAction(this);
     152
     153    public JMenuItem getOffsetMenuItem() {
     154        JMenuItem adjustMenuItem = new JMenuItem(adjustAction);
     155        if (OffsetBookmark.allBookmarks.isEmpty()) return adjustMenuItem;
     156
     157        JMenu subMenu = new JMenu(trc("layer", "Offset"));
     158        subMenu.setIcon(ImageProvider.get("mapmode", "adjustimg"));
     159        subMenu.add(adjustMenuItem);
     160        subMenu.add(new JSeparator());
     161        boolean hasBookmarks = false;
    172162        for (OffsetBookmark b : OffsetBookmark.allBookmarks) {
    173163            if (!b.isUsable(this)) {
     
    178168                item.setSelected(true);
    179169            }
    180             result.add(item);
    181         }
    182         return result;
     170            subMenu.add(item);
     171            hasBookmarks = true;
     172        }
     173        return hasBookmarks ? subMenu : adjustMenuItem;
    183174    }
    184175
  • trunk/src/org/openstreetmap/josm/gui/layer/TMSLayer.java

    r3720 r3733  
    259259
    260260    private double getPPDeg() {
     261        MapView mv = Main.map.mapView;
    261262        return mv.getWidth()/(mv.getLatLon(mv.getWidth(), mv.getHeight()/2).lon()-mv.getLatLon(0, mv.getHeight()/2).lon());
    262263    }
    263264
    264265    private int getBestZoom() {
     266        if (Main.map == null || Main.map.mapView == null) return 3;
    265267        double ret = Math.log(getPPDeg()*360/tileSource.getTileSize())/Math.log(2);
    266         System.out.println("Detected best zoom " + ret);
    267268        return (int)Math.round(ret);
    268269    }
  • trunk/src/org/openstreetmap/josm/gui/layer/WMSLayer.java

    r3720 r3733  
    3131import org.openstreetmap.josm.actions.SaveActionBase;
    3232import org.openstreetmap.josm.data.Bounds;
    33 import org.openstreetmap.josm.data.ProjectionBounds;
    3433import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
    3534import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
     35import org.openstreetmap.josm.data.ProjectionBounds;
    3636import org.openstreetmap.josm.data.coor.EastNorth;
    3737import org.openstreetmap.josm.data.imagery.GeorefImage;
     38import org.openstreetmap.josm.data.imagery.GeorefImage.State;
    3839import org.openstreetmap.josm.data.imagery.ImageryInfo;
     40import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
    3941import org.openstreetmap.josm.data.imagery.ImageryLayerInfo;
    40 import org.openstreetmap.josm.data.imagery.GeorefImage.State;
    41 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
    4242import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
    4343import org.openstreetmap.josm.data.preferences.BooleanProperty;
     
    7777    protected boolean settingsChanged;
    7878    protected ImageryInfo info;
     79    protected final MapView mv;
    7980
    8081    // Image index boundary for current view
     
    109110    public WMSLayer(ImageryInfo info) {
    110111        super(info);
     112        mv = Main.map.mapView;
    111113        setBackgroundLayer(true); /* set global background variable */
    112114        initializeImages();
Note: See TracChangeset for help on using the changeset viewer.