001    // License: GPL. Copyright 2007 by Immanuel Scholz and others
002    package org.openstreetmap.josm.gui.preferences;
003    
004    import static org.openstreetmap.josm.tools.I18n.tr;
005    
006    import java.awt.BorderLayout;
007    import java.awt.GridBagConstraints;
008    import java.awt.GridBagLayout;
009    import java.awt.Insets;
010    
011    import javax.swing.JPanel;
012    import javax.swing.JScrollPane;
013    import javax.swing.JTabbedPane;
014    
015    import org.openstreetmap.josm.gui.help.HelpUtil;
016    import org.openstreetmap.josm.gui.preferences.server.AuthenticationPreferencesPanel;
017    import org.openstreetmap.josm.gui.preferences.server.OsmApiUrlInputPanel;
018    import org.openstreetmap.josm.gui.preferences.server.ProxyPreferencesPanel;
019    import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
020    public class ServerAccessPreference extends DefaultTabPreferenceSetting {
021    
022        public static class Factory implements PreferenceSettingFactory {
023            public PreferenceSetting createPreferenceSetting() {
024                return new ServerAccessPreference();
025            }
026        }
027        
028        private ServerAccessPreference() {
029            super("connection", tr("Connection Settings"), tr("Connection Settings for the OSM server."));
030        }
031    
032        private OsmApiUrlInputPanel pnlApiUrlPreferences;
033    
034        private JTabbedPane tpServerPreferences;
035        /** indicates whether to use the default OSM URL or not */
036        /** panel for configuring authentication preferences */
037        private AuthenticationPreferencesPanel pnlAuthPreferences;
038        /** panel for configuring proxy preferences */
039        private ProxyPreferencesPanel pnlProxyPreferences;
040        /** panel for backup preferences */
041    
042        /**
043         * Embeds a vertically scrollable panel in a {@link JScrollPane}
044         * @param panel the panel
045         * @return the scroll pane
046         */
047        protected JScrollPane wrapVerticallyScrollablePanel(VerticallyScrollablePanel panel) {
048            JScrollPane sp = new JScrollPane(panel);
049            sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
050            sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
051            return sp;
052        }
053    
054        /**
055         * Builds the tabbed pane with the server preferences
056         *
057         * @return
058         */
059        protected JPanel buildTabbedServerPreferences() {
060            JPanel pnl = new JPanel(new BorderLayout());
061    
062            tpServerPreferences = new JTabbedPane();
063            pnlAuthPreferences = new AuthenticationPreferencesPanel();
064            tpServerPreferences.add(wrapVerticallyScrollablePanel(pnlAuthPreferences));
065            pnlProxyPreferences = new ProxyPreferencesPanel();
066            tpServerPreferences.add(wrapVerticallyScrollablePanel(pnlProxyPreferences));
067    
068            tpServerPreferences.setTitleAt(0, tr("Authentication"));
069            tpServerPreferences.setTitleAt(1, tr("Proxy settings"));
070            tpServerPreferences.setToolTipTextAt(0, tr("Configure your identity and how to authenticate at the OSM server"));
071            tpServerPreferences.setToolTipTextAt(1, tr("Configure whether to use a proxy server"));
072    
073            pnl.add(tpServerPreferences, BorderLayout.CENTER);
074            return pnl;
075        }
076    
077        /**
078         * Builds the panel for entering the server access preferences
079         *
080         * @return
081         */
082        protected JPanel buildContentPanel() {
083            JPanel pnl = new JPanel(new GridBagLayout());
084            GridBagConstraints gc = new GridBagConstraints();
085    
086            // the checkbox for the default UL
087            gc.fill = GridBagConstraints.HORIZONTAL;
088            gc.anchor = GridBagConstraints.NORTHWEST;
089            gc.weightx = 1.0;
090            gc.insets = new Insets(0,0,0,0);
091            pnl.add(pnlApiUrlPreferences = new OsmApiUrlInputPanel(), gc);
092    
093            // the remaining access properties
094            gc.gridy = 1;
095            gc.fill = GridBagConstraints.BOTH;
096            gc.weightx = 1.0;
097            gc.weighty = 1.0;
098            gc.insets = new Insets(10,0,3,3);
099            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    }