import javax.swing.border.TitledBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
/*
* Connections tab components
*/
+ protected JPanel connectTab;
+
protected JTable linkUrlTable = new JTable();
protected JButton editLink = new JButton();
protected JLabel proxyAuthPasswordLabel = new JLabel();
+ protected JLabel passwordNotStoredLabel = new JLabel();
+
protected JTextField proxyServerHttpTB = new JTextField();
protected JTextField proxyPortHttpTB = new JTextField();
protected JTextField proxyAuthUsernameTB = new JTextField();
- protected JTextField proxyAuthPasswordTB = new JPasswordField();
+ protected JPasswordField proxyAuthPasswordPB = new JPasswordField();
protected JTextField defaultBrowser = new JTextField();
protected JRadioButton customProxy = new JRadioButton();
+ protected JButton applyProxyButton = new JButton();
+
protected JCheckBox usagestats = new JCheckBox();
protected JCheckBox questionnaire = new JCheckBox();
protected JTextArea backupfilesExampleLabel = new JTextArea();
+ private final JTabbedPane tabbedPane = new JTabbedPane();
+
+ private JLabel messageLabel = new JLabel("", JLabel.CENTER);
+
/**
* Creates a new GPreferences object.
*/
*/
private void jbInit() throws Exception
{
- final JTabbedPane tabbedPane = new JTabbedPane();
+ // final JTabbedPane tabbedPane = new JTabbedPane();
this.setLayout(new BorderLayout());
+
+ // message label at top
+ this.add(messageLabel, BorderLayout.NORTH);
+
JPanel okCancelPanel = initOkCancelPanel();
this.add(tabbedPane, BorderLayout.CENTER);
this.add(okCancelPanel, BorderLayout.SOUTH);
/*
* Handler to validate a tab before leaving it - currently only for
* Structure.
+ * Adding a clearMessage() so messages are cleared when changing tabs.
*/
tabbedPane.addChangeListener(new ChangeListener()
{
}
}
lastTab = tabbedPane.getSelectedComponent();
+
+ clearMessage();
}
});
}
+ public void setMessage(String message)
+ {
+ if (message != null)
+ {
+ messageLabel.setText(message);
+ messageLabel.setFont(LABEL_FONT_BOLD);
+ messageLabel.setForeground(Color.RED.darker());
+ messageLabel.revalidate();
+ messageLabel.repaint();
+ }
+ // note message not cleared if message is null. call clearMessage()
+ // directly.
+ this.revalidate();
+ this.repaint();
+ }
+
+ public void clearMessage()
+ {
+ // only repaint if message exists
+ if (messageLabel.getText() != null
+ && messageLabel.getText().length() > 0)
+ {
+ messageLabel.setText("");
+ messageLabel.revalidate();
+ messageLabel.repaint();
+ this.revalidate();
+ this.repaint();
+ }
+ }
+
+ public final static int CONNECTIONS_TAB = 5;
+
+ public void selectTab(int selectTab)
+ {
+ // select a given tab - currently only for Connections
+ switch (selectTab)
+ {
+ case CONNECTIONS_TAB:
+ tabbedPane.setSelectedComponent(connectTab);
+ break;
+ default:
+ }
+ }
+
/**
* Initialises the Editing tabbed panel.
*
*/
private JPanel initConnectionsTab()
{
- JPanel connectTab = new JPanel();
+ connectTab = new JPanel();
connectTab.setLayout(new GridBagLayout());
// Label for browser text box
proxyPortHttpsTB.setColumns(4);
proxyAuthUsernameTB.setFont(LABEL_FONT);
proxyAuthUsernameTB.setColumns(30);
- proxyAuthPasswordTB.setFont(LABEL_FONT);
- proxyAuthPasswordTB.setColumns(30);
+
+ // check for any change to enable applyProxyButton
+ DocumentListener d = new DocumentListener()
+ {
+ @Override
+ public void changedUpdate(DocumentEvent e)
+ {
+ applyProxyButtonEnabled(true);
+ }
+
+ @Override
+ public void insertUpdate(DocumentEvent e)
+ {
+ applyProxyButtonEnabled(true);
+ }
+
+ @Override
+ public void removeUpdate(DocumentEvent e)
+ {
+ applyProxyButtonEnabled(true);
+ }
+ };
+ proxyServerHttpTB.getDocument().addDocumentListener(d);
+ proxyPortHttpTB.getDocument().addDocumentListener(d);
+ proxyServerHttpsTB.getDocument().addDocumentListener(d);
+ proxyPortHttpsTB.getDocument().addDocumentListener(d);
+ proxyAuthUsernameTB.getDocument().addDocumentListener(d);
+ proxyAuthPasswordPB.setFont(LABEL_FONT);
+ proxyAuthPasswordPB.setColumns(30);
+ proxyAuthPasswordPB.getDocument()
+ .addDocumentListener(new DocumentListener()
+ {
+ @Override
+ public void changedUpdate(DocumentEvent e)
+ {
+ proxyAuthPasswordCheckHighlight(true);
+ applyProxyButtonEnabled(true);
+ }
+
+ @Override
+ public void insertUpdate(DocumentEvent e)
+ {
+ proxyAuthPasswordCheckHighlight(true);
+ applyProxyButtonEnabled(true);
+ }
+
+ @Override
+ public void removeUpdate(DocumentEvent e)
+ {
+ proxyAuthPasswordCheckHighlight(true);
+ applyProxyButtonEnabled(true);
+ }
+
+ });
// Label for Port text box
portLabel.setFont(LABEL_FONT);
.setText(MessageManager.getString("label.password") + ": ");
proxyAuthPasswordLabel.setFont(LABEL_FONT);
proxyAuthPasswordLabel.setHorizontalAlignment(SwingConstants.RIGHT);
+ passwordNotStoredLabel.setText(
+ "(" + MessageManager.getString("label.not_stored") + ")");
+ passwordNotStoredLabel.setFont(LABEL_FONT_ITALIC);
+ passwordNotStoredLabel.setHorizontalAlignment(SwingConstants.LEFT);
// Proxy type radio buttons
noProxy.setFont(LABEL_FONT);
systemProxy.setFont(LABEL_FONT);
systemProxy.setHorizontalAlignment(SwingConstants.LEFT);
systemProxy.setText(MessageManager.formatMessage("label.system_proxy",
- displayHostPort(Cache.startupProxyProperties[0],
+ displayUserHostPort(Cache.startupProxyProperties[4],
+ Cache.startupProxyProperties[0],
Cache.startupProxyProperties[1]),
- displayHostPort(Cache.startupProxyProperties[2],
+ displayUserHostPort(Cache.startupProxyProperties[6],
+ Cache.startupProxyProperties[2],
Cache.startupProxyProperties[3])));
customProxy.setFont(LABEL_FONT);
customProxy.setHorizontalAlignment(SwingConstants.LEFT);
});
setCustomProxyEnabled();
- setProxyAuthEnabled();
// Make proxy server panel
JPanel proxyPanel = new JPanel();
TitledBorder titledBorder1 = new TitledBorder(
MessageManager.getString("label.proxy_servers"));
proxyPanel.setBorder(titledBorder1);
- GridBagConstraints gbc = new GridBagConstraints();
proxyPanel.setLayout(new GridBagLayout());
-
- gbc.gridx = 0;
- gbc.gridy = 0;
+ GridBagConstraints gbc = new GridBagConstraints();
+ gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1.0;
- gbc.gridheight = 1;
- gbc.anchor = GridBagConstraints.WEST;
- gbc.fill = GridBagConstraints.BOTH;
- gbc.gridwidth = 5;
- proxyPanel.add(noProxy, gbc);
+ GridBagConstraints c = new GridBagConstraints();
+ // Proxy type radio buttons (3)
+ JPanel ptPanel = new JPanel();
+ ptPanel.setLayout(new GridBagLayout());
+ c.weightx = 1.0;
+ c.gridy = 0;
+ c.gridx = 0;
+ c.gridwidth = 1;
+ c.fill = GridBagConstraints.HORIZONTAL;
+ ptPanel.add(noProxy, c);
+ c.gridy++;
+ ptPanel.add(systemProxy, c);
+ c.gridy++;
+ ptPanel.add(customProxy, c);
- gbc.gridy++;
- proxyPanel.add(systemProxy, gbc);
+ gbc.gridy = 0;
+ proxyPanel.add(ptPanel, gbc);
+
+ // host and port text boxes
+ JPanel hpPanel = new JPanel();
+ hpPanel.setLayout(new GridBagLayout());
+ // HTTP host port row
+ c.gridy = 0;
+ c.gridx = 0;
+
+ c.weightx = 0.1;
+ c.anchor = GridBagConstraints.LINE_START;
+ hpPanel.add(httpLabel, c);
+
+ c.gridx++;
+ c.weightx = 0.1;
+ c.anchor = GridBagConstraints.LINE_END;
+ hpPanel.add(serverLabel, c);
+
+ c.gridx++;
+ c.weightx = 1.0;
+ c.anchor = GridBagConstraints.LINE_START;
+ hpPanel.add(proxyServerHttpTB, c);
+
+ c.gridx++;
+ c.weightx = 0.1;
+ c.anchor = GridBagConstraints.LINE_END;
+ hpPanel.add(portLabel, c);
+
+ c.gridx++;
+ c.weightx = 0.2;
+ c.anchor = GridBagConstraints.LINE_START;
+ hpPanel.add(proxyPortHttpTB, c);
+
+ // HTTPS host port row
+ c.gridy++;
+ c.gridx = 0;
+ c.gridwidth = 1;
+
+ c.anchor = GridBagConstraints.LINE_START;
+ hpPanel.add(httpsLabel, c);
+
+ c.gridx++;
+ c.anchor = GridBagConstraints.LINE_END;
+ hpPanel.add(serverLabel2, c);
+
+ c.gridx++;
+ c.anchor = GridBagConstraints.LINE_START;
+ hpPanel.add(proxyServerHttpsTB, c);
+
+ c.gridx++;
+ c.anchor = GridBagConstraints.LINE_END;
+ hpPanel.add(portLabel2, c);
+
+ c.gridx++;
+ c.anchor = GridBagConstraints.LINE_START;
+ hpPanel.add(proxyPortHttpsTB, c);
gbc.gridy++;
- proxyPanel.add(customProxy, gbc);
+ proxyPanel.add(hpPanel, gbc);
- gbc.gridwidth = 1;
+ // Require authentication checkbox
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);
+ proxyPanel.add(proxyAuth, gbc);
- gbc.gridx++;
- gbc.anchor = GridBagConstraints.WEST;
- gbc.weightx = 0.1;
- proxyPanel.add(proxyPortHttpTB, gbc);
+ // username and password
+ JPanel upPanel = new JPanel();
+ upPanel.setLayout(new GridBagLayout());
+ // username row
+ c.gridy = 0;
+ c.gridx = 0;
+ c.gridwidth = 1;
+ c.weightx = 0.4;
+ c.anchor = GridBagConstraints.LINE_END;
+ upPanel.add(proxyAuthUsernameLabel, c);
+
+ c.gridx++;
+ c.weightx = 1.0;
+ c.anchor = GridBagConstraints.LINE_START;
+ upPanel.add(proxyAuthUsernameTB, c);
+
+ // password row
+ c.gridy++;
+ c.gridx = 0;
+ c.weightx = 0.4;
+ c.anchor = GridBagConstraints.LINE_END;
+ upPanel.add(proxyAuthPasswordLabel, c);
+
+ c.gridx++;
+ c.weightx = 1.0;
+ c.anchor = GridBagConstraints.LINE_START;
+ upPanel.add(proxyAuthPasswordPB, c);
+
+ c.gridx++;
+ c.weightx = 0.4;
+ c.anchor = GridBagConstraints.LINE_START;
+ upPanel.add(passwordNotStoredLabel, c);
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(upPanel, gbc);
+ applyProxyButton.setText(MessageManager.getString("action.apply"));
+ applyProxyButton.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ saveProxySettings();
+ applyProxyButton.setEnabled(false);
+ }
+ });
gbc.gridy++;
- gbc.gridx = 0;
- gbc.gridwidth = 5;
- gbc.anchor = GridBagConstraints.WEST;
- gbc.weightx = 0.1;
- proxyPanel.add(proxyAuth, gbc);
+ gbc.fill = GridBagConstraints.NONE;
+ gbc.anchor = GridBagConstraints.LINE_END;
+ proxyPanel.add(applyProxyButton, gbc);
- gbc.gridy++;
- gbc.gridx = 0;
- gbc.gridwidth = 1;
- gbc.anchor = GridBagConstraints.EAST;
- proxyPanel.add(proxyAuthUsernameLabel, gbc);
+ return proxyPanel;
+ }
- gbc.gridx++;
- gbc.gridwidth = 4;
- gbc.anchor = GridBagConstraints.WEST;
- proxyPanel.add(proxyAuthUsernameTB, gbc);
+ public void proxyAuthPasswordCheckHighlight(boolean enabled)
+ {
+ if (enabled && proxyType.isSelected(customProxy.getModel())
+ && proxyAuth.isSelected()
+ && !proxyAuthUsernameTB.getText().isEmpty()
+ && proxyAuthPasswordPB.getDocument().getLength() == 0)
+ {
- gbc.gridy++;
- gbc.gridx = 0;
- gbc.gridwidth = 1;
- gbc.anchor = GridBagConstraints.EAST;
- proxyPanel.add(proxyAuthPasswordLabel, gbc);
+ proxyAuthPasswordPB.grabFocus();
+ proxyAuthPasswordPB.setBackground(Color.PINK);
+ }
+ else
+ {
+ proxyAuthPasswordPB.setBackground(Color.WHITE);
+ }
+ }
- gbc.gridx++;
- gbc.gridwidth = 4;
- gbc.anchor = GridBagConstraints.WEST;
- proxyPanel.add(proxyAuthPasswordTB, gbc);
+ public void applyProxyButtonEnabled(boolean enabled)
+ {
+ applyProxyButton.setEnabled(enabled);
+ }
- return proxyPanel;
+ public void saveProxySettings()
+ {
+ // overridden in Preferences
}
- private String displayHostPort(String host, String port)
+ private String displayUserHostPort(String user, String host, String port)
{
boolean hostBlank = (host == null || host.isEmpty());
boolean portBlank = (port == null || port.isEmpty());
}
StringBuilder sb = new StringBuilder();
+ if (user != null)
+ {
+ sb.append(user.isEmpty() || user.indexOf(" ") > -1 ? '"' + user + '"'
+ : user);
+ sb.append("@");
+ }
sb.append(hostBlank ? "" : host);
if (!portBlank)
{
boolean enabled = proxyAuth.isSelected() && proxyAuth.isEnabled();
proxyAuthUsernameLabel.setEnabled(enabled);
proxyAuthPasswordLabel.setEnabled(enabled);
+ passwordNotStoredLabel.setEnabled(enabled);
proxyAuthUsernameTB.setEnabled(enabled);
- proxyAuthPasswordTB.setEnabled(enabled);
+ proxyAuthPasswordPB.setEnabled(enabled);
}
public void setCustomProxyEnabled()
public void proxyType_actionPerformed()
{
setCustomProxyEnabled();
+ proxyAuthPasswordCheckHighlight(true);
+ applyProxyButtonEnabled(true);
}
public void proxyAuth_actionPerformed()
{
setProxyAuthEnabled();
+ proxyAuthPasswordCheckHighlight(true);
+ applyProxyButtonEnabled(true);
}
/**