1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
48
49 private ButtonGroup bgPlayer;
50 private JTextField jtfPlayerCommand;
51
52 private ButtonGroup bgLauncher;
53 private JTextField jtfLauncherCommand;
54
55
56
57 public ProgramPrefsPanel()
58 {
59 setLayout(new GridBagLayout());
60
61
62 CSH.setHelpIDString(this, "files-programs");
63
64
65 JPanel jpPlayer = new JPanel(new GridBagLayout());
66 jpPlayer.setBorder(GUIHelper.createDefaultBorder(XNap.tr("Player")));
67 GridBagHelper.add(this, jpPlayer);
68
69
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
92 GridBagHelper.addLabel(jpPlayer, XNap.tr("Command")).setLabelFor
93 (jtfPlayerCommand);
94 GridBagHelper.add(jpPlayer, jtfPlayerCommand);
95
96
97
98 CSH.setHelpIDString(jpPlayer, "files-programs-player");
99
100
101 JPanel jpFileLauncher = new JPanel(new GridBagLayout());
102 jpFileLauncher.setBorder
103 (GUIHelper.createDefaultBorder(XNap.tr("File Launcher")));
104 GridBagHelper.add(this, jpFileLauncher);
105
106
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
128 GridBagHelper.addLabel(jpFileLauncher, XNap.tr("Command")).setLabelFor
129 (jtfLauncherCommand);
130 GridBagHelper.add(jpFileLauncher, jtfLauncherCommand);
131
132
133 CSH.setHelpIDString(jpFileLauncher, "files-programs-filelauncher");
134
135 GridBagHelper.addVerticalSpacer(this);
136 GUIHelper.setMnemonics(this);
137 }
138
139
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
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
181
182 private Launcher launcher;
183
184
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
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
210
211 private JTextField jtfCommand;
212
213
214
215 public CommandListener(JTextField jtfCommand)
216 {
217 this.jtfCommand = jtfCommand;
218 }
219
220
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 }