source: josm/trunk/src/org/openstreetmap/josm/gui/preferences/RemoteControlPreference.java@ 5861

Last change on this file since 5861 was 5861, checked in by Don-vip, 11 years ago

Remote control: start/stop HTTP server without restarting JOSM

  • Property svn:eol-style set to native
File size: 5.5 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.preferences;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.Color;
7import java.awt.Font;
8import java.awt.GridBagLayout;
9import java.awt.event.ActionEvent;
10import java.awt.event.ActionListener;
11import java.util.LinkedHashMap;
12import java.util.Map;
13import java.util.Map.Entry;
14
15import javax.swing.BorderFactory;
16import javax.swing.Box;
17import javax.swing.JCheckBox;
18import javax.swing.JLabel;
19import javax.swing.JPanel;
20import javax.swing.JSeparator;
21
22import org.openstreetmap.josm.Main;
23import org.openstreetmap.josm.gui.util.GuiHelper;
24import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
25import org.openstreetmap.josm.io.remotecontrol.RemoteControl;
26import org.openstreetmap.josm.io.remotecontrol.handler.RequestHandler;
27import org.openstreetmap.josm.tools.GBC;
28
29/**
30 * Preference settings for the Remote Control plugin
31 *
32 * @author Frederik Ramm
33 */
34public class RemoteControlPreference extends DefaultTabPreferenceSetting {
35
36 /**
37 * Factory used to build a new instance of this preference setting
38 */
39 public static class Factory implements PreferenceSettingFactory {
40
41 @Override
42 public PreferenceSetting createPreferenceSetting() {
43 return new RemoteControlPreference();
44 }
45 }
46
47 private RemoteControlPreference() {
48 super("remotecontrol", tr("Remote Control"), tr("Settings for the remote control feature."));
49 for (PermissionPrefWithDefault p : PermissionPrefWithDefault.getPermissionPrefs()) {
50 JCheckBox cb = new JCheckBox(p.preferenceText);
51 cb.setSelected(p.isAllowed());
52 prefs.put(p, cb);
53 }
54 }
55 private final Map<PermissionPrefWithDefault, JCheckBox> prefs =
56 new LinkedHashMap<PermissionPrefWithDefault, JCheckBox>();
57 private JCheckBox enableRemoteControl;
58 private JCheckBox loadInNewLayer = new JCheckBox(tr("Download objects to new layer"));
59 private JCheckBox alwaysAskUserConfirm = new JCheckBox(tr("Confirm all Remote Control actions manually"));
60
61 @Override
62 public void addGui(final PreferenceTabbedPane gui) {
63
64 JPanel remote = new JPanel(new GridBagLayout());
65
66 final JLabel descLabel = new JLabel("<html>"
67 + tr("Allows JOSM to be controlled from other applications, e.g. from a web browser.")
68 + "</html>");
69 descLabel.setFont(descLabel.getFont().deriveFont(Font.PLAIN));
70 remote.add(descLabel, GBC.eol().insets(5, 5, 0, 10).fill(GBC.HORIZONTAL));
71
72 final JLabel portLabel = new JLabel("<html>" + tr("JOSM will always listen at <b>port 8111</b> on localhost. "
73 + "<br>This port is not configurable because it is referenced by external applications talking to JOSM.") + "</html>");
74 portLabel.setFont(portLabel.getFont().deriveFont(Font.PLAIN));
75 remote.add(portLabel, GBC.eol().insets(5, 5, 0, 10).fill(GBC.HORIZONTAL));
76
77 remote.add(enableRemoteControl = new JCheckBox(tr("Enable remote control"), RemoteControl.PROP_REMOTECONTROL_ENABLED.get()), GBC.eol());
78
79 final JPanel wrapper = new JPanel();
80 wrapper.setLayout(new GridBagLayout());
81 wrapper.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.gray)));
82
83 remote.add(wrapper, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 5, 5, 5));
84
85 wrapper.add(new JLabel(tr("Permitted actions:")), GBC.eol());
86 int INDENT = 15;
87 for (JCheckBox p : prefs.values()) {
88 wrapper.add(p, GBC.eol().insets(INDENT, 5, 0, 0).fill(GBC.HORIZONTAL));
89 }
90
91 wrapper.add(new JSeparator(), GBC.eop().fill(GBC.HORIZONTAL).insets(15, 5, 15, 5));
92 wrapper.add(loadInNewLayer, GBC.eol().fill(GBC.HORIZONTAL));
93 wrapper.add(alwaysAskUserConfirm, GBC.eol().fill(GBC.HORIZONTAL));
94
95 remote.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL));
96
97 loadInNewLayer.setSelected(Main.pref.getBoolean(RequestHandler.loadInNewLayerKey, RequestHandler.loadInNewLayerDefault));
98 alwaysAskUserConfirm.setSelected(Main.pref.getBoolean(RequestHandler.globalConfirmationKey, RequestHandler.globalConfirmationDefault));
99
100 ActionListener remoteControlEnabled = new ActionListener() {
101
102 @Override
103 public void actionPerformed(ActionEvent e) {
104 GuiHelper.setEnabledRec(wrapper, enableRemoteControl.isSelected());
105 // 'setEnabled(false)' does not work for JLabel with html text, so do it manually
106 // FIXME: use QuadStateCheckBox to make checkboxes unset when disabled
107 }
108 };
109 enableRemoteControl.addActionListener(remoteControlEnabled);
110 remoteControlEnabled.actionPerformed(null);
111 createPreferenceTabWithScrollPane(gui, remote);
112 }
113
114 @Override
115 public boolean ok() {
116 boolean enabled = enableRemoteControl.isSelected();
117 boolean changed = RemoteControl.PROP_REMOTECONTROL_ENABLED.put(enabled);
118 if (enabled) {
119 for (Entry<PermissionPrefWithDefault, JCheckBox> p : prefs.entrySet()) {
120 Main.pref.put(p.getKey().pref, p.getValue().isSelected());
121 }
122 Main.pref.put(RequestHandler.loadInNewLayerKey, loadInNewLayer.isSelected());
123 Main.pref.put(RequestHandler.globalConfirmationKey, alwaysAskUserConfirm.isSelected());
124 }
125 if (changed) {
126 if (enabled) {
127 RemoteControl.start();
128 } else {
129 RemoteControl.stop();
130 }
131 }
132 return false;
133 }
134}
Note: See TracBrowser for help on using the repository browser.