View Javadoc

1   /*
2    *  XNap - A P2P framework and client.
3    *
4    *  See the file AUTHORS for copyright information.
5    *
6    *  This program is free software; you can redistribute it and/or modify
7    *  it under the terms of the GNU General Public License as published by
8    *  the Free Software Foundation.
9    *
10   *  This program is distributed in the hope that it will be useful,
11   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   *  GNU General Public License for more details.
14   *
15   *  You should have received a copy of the GNU General Public License
16   *  along with this program; if not, write to the Free Software
17   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18   */
19  
20  package org.xnap.plugin.overnet.gui;
21  
22  import java.awt.Component;
23  import java.awt.GridBagLayout;
24  
25  import javax.swing.*;
26  import javax.swing.JPanel;
27  import javax.swing.JTextField;
28  import javax.swing.event.DocumentEvent;
29  import org.apache.log4j.Logger;
30  import org.xnap.XNap;
31  import org.xnap.gui.AbstractSettingsPanel;
32  import org.xnap.gui.action.EnableAction;
33  import org.xnap.gui.component.*;
34  import org.xnap.gui.component.ValidatedTextField;
35  import org.xnap.gui.component.XNapCheckBox;
36  import org.xnap.gui.util.GUIHelper;
37  import org.xnap.gui.util.GridBagHelper;
38  import org.xnap.plugin.overnet.OvernetPlugin;
39  import org.xnap.plugin.overnet.util.OvernetPreferences;
40  
41  public class OvernetPreferencesPanel extends AbstractSettingsPanel
42  {
43  	//--- Constant(s) ---
44  	
45  	//--- Data field(s) ---
46  	
47  	private FilePanel fpCoreCommand;
48  	private JTextField jteCommandLineOption;
49  	private JCheckBox jcbCommandLineOption;
50  
51  	private JTextField jteCoreHost;
52  	private JTextField jteUsername;
53  	private JTextField jtePassword;
54  	private JTextField jteCorehost;
55  	private JCheckBox jcbStartCore;
56  	private JCheckBox jcbAutoConnect;
57  	private ValidatedTextField jteCorePort;
58  	private JCheckBox jcbUseXNapDirs;
59  
60  
61  	private OvernetPreferences prefs = OvernetPreferences.getInstance();
62  
63      private static Logger logger = Logger.getLogger(OvernetPreferencesPanel.class);
64  	
65  	//--- Constructor(s) ---
66  	
67      public OvernetPreferencesPanel()
68  	{
69  		setLayout(new GridBagLayout());
70  
71  		JPanel jpCommand = new JPanel(new GridBagLayout());
72  		jpCommand.setBorder(GUIHelper.createDefaultBorder(XNap.tr("Core Command")));
73  		GridBagHelper.add(this, jpCommand);
74  
75  		fpCoreCommand = new FilePanel(prefs.getCoreCommand(), 20);
76  
77  		EnableAction acStartCore = new EnableAction
78  			(XNap.tr("Launch Core on Startup"),
79  			 new Component[] { fpCoreCommand },
80  			 prefs.getStartCore());
81  		jcbStartCore = new XNapCheckBox(acStartCore);
82  
83  		GridBagHelper.addComponent(jpCommand, jcbStartCore);
84  		GridBagHelper.add(jpCommand, fpCoreCommand);
85  
86  		jteCommandLineOption = new ValidatedTextField
87  			(prefs.getCommandLineOption(), 5, 
88  			 ValidatedTextField.ALPHA_NUM + "-");
89  		acStartCore = new EnableAction
90  			(XNap.tr("Custom command line option"),
91  			 new Component[] { jteCommandLineOption }, 
92  			 prefs.getUseCustomCommandLineOption());
93  			 
94  		jcbCommandLineOption = new XNapCheckBox(acStartCore);
95  
96  		GridBagHelper.addComponent(jpCommand, jcbCommandLineOption);
97  		GridBagHelper.add(jpCommand, jteCommandLineOption, false);
98  
99  		// add listener
100 		fpCoreCommand.getTextField().getDocument()
101 			.addDocumentListener(new CommandChangedListener());
102 
103 		JPanel jpAddress = new JPanel(new GridBagLayout());
104 		jpAddress.setBorder(GUIHelper.createDefaultBorder(XNap.tr("Core Address")));
105 		GridBagHelper.add(this, jpAddress);
106 
107 		JLabel l = GridBagHelper.addLabel(jpAddress, XNap.tr("Host"));
108         jteCoreHost = new JTextField(prefs.getCoreHost(), 20);
109 		l.setLabelFor(jteCoreHost);
110         GridBagHelper.add(jpAddress, jteCoreHost, false);
111 
112 		l = GridBagHelper.addLabel(jpAddress, XNap.tr("Port"));
113         jteCorePort = new ValidatedTextField(prefs.getCorePort() + "", 5,
114 											 ValidatedTextField.NUMBERS_INT);
115 		l.setLabelFor(jteCorePort);
116         GridBagHelper.add(jpAddress, jteCorePort, false);
117 
118 		l = GridBagHelper.addLabel(jpAddress, XNap.tr("Admin Name"));
119         jteUsername = new JTextField(prefs.getUsername(), 20);
120 		l.setLabelFor(jteUsername);
121         GridBagHelper.add(jpAddress, jteUsername, false);
122 
123 		l = GridBagHelper.addLabel(jpAddress, XNap.tr("Admin Password"));
124         jtePassword = new JTextField(prefs.getPassword(), 20);
125 		l.setLabelFor(jtePassword);
126         GridBagHelper.add(jpAddress, jtePassword, false);	
127 
128 		jcbAutoConnect = new JCheckBox
129 			(XNap.tr("Connect to Core on Startup", 1), prefs.getAutoconnect());
130 		GridBagHelper.add(jpAddress, jcbAutoConnect);
131 
132 		jcbUseXNapDirs = new JCheckBox
133 			(XNap.tr("Use XNap's download and incomplete directory."),
134 			 prefs.getUseXNapDownloadDirs());
135 
136 		GridBagHelper.add(this, jcbUseXNapDirs);
137 
138 		GridBagHelper.addVerticalSpacer(this);
139 		GUIHelper.setMnemonics(this);
140 	}
141 
142     //--- Method(s) ---
143 
144 	public void apply()
145 	{
146 		prefs.setAutoconnect(jcbAutoConnect.isSelected());
147 		prefs.setCommandLineOption(jteCommandLineOption.getText());
148 		prefs.setCoreCommand(fpCoreCommand.getFilename());
149 		prefs.setCoreHost(jteCoreHost.getText());
150 		prefs.setCorePort(jteCorePort.getIntValue());
151 		prefs.setStartCore(jcbStartCore.isSelected());
152 		prefs.setUsername(jteUsername.getText());
153 		prefs.setPassword(jtePassword.getText());
154 		prefs.setUseCustomCommandLineOption(jcbCommandLineOption.isSelected());
155 		prefs.setUseXNapDownloadDirs(jcbUseXNapDirs.isSelected());
156 	}
157 
158 	public String getTitle()
159 	{
160 		return OvernetPlugin.getInstance().getName();
161 	}
162 
163 	public String getDescription()
164 	{
165 		return XNap.tr("Overnet configuration.");
166 	}
167 	
168 	private class CommandChangedListener extends DocumentAdapter
169 	{
170 		public void insertUpdate(DocumentEvent e)
171 		{
172 			if (!jcbCommandLineOption.isSelected()) {
173 				jteCommandLineOption.setText
174 					(OvernetPlugin.getCommandLineOptions
175 					 (fpCoreCommand.getFilename()));
176 			}
177 		}
178 	}
179 }