source: josm/trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java@ 5086

Last change on this file since 5086 was 5086, checked in by simon04, 12 years ago

fix #6895 - Add Map Paint Styles to View menu

File size: 3.0 KB
Line 
1package org.openstreetmap.josm.gui.mappaint;
2
3import static org.openstreetmap.josm.tools.I18n.tr;
4
5import java.awt.event.ActionEvent;
6import java.util.HashMap;
7import java.util.HashSet;
8import java.util.Map;
9import java.util.Set;
10import javax.swing.JCheckBoxMenuItem;
11import javax.swing.JMenu;
12import org.openstreetmap.josm.Main;
13import org.openstreetmap.josm.actions.JosmAction;
14import org.openstreetmap.josm.gui.mappaint.MapPaintStyles.MapPaintSylesUpdateListener;
15import org.openstreetmap.josm.tools.ImageProvider;
16
17public class MapPaintMenu extends JMenu implements MapPaintSylesUpdateListener {
18
19 private static class MapPaintAction extends JosmAction {
20
21 private StyleSource style;
22 private JCheckBoxMenuItem button;
23
24 public MapPaintAction(StyleSource style) {
25 super(style.getDisplayString(), style.icon,
26 tr("Select the map painting styles"), null, style.icon != null);
27 if (style.icon == null) {
28 putValue("toolbar", "mappaint/" + style.getDisplayString());
29 Main.toolbar.register(this);
30 }
31 this.button = new JCheckBoxMenuItem(this);
32 this.style = style;
33 updateButton();
34 }
35
36 private void updateButton() {
37 button.getModel().setSelected(style.active);
38 }
39
40 private void toggleStyle() {
41 MapPaintStyles.toggleStyleActive(MapPaintStyles.getStyles().getStyleSources().indexOf(style));
42 updateButton();
43 }
44
45 @Override
46 public void actionPerformed(ActionEvent ae) {
47 toggleStyle();
48 }
49
50 public JCheckBoxMenuItem getButton() {
51 return button;
52 }
53
54 @Override
55 public void updateEnabledState() {
56 setEnabled(Main.map != null && Main.main.getEditLayer() != null);
57 }
58 }
59 private Map<String, MapPaintAction> actions = new HashMap<String, MapPaintAction>();
60
61 public MapPaintMenu() {
62 super(tr("Map Paint Styles"));
63 setIcon(ImageProvider.get("dialogs", "mapstyle"));
64 MapPaintStyles.addMapPaintSylesUpdateListener(this);
65 }
66
67 @Override
68 public void mapPaintStylesUpdated() {
69 final Set<String> actionsToRemove = new HashSet<String>(actions.keySet());
70 for (StyleSource style : MapPaintStyles.getStyles().getStyleSources()) {
71 final String k = style.getDisplayString();
72 MapPaintAction a = actions.get(k);
73 if (a == null) {
74 a = new MapPaintAction(style);
75 add(a.getButton());
76 actions.put(k, a);
77 } else {
78 a.updateButton();
79 actionsToRemove.remove(k);
80 }
81 }
82 for (String k : actionsToRemove) {
83 final MapPaintAction a = actions.get(k);
84 if (a != null) {
85 remove(a.getButton());
86 actions.remove(k);
87 }
88 }
89 }
90
91 @Override
92 public void mapPaintStyleEntryUpdated(int idx) {
93 mapPaintStylesUpdated();
94 }
95}
Note: See TracBrowser for help on using the repository browser.