001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.actions;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import java.awt.event.ActionEvent;
007import java.awt.event.KeyEvent;
008
009import org.openstreetmap.josm.Main;
010import org.openstreetmap.josm.data.osm.visitor.paint.MapRendererFactory;
011import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer;
012import org.openstreetmap.josm.data.osm.visitor.paint.WireframeMapRenderer;
013import org.openstreetmap.josm.tools.Shortcut;
014
015/**
016 * This class toggles the wireframe rendering mode.
017 * @since 2530
018 */
019public class WireframeToggleAction extends ToggleAction {
020
021    /**
022     * Constructs a new {@code WireframeToggleAction}.
023     */
024    public WireframeToggleAction() {
025        super(tr("Wireframe View"),
026              null, /* no icon */
027              tr("Enable/disable rendering the map as wireframe only"),
028              Shortcut.registerShortcut("menu:view:wireframe", tr("Toggle Wireframe view"), KeyEvent.VK_W, Shortcut.CTRL),
029              false /* register toolbar */
030        );
031        putValue("toolbar", "wireframe");
032        Main.toolbar.register(this);
033        setSelected(MapRendererFactory.getInstance().isWireframeMapRendererActive());
034        notifySelectedState();
035    }
036
037    @Override
038    protected void updateEnabledState() {
039        setEnabled(Main.getLayerManager().getEditLayer() != null);
040    }
041
042    @Override
043    public void actionPerformed(ActionEvent e) {
044        toggleSelectedState(e);
045        if (isSelected()) {
046            MapRendererFactory.getInstance().activate(WireframeMapRenderer.class);
047        } else {
048            MapRendererFactory.getInstance().activate(StyledMapRenderer.class);
049        }
050
051        notifySelectedState();
052        if (Main.isDisplayingMapView()) {
053            Main.map.mapView.repaint();
054        }
055    }
056}