source: josm/trunk/src/org/openstreetmap/josm/gui/preferences/ServerAccessPreference.java@ 4968

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

fix #7386 - Major rework of preferences GUI settings in order to speed up preferences dialog startup time. The building of each preferences tab is delayed until this tab is selected. Plugins that use preferences will need to make some (minor) changes.

  • Property svn:eol-style set to native
File size: 4.9 KB
Line 
1// License: GPL. Copyright 2007 by Immanuel Scholz and others
2package org.openstreetmap.josm.gui.preferences;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.BorderLayout;
7import java.awt.GridBagConstraints;
8import java.awt.GridBagLayout;
9import java.awt.Insets;
10
11import javax.swing.JPanel;
12import javax.swing.JScrollPane;
13import javax.swing.JTabbedPane;
14
15import org.openstreetmap.josm.gui.help.HelpUtil;
16import org.openstreetmap.josm.gui.preferences.server.AuthenticationPreferencesPanel;
17import org.openstreetmap.josm.gui.preferences.server.OsmApiUrlInputPanel;
18import org.openstreetmap.josm.gui.preferences.server.ProxyPreferencesPanel;
19import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
20public class ServerAccessPreference extends DefaultTabPreferenceSetting {
21
22 public static class Factory implements PreferenceSettingFactory {
23 public PreferenceSetting createPreferenceSetting() {
24 return new ServerAccessPreference();
25 }
26 }
27
28 private ServerAccessPreference() {
29 super("connection", tr("Connection Settings"), tr("Connection Settings for the OSM server."));
30 }
31
32 private OsmApiUrlInputPanel pnlApiUrlPreferences;
33
34 private JTabbedPane tpServerPreferences;
35 /** indicates whether to use the default OSM URL or not */
36 /** panel for configuring authentication preferences */
37 private AuthenticationPreferencesPanel pnlAuthPreferences;
38 /** panel for configuring proxy preferences */
39 private ProxyPreferencesPanel pnlProxyPreferences;
40 /** panel for backup preferences */
41
42 /**
43 * Embeds a vertically scrollable panel in a {@see JScrollPane}
44 * @param panel the panel
45 * @return the scroll pane
46 */
47 protected JScrollPane wrapVerticallyScrollablePanel(VerticallyScrollablePanel panel) {
48 JScrollPane sp = new JScrollPane(panel);
49 sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
50 sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
51 return sp;
52 }
53
54 /**
55 * Builds the tabbed pane with the server preferences
56 *
57 * @return
58 */
59 protected JPanel buildTabbedServerPreferences() {
60 JPanel pnl = new JPanel(new BorderLayout());
61
62 tpServerPreferences = new JTabbedPane();
63 pnlAuthPreferences = new AuthenticationPreferencesPanel();
64 tpServerPreferences.add(wrapVerticallyScrollablePanel(pnlAuthPreferences));
65 pnlProxyPreferences = new ProxyPreferencesPanel();
66 tpServerPreferences.add(wrapVerticallyScrollablePanel(pnlProxyPreferences));
67
68 tpServerPreferences.setTitleAt(0, tr("Authentication"));
69 tpServerPreferences.setTitleAt(1, tr("Proxy settings"));
70 tpServerPreferences.setToolTipTextAt(0, tr("Configure your identity and how to authenticate at the OSM server"));
71 tpServerPreferences.setToolTipTextAt(1, tr("Configure whether to use a proxy server"));
72
73 pnl.add(tpServerPreferences, BorderLayout.CENTER);
74 return pnl;
75 }
76
77 /**
78 * Builds the panel for entering the server access preferences
79 *
80 * @return
81 */
82 protected JPanel buildContentPanel() {
83 JPanel pnl = new JPanel(new GridBagLayout());
84 GridBagConstraints gc = new GridBagConstraints();
85
86 // the checkbox for the default UL
87 gc.fill = GridBagConstraints.HORIZONTAL;
88 gc.anchor = GridBagConstraints.NORTHWEST;
89 gc.weightx = 1.0;
90 gc.insets = new Insets(0,0,0,0);
91 pnl.add(pnlApiUrlPreferences = new OsmApiUrlInputPanel(), gc);
92
93 // the remaining access properties
94 gc.gridy = 1;
95 gc.fill = GridBagConstraints.BOTH;
96 gc.weightx = 1.0;
97 gc.weighty = 1.0;
98 gc.insets = new Insets(10,0,3,3);
99 pnl.add(buildTabbedServerPreferences(), gc);
100
101 // let the AuthPreferencesPanel know when the API URL changes
102 //
103 pnlApiUrlPreferences.addPropertyChangeListener(pnlAuthPreferences);
104
105 HelpUtil.setHelpContext(pnl, HelpUtil.ht("/Preferences/Connection"));
106 return pnl;
107 }
108
109 public void addGui(PreferenceTabbedPane gui) {
110 GridBagConstraints gc = new GridBagConstraints();
111 gc.fill = GridBagConstraints.BOTH;
112 gc.weightx = 1.0;
113 gc.weighty = 1.0;
114 gc.anchor = GridBagConstraints.NORTHWEST;
115 gui.createPreferenceTab(this).add(buildContentPanel(), gc);
116
117 initFromPreferences();
118 }
119
120 /**
121 * Initializes the configuration panel with values from the preferences
122 */
123 public void initFromPreferences() {
124 pnlApiUrlPreferences.initFromPreferences();
125 pnlAuthPreferences.initFromPreferences();
126 pnlProxyPreferences.initFromPreferences();
127 }
128
129 /**
130 * Saves the values to the preferences
131 */
132 public boolean ok() {
133 pnlApiUrlPreferences.saveToPreferences();
134 pnlAuthPreferences.saveToPreferences();
135 pnlProxyPreferences.saveToPreferences();
136 return false;
137 }
138}
Note: See TracBrowser for help on using the repository browser.