View Javadoc

1   /***
2    * Redistribution  and use  in source  and binary  forms, with  or without
3    * modification, are permitted provided  that the following conditions are
4    * met :
5    *
6    * . Redistributions  of  source  code  must  retain  the  above copyright
7    *   notice, this list of conditions and the following disclaimer.
8    *
9    * . Redistributions in  binary form  must reproduce  the above  copyright
10   *   notice, this list of conditions  and the following disclaimer in  the
11   *   documentation and/or other materials provided with the distribution.
12   *
13   * . The name of the author may not be used to endorse or promote products
14   *   derived from this software without specific prior written permission.
15   *
16   * THIS SOFTWARE IS  PROVIDED BY THE  AUTHOR ``AS IS''  AND ANY EXPRESS  OR
17   * IMPLIED  WARRANTIES,  INCLUDING,  BUT   NOT  LIMITED  TO,  THE   IMPLIED
18   * WARRANTIES OF MERCHANTABILITY AND  FITNESS FOR A PARTICULAR  PURPOSE ARE
19   * DISCLAIMED.  IN NO  EVENT SHALL  THE AUTHOR  BE LIABLE  FOR ANY  DIRECT,
20   * INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY,  OR  CONSEQUENTIAL  DAMAGES
21   * (INCLUDING,  BUT  NOT LIMITED  TO,  PROCUREMENT OF  SUBSTITUTE  GOODS OR
22   * SERVICES;  LOSS  OF USE,  DATA,  OR PROFITS;  OR  BUSINESS INTERRUPTION)
23   * HOWEVER CAUSED  AND ON  ANY THEORY  OF LIABILITY,  WHETHER IN  CONTRACT,
24   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
25   * ANY  WAY  OUT OF  THE  USE OF  THIS  SOFTWARE, EVEN  IF  ADVISED OF  THE
26   * POSSIBILITY OF SUCH DAMAGE.
27   *
28   * $Id: ControlDisplay.java,v 1.3 2005/09/14 18:39:31 mat007 Exp $
29   */
30  
31  package battlehex.ui.main;
32  
33  import java.awt.BorderLayout;
34  import java.awt.Color;
35  import java.awt.Dimension;
36  import java.awt.event.ActionEvent;
37  import java.awt.event.ActionListener;
38  import java.awt.event.MouseAdapter;
39  import java.awt.event.MouseEvent;
40  import javax.swing.BorderFactory;
41  import javax.swing.Box;
42  import javax.swing.BoxLayout;
43  import javax.swing.JButton;
44  import javax.swing.JComponent;
45  import javax.swing.JLabel;
46  import javax.swing.JPanel;
47  import javax.swing.border.Border;
48  import jtge.engine.data.IContext;
49  import battlehex.model.ITurnObserver;
50  import battlehex.model.Turn;
51  
52  /***
53   * Implements the right vertical bar of the display.
54   *
55   * @author Mathieu Champlon
56   * @version $Revision: 1.3 $ $Date: 2005/09/14 18:39:31 $
57   */
58  public class ControlDisplay extends JPanel implements ITurnObserver
59  {
60      private static final long serialVersionUID = 3849609201160907585L;
61      private static final int VERTICAL_STRUT_SIZE = 3;
62      private static final Dimension CURRENT_TURN_DIMENSION = new Dimension( 150, 50 );
63      private static final Dimension STATUS_DIMENSION = new Dimension( 150, 100 );
64      private static final Dimension END_TURN_DIMENSION = new Dimension( 100, 30 );
65      private JLabel turnLabel;
66  
67      /***
68       * Create the control panel.
69       *
70       * @param controller the controller
71       * @param context the context
72       * @param status the status component
73       * @param info the info component
74       */
75      public ControlDisplay( final IController controller, final IContext context, final JComponent status,
76              final JComponent info )
77      {
78          setOpaque( false );
79          setLayout( new BorderLayout() );
80          add( createBox( status, info, createEndTurnButton( controller ) ), BorderLayout.EAST );
81          context.register( this );
82      }
83  
84      private Box createBox( final JComponent status, final JComponent info, final JComponent button )
85      {
86          final Border border = BorderFactory.createLineBorder( Color.BLACK );
87          final Box box = Box.createVerticalBox();
88          box.addMouseListener( new NullMouseAdapter() );
89          box.add( Box.createVerticalStrut( VERTICAL_STRUT_SIZE ) );
90          box.add( createLabel( " Welcome to... ", border ) );
91          box.add( Box.createVerticalStrut( VERTICAL_STRUT_SIZE ) );
92          box.add( createLabel( " ...Battle Hex ", border ) );
93          box.add( Box.createVerticalStrut( VERTICAL_STRUT_SIZE ) );
94          box.add( createSubPanel( status, border ) );
95          box.add( Box.createVerticalStrut( VERTICAL_STRUT_SIZE ) );
96          info.setBorder( border );
97          info.setOpaque( true );
98          box.add( info );
99          box.add( Box.createGlue() );
100         button.setBorder( border );
101         box.add( button );
102         return box;
103     }
104 
105     private class NullMouseAdapter extends MouseAdapter
106     {
107         public final void mouseClicked( final MouseEvent event )
108         {
109         }
110     }
111 
112     private JComponent createSubPanel( final JComponent status, final Border border )
113     {
114         final JPanel result = new JPanel();
115         result.setLayout( new BoxLayout( result, BoxLayout.Y_AXIS ) );
116         result.add( createCurrentTurnDisplayer() );
117         result.add( status );
118         result.setPreferredSize( STATUS_DIMENSION );
119         result.setMaximumSize( STATUS_DIMENSION );
120         result.setOpaque( true );
121         result.setBorder( border );
122         result.addMouseListener( new NullMouseAdapter() );
123         return result;
124     }
125 
126     private JComponent createCurrentTurnDisplayer()
127     {
128         turnLabel = new JLabel( "", JLabel.CENTER );
129         turnLabel.setPreferredSize( STATUS_DIMENSION );
130         turnLabel.setMaximumSize( STATUS_DIMENSION );
131         return turnLabel;
132     }
133 
134     private JComponent createLabel( final String text, final Border border )
135     {
136         final JLabel result = new JLabel( text, JLabel.CENTER );
137         result.setPreferredSize( CURRENT_TURN_DIMENSION );
138         result.setMaximumSize( CURRENT_TURN_DIMENSION );
139         result.setOpaque( true );
140         result.setBorder( border );
141         result.addMouseListener( new NullMouseAdapter() );
142         return result;
143     }
144 
145     private JComponent createEndTurnButton( final IController controller )
146     {
147         final JButton result = new JButton( "End Turn" );
148         result.setPreferredSize( END_TURN_DIMENSION );
149         result.setMaximumSize( END_TURN_DIMENSION );
150         result.addActionListener( new ActionListener()
151         {
152             public final void actionPerformed( final ActionEvent e )
153             {
154                 controller.endTurn();
155             }
156         } );
157         return result;
158     }
159 
160     /***
161      * {@inheritDoc}
162      */
163     public final void update( final Turn turn )
164     {
165         if( turn == null )
166             turnLabel.setText( "" );
167         else
168             turnLabel.setText( "turn : " + turn );
169     }
170 }