/* * $Id$ * * Copyright (c) 2008 by Joel Uckelman * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License (LGPL) as published by the Free Software Foundation. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, copies are available * at http://www.opensource.org. */ package VASSAL.tools; import java.awt.Color; import java.awt.Component; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.IOException; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import org.jdesktop.layout.GroupLayout; import org.jdesktop.layout.LayoutStyle; import VASSAL.build.GameModule; import VASSAL.configure.PasswordConfigurer; import VASSAL.configure.StringConfigurer; import VASSAL.i18n.Resources; import VASSAL.preferences.Prefs; // FXIME: Would be better if this didn't set the username and password // directly, but instead had a static method for returning them. // FIXME: Could be made prettier if it didn't use Configurers, or if // we made Configurers prettier. /** * A dialog for setting a username and password. * * @author Joel Uckelman */ public class UsernameAndPasswordDialog extends JDialog { private static final long serialVersionUID = 1L; public UsernameAndPasswordDialog(Frame parent) { super(parent, "Set Your Username and Password", true); setLocationRelativeTo(parent); setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); final StringConfigurer nameConfig = new StringConfigurer(null, Resources.getString("WizardSupport.RealName")); //$NON-NLS-1$ final StringConfigurer pwd = new PasswordConfigurer(null, Resources.getString("WizardSupport.Password")); //$NON-NLS-1$ final StringConfigurer pwd2 = new PasswordConfigurer(null, Resources.getString("WizardSupport.ConfirmPassword")); //$NON-NLS-1$ final Component nc = nameConfig.getControls(); final Component p1 = pwd.getControls(); final Component p2 = pwd2.getControls(); final JLabel note = new JLabel(Resources.getString("WizardSupport.NameAndPasswordDetails")); final JLabel error = new JLabel(Resources.getString( "WizardSupport.EnterNameAndPassword")); //$NON-NLS-1$ final JButton ok = new JButton(Resources.getString(Resources.OK)); ok.setEnabled(false); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { final Prefs p = GameModule.getGameModule().getPrefs(); p.getOption(GameModule.REAL_NAME) .setValue(nameConfig.getValueString()); p.getOption(GameModule.SECRET_NAME) .setValue(pwd.getValueString()); try { p.write(); } catch (IOException ex) { WriteErrorDialog.error(ex, p.getFile()); } UsernameAndPasswordDialog.this.dispose(); } }); final JButton cancel = new JButton(Resources.getString(Resources.CANCEL)); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { UsernameAndPasswordDialog.this.dispose(); } }); final JPanel panel = new JPanel(); final GroupLayout layout = new GroupLayout(panel); panel.setLayout(layout); /* // FIXME: This is the layout code for Java 1.6 layout.setAutoCreateGaps(true); layout.setAutoCreateContainerGaps(true); layout.setHorizontalGroup( layout.createParallelGroup(GroupLayout.Alignment.LEADING, true) .addComponent(nc) .addComponent(p1) .addComponent(p2) .addComponent(note) .addGroup(layout.createSequentialGroup() .addGap(0, 0, Integer.MAX_VALUE) .addComponent(error) .addGap(0, 0, Integer.MAX_VALUE)) .addGroup(layout.createSequentialGroup() .addGap(0, 0, Integer.MAX_VALUE) .addComponent(ok) .addComponent(cancel))); layout.setVerticalGroup( layout.createSequentialGroup() .addComponent(nc) .addComponent(p1) .addComponent(p2) .addComponent(note) .addComponent(error) .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, GroupLayout.DEFAULT_SIZE, Integer.MAX_VALUE) .addGroup( layout.createParallelGroup(GroupLayout.Alignment.BASELINE, false) .addComponent(ok) .addComponent(cancel))); layout.linkSize(ok, cancel); */ layout.setAutocreateGaps(true); layout.setAutocreateContainerGaps(true); layout.setHorizontalGroup( layout.createParallelGroup(GroupLayout.LEADING, true) .add(nc) .add(p1) .add(p2) .add(note) .add(layout.createSequentialGroup() .add(0, 0, Integer.MAX_VALUE) .add(error) .add(0, 0, Integer.MAX_VALUE)) .add(layout.createSequentialGroup() .add(0, 0, Integer.MAX_VALUE) .add(ok) .add(cancel))); layout.setVerticalGroup( layout.createSequentialGroup() .add(nc) .add(p1) .add(p2) .add(note) .add(error) .addPreferredGap(LayoutStyle.UNRELATED, GroupLayout.DEFAULT_SIZE, Integer.MAX_VALUE) .add( layout.createParallelGroup(GroupLayout.BASELINE, false) .add(ok) .add(cancel))); layout.linkSize(new Component[]{ok, cancel}); add(panel); pack(); setMinimumSize(getSize()); // This listener handles validating the input, updating the error // message, and enabling the Ok button. final PropertyChangeListener pl = new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if (nameConfig.getValue() == null || "".equals(nameConfig.getValue())) { //$NON-NLS-1$ if (pwd.getValue() == null || "".equals(pwd.getValue())) { error.setText(Resources.getString( "WizardSupport.EnterNameAndPassword")); //$NON-NLS-1$ } else { error.setText(Resources.getString( "WizardSupport.EnterYourName")); //$NON-NLS-1$ } error.setForeground(Color.black); ok.setEnabled(false); } else if (pwd.getValue() == null || "".equals(pwd.getValue())) { //$NON-NLS-1$ error.setText(Resources.getString( "WizardSupport.EnterYourPassword")); //$NON-NLS-1$ error.setForeground(Color.black); ok.setEnabled(false); } else if (pwd2.getValue() == null || "".equals(pwd2.getValue())) { //$NON-NLS-1$ error.setText("Please confirm your password"); error.setForeground(Color.black); ok.setEnabled(false); } else if (!pwd.getValue().equals(pwd2.getValue())) { error.setText(Resources.getString( "WizardSupport.PasswordsDontMatch")); //$NON-NLS-1$ error.setForeground(Color.red); ok.setEnabled(false); } else { // everything is ok error.setText(""); //$NON-NLS-1$ error.setForeground(Color.black); ok.setEnabled(true); } } }; nameConfig.addPropertyChangeListener(pl); pwd.addPropertyChangeListener(pl); pwd2.addPropertyChangeListener(pl); } }