/******************************************************************************* * Copyright (c) 2001, 2010 Mathew A. Nelson and Robocode contributors * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://robocode.sourceforge.net/license/epl-v10.html * * Contributors: * Mathew A. Nelson * - Initial API and implementation * Flemming N. Larsen * - Replaced FileSpecificationVector with plain Vector * - LimitedClassnameDocument and LimitedDocument was moved to the * robocode.text package * - Code cleanup * Robert D. Maupin * - Replaced old collection types like Vector and Hashtable with * synchronized List and HashMap *******************************************************************************/ package net.sf.robocode.ui.dialog; import net.sf.robocode.repository.IRepositoryItem; import net.sf.robocode.ui.util.LimitedClassnameDocument; import net.sf.robocode.ui.util.LimitedDocument; import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import java.awt.*; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.net.URL; import java.util.List; /** * @author Mathew A. Nelson (original) * @author Flemming N. Larsen (contributor) * @author Robert D. Maupin (contributor) */ @SuppressWarnings("serial") public class TeamCreatorOptionsPanel extends WizardPanel { TeamCreator teamCreator; net.sf.robocode.ui.packager.RobotPackager teamPackager; final EventHandler eventHandler = new EventHandler(); JLabel authorLabel; JTextField authorField; JLabel descriptionLabel; JTextArea descriptionArea; JLabel webpageLabel; JTextField webpageField; JLabel webpageHelpLabel; JLabel teamNameLabel; JLabel teamPackageLabel; JTextField teamNameField; private String teamPackage; class EventHandler implements ComponentListener, DocumentListener { public void insertUpdate(DocumentEvent e) { fireStateChanged(); } public void changedUpdate(DocumentEvent e) { fireStateChanged(); } public void removeUpdate(DocumentEvent e) { fireStateChanged(); } public void componentMoved(ComponentEvent e) {} public void componentHidden(ComponentEvent e) {} public void componentShown(ComponentEvent e) { List<IRepositoryItem> selectedRobots; if (teamCreator != null) { selectedRobots = teamCreator.getRobotSelectionPanel().getSelectedRobots(); } else { selectedRobots = teamPackager.getRobotSelectionPanel().getSelectedRobots(); } if (selectedRobots != null) { IRepositoryItem robotSpecification = selectedRobots.get(0); getTeamNameLabel().setText("Please choose a name for your team: (Must be a valid Java classname)"); getTeamNameField().setText(robotSpecification.getShortClassName() + "Team"); getTeamPackageLabel().setText(robotSpecification.getFullPackage() + "."); teamPackage = robotSpecification.getFullPackage(); if (teamPackage != null) { teamPackage += "."; } String d = robotSpecification.getDescription(); if (d == null) { d = ""; } getDescriptionArea().setText(d); String a = robotSpecification.getAuthorName(); if (a == null) { a = ""; } getAuthorField().setText(a); URL u = robotSpecification.getWebpage(); if (u == null) { getWebpageField().setText(""); } else { getWebpageField().setText(u.toString()); } getAuthorLabel().setVisible(true); getAuthorField().setVisible(true); getWebpageLabel().setVisible(true); getWebpageField().setVisible(true); getWebpageHelpLabel().setVisible(true); getDescriptionLabel().setText( "Please enter a short description of this team (up to 3 lines of 72 chars each)."); } } public void componentResized(ComponentEvent e) {} } public JPanel robotListPanel; public TeamCreatorOptionsPanel(TeamCreator teamCreator) { super(); this.teamCreator = teamCreator; initialize(); } public TeamCreatorOptionsPanel(net.sf.robocode.ui.packager.RobotPackager teamPackager) { super(); this.teamPackager = teamPackager; initialize(); } private void initialize() { setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); getTeamNameLabel().setAlignmentX(Component.LEFT_ALIGNMENT); add(getTeamNameLabel()); JPanel p = new JPanel(); p.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); p.setAlignmentX(Component.LEFT_ALIGNMENT); getTeamNameField().setAlignmentX(Component.LEFT_ALIGNMENT); getTeamNameField().setMaximumSize(getTeamNameField().getPreferredSize()); // getVersionField().setMaximumSize(getVersionField().getPreferredSize()); p.setMaximumSize(new Dimension(Integer.MAX_VALUE, getTeamNameField().getPreferredSize().height)); p.add(getTeamPackageLabel()); p.add(getTeamNameField()); add(p); JLabel label = new JLabel(" "); label.setAlignmentX(Component.LEFT_ALIGNMENT); add(label); label = new JLabel(" "); label.setAlignmentX(Component.LEFT_ALIGNMENT); add(label); add(getDescriptionLabel()); JScrollPane scrollPane = new JScrollPane(getDescriptionArea(), ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); scrollPane.setMaximumSize(scrollPane.getPreferredSize()); scrollPane.setMinimumSize(new Dimension(100, scrollPane.getPreferredSize().height)); scrollPane.setAlignmentX(Component.LEFT_ALIGNMENT); add(scrollPane); label = new JLabel(" "); label.setAlignmentX(Component.LEFT_ALIGNMENT); add(label); add(getAuthorLabel()); getAuthorField().setAlignmentX(Component.LEFT_ALIGNMENT); getAuthorField().setMaximumSize(getAuthorField().getPreferredSize()); add(getAuthorField()); label = new JLabel(" "); label.setAlignmentX(Component.LEFT_ALIGNMENT); add(label); add(getWebpageLabel()); getWebpageField().setAlignmentX(Component.LEFT_ALIGNMENT); getWebpageField().setMaximumSize(getWebpageField().getPreferredSize()); add(getWebpageField()); getWebpageHelpLabel().setAlignmentX(Component.LEFT_ALIGNMENT); add(getWebpageHelpLabel()); JPanel panel = new JPanel(); panel.setAlignmentX(Component.LEFT_ALIGNMENT); add(panel); addComponentListener(eventHandler); } @Override public boolean isReady() { return getTeamNameField().getText().length() != 0 && getDescriptionArea().getText().length() != 0; } private JLabel getAuthorLabel() { if (authorLabel == null) { authorLabel = new JLabel("Please enter your name. (optional)"); authorLabel.setAlignmentX(Component.LEFT_ALIGNMENT); } return authorLabel; } public JTextField getAuthorField() { if (authorField == null) { authorField = new JTextField(40); } return authorField; } public JLabel getDescriptionLabel() { if (descriptionLabel == null) { descriptionLabel = new JLabel(""); descriptionLabel.setAlignmentX(Component.LEFT_ALIGNMENT); } return descriptionLabel; } public JTextArea getDescriptionArea() { if (descriptionArea == null) { LimitedDocument doc = new LimitedDocument(3, 72); descriptionArea = new JTextArea(doc, null, 3, 72); doc.addDocumentListener(eventHandler); // descriptionArea.setMaximumSize(descriptionArea.getPreferredScrollableViewportSize()); // descriptionArea.setLineWrap(true); // descriptionArea.setWrapStyleWord(true); } return descriptionArea; } public JLabel getWebpageLabel() { if (webpageLabel == null) { webpageLabel = new JLabel("Please enter a URL for your team's webpage (optional)"); webpageLabel.setAlignmentX(Component.LEFT_ALIGNMENT); } return webpageLabel; } public JTextField getWebpageField() { if (webpageField == null) { webpageField = new JTextField(40); } return webpageField; } public JLabel getWebpageHelpLabel() { if (webpageHelpLabel == null) { webpageHelpLabel = new JLabel(""); } return webpageHelpLabel; } public JTextField getTeamNameField() { if (teamNameField == null) { LimitedDocument doc = new LimitedClassnameDocument(1, 32); teamNameField = new JTextField(doc, null, 32); doc.addDocumentListener(eventHandler); } return teamNameField; } public JLabel getTeamNameLabel() { if (teamNameLabel == null) { teamNameLabel = new JLabel(""); } return teamNameLabel; } public JLabel getTeamPackageLabel() { if (teamPackageLabel == null) { teamPackageLabel = new JLabel(""); } return teamPackageLabel; } /** * Gets the teamPackage. * * @return Returns a String */ public String getTeamPackage() { return (teamPackage != null) ? teamPackage : "."; } }