/* * FindPanel.java * * Created on May 29, 2009, 3:12:27 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.forms; import java.awt.FileDialog; import java.util.Arrays; import java.util.Collections; import java.util.List; import javax.swing.JOptionPane; import shoddybattleclient.forms.UserPanel.TeamBox; import shoddybattleclient.network.ServerLink; import shoddybattleclient.shoddybattle.Generation; import shoddybattleclient.shoddybattle.Generation.Metagame; import shoddybattleclient.shoddybattle.Pokemon; /** * * @author ben */ public class FindPanel extends javax.swing.JPanel { private ServerLink m_link; private Pokemon[] m_team; /** Creates new form FindPanel */ public FindPanel(ServerLink link) { initComponents(); m_link = link; } public void updateMetagames() { cmbGeneration.removeAllItems(); for (Generation gen : m_link.getGenerations()) { cmbGeneration.addItem(gen); } } public void unsetTeam() { ((TeamBox)panelSprites).reset(); btnLoad.setEnabled(true); btnCancel.setEnabled(false); } private String getFriendlyPartySize(int partySize) { String[] partySizes = new String[] {"Singles", "Doubles"}; if (partySize <= partySizes.length) { return partySizes[partySize - 1]; } return partySize + " vs " + partySize; } /** 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() { java.awt.GridBagConstraints gridBagConstraints; jPanel5 = new javax.swing.JPanel(); jPanel1 = new javax.swing.JPanel(); btnLoad = new javax.swing.JButton(); chkRated = new javax.swing.JCheckBox(); panelSprites = new TeamBox(); jPanel4 = new javax.swing.JPanel(); btnFind = new javax.swing.JButton(); btnCancel = new javax.swing.JButton(); jPanel2 = new javax.swing.JPanel(); jLabel2 = new javax.swing.JLabel(); cmbGeneration = new javax.swing.JComboBox(); jLabel1 = new javax.swing.JLabel(); cmbLadder = new javax.swing.JComboBox(); jTabbedPane1 = new javax.swing.JTabbedPane(); jPanel3 = new javax.swing.JPanel(); jPanel8 = new javax.swing.JPanel(); lblDescription = new javax.swing.JLabel(); jPanel9 = new javax.swing.JPanel(); lblMode = new javax.swing.JLabel(); lblTeamLength = new javax.swing.JLabel(); jPanel6 = new javax.swing.JPanel(); jLabel3 = new javax.swing.JLabel(); jScrollPane2 = new javax.swing.JScrollPane(); listBans = new javax.swing.JList(); jPanel7 = new javax.swing.JPanel(); jLabel4 = new javax.swing.JLabel(); jScrollPane1 = new javax.swing.JScrollPane(); listClauses = new javax.swing.JList(); setOpaque(false); jPanel5.setLayout(new java.awt.GridLayout(1, 2)); jPanel1.setOpaque(false); btnLoad.setText("Load Team"); btnLoad.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnLoadActionPerformed(evt); } }); chkRated.setSelected(true); chkRated.setText("Rated?"); panelSprites.setBorder(javax.swing.BorderFactory.createEtchedBorder()); panelSprites.setOpaque(false); panelSprites.setLayout(new java.awt.GridLayout(2, 3)); jPanel4.setOpaque(false); jPanel4.setLayout(new java.awt.GridLayout(1, 2, 2, 0)); btnFind.setText("Find"); btnFind.setEnabled(false); btnFind.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnFindActionPerformed(evt); } }); jPanel4.add(btnFind); btnCancel.setText("Cancel"); btnCancel.setEnabled(false); btnCancel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnCancelActionPerformed(evt); } }); jPanel4.add(btnCancel); jPanel2.setOpaque(false); jPanel2.setLayout(new java.awt.GridBagLayout()); jLabel2.setFont(new java.awt.Font("Lucida Grande", 1, 13)); // NOI18N jLabel2.setText("Generation:"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(0, 0, 3, 3); jPanel2.add(jLabel2, gridBagConstraints); cmbGeneration.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Generation 4", "Generation 5" })); cmbGeneration.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cmbGenerationActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 2.0; gridBagConstraints.insets = new java.awt.Insets(0, 0, 3, 0); jPanel2.add(cmbGeneration, gridBagConstraints); jLabel1.setFont(new java.awt.Font("Lucida Grande", 1, 13)); // NOI18N jLabel1.setText("Ladder:"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 3); jPanel2.add(jLabel1, gridBagConstraints); cmbLadder.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Standard", "Uber", "UU", "Suspect" })); cmbLadder.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cmbLadderActionPerformed(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; jPanel2.add(cmbLadder, gridBagConstraints); org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel1Layout.createSequentialGroup() .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel1Layout.createSequentialGroup() .add(12, 12, 12) .add(chkRated, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 72, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(18, 18, 18) .add(btnLoad, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 125, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .add(jPanel1Layout.createSequentialGroup() .addContainerGap() .add(jPanel4, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 221, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .add(jPanel1Layout.createSequentialGroup() .addContainerGap() .add(panelSprites, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 221, Short.MAX_VALUE)) .add(jPanel1Layout.createSequentialGroup() .addContainerGap() .add(jPanel2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 221, Short.MAX_VALUE))) .addContainerGap()) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanel1Layout.createSequentialGroup() .addContainerGap() .add(jPanel2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 12, Short.MAX_VALUE) .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(chkRated) .add(btnLoad)) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(panelSprites, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 91, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED) .add(jPanel4, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) ); jPanel3.setOpaque(false); jPanel8.setOpaque(false); jPanel8.setLayout(new javax.swing.BoxLayout(jPanel8, javax.swing.BoxLayout.PAGE_AXIS)); lblDescription.setFont(new java.awt.Font("Lucida Grande", 0, 12)); // NOI18N lblDescription.setText("<html>This is some information about this ladder. This should fit 3 lines worth I hope</html>"); lblDescription.setVerticalAlignment(javax.swing.SwingConstants.TOP); jPanel8.add(lblDescription); jPanel9.setMinimumSize(new java.awt.Dimension(0, 15)); jPanel9.setOpaque(false); org.jdesktop.layout.GroupLayout jPanel9Layout = new org.jdesktop.layout.GroupLayout(jPanel9); jPanel9.setLayout(jPanel9Layout); jPanel9Layout.setHorizontalGroup( jPanel9Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(0, 228, Short.MAX_VALUE) ); jPanel9Layout.setVerticalGroup( jPanel9Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(0, 10, Short.MAX_VALUE) ); jPanel8.add(jPanel9); lblMode.setText("Singles"); jPanel8.add(lblMode); lblTeamLength.setText("6 Pokemon per team"); jPanel8.add(lblTeamLength); org.jdesktop.layout.GroupLayout jPanel3Layout = new org.jdesktop.layout.GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); jPanel3Layout.setHorizontalGroup( jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel3Layout.createSequentialGroup() .addContainerGap() .add(jPanel8, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 228, Short.MAX_VALUE) .addContainerGap()) ); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel3Layout.createSequentialGroup() .addContainerGap() .add(jPanel8, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addContainerGap(198, Short.MAX_VALUE)) ); jTabbedPane1.addTab("Rules", jPanel3); jPanel6.setOpaque(false); jLabel3.setFont(new java.awt.Font("Lucida Grande", 0, 11)); // NOI18N jLabel3.setText("Ban List:"); jScrollPane2.setViewportView(listBans); org.jdesktop.layout.GroupLayout jPanel6Layout = new org.jdesktop.layout.GroupLayout(jPanel6); jPanel6.setLayout(jPanel6Layout); jPanel6Layout.setHorizontalGroup( jPanel6Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel6Layout.createSequentialGroup() .addContainerGap() .add(jPanel6Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jScrollPane2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 228, Short.MAX_VALUE) .add(jLabel3)) .addContainerGap()) ); jPanel6Layout.setVerticalGroup( jPanel6Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel6Layout.createSequentialGroup() .addContainerGap() .add(jLabel3) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(jScrollPane2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 255, Short.MAX_VALUE) .addContainerGap()) ); jTabbedPane1.addTab("Banlist", jPanel6); jPanel7.setOpaque(false); jLabel4.setFont(new java.awt.Font("Lucida Grande", 0, 11)); jLabel4.setText("Clauses:"); jScrollPane1.setViewportView(listClauses); org.jdesktop.layout.GroupLayout jPanel7Layout = new org.jdesktop.layout.GroupLayout(jPanel7); jPanel7.setLayout(jPanel7Layout); jPanel7Layout.setHorizontalGroup( jPanel7Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel7Layout.createSequentialGroup() .addContainerGap() .add(jPanel7Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 228, Short.MAX_VALUE) .add(jLabel4)) .addContainerGap()) ); jPanel7Layout.setVerticalGroup( jPanel7Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(jPanel7Layout.createSequentialGroup() .addContainerGap() .add(jLabel4) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 255, Short.MAX_VALUE) .addContainerGap()) ); jTabbedPane1.addTab("Clauses", jPanel7); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .addContainerGap() .add(jPanel5, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) .add(jTabbedPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 268, Short.MAX_VALUE) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(139, 139, 139) .add(jPanel5, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(90, 90, 90)) .add(layout.createSequentialGroup() .addContainerGap() .add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addContainerGap(94, Short.MAX_VALUE)) .add(layout.createSequentialGroup() .addContainerGap() .add(jTabbedPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 342, Short.MAX_VALUE) .addContainerGap()) ); }// </editor-fold>//GEN-END:initComponents private void btnLoadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLoadActionPerformed FileDialog fd = new FileDialog(m_link.getLobby(), "Choose a team to load", FileDialog.LOAD); fd.setVisible(true); if (fd.getFile() == null) return; String file = fd.getDirectory() + fd.getFile(); TeamBox box = (TeamBox)panelSprites; m_team = box.loadFromTeam(file, m_link.getGeneration()); btnFind.setEnabled(m_team != null); if (m_team == null) { JOptionPane.showMessageDialog(this, "Selected team file could not be loaded"); } }//GEN-LAST:event_btnLoadActionPerformed public static String join(List<?> items, String glue) { int length = items.size(); if (length == 0) return ""; StringBuilder ret = new StringBuilder(items.get(0).toString()); for (int i = 1; i < length; ++i) { ret.append(glue); ret.append(items.get(i).toString()); } return ret.toString(); } public void informMatchStarted() { btnFind.setEnabled(m_team != null); btnCancel.setEnabled(false); btnLoad.setEnabled(true); } private void cmbLadderActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbLadderActionPerformed Metagame metagame = (Metagame)cmbLadder.getSelectedItem(); if (metagame != null) { String description = metagame.getDescription(); int teamLength = metagame.getMaxTeamLength(); List<String> banList = Arrays.asList(metagame.getBanList()); Collections.sort(banList); lblDescription.setText("<html>" + description + "</html>"); lblMode.setText(getFriendlyPartySize(metagame.getPartySize())); lblTeamLength.setText(teamLength + " Pokemon per team"); listBans.setListData(banList.toArray()); listClauses.setListData(metagame.getClauseList()); ((TeamBox)panelSprites).setTeamLength(metagame.getMaxTeamLength()); } }//GEN-LAST:event_cmbLadderActionPerformed private void btnFindActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnFindActionPerformed int generationId = cmbGeneration.getSelectedIndex(); int metagameId = cmbLadder.getSelectedIndex(); if (metagameId < 0) { return; } boolean rated = chkRated.isSelected(); m_link.queueTeam(generationId, metagameId, rated, m_team); btnFind.setEnabled(false); btnLoad.setEnabled(false); btnCancel.setEnabled(true); }//GEN-LAST:event_btnFindActionPerformed private void btnCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelActionPerformed int generationId = cmbGeneration.getSelectedIndex(); int metagameId = cmbLadder.getSelectedIndex(); if (metagameId < 0) { return; } boolean rated = chkRated.isSelected(); m_link.cancelQueue(generationId, metagameId, rated); btnFind.setEnabled(true); btnLoad.setEnabled(true); btnCancel.setEnabled(false); }//GEN-LAST:event_btnCancelActionPerformed private void cmbGenerationActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbGenerationActionPerformed Generation generation = (Generation)cmbGeneration.getSelectedItem(); if (generation == null) { return; } cmbLadder.removeAllItems(); for (Metagame metagame : generation.getMetagames()) { cmbLadder.addItem(metagame); } }//GEN-LAST:event_cmbGenerationActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton btnCancel; private javax.swing.JButton btnFind; private javax.swing.JButton btnLoad; private javax.swing.JCheckBox chkRated; private javax.swing.JComboBox cmbGeneration; private javax.swing.JComboBox cmbLadder; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanel4; private javax.swing.JPanel jPanel5; private javax.swing.JPanel jPanel6; private javax.swing.JPanel jPanel7; private javax.swing.JPanel jPanel8; private javax.swing.JPanel jPanel9; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JTabbedPane jTabbedPane1; private javax.swing.JLabel lblDescription; private javax.swing.JLabel lblMode; private javax.swing.JLabel lblTeamLength; private javax.swing.JList listBans; private javax.swing.JList listClauses; private javax.swing.JPanel panelSprites; // End of variables declaration//GEN-END:variables }