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.gui.prefs;
21  
22  import java.awt.GridBagLayout;
23  import java.awt.GridLayout;
24  import java.awt.event.ActionEvent;
25  import java.awt.event.ActionListener;
26  import java.util.Enumeration;
27  import java.util.Iterator;
28  
29  import javax.help.CSH;
30  import javax.swing.ButtonGroup;
31  import javax.swing.JPanel;
32  import javax.swing.JRadioButton;
33  import javax.swing.JTextField;
34  
35  import org.xnap.XNap;
36  import org.xnap.gui.AbstractSettingsPanel;
37  import org.xnap.gui.util.GUIHelper;
38  import org.xnap.gui.util.GridBagHelper;
39  import org.xnap.util.launcher.Launcher;
40  import org.xnap.util.launcher.LauncherManager;
41  import org.xnap.util.launcher.Player;
42  import org.xnap.util.launcher.PlayerManager;
43  
44  public class ProgramPrefsPanel extends AbstractSettingsPanel 
45  {
46  
47      //--- Data field(s) ---
48  
49      private ButtonGroup bgPlayer;
50      private JTextField jtfPlayerCommand;
51  
52      private ButtonGroup bgLauncher;
53      private JTextField jtfLauncherCommand;
54  
55      //--- Constructor(s) ---
56  
57      public ProgramPrefsPanel()
58      {
59  		setLayout(new GridBagLayout());
60  
61  		// help
62  		CSH.setHelpIDString(this, "files-programs");
63  
64  		// player
65  		JPanel jpPlayer = new JPanel(new GridBagLayout());
66  		jpPlayer.setBorder(GUIHelper.createDefaultBorder(XNap.tr("Player")));
67  		GridBagHelper.add(this, jpPlayer);
68  
69  		// player type
70  		bgPlayer = new ButtonGroup();
71  		JPanel jpPlayerType = new JPanel(new GridLayout(0, 2));
72  		GridBagHelper.add(jpPlayer, jpPlayerType);
73  
74          jtfPlayerCommand = new JTextField(20);
75  		CommandListener listener = new CommandListener(jtfPlayerCommand);
76  		
77  		for (Iterator i = PlayerManager.getInstance().iterator(); 
78  			 i.hasNext();) {
79  			Player player = (Player)i.next();
80  			JRadioButton jrb = new LauncherRadioButton(player);
81  			jrb.addActionListener(listener);
82  			if (prefs.getPlayerType().equals(player.getKey())) {
83  				jrb.setSelected(true);
84  				jtfPlayerCommand.setText(player.getCommand());
85  				jtfPlayerCommand.setEnabled(player.isEditable());
86  			}
87  			bgPlayer.add(jrb);
88  			jpPlayerType.add(jrb);
89  		}
90  
91  		// player command
92          GridBagHelper.addLabel(jpPlayer, XNap.tr("Command")).setLabelFor
93  			(jtfPlayerCommand);
94  		GridBagHelper.add(jpPlayer, jtfPlayerCommand);
95      
96  
97  		// help
98  		CSH.setHelpIDString(jpPlayer, "files-programs-player");
99  
100 		// file launcher
101 		JPanel jpFileLauncher = new JPanel(new GridBagLayout());
102 		jpFileLauncher.setBorder
103 			(GUIHelper.createDefaultBorder(XNap.tr("File Launcher")));
104 		GridBagHelper.add(this, jpFileLauncher);
105 
106 		// file launcher type
107 		bgLauncher = new ButtonGroup();
108 		JPanel jpFileLauncherType = new JPanel(new GridLayout(0, 2));
109 		GridBagHelper.add(jpFileLauncher, jpFileLauncherType);
110 
111         jtfLauncherCommand = new JTextField(20);
112 		listener = new CommandListener(jtfLauncherCommand);
113 		for (Iterator i = LauncherManager.getInstance().iterator(); 
114 			 i.hasNext();) {
115 			Launcher launcher = (Launcher)i.next();
116 			JRadioButton jrb = new LauncherRadioButton(launcher);
117 			jrb.addActionListener(listener);
118 			if (prefs.getFileLauncherType().equals(launcher.getKey())) {
119 				jrb.setSelected(true);
120 				jtfLauncherCommand.setText(launcher.getCommand());
121 				jtfLauncherCommand.setEnabled(launcher.isEditable());
122 			}
123 			bgLauncher.add(jrb);
124 			jpFileLauncherType.add(jrb);
125 		}
126 
127 		// file launcher command
128         GridBagHelper.addLabel(jpFileLauncher, XNap.tr("Command")).setLabelFor
129 			(jtfLauncherCommand);
130 		GridBagHelper.add(jpFileLauncher, jtfLauncherCommand);
131 
132 		// help
133 		CSH.setHelpIDString(jpFileLauncher, "files-programs-filelauncher");
134 
135 		GridBagHelper.addVerticalSpacer(this);
136 		GUIHelper.setMnemonics(this);
137     }
138 
139     //--- Method(s) ---
140 
141     public void apply() 
142     {
143 		prefs.setPlayerType(getSelectedLauncherKey(bgPlayer));
144 		prefs.setPlayerCommand(jtfPlayerCommand.getText());
145 
146 		prefs.setFileLauncherType(getSelectedLauncherKey(bgLauncher));
147 		prefs.setFileLauncherCmd(jtfLauncherCommand.getText());
148     }
149 
150     /***
151      * Iterates over <code>bg</code> and returns the selected launcher key.
152      *
153      * @return empty string if no launcher is selected
154      */
155     public String getSelectedLauncherKey(ButtonGroup bg)
156     {
157 		for (Enumeration e = bg.getElements(); e.hasMoreElements();) {
158 			LauncherRadioButton lrb = (LauncherRadioButton)e.nextElement();
159 			if (lrb.isSelected()) {
160 				return lrb.getLauncher().getKey();
161 			}
162 		}
163 
164 		return "";
165     }
166 
167     public String getTitle()
168     {
169 		return XNap.tr("Programs");
170     }
171 
172     //--- Inner Class(es) ---
173 
174     /***
175      * Stores the {@link Launcher} object that is associated with the 
176      * {@link JRadioButton}.
177      */
178     private class LauncherRadioButton extends JRadioButton {
179 
180 		//--- Data field(s) ---
181 	
182 		private Launcher launcher;
183 
184 		//--- Constructor(s) ---
185 	
186 		public LauncherRadioButton(Launcher launcher)
187 		{
188 			super(launcher.getName());
189 
190 			this.launcher = launcher;
191 
192 			this.setEnabled(launcher.isEnabled());
193 		}
194 
195 		//--- Method(s) ---
196 	
197 		public Launcher getLauncher()
198 		{
199 			return launcher;
200 		}
201 
202     }
203 
204     /***
205      * Sets the command if a launcher or player is selected.
206      */
207     private class CommandListener implements ActionListener {
208 
209 		//--- Data field(s) ---
210 
211 		private JTextField jtfCommand;
212 
213 		//--- Constructor(s) ---
214 	
215 		public CommandListener(JTextField jtfCommand)
216 		{
217 			this.jtfCommand = jtfCommand;
218 		}
219 
220 		//--- Method(s) ---
221 	
222 		public void actionPerformed(ActionEvent event)
223 		{
224 			LauncherRadioButton lrb = (LauncherRadioButton)event.getSource();
225 			jtfCommand.setText(lrb.getLauncher().getCommand());
226 			jtfCommand.setEnabled(lrb.getLauncher().isEditable());
227 		}
228 
229     }
230 
231     
232 }