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    }