JAL-3633 Remember system set proxy properties. Add options in Preferences for No...
[jalview.git] / src / jalview / jbgui / GPreferences.java
index ae6727a..b40380a 100755 (executable)
@@ -229,17 +229,35 @@ public class GPreferences extends JPanel
 
   protected JButton userOnly = new JButton();
 
+  protected JLabel httpLabel = new JLabel();
+
+  protected JLabel httpsLabel = new JLabel();
+
   protected JLabel portLabel = new JLabel();
 
   protected JLabel serverLabel = new JLabel();
 
-  protected JTextField proxyServerTB = new JTextField();
+  protected JLabel portLabel2 = new JLabel();
+
+  protected JLabel serverLabel2 = new JLabel();
+
+  protected JTextField proxyServerHttpTB = new JTextField();
 
-  protected JTextField proxyPortTB = new JTextField();
+  protected JTextField proxyPortHttpTB = new JTextField();
+
+  protected JTextField proxyServerHttpsTB = new JTextField();
+
+  protected JTextField proxyPortHttpsTB = new JTextField();
 
   protected JTextField defaultBrowser = new JTextField();
 
-  protected JCheckBox useProxy = new JCheckBox();
+  protected ButtonGroup proxyType = new ButtonGroup();
+
+  protected JRadioButton noProxy = new JRadioButton();
+
+  protected JRadioButton systemProxy = new JRadioButton();
+
+  protected JRadioButton customProxy = new JRadioButton();
 
   protected JCheckBox usagestats = new JCheckBox();
 
