source: josm/trunk/src/org/openstreetmap/josm/gui/dialogs/layer/ActivateLayerAction.java@ 10428

Last change on this file since 10428 was 10428, checked in by stoecker, 8 years ago

see #9995 - patch mainly by strump - improve HIDPI behaviour

  • Property svn:eol-style set to native
File size: 4.2 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.dialogs.layer;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.event.ActionEvent;
7import java.awt.event.KeyEvent;
8import java.util.List;
9
10import javax.swing.AbstractAction;
11
12import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
13import org.openstreetmap.josm.gui.dialogs.LayerListDialog.LayerListModel;
14import org.openstreetmap.josm.gui.help.HelpUtil;
15import org.openstreetmap.josm.gui.layer.Layer;
16import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
17import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
18import org.openstreetmap.josm.gui.util.GuiHelper;
19import org.openstreetmap.josm.tools.CheckParameterUtil;
20import org.openstreetmap.josm.tools.ImageProvider;
21import org.openstreetmap.josm.tools.MultikeyShortcutAction;
22import org.openstreetmap.josm.tools.Shortcut;
23
24/**
25 * The action to activate the currently selected layer
26 */
27public final class ActivateLayerAction extends AbstractAction
28implements IEnabledStateUpdating, ActiveLayerChangeListener, MultikeyShortcutAction {
29 private transient Layer layer;
30 private transient Shortcut multikeyShortcut;
31 private final LayerListModel model;
32
33 /**
34 * Constructs a new {@code ActivateLayerAction}.
35 * @param layer the layer
36 * @param model layer list model
37 */
38 public ActivateLayerAction(Layer layer, LayerListModel model) {
39 this(model);
40 CheckParameterUtil.ensureParameterNotNull(layer, "layer");
41 this.layer = layer;
42 putValue(NAME, tr("Activate"));
43 updateEnabledState();
44 }
45
46 /**
47 * Constructs a new {@code ActivateLayerAction}.
48 * @param model layer list model
49 */
50 public ActivateLayerAction(LayerListModel model) {
51 this.model = model;
52 putValue(NAME, tr("Activate"));
53 new ImageProvider("dialogs", "activate").getResource().attachImageIcon(this, true);
54 putValue(SHORT_DESCRIPTION, tr("Activate the selected layer"));
55 multikeyShortcut = Shortcut.registerShortcut("core_multikey:activateLayer", tr("Multikey: {0}",
56 tr("Activate layer")), KeyEvent.VK_A, Shortcut.SHIFT);
57 multikeyShortcut.setAccelerator(this);
58 putValue("help", HelpUtil.ht("/Dialog/LayerList#ActivateLayer"));
59 }
60
61 @Override
62 public Shortcut getMultikeyShortcut() {
63 return multikeyShortcut;
64 }
65
66 @Override
67 public void actionPerformed(ActionEvent e) {
68 Layer toActivate;
69 if (layer != null) {
70 toActivate = layer;
71 } else {
72 toActivate = model.getSelectedLayers().get(0);
73 }
74 execute(toActivate);
75 }
76
77 private void execute(Layer layer) {
78 // model is going to be updated via LayerChangeListener and PropertyChangeEvents
79 model.getLayerManager().setActiveLayer(layer);
80 layer.setVisible(true);
81 }
82
83 boolean isActiveLayer(Layer layer) {
84 return model.getLayerManager().getActiveLayer() == layer;
85 }
86
87 @Override
88 public void updateEnabledState() {
89 GuiHelper.runInEDTAndWait(new Runnable() {
90 @Override
91 public void run() {
92 if (layer == null) {
93 if (model.getSelectedLayers().size() != 1) {
94 setEnabled(false);
95 return;
96 }
97 setEnabled(!isActiveLayer(model.getSelectedLayers().get(0)));
98 } else {
99 setEnabled(!isActiveLayer(layer));
100 }
101 }
102 });
103 }
104
105 @Override
106 public void activeOrEditLayerChanged(ActiveLayerChangeEvent e) {
107 updateEnabledState();
108 }
109
110 @Override
111 public void executeMultikeyAction(int index, boolean repeat) {
112 Layer l = LayerListDialog.getLayerForIndex(index);
113 if (l != null) {
114 execute(l);
115 }
116 }
117
118 @Override
119 public List<MultikeyInfo> getMultikeyCombinations() {
120 return LayerListDialog.getLayerInfoByClass(Layer.class);
121 }
122
123 @Override
124 public MultikeyInfo getLastMultikeyAction() {
125 return null; // Repeating action doesn't make much sense for activating
126 }
127
128}
Note: See TracBrowser for help on using the repository browser.