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              "dialogs/mappaint/wireframe_small",
028              tr("Enable/disable rendering the map as wireframe only"),
029              Shortcut.registerShortcut("menu:view:wireframe", tr("View: {0}", tr("Wireframe View")), KeyEvent.VK_W, Shortcut.CTRL),
030              false /* register toolbar */
031        );
032        setToolbarId("wireframe");
033        MainApplication.getToolbar().register(this);
034        setSelected(MapRendererFactory.getInstance().isWireframeMapRendererActive());
035        notifySelectedState();
036    }
037
038    @Override
039    protected boolean listenToSelectionChange() {
040        return false;
041    }
042
043    @Override
044    protected void updateEnabledState() {
045        setEnabled(getLayerManager().getActiveData() != null);
046    }
047
048    @Override
049    public void actionPerformed(ActionEvent e) {
050        toggleSelectedState(e);
051        if (isSelected()) {
052            MapRendererFactory.getInstance().activate(WireframeMapRenderer.class);
053        } else {
054            MapRendererFactory.getInstance().activate(StyledMapRenderer.class);
055        }
056
057        notifySelectedState();
058        getLayerManager().getLayersOfType(OsmDataLayer.class).forEach(OsmDataLayer::invalidate);
059    }
060}