001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.actions; 003 004 import static org.openstreetmap.josm.tools.I18n.tr; 005 006 import java.awt.event.ActionEvent; 007 import java.awt.event.KeyEvent; 008 import java.util.ArrayList; 009 import java.util.List; 010 011 import javax.swing.ButtonModel; 012 013 import org.openstreetmap.josm.Main; 014 import org.openstreetmap.josm.data.osm.visitor.paint.MapRendererFactory; 015 import org.openstreetmap.josm.data.osm.visitor.paint.StyledMapRenderer; 016 import org.openstreetmap.josm.data.osm.visitor.paint.WireframeMapRenderer; 017 import org.openstreetmap.josm.tools.Shortcut; 018 019 public class WireframeToggleAction extends JosmAction { 020 private final List<ButtonModel> buttonModels = new ArrayList<ButtonModel>(); 021 //FIXME: replace with property Action.SELECTED_KEY when migrating to 022 // Java 6 023 private boolean selected; 024 public WireframeToggleAction() { 025 super( 026 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 Main.toolbar.register(this); 034 selected = MapRendererFactory.getInstance().isWireframeMapRendererActive(); 035 notifySelectedState(); 036 } 037 038 public void addButtonModel(ButtonModel model) { 039 if (model != null && !buttonModels.contains(model)) { 040 buttonModels.add(model); 041 model.setSelected(selected); 042 } 043 } 044 045 public void removeButtonModel(ButtonModel model) { 046 if (model != null && buttonModels.contains(model)) { 047 buttonModels.remove(model); 048 } 049 } 050 051 protected void notifySelectedState() { 052 for (ButtonModel model: buttonModels) { 053 if (model.isSelected() != selected) { 054 model.setSelected(selected); 055 } 056 } 057 } 058 059 protected void toggleSelectedState() { 060 selected = !selected; 061 //Main.pref.put("draw.wireframe", selected); 062 if (selected){ 063 MapRendererFactory.getInstance().activate(WireframeMapRenderer.class); 064 } else { 065 MapRendererFactory.getInstance().activate(StyledMapRenderer.class); 066 } 067 068 notifySelectedState(); 069 if (Main.isDisplayingMapView()) { 070 Main.map.mapView.repaint(); 071 } 072 } 073 074 public void actionPerformed(ActionEvent e) { 075 toggleSelectedState(); 076 } 077 078 @Override 079 protected void updateEnabledState() { 080 setEnabled(Main.isDisplayingMapView() && Main.main.getEditLayer() != null); 081 } 082 083 public boolean isSelected() { 084 return selected; 085 } 086 }