@@ -880,39 +898,145 @@ public class GPreferences extends JPanel
   private JPanel initConnTabProxyPanel()
   {
     // Label for server text box
-    serverLabel.setText(MessageManager.getString("label.address"));
+    serverLabel.setText(MessageManager.getString("label.host") + ": ");
     serverLabel.setHorizontalAlignment(SwingConstants.RIGHT);
     serverLabel.setFont(LABEL_FONT);
+    serverLabel2.setText(MessageManager.getString("label.host") + ": ");
+    serverLabel2.setHorizontalAlignment(SwingConstants.RIGHT);
+    serverLabel2.setFont(LABEL_FONT);
 
     // Proxy server and port text boxes
-    proxyServerTB.setFont(LABEL_FONT);
-    proxyPortTB.setFont(LABEL_FONT);
+    proxyServerHttpTB.setFont(LABEL_FONT);
+    proxyServerHttpTB.setColumns(40);
+    proxyPortHttpTB.setFont(LABEL_FONT);
+    proxyPortHttpTB.setColumns(4);
+    proxyServerHttpsTB.setFont(LABEL_FONT);
+    proxyServerHttpsTB.setColumns(40);
+    proxyPortHttpsTB.setFont(LABEL_FONT);
+    proxyPortHttpsTB.setColumns(4);
 
     // Label for Port text box
     portLabel.setFont(LABEL_FONT);
     portLabel.setHorizontalAlignment(SwingConstants.RIGHT);
-    portLabel.setText(MessageManager.getString("label.port"));
-
-    // Use proxy server checkbox
-    useProxy.setFont(LABEL_FONT);
-    useProxy.setHorizontalAlignment(SwingConstants.RIGHT);
-    useProxy.setHorizontalTextPosition(SwingConstants.LEADING);
-    useProxy.setText(MessageManager.getString("label.use_proxy_server"));
-    useProxy.addActionListener(new ActionListener()
+    portLabel.setText(MessageManager.getString("label.port") + ": ");
+    portLabel2.setFont(LABEL_FONT);
+    portLabel2.setHorizontalAlignment(SwingConstants.RIGHT);
+    portLabel2.setText(MessageManager.getString("label.port") + ": ");
+
+    httpLabel.setText("HTTP");
+    httpLabel.setFont(LABEL_FONT_BOLD);
+    httpLabel.setHorizontalAlignment(SwingConstants.LEFT);
+    httpsLabel.setText("HTTPS");
+    httpsLabel.setFont(LABEL_FONT_BOLD);
+    httpsLabel.setHorizontalAlignment(SwingConstants.LEFT);
+
+    // Proxy type radio buttons
+    noProxy.setFont(LABEL_FONT);
+    noProxy.setHorizontalAlignment(SwingConstants.LEFT);
+    // noProxy.setHorizontalTextPosition(SwingConstants.LEADING);
+    noProxy.setText(MessageManager.getString("label.no_proxy"));
+    systemProxy.setFont(LABEL_FONT);
+    systemProxy.setHorizontalAlignment(SwingConstants.LEFT);
+    // systemProxy.setHorizontalTextPosition(SwingConstants.LEADING);
+    systemProxy.setText(MessageManager.formatMessage("label.system_proxy",
+            displayHostPort(Cache.startupProxyProperties[0],
+                    Cache.startupProxyProperties[1]),
+            displayHostPort(Cache.startupProxyProperties[2],
+                    Cache.startupProxyProperties[3])));
+    customProxy.setFont(LABEL_FONT);
+    customProxy.setHorizontalAlignment(SwingConstants.LEFT);
+    // customProxy.setHorizontalTextPosition(SwingConstants.LEADING);
+    customProxy.addActionListener(new ActionListener()
     {
       @Override
       public void actionPerformed(ActionEvent e)
       {
-        useProxy_actionPerformed();
+        customProxy_actionPerformed();
       }
     });
+    customProxy.setText(
+            MessageManager.getString("label.use_proxy_server") + ":");
+    proxyType.add(noProxy);
+    proxyType.add(systemProxy);
+    proxyType.add(customProxy);
 
     // Make proxy server panel
     JPanel proxyPanel = new JPanel();
     TitledBorder titledBorder1 = new TitledBorder(
             MessageManager.getString("label.proxy_server"));
     proxyPanel.setBorder(titledBorder1);
+    GridBagConstraints gbc = new GridBagConstraints();
     proxyPanel.setLayout(new GridBagLayout());
+
+    gbc.gridx = 0;
+    gbc.gridy = 0;
+    gbc.weightx = 1.0;
+    gbc.gridheight = 1;
+    gbc.anchor = GridBagConstraints.WEST;
+    gbc.fill = GridBagConstraints.BOTH;
+
+    gbc.gridwidth = 5;
+    proxyPanel.add(noProxy, gbc);
+
+    gbc.gridy++;
+    proxyPanel.add(systemProxy, gbc);
+
+    gbc.gridy++;
+    proxyPanel.add(customProxy, gbc);
+
+    gbc.gridwidth = 1;
+    gbc.gridy++;
+    gbc.gridx = 0;
+    gbc.weightx = 0.1;
+    proxyPanel.add(httpLabel, gbc);
+
+    gbc.gridx++;
+    gbc.anchor = GridBagConstraints.EAST;
+    gbc.weightx = 0.15;
+    proxyPanel.add(serverLabel, gbc);
+
+    gbc.gridx++;
+    gbc.anchor = GridBagConstraints.WEST;
+    gbc.weightx = 0.5;
+    proxyPanel.add(proxyServerHttpTB, gbc);
+
+    gbc.gridx++;
+    gbc.anchor = GridBagConstraints.EAST;
+    gbc.weightx = 0.15;
+    proxyPanel.add(portLabel, gbc);
+
+    gbc.gridx++;
+    gbc.anchor = GridBagConstraints.WEST;
+    gbc.weightx = 0.1;
+    proxyPanel.add(proxyPortHttpTB, gbc);
+
+    gbc.gridy++;
+    gbc.gridx = 0;
+    gbc.anchor = GridBagConstraints.WEST;
+    gbc.weightx = 0.1;
+    proxyPanel.add(httpsLabel, gbc);
+
+    gbc.gridx++;
+    gbc.anchor = GridBagConstraints.EAST;
+    gbc.weightx = 0.15;
+    proxyPanel.add(serverLabel2, gbc);
+
+    gbc.gridx++;
+    gbc.anchor = GridBagConstraints.WEST;
+    gbc.weightx = 0.5;
+    proxyPanel.add(proxyServerHttpsTB, gbc);
+
+    gbc.gridx++;
+    gbc.anchor = GridBagConstraints.EAST;
+    gbc.weightx = 0.15;
+    proxyPanel.add(portLabel2, gbc);
+
+    gbc.gridx++;
+    gbc.anchor = GridBagConstraints.WEST;
+    gbc.weightx = 0.1;
+    proxyPanel.add(proxyPortHttpsTB, gbc);
+
+    /*
     proxyPanel.add(serverLabel,
             new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0,
                     GridBagConstraints.WEST, GridBagConstraints.NONE,
@@ -933,10 +1057,30 @@ public class GPreferences extends JPanel
             new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0,
                     GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
                     new Insets(0, 2, 2, 0), 263, 1));
+                    */
 
     return proxyPanel;
   }
 
+  private String displayHostPort(String host, String port)
+  {
+    boolean hostBlank = (host == null || host.isEmpty());
+    boolean portBlank = (port == null || port.isEmpty());
+    if (hostBlank && portBlank)
+    {
+      return MessageManager.getString("label.none");
+    }
+
+    StringBuilder sb = new StringBuilder();
+    sb.append(hostBlank ? "" : host);
+    if (!portBlank)
+    {
+      sb.append(":");
+      sb.append(port);
+    }
+    return sb.toString();
+  }
+
   /**
    * Initialises the checkboxes in the Connections tab
    */
@@ -2823,13 +2967,17 @@ public class GPreferences extends JPanel
 
   }
 
-  public void useProxy_actionPerformed()
+  public void customProxy_actionPerformed()
   {
-    boolean enabled = useProxy.isSelected();
+    boolean enabled = customProxy.isSelected();
     portLabel.setEnabled(enabled);
     serverLabel.setEnabled(enabled);
-    proxyServerTB.setEnabled(enabled);
-    proxyPortTB.setEnabled(enabled);
+    httpLabel.setEnabled(enabled);
+    httpsLabel.setEnabled(enabled);
+    proxyServerHttpTB.setEnabled(enabled);
+    proxyPortHttpTB.setEnabled(enabled);
+    proxyServerHttpsTB.setEnabled(enabled);
+    proxyPortHttpsTB.setEnabled(enabled);
   }
 
   /**