Source code: org/relayirc/swingui/SetServerPanel.java
1
2 /*
3 * FILE: SetServerPanel.java
4 *
5 * The contents of this file are subject to the Mozilla Public License
6 * Version 1.0 (the "License"); you may not use this file except in
7 * compliance with the License. You may obtain a copy of the License at
8 * http://www.mozilla.org/MPL/
9 *
10 * Software distributed under the License is distributed on an "AS IS"
11 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
12 * License for the specific language governing rights and limitations
13 * under the License.
14 *
15 * The Original Code is Relay IRC chat client.
16 *
17 * The Initial Developer of the Original Code is David M. Johnson.
18 * Portions created by David M. Johnson are Copyright (C) 1998.
19 * All Rights Reserved.
20 *
21 * Contributor(s): No contributors to this file.
22 */
23 package org.relayirc.swingui;
24 import org.relayirc.chatengine.*;
25 import org.relayirc.swingutil.*;
26 import org.relayirc.util.*;
27
28 import java.util.*;
29
30 // These imports are only needed for debugging
31 import java.io.*;
32 import java.awt.*;
33 import java.awt.event.*;
34 import javax.swing.*;
35
36 /**
37 * Allows user to choose one server from the server list using
38 * three combo boxes: one for selecting the network, one for selecting
39 * the server and one for selecting the port.
40 *
41 * @author David M. Johnson
42 */
43 public class SetServerPanel extends javax.swing.JPanel {
44
45 private ServerList _servers = new ServerList(); // empty server list
46 private ChatOptions _options = new ChatOptions(); // empty options object
47
48 // Variables declaration - do not modify//GEN-BEGIN:variables
49 private javax.swing.JComboBox _groupCombo;
50 private javax.swing.JComboBox _serverCombo;
51 private javax.swing.JComboBox _portCombo;
52 private javax.swing.JLabel _groupLabel;
53 private javax.swing.JLabel _serverLabel;
54 private javax.swing.JLabel _portLabel;
55 // End of variables declaration//GEN-END:variables
56
57
58 //-----------------------------------------------------------------
59 /** Initializes the Form */
60 public SetServerPanel() {
61 initComponents ();
62 }
63 //-----------------------------------------------------------------
64 public void loadServerList(ServerList servers, ChatOptions options) {
65 _servers = servers;
66 _options = options;
67
68 // Load the group combo with group names
69 if (_groupCombo.getItemCount() > 0) {
70 _groupCombo.removeAllItems();
71 }
72 Hashtable groupHash = new Hashtable();
73 for (int i=0; i<servers.getServerCount(); i++) {
74 groupHash.put(servers.getServerAt(i).getGroup().trim(),"dummy");
75 }
76 Vector groups = new Vector();
77 for (Enumeration e = groupHash.keys() ; e.hasMoreElements() ;) {
78 groups.addElement(new ComparableString((String)e.nextElement()));
79 }
80 QuickSort.quicksort(groups,true);
81 for (Enumeration e = groups.elements() ; e.hasMoreElements() ;) {
82 String gname = ((ComparableString)e.nextElement()).getString();
83 _groupCombo.addItem(gname);
84 }
85
86 if (_options.getServer() != null) {
87 _groupCombo.setSelectedItem(_options.getServer().getGroup().trim());
88 _serverCombo.setSelectedItem(
89 new GuiObject(_options.getServer().getName(),_options.getServer()));
90 _portCombo.setSelectedItem(new Integer(_options.getServer().getPort()));
91 }
92 }
93 //-----------------------------------------------------------------
94 /**
95 * Returns server object currently specified by fields on panel.
96 * Will create new server object if necessary and possible.
97 * @return Server object specified by fields on panel or null on error.
98 */
99 public Server getServerObject() {
100
101 if (_serverCombo.getSelectedItem() == null) {
102 return null;
103 }
104 if (_serverCombo.getSelectedItem() instanceof GuiObject) {
105 return (Server)((GuiObject)_serverCombo.getSelectedItem()).getObject();
106 }
107 else if (_serverCombo.getSelectedItem() instanceof String) {
108
109 // Create new server based on combos
110 String server = ((String)_serverCombo.getSelectedItem()).trim();
111 if (server.length() != 0) {
112 String group = getGroup().trim();
113 group = group!=null ? group : new String();
114 int port = getPort();
115 port = port!=-1 ? port : 6667; // use 6667 if port is not valid int
116
117 Server newServer = new Server(server,port,group);
118 _servers.addServer(newServer);
119 return newServer;
120 }
121 }
122 return null;
123 }
124 //-----------------------------------------------------------------
125 private void groupChanged() {
126 if (_serverCombo.getItemCount() > 0) {
127 _serverCombo.removeAllItems();
128 }
129 if (_portCombo.getItemCount() > 0) {
130 _portCombo.removeAllItems();
131 }
132 if (_groupCombo.getSelectedItem() != null) {
133
134 // Load the server combo with server objects
135 if (_groupCombo.getSelectedItem() instanceof String) {
136
137 String groupName = (String)_groupCombo.getSelectedItem();
138 for (int i=0; i<_servers.getServerCount(); i++) {
139
140 Server server = _servers.getServerAt(i);
141
142 if (server.getGroup().equals(groupName)) {
143 GuiObject gobj = new GuiObject(server.getName(),server);
144 gobj.setStringLength(30);
145 _serverCombo.addItem(gobj);
146 }
147 }
148 }
149
150 }
151 }
152 //-----------------------------------------------------------------
153 private void serverChanged() {
154
155 if (_serverCombo.getSelectedItem() != null) {
156
157 // Load the port combo based on the server selection
158 if (_serverCombo.getSelectedItem() instanceof GuiObject) {
159 if (_portCombo.getItemCount() > 0) {
160 _portCombo.removeAllItems();
161 }
162 Server server = (Server)((GuiObject)_serverCombo.getSelectedItem()).getObject();
163 for (int i=0; i<server.getPorts().length; i++) {
164 _portCombo.addItem(new Integer(server.getPorts()[i]));
165 }
166 }
167 }
168 }
169 //-----------------------------------------------------------------
170 /** Returns server host name as a string. */
171 public String getServerString() {
172 String serverString = null;
173 if (_serverCombo.getSelectedItem() != null) {
174 if (_serverCombo.getSelectedItem() instanceof String) {
175 serverString = (String)_serverCombo.getSelectedItem();
176 }
177 else if (_serverCombo.getSelectedItem() instanceof GuiObject) {
178 Server svr = (Server)((GuiObject)_serverCombo.getSelectedItem()).getObject();
179 serverString = svr.getName();
180 }
181 }
182 return serverString;
183 }
184 //-----------------------------------------------------------------
185 /** Returns selected group. */
186 public String getGroup() {
187 if (_groupCombo.getSelectedItem() != null) {
188 if (_groupCombo.getSelectedItem() instanceof String) {
189 return (String)_groupCombo.getSelectedItem();
190 }
191 }
192 return null;
193 }
194 //-----------------------------------------------------------------
195 /** Return selected port number or -1 on error */
196 public int getPort() {
197 if (_portCombo.getSelectedItem() != null) {
198 if (_portCombo.getSelectedItem() instanceof String) {
199 String portString = (String)_portCombo.getSelectedItem();
200 try {
201 return Integer.parseInt(portString);
202 }
203 catch (NumberFormatException ex) {
204 return -1;
205 }
206 }
207 else if (_portCombo.getSelectedItem() instanceof Integer) {
208 Integer i = (Integer)_portCombo.getSelectedItem();
209 return i.intValue();
210 }
211 }
212 return -1;
213 }
214 //-----------------------------------------------------------------
215
216 /** This method is called from within the constructor to
217 * initialize the form.
218 * WARNING: Do NOT modify this code. The content of this method is
219 * always regenerated by the FormEditor.
220 */
221 private void initComponents () {//GEN-BEGIN:initComponents
222
223 setLayout (new java.awt.GridBagLayout ());
224 java.awt.GridBagConstraints gridBagConstraints1;
225
226 _groupCombo = new javax.swing.JComboBox ();
227 _groupCombo.setEditable (true);
228 _groupCombo.addItemListener (new java.awt.event.ItemListener () {
229 public void itemStateChanged (java.awt.event.ItemEvent evt) {
230 _groupComboItemStateChanged (evt);
231 }
232 }
233 );
234 gridBagConstraints1 = new java.awt.GridBagConstraints ();
235 gridBagConstraints1.gridx = 0;
236 gridBagConstraints1.gridy = 1;
237 add (_groupCombo, gridBagConstraints1);
238
239 _serverCombo = new javax.swing.JComboBox ();
240 _serverCombo.setEditable (true);
241 _serverCombo.addItemListener (new java.awt.event.ItemListener () {
242 public void itemStateChanged (java.awt.event.ItemEvent evt) {
243 _serverComboItemStateChanged (evt);
244 }
245 }
246 );
247 gridBagConstraints1 = new java.awt.GridBagConstraints ();
248 gridBagConstraints1.gridy = 1;
249 add (_serverCombo, gridBagConstraints1);
250
251 _portCombo = new javax.swing.JComboBox ();
252 _portCombo.setEditable (true);
253 gridBagConstraints1 = new java.awt.GridBagConstraints ();
254 gridBagConstraints1.gridx = 2;
255 gridBagConstraints1.gridy = 1;
256 add (_portCombo, gridBagConstraints1);
257
258 _groupLabel = new javax.swing.JLabel ();
259 _groupLabel.setText ("Group");
260 gridBagConstraints1 = new java.awt.GridBagConstraints ();
261 add (_groupLabel, gridBagConstraints1);
262
263 _serverLabel = new javax.swing.JLabel ();
264 _serverLabel.setText ("Server");
265 gridBagConstraints1 = new java.awt.GridBagConstraints ();
266 add (_serverLabel, gridBagConstraints1);
267
268 _portLabel = new javax.swing.JLabel ();
269 _portLabel.setText ("Port");
270 gridBagConstraints1 = new java.awt.GridBagConstraints ();
271 add (_portLabel, gridBagConstraints1);
272
273 }//GEN-END:initComponents
274
275
276 //-----------------------------------------------------------------
277 private void _serverComboItemStateChanged (java.awt.event.ItemEvent evt) {//GEN-FIRST:event__serverComboItemStateChanged
278 // Add your handling code here:
279 serverChanged();
280 }//GEN-LAST:event__serverComboItemStateChanged
281
282 //-----------------------------------------------------------------
283 private void _groupComboItemStateChanged (java.awt.event.ItemEvent evt) {//GEN-FIRST:event__groupComboItemStateChanged
284 // Add your handling code here:
285 groupChanged();
286 }//GEN-LAST:event__groupComboItemStateChanged
287
288
289 //-----------------------------------------------------------------
290 public static void main(String args[]) {
291
292 try {
293
294 ChatOptions options = new ChatOptions();
295
296 ServerList list = new ServerList();
297 list.importMircFile(new File("servers.ini"));
298
299 final SetServerPanel panel = new SetServerPanel();
300 panel.loadServerList(list,options);
301
302 JFrame frame = new JFrame();
303 frame.getContentPane().setLayout(new BorderLayout());
304 frame.setSize(500,100);
305 frame.setVisible(true);
306
307 frame.getContentPane().add(panel,BorderLayout.CENTER);
308
309 JButton btn = new JButton("OK");
310 btn.addActionListener(new ActionListener() {
311 public void actionPerformed(ActionEvent ev) {
312 Server svr = panel.getServerObject();
313 try {
314 System.out.println("Server: "+panel.getServerObject());
315 }
316 catch (NullPointerException ex) {
317 System.out.println("Server: null");
318 }
319 finally {
320 System.exit(0);
321 }
322 }
323 });
324 frame.getContentPane().add(btn,BorderLayout.SOUTH);
325
326 frame.pack();
327
328 }
329 catch (Exception e) {
330 e.printStackTrace();
331 }
332 }
333
334 }