001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.preferences.server;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import java.util.HashSet;
007import java.util.Set;
008
009import javax.swing.Box;
010
011import org.openstreetmap.josm.gui.help.HelpUtil;
012import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
013import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
014import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
015import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
016import org.openstreetmap.josm.tools.GBC;
017
018/**
019 * Proxy sub-preferences in server preferences.
020 * @since 6523
021 */
022public final class ProxyPreference extends DefaultTabPreferenceSetting {
023
024    /**
025     * Factory used to create a new {@code ProxyPreference}.
026     */
027    public static class Factory implements PreferenceSettingFactory {
028        @Override
029        public PreferenceSetting createPreferenceSetting() {
030            return new ProxyPreference();
031        }
032    }
033
034    private static final Set<ProxyPreferenceListener> listeners = new HashSet<>();
035
036    private ProxyPreferencesPanel pnlProxyPreferences;
037
038    private ProxyPreference() {
039        super(/* ICON(preferences/) */ "proxy", tr("Proxy"), tr("Configure whether to use a proxy server"));
040    }
041
042    @Override
043    public void addGui(PreferenceTabbedPane gui) {
044        pnlProxyPreferences = new ProxyPreferencesPanel();
045        pnlProxyPreferences.add(Box.createVerticalGlue(), GBC.eol().fill());
046        gui.createPreferenceTab(this).add(pnlProxyPreferences, GBC.eol().fill());
047    }
048
049    @Override
050    public boolean ok() {
051        pnlProxyPreferences.saveToPreferences();
052        for (ProxyPreferenceListener listener : listeners) {
053            listener.proxyPreferenceChanged();
054        }
055        return false;
056    }
057
058    @Override
059    public boolean isExpert() {
060        return false;
061    }
062
063    /**
064     * Adds a new ProxyPreferenceListener.
065     * @param listener the listener to add
066     * @return {@code true} if the listener has been added, {@code false} otherwise
067     * @since 6525
068     */
069    public static boolean addProxyPreferenceListener(ProxyPreferenceListener listener) {
070        if (listener != null) {
071            return listeners.add(listener);
072        }
073        return false;
074    }
075
076    /**
077     * Removes a ProxyPreferenceListener.
078     * @param listener the listener to remove
079     * @return {@code true} if the listener has been removed, {@code false} otherwise
080     * @since 6525
081     */
082    public static boolean removeProxyPreferenceListener(ProxyPreferenceListener listener) {
083        if (listener != null) {
084            return listeners.remove(listener);
085        }
086        return false;
087    }
088
089    @Override
090    public String getHelpContext() {
091        return HelpUtil.ht("/Preferences/ProxyPreference");
092    }
093}