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}