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().getActiveData() != 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}