Package com.barrybecker4.game.twoplayer.common.ui.dialogs

Source Code of com.barrybecker4.game.twoplayer.common.ui.dialogs.TwoPlayerNewGameDialog

/** Copyright by Barry G. Becker, 2000-2011. Licensed under MIT License: http://www.opensource.org/licenses/MIT  */
package com.barrybecker4.game.twoplayer.common.ui.dialogs;

import com.barrybecker4.common.util.FileUtil;
import com.barrybecker4.game.common.GameContext;
import com.barrybecker4.game.common.GameViewModel;
import com.barrybecker4.game.common.board.IRectangularBoard;
import com.barrybecker4.game.common.player.PlayerList;
import com.barrybecker4.game.common.ui.dialogs.NewGameDialog;
import com.barrybecker4.game.common.ui.panel.GridBoardParamPanel;
import com.barrybecker4.game.twoplayer.common.TwoPlayerController;
import com.barrybecker4.ui.file.FileChooserUtil;
import com.barrybecker4.ui.file.TextFileFilter;
import com.barrybecker4.ui.util.GUIUtil;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

/**
* Use this modal dialog to initialize the required game parameters that
* are needed in order to start play in a 2 player game.
*
* @author Barry Becker
*/
public class TwoPlayerNewGameDialog extends NewGameDialog
                                    implements ActionListener {

    private JCheckBox optimizationCheckbox_;
    private PlayerAssignmentPanel playersPanel_;

    /**
     * constructor
     */
    protected TwoPlayerNewGameDialog(Component parent, GameViewModel viewer ) {
        super(parent, viewer );
    }

    protected TwoPlayerController get2PlayerController() {
        return (TwoPlayerController) controller_;
    }

    /**
     * @return panel for the local player
     */
    @Override
    protected JPanel createNewLocalGamePanel() {
        JPanel playLocalPanel = new JPanel();
        playLocalPanel.setLayout(new BoxLayout(playLocalPanel, BoxLayout.Y_AXIS ) );

        playersPanel_ = createPlayerAssignmentPanel();
        JPanel optimizationPanel = createOptimizationPanel();
        JPanel boardParamPanel = createBoardParamPanel();
        JPanel customPanel = createCustomPanel();

        playLocalPanel.add(playersPanel_ );
        playLocalPanel.add( optimizationPanel );
        playLocalPanel.add( boardParamPanel );
        if ( customPanel != null )
            playLocalPanel.add( customPanel );
        return playLocalPanel;
    }

    /**
     * panel which allows changing board specific properties.
     */
    @Override
    protected GridBoardParamPanel createBoardParamPanel() {
        IRectangularBoard b = (IRectangularBoard) board_;
        return new GridBoardParamPanel(b.getNumRows(), b.getNumCols(), createCustomBoardConfigPanel());
    }


    private JPanel createOptimizationPanel() {
        JPanel p = new JPanel();
        p.setLayout( new BoxLayout( p, BoxLayout.Y_AXIS ) );
        p.setBorder(
                BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(),
                                                  GameContext.getLabel("OPTIMIZATION_TITLE") ) );
        optimizationCheckbox_ = new JCheckBox( GameContext.getLabel("OPTIMIZATION"), false );
        p.setToolTipText(GameContext.getLabel("OPTIMIZATION_TIP"));
        optimizationCheckbox_.addActionListener(this);
        p.add( optimizationCheckbox_ , BorderLayout.CENTER);
        p.add( new JPanel());

        return p;
    }

    @Override
    protected PlayerAssignmentPanel createPlayerAssignmentPanel() {
        return new PlayerAssignmentPanel(get2PlayerController(), parent_);
    }

    @Override
    protected void ok() {
        TwoPlayerController c = get2PlayerController();
        IRectangularBoard board = (IRectangularBoard) board_;

        if (board != null && gridParamPanel_!= null) {
            board.setSize(gridParamPanel_.getRowSize(), gridParamPanel_.getColSize());
        }

        PlayerList players = c.getPlayers();
        if (optimizationCheckbox_.isSelected())
        {
            players.getPlayer1().setHuman(false);
            players.getPlayer2().setHuman(false);
            c.getTwoPlayerOptions().setAutoOptimize(true);
        }
        else {
            playersPanel_.ok();
        }
        if (board != null && gridParamPanel_ != null) {
            board.setSize( gridParamPanel_.getRowSize(), gridParamPanel_.getColSize() );
        }
        super.ok();
    }

    @Override
    public void actionPerformed( ActionEvent e ) {
        Object source = e.getSource();

        if ( source == startButton_ ) {
            ok();
        }
        else if ( source == cancelButton) {
            cancel();
        }
        else if (source == optimizationCheckbox_) {
            boolean checked = optimizationCheckbox_.isSelected();
            if (checked)  {
                // open a dlg to get a location for the optimization log
                // if they cancel this dlg then we leave the checkbox unchecked
                if (GUIUtil.hasBasicService())  {
                    JFileChooser chooser = FileChooserUtil.getFileChooser();
                    chooser.setCurrentDirectory( new File( FileUtil.getHomeDir() + "/webdeployment" ) );
                    chooser.setFileFilter(new TextFileFilter());
                    int state = chooser.showOpenDialog( this );
                    File file = chooser.getSelectedFile();
                    if ( file == null || state != JFileChooser.APPROVE_OPTION )  {
                        optimizationCheckbox_.setSelected(false);
                        return;
                    }
                    else {
                        get2PlayerController().getTwoPlayerOptions().setAutoOptimizeFile( file.getAbsolutePath() );
                    }
                }
                else {
                    JOptionPane.showMessageDialog(this, GameContext.getLabel("CANT_RUN_OPT_WHEN_STANDALONE"));
                 }
            }

            playersPanel_.setBothComputerPlayers();
        }
        else {
            throw new IllegalStateException("unexpected source="+ source);
        }
    }
}
TOP

Related Classes of com.barrybecker4.game.twoplayer.common.ui.dialogs.TwoPlayerNewGameDialog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.