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.data.osm.visitor.paint.MapRendererFactory;
010import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer;
011import org.openstreetmap.josm.data.osm.visitor.paint.WireframeMapRenderer;
012import org.openstreetmap.josm.gui.MainApplication;
013import org.openstreetmap.josm.gui.layer.OsmDataLayer;
014import org.openstreetmap.josm.tools.Shortcut;
015
016/**
017 * This class toggles the wireframe rendering mode.
018 * @since 2530
019 */
020public class WireframeToggleAction extends ToggleAction {
021
022    /**
023     * Constructs a new {@code WireframeToggleAction}.
024     */
025    public WireframeToggleAction() {
026        super(tr("Wireframe View"),
027              null, /* no icon */
028              tr("Enable/disable rendering the map as wireframe only"),
029              Shortcut.registerShortcut("menu:view:wireframe", tr("Toggle Wireframe view"), KeyEvent.VK_W, Shortcut.CTRL),
030              false /* register toolbar */
031        );
032        putValue("toolbar", "wireframe");
033        MainApplication.getToolbar().register(this);
034        setSelected(MapRendererFactory.getInstance().isWireframeMapRendererActive());
035        notifySelectedState();
036    }
037
038    @Override
039    protected void updateEnabledState() {
040        setEnabled(getLayerManager().getActiveDataSet() != null);
041    }
042
043    @Override
044    public void actionPerformed(ActionEvent e) {
045        toggleSelectedState(e);
046        if (isSelected()) {
047            MapRendererFactory.getInstance().activate(WireframeMapRenderer.class);
048        } else {
049            MapRendererFactory.getInstance().activate(StyledMapRenderer.class);
050        }
051
052        notifySelectedState();
053        getLayerManager().getLayersOfType(OsmDataLayer.class).forEach(OsmDataLayer::invalidate);
054    }
055}