//*****************************************************************************
//*
//* (c) Copyright 2005. Glub Tech, Incorporated. All Rights Reserved.
//*
//* $Id: PreferencesCommand.java 37 2009-05-11 22:46:15Z gary $
//*
//*****************************************************************************
package com.glub.secureftp.client.gui;
import com.glub.secureftp.client.framework.*;
import com.glub.gui.*;
import com.glub.util.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import javax.swing.*;
import javax.swing.border.*;
public class PreferencesCommand extends LocalCommand {
private JTextField globalURLField = null;
private JTextField proxyHostField = null;
private JTextField proxyPortField = null;
private JTextField proxyUserField = null;
private JPasswordField proxyPassField = null;
private JCheckBox hiddenFileCheckBox = null;
private JCheckBox showFullColumnCheckBox = null;
private JCheckBox modeZCheckBox = null;
private JCheckBox startOpenCheckBox = null;
private JCheckBox closeTabWarningCheckBox = null;
private JCheckBox forcePasvToUseControlCheckBox = null;
public PreferencesCommand() {
super("prefs", CommandID.PREFS_COMMAND_ID, "prefs");
}
public SecureFTPError doIt() throws CommandException {
LString title = new LString( "Prefs.title", "Preferences" );
String [] options = { LString.getString("Common.button.ok", "OK") };
JOptionPane.showOptionDialog( SecureFTP.getBaseFrame(),
getPrefsPanel(),
title.getString(),
JOptionPane.OK_OPTION,
JOptionPane.PLAIN_MESSAGE,
null, options, options[0] );
Client.setGlobalBookmarksURL( getGlobalURLField().getText() );
Client.setSocksHostName( getProxyHostField().getText() );
Client.setSocksPort( Util.parseInt(getProxyPortField().getText(), 1080) );
Client.setSocksUserName( getProxyUserField().getText() );
Client.setSocksPassword(new String(getProxyPassField().getPassword()));
Client.setShowHiddenFiles( getHiddenFileCheckBox().isSelected() );
Client.setShowFullColumnListing( getFullColumnCheckBox().isSelected() );
Client.setUseModeZCompression( getModeZCheckBox().isSelected() );
Client.setStartWithOpenDialog( getStartOpenCheckBox().isSelected() );
Client.setCloseTabWarning( getCloseTabWarningCheckBox().isSelected() );
Client.setForcePasvControlIP(
getForcePasvToUseControlCheckBox().isSelected() );
Client.setUseProxy(getProxyHostField().getText().trim().length() > 0 &&
getProxyPortField().getText().trim().length() > 0);
PreferencesDispatcher.doWritePrefs();
return new SecureFTPError();
}
private JPanel getPrefsPanel() {
JPanel panel = new JPanel();
panel.setLayout( new BoxLayout(panel, BoxLayout.Y_AXIS) );
panel.add( getURLPanel() );
panel.add( getProxyPanel() );
panel.add( getCheckBoxPanel() );
return panel;
}
private JPanel getURLPanel() {
JPanel panel = new JPanel( new SpringLayout() ) {
protected static final long serialVersionUID = 1L;
public Dimension getMaximumSize() {
Dimension pref = getPreferredSize();
return new Dimension( Integer.MAX_VALUE, pref.height );
}
};
LString title = new LString( "Prefs.global_book_url",
"Global Bookmarks URL:" );
panel.setBorder( new TitledBorder(title.getString()) );
panel.add( getGlobalURLField() );
Runnable r = new Runnable() {
public void run() {
getGlobalURLField().requestFocus();
getGlobalURLField().select(0, getGlobalURLField().getText().length());
getGlobalURLField().setCaretPosition( 0 );
}
};
SwingUtilities.invokeLater( r );
SpringUtilities.makeCompactGrid( panel,
1, 1, // rows, cols
10, 10, // init x, init y
10, 10 // pad x, pad y
);
return panel;
}
private JPanel getProxyPanel() {
JPanel panel = new JPanel( new SpringLayout() ) {
protected static final long serialVersionUID = 1L;
public Dimension getMaximumSize() {
Dimension pref = getPreferredSize();
return new Dimension( Integer.MAX_VALUE, pref.height );
}
};
panel.setBorder(
new TitledBorder(LString.getString("Prefs.proxy.title",
"SOCKS Proxy:")) );
String[] labelStrings = {
LString.getString( "Prefs.proxy_host", "Hostname:" ),
LString.getString( "Prefs.proxy_port", "Port:" ),
LString.getString( "Prefs.proxy_user", "Username:" ),
LString.getString( "Prefs.proxy_pass", "Password:" ),
};
JComponent[] fields = new JComponent[ labelStrings.length ];
int fieldNum = 0;
fields[ fieldNum++ ] = getProxyHostPanel();
fields[ fieldNum++ ] = getProxyPortPanel();
fields[ fieldNum++ ] = getProxyUserPanel();
fields[ fieldNum++ ] = getProxyPassPanel();
buildFields( panel, labelStrings, fields );
return panel;
}
private JPanel getCheckBoxPanel() {
JPanel panel = new JPanel( new SpringLayout() ) {
protected static final long serialVersionUID = 1L;
public Dimension getMaximumSize() {
Dimension pref = getPreferredSize();
return new Dimension( Integer.MAX_VALUE, pref.height );
}
};
int components = 0;
panel.add( getHiddenFileCheckBox() );
components++;
panel.add( getFullColumnCheckBox() );
components++;
panel.add( getModeZCheckBox() );
components++;
panel.add( getStartOpenCheckBox() );
components++;
panel.add( getCloseTabWarningCheckBox() );
components++;
panel.add( getForcePasvToUseControlCheckBox() );
components++;
SpringUtilities.makeCompactGrid( panel,
components, 1, // rows, cols
10, 10, // init x, init y
10, 10 // pad x, pad y
);
return panel;
}
protected JTextField getGlobalURLField() {
if ( null == globalURLField ) {
globalURLField = new JTextField(15);
URL url = Client.getGlobalBookmarksURL();
if ( null != url ) {
globalURLField.setText(url.toExternalForm());
}
}
return globalURLField;
}
protected JPanel getProxyHostPanel() {
JPanel panel = new JPanel( new BorderLayout() );
panel.add( getProxyHostField(), BorderLayout.WEST );
return panel;
}
protected JTextField getProxyHostField() {
if ( null == proxyHostField ) {
proxyHostField = new JTextField(15);
proxyHostField.setText(Client.getSocksHostName());
}
return proxyHostField;
}
protected JPanel getProxyPortPanel() {
JPanel panel = new JPanel( new BorderLayout() );
panel.add( getProxyPortField(), BorderLayout.WEST );
panel.add( Box.createHorizontalStrut(250), BorderLayout.EAST );
return panel;
}
protected JTextField getProxyPortField() {
if ( null == proxyPortField ) {
proxyPortField = new JTextField(5);
proxyPortField.setText((new Integer(Client.getSocksPort())).toString());
}
return proxyPortField;
}
protected JPanel getProxyUserPanel() {
JPanel panel = new JPanel( new BorderLayout() );
panel.add( getProxyUserField(), BorderLayout.WEST );
return panel;
}
protected JTextField getProxyUserField() {
if ( null == proxyUserField ) {
proxyUserField = new JTextField(15);
proxyUserField.setText(Client.getSocksUserName());
}
return proxyUserField;
}
protected JPanel getProxyPassPanel() {
JPanel panel = new JPanel( new BorderLayout() );
panel.add( getProxyPassField(), BorderLayout.WEST );
return panel;
}
protected JPasswordField getProxyPassField() {
if ( null == proxyPassField ) {
proxyPassField = new JPasswordField(15);
proxyPassField.setText(Client.getSocksPassword());
}
return proxyPassField;
}
protected JCheckBox getHiddenFileCheckBox() {
if ( null == hiddenFileCheckBox ) {
LString item = new LString("Prefs.show_hidden_files",
"Show Hidden Files");
hiddenFileCheckBox = new JCheckBox( item.getString() );
hiddenFileCheckBox.setSelected(Client.showHiddenFiles());
}
return hiddenFileCheckBox;
}
protected JCheckBox getFullColumnCheckBox() {
if ( null == showFullColumnCheckBox ) {
LString item = new LString("Prefs.show_full_column_listing",
"Show expanded remote directory information");
showFullColumnCheckBox = new JCheckBox( item.getString() );
showFullColumnCheckBox.setSelected(Client.showFullColumnListing());
}
return showFullColumnCheckBox;
}
protected JCheckBox getModeZCheckBox() {
if ( null == modeZCheckBox ) {
LString item = new LString("Prefs.use_mode_z_compression",
"Use Mode Z compression");
modeZCheckBox = new JCheckBox( item.getString() );
modeZCheckBox.setSelected(Client.useModeZCompression());
}
return modeZCheckBox;
}
protected JCheckBox getStartOpenCheckBox() {
if ( null == startOpenCheckBox ) {
LString item = new LString("Prefs.start_with_open",
"Show Open Connection Dialog on Startup");
startOpenCheckBox = new JCheckBox( item.getString() );
startOpenCheckBox.setSelected(Client.startWithOpenDialog());
}
return startOpenCheckBox;
}
protected JCheckBox getCloseTabWarningCheckBox() {
if ( null == closeTabWarningCheckBox ) {
LString item = new LString("Prefs.close_tab_warning",
"Show warning when disconnecting via tab");
closeTabWarningCheckBox = new JCheckBox( item.getString() );
closeTabWarningCheckBox.setSelected(Client.showCloseTabWarning());
}
return closeTabWarningCheckBox;
}
protected JCheckBox getForcePasvToUseControlCheckBox() {
if ( null == forcePasvToUseControlCheckBox ) {
LString item =
new LString("Prefs.pasv_control_ip",
"Force passive data connection to use control channel IP");
forcePasvToUseControlCheckBox = new JCheckBox( item.getString() );
forcePasvToUseControlCheckBox.setSelected(Client.forcePasvControlIP());
}
return forcePasvToUseControlCheckBox;
}
protected void buildFields( JPanel panel, String[] labelStrings,
JComponent[] fields ) {
JLabel[] labels = new JLabel[ labelStrings.length ];
for ( int i = 0; i < labelStrings.length; i++ ) {
labels[ i ] = new JLabel( labelStrings[i], JLabel.TRAILING );
labels[ i ].setLabelFor( fields[i] );
fields[ i ].addFocusListener( new FocusListener() {
public void focusGained( FocusEvent e ) {
Component c = e.getComponent();
if ( c instanceof JTextField ) {
((JTextField)c).selectAll();
}
}
public void focusLost( FocusEvent e ) {}
} );
panel.add( labels[i] );
panel.add( fields[i] );
}
SpringUtilities.makeCompactGrid( panel,
labelStrings.length, 2, // rows, cols
10, 10, // init x, init y
10, 10 // pad x, pad y
);
}
}