/* * WelcomeWindow.java * * Created on Apr 4, 2009, 2:26:28 PM * * This file is a part of Shoddy Battle. * Copyright (C) 2009 Catherine Fitzpatrick and Benjamin Gwin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program; if not, visit the Free Software Foundation, Inc. * online at http://gnu.org. */ package shoddybattleclient; import java.awt.event.MouseEvent; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; import java.net.URL; import java.net.UnknownHostException; import java.util.List; import java.util.ArrayList; import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; import javax.swing.UIManager; import shoddybattleclient.network.ServerLink; import shoddybattleclient.shoddybattle.Generation; import shoddybattleclient.shoddybattle.PokemonMove; import shoddybattleclient.shoddybattle.PokemonSpecies; import shoddybattleclient.utils.*; /** * * @author ben */ public class WelcomeWindow extends javax.swing.JFrame { public static class ServerListEntry { private String m_host; private int m_port; private String m_name; private int m_users; private int m_maxUsers; private String m_desc; public ServerListEntry(String name, String desc, String host, int port, int users, int maxUsers) { m_name = name; m_desc = desc; m_host = host; m_port = port; m_users = users; m_maxUsers = maxUsers; } public String getName() { return m_name; } public String getHost() { return m_host; } public int getPort() { return m_port; } public void setUsers(int users) { m_users = users; } public int getUsers() { return m_users; } public int getMaxUsers() { return m_maxUsers; } public String getDescription() { return m_desc; } @Override public String toString() { return m_name; } } private ServerListEntry[] getServerListEntries() { /** * TODO: In the future, this will obtain the list of servers from a * metaserver of some sort rather than being hardcoded. */ ServerListEntry sle = new ServerListEntry("Pokemonexperte", "Pokemonexperte Server", "lab.pokemonexperte.de", 8446, 0, 500); /**ServerListEntry sle3 = new ServerListEntry("Pokemonexperte", "A german server.", "shoddy.pokemonexperte.com", 1234, 5, 250); ServerListEntry sle4 = new ServerListEntry("Local Server", "This is only for testing", "localhost", 9000, 0, 250);**/ return new ServerListEntry[] { sle /**, sle4 **/ }; } private void refreshServerList() { ServerListEntry[] entries = getServerListEntries(); ServerListEntry selected = (ServerListEntry)lstServers.getSelectedValue(); ServerListEntry jump = null; if (selected != null) { for (ServerListEntry i : entries) { if (i.getName().equals(selected.getName())) { jump = i; break; } } } lstServers.setModel(new ServerListModel(entries, new Runnable() { @Override public void run() { lstServers.repaint(); } })); lstServers.setCellRenderer(new ServerListRenderer()); if (jump != null) { lstServers.setSelectedValue(jump, true); } lstServers.repaint(); } /** Creates new form WelcomeWindow */ public WelcomeWindow() { initComponents(); refreshServerList(); } public static boolean connect(String host, int port) { ServerLink link; try { link = new ServerLink(host, port); } catch(UnknownHostException e) { JOptionPane.showMessageDialog(null, "Invalid host"); return false; } catch (Exception e) { JOptionPane.showMessageDialog(null, e.getMessage()); return false; } link.start(); return true; } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jButton1 = new javax.swing.JButton(); serverListPane = new javax.swing.JScrollPane(); lstServers = new javax.swing.JList(); btnConnect = new javax.swing.JButton(); btnAdvanced = new javax.swing.JButton(); btnRefresh = new javax.swing.JButton(); jMenuBar1 = new javax.swing.JMenuBar(); jMenu1 = new javax.swing.JMenu(); cmdTeamBuilder = new javax.swing.JMenuItem(); mnuPreferences = new javax.swing.JMenuItem(); jButton1.setText("jButton1"); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("Pokemon Lab - Server List"); setLocationByPlatform(true); lstServers.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { lstServersMouseClicked(evt); } }); lstServers.addListSelectionListener(new javax.swing.event.ListSelectionListener() { public void valueChanged(javax.swing.event.ListSelectionEvent evt) { lstServersValueChanged(evt); } }); serverListPane.setViewportView(lstServers); btnConnect.setText("Connect"); btnConnect.setEnabled(false); btnConnect.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnConnectActionPerformed(evt); } }); btnAdvanced.setText("Advanced"); btnAdvanced.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnAdvancedActionPerformed(evt); } }); btnRefresh.setText("Refresh"); btnRefresh.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnRefreshActionPerformed(evt); } }); jMenu1.setText("File"); cmdTeamBuilder.setText("Open Team Builder"); cmdTeamBuilder.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cmdTeamBuilderActionPerformed(evt); } }); jMenu1.add(cmdTeamBuilder); mnuPreferences.setText("Preferences"); mnuPreferences.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { mnuPreferencesActionPerformed(evt); } }); jMenu1.add(mnuPreferences); jMenuBar1.add(jMenu1); setJMenuBar(jMenuBar1); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(serverListPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 429, Short.MAX_VALUE) .add(layout.createSequentialGroup() .add(btnConnect) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(btnAdvanced) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 223, Short.MAX_VALUE) .add(btnRefresh))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() .addContainerGap() .add(serverListPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 185, Short.MAX_VALUE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(btnConnect) .add(btnRefresh) .add(btnAdvanced)) .addContainerGap()) ); pack(); }// </editor-fold>//GEN-END:initComponents private void cmdTeamBuilderActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdTeamBuilderActionPerformed new TeamBuilder(Generation.loadGeneration()).setVisible(true); }//GEN-LAST:event_cmdTeamBuilderActionPerformed private void lstServersMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lstServersMouseClicked if ((evt.getClickCount() == 2) && (evt.getButton() == MouseEvent.BUTTON1)) { ServerListEntry sle = (ServerListEntry)lstServers.getModel() .getElementAt(lstServers.getSelectedIndex()); if (sle != null) { if (connect(sle.getHost(), sle.getPort())) { dispose(); } } } }//GEN-LAST:event_lstServersMouseClicked private void btnConnectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnConnectActionPerformed ServerListEntry sle = (ServerListEntry)lstServers.getModel() .getElementAt(lstServers.getSelectedIndex()); if (sle != null) { if (connect(sle.getHost(), sle.getPort())) { dispose(); } } }//GEN-LAST:event_btnConnectActionPerformed private void btnAdvancedActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAdvancedActionPerformed new AdvancedDialog(this).setVisible(true); }//GEN-LAST:event_btnAdvancedActionPerformed private void mnuPreferencesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuPreferencesActionPerformed new PreferencePane().setVisible(true); }//GEN-LAST:event_mnuPreferencesActionPerformed private void lstServersValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_lstServersValueChanged Object selection = lstServers.getSelectedValue(); btnConnect.setEnabled(selection != null); }//GEN-LAST:event_lstServersValueChanged private void btnRefreshActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRefreshActionPerformed refreshServerList(); }//GEN-LAST:event_btnRefreshActionPerformed /** * Main entry point for Shoddy Battle 2 */ public static void main(String args[]) { try { //UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); //UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); System.setProperty("apple.laf.useScreenMenuBar", "true"); } catch (Exception e) { System.out.println("Failed to set look and feel"); } Text.loadText("english.lang"); if (Preference.getStorageLocation() == null) { FirstLaunch.initialiseLocalStorage(); } else { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new WelcomeWindow().setVisible(true); } }); } /*System.setErr(new PrintStream(new OutputStream() { ErrorBox m_box = new ErrorBox(); @Override public void write(final int b) throws IOException { SwingUtilities.invokeLater(new Runnable() { public void run() { m_box.append(b); } }); } }));*/ } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton btnAdvanced; private javax.swing.JButton btnConnect; private javax.swing.JButton btnRefresh; private javax.swing.JMenuItem cmdTeamBuilder; private javax.swing.JButton jButton1; private javax.swing.JMenu jMenu1; private javax.swing.JMenuBar jMenuBar1; private javax.swing.JList lstServers; private javax.swing.JMenuItem mnuPreferences; private javax.swing.JScrollPane serverListPane; // End of variables declaration//GEN-END:variables }