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 }