soc.client
Class FaceChooserFrame

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by java.awt.Window
              extended by java.awt.Frame
                  extended by soc.client.FaceChooserFrame
All Implemented Interfaces:
java.awt.event.ActionListener, java.awt.event.KeyListener, java.awt.event.WindowListener, java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, java.util.EventListener, javax.accessibility.Accessible

public class FaceChooserFrame
extends java.awt.Frame
implements java.awt.event.ActionListener, java.awt.event.WindowListener, java.awt.event.KeyListener

Popup window for the user to browse and choose a face icon. To adjust size, set FaceChooserList.rowFacesWidth and .faceRowsHeight .

Author:
Jeremy D Monin
See Also:
FaceChooserFrame.FaceChooserList.rowFacesWidth, FaceChooserFrame.FaceChooserList.faceRowsHeight, SOCFaceButton, Serialized Form

Nested Class Summary
protected static class FaceChooserFrame.FaceChooserList
          FaceChooserList holds face icons (in rows and columns) and an optional scrollbar.
 
Nested classes/interfaces inherited from class java.awt.Frame
java.awt.Frame.AccessibleAWTFrame
 
Nested classes/interfaces inherited from class java.awt.Window
java.awt.Window.AccessibleAWTWindow
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
protected  java.awt.Button cancelBut
          Button for cancel
protected  java.awt.Button changeFaceBut
          Button for confirm change
protected  int faceWidthPx
          Width,height of one face, in pixels.
protected  SOCFaceButton fb
          Face button that launched us.
protected  FaceChooserFrame.FaceChooserList fcl
          Scrolling choice of faces
protected  SOCPlayerClient pcli
          Player client.
protected  SOCPlayerInterface pi
          Player interface.
protected  int pNumber
          Player number.
protected  java.awt.Label promptLbl
          Label to prompt to choose a new face
private  boolean stillAvailable
          Is this still visible and interactive? (vs already dismissed)
private static SOCStringManager strings
          i18n text strings
 
Fields inherited from class java.awt.Frame
CROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NORMAL, NW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, W_RESIZE_CURSOR, WAIT_CURSOR
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
FaceChooserFrame(SOCFaceButton fbutton, SOCPlayerClient cli, SOCPlayerInterface gamePI, int pnum, int faceID, int faceWidth)
          Creates a new FaceChooserFrame.
 
Method Summary
 void actionPerformed(java.awt.event.ActionEvent e)
          Change or Cancel button has been chosen by the user.
 void cancelButtonChosen()
          Cancel button has been chosen by the user.
 void changeButtonChosen()
          Change-face button has been chosen by the user.
protected  void checkSizeAndFocus(boolean listSizeKnown)
          check size and set focus to the default button (if any).
 void dispose()
          Dispose of this window.
 java.awt.Color getPlayerColor()
           
 boolean isStillAvailable()
          Is this chooser still visible and interactive?
 void keyPressed(java.awt.event.KeyEvent e)
          Handle Enter or Esc key, arrow keys, home/end, ctrl-home/ctrl-end
 void keyReleased(java.awt.event.KeyEvent arg0)
          Stub required by KeyListener
 void keyTyped(java.awt.event.KeyEvent arg0)
          Stub required by KeyListener
 void moveCursor(int dr, int dc, java.awt.event.KeyEvent e)
          Move the cursor choosing the current face.
 void selectFace(int id, boolean alreadySelected)
          Face selected (clicked) by user.
 void windowActivated(java.awt.event.WindowEvent e)
          Stub required by WindowListener
 void windowClosed(java.awt.event.WindowEvent e)
          Stub required by WindowListener
 void windowClosing(java.awt.event.WindowEvent e)
          Dialog close requested by user.
 void windowDeactivated(java.awt.event.WindowEvent e)
          Stub required by WindowListener
 void windowDeiconified(java.awt.event.WindowEvent e)
          Stub required by WindowListener
 void windowIconified(java.awt.event.WindowEvent e)
          Stub required by WindowListener
 void windowOpened(java.awt.event.WindowEvent e)
          Window is appearing - check the size and the default button keyboard focus
 
Methods inherited from class java.awt.Frame
addNotify, getAccessibleContext, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, paramString, remove, removeNotify, setCursor, setExtendedState, setIconImage, setMaximizedBounds, setMenuBar, setResizable, setState, setTitle, setUndecorated
 
Methods inherited from class java.awt.Window
addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getGraphicsConfiguration, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOwnedWindows, getOwner, getOwnerlessWindows, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, hide, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isShowing, pack, paint, postEvent, processEvent, processWindowEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setVisible, show, toBack, toFront
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, setLayout, transferFocusBackward, transferFocusDownCycle, update, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphics, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resize, resize, setBackground, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.awt.MenuContainer
getFont, postEvent
 

Field Detail

fb

protected SOCFaceButton fb
Face button that launched us. Passed to constructor, not null.


pcli

protected SOCPlayerClient pcli
Player client. Passed to constructor, not null


pi

protected SOCPlayerInterface pi
Player interface. Passed to constructor, not null


pNumber

protected int pNumber
Player number. Needed for bg color.


faceWidthPx

protected int faceWidthPx
Width,height of one face, in pixels. Assumes icon is square.


fcl

protected FaceChooserFrame.FaceChooserList fcl
Scrolling choice of faces


changeFaceBut

protected java.awt.Button changeFaceBut
Button for confirm change


cancelBut

protected java.awt.Button cancelBut
Button for cancel


promptLbl

protected java.awt.Label promptLbl
Label to prompt to choose a new face


stillAvailable

private boolean stillAvailable
Is this still visible and interactive? (vs already dismissed)

See Also:
isStillAvailable()

strings

private static final SOCStringManager strings
i18n text strings

Constructor Detail

FaceChooserFrame

public FaceChooserFrame(SOCFaceButton fbutton,
                        SOCPlayerClient cli,
                        SOCPlayerInterface gamePI,
                        int pnum,
                        int faceID,
                        int faceWidth)
                 throws java.lang.IllegalArgumentException
Creates a new FaceChooserFrame.

Parameters:
fbutton - Face button in player's handpanel
cli - Player client interface
gamePI - Current game's player interface
pnum - Player number in game
faceWidth - Width and height of one face button, in pixels. Assumes icon is square.
Throws:
java.lang.IllegalArgumentException - If fbutton is null, or faceWidth is 0 or negative, or pnum is negative or more than SOCGame.MAXPLAYERS.
java.lang.NullPointerException - if cli or gamePI is null
Method Detail

selectFace

public void selectFace(int id,
                       boolean alreadySelected)
Face selected (clicked) by user. If already-selected, and player has chosen a new face in this window, treat as double-click: change face and close window.

Parameters:
id - face ID
alreadySelected - Was the face currently selected, when clicked?

getPlayerColor

public java.awt.Color getPlayerColor()
Returns:
Player color in game (background color for face icons)

isStillAvailable

public boolean isStillAvailable()
Is this chooser still visible and interactive?

Returns:
True if still interactive (vs already dismissed).

dispose

public void dispose()
Dispose of this window. Overrides to clear stillAvailable flag, and call faceButton.clearFacePopupPreviousChooser.

Overrides:
dispose in class java.awt.Window

checkSizeAndFocus

protected void checkSizeAndFocus(boolean listSizeKnown)
check size and set focus to the default button (if any).

Parameters:
listSizeKnown - if true, the list knows what size it wants to be; adjust our size if needed.

actionPerformed

public void actionPerformed(java.awt.event.ActionEvent e)
Change or Cancel button has been chosen by the user. Call changeButtonChosen or cancelButtonChosen, and dispose of this dialog.

Specified by:
actionPerformed in interface java.awt.event.ActionListener

changeButtonChosen

public void changeButtonChosen()
Change-face button has been chosen by the user. React accordingly. actionPerformed has already called dialog.dispose().


cancelButtonChosen

public void cancelButtonChosen()
Cancel button has been chosen by the user. React accordingly. Also called if user closes window or hits Escape key. actionPerformed has already called dialog.dispose().


moveCursor

public void moveCursor(int dr,
                       int dc,
                       java.awt.event.KeyEvent e)
Move the cursor choosing the current face. For behavioral details, see the inner class method description.

Parameters:
dr - Delta row: -3 jumps to very top; -2 is PageUp; -1 is one row; same for +.
dc - Delta column: -2 jumps to far-left, -1 is one to left, +1 is one to right, +2 jumps to far-right.
e - KeyEvent to be consumed, or null.
See Also:
FaceChooserFrame.FaceChooserList.moveCursor(int, int, KeyEvent)

windowClosing

public void windowClosing(java.awt.event.WindowEvent e)
Dialog close requested by user. Dispose and call windowCloseChosen.

Specified by:
windowClosing in interface java.awt.event.WindowListener

windowOpened

public void windowOpened(java.awt.event.WindowEvent e)
Window is appearing - check the size and the default button keyboard focus

Specified by:
windowOpened in interface java.awt.event.WindowListener

windowActivated

public void windowActivated(java.awt.event.WindowEvent e)
Stub required by WindowListener

Specified by:
windowActivated in interface java.awt.event.WindowListener

windowClosed

public void windowClosed(java.awt.event.WindowEvent e)
Stub required by WindowListener

Specified by:
windowClosed in interface java.awt.event.WindowListener

windowDeactivated

public void windowDeactivated(java.awt.event.WindowEvent e)
Stub required by WindowListener

Specified by:
windowDeactivated in interface java.awt.event.WindowListener

windowDeiconified

public void windowDeiconified(java.awt.event.WindowEvent e)
Stub required by WindowListener

Specified by:
windowDeiconified in interface java.awt.event.WindowListener

windowIconified

public void windowIconified(java.awt.event.WindowEvent e)
Stub required by WindowListener

Specified by:
windowIconified in interface java.awt.event.WindowListener

keyPressed

public void keyPressed(java.awt.event.KeyEvent e)
Handle Enter or Esc key, arrow keys, home/end, ctrl-home/ctrl-end

Specified by:
keyPressed in interface java.awt.event.KeyListener

keyReleased

public void keyReleased(java.awt.event.KeyEvent arg0)
Stub required by KeyListener

Specified by:
keyReleased in interface java.awt.event.KeyListener

keyTyped

public void keyTyped(java.awt.event.KeyEvent arg0)
Stub required by KeyListener

Specified by:
keyTyped in interface java.awt.event.KeyListener