com.realtime.crossfire.jxclient.gui.list
Class GUIList

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by com.realtime.crossfire.jxclient.gui.gui.GUIElement
                  extended by com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement
                      extended by com.realtime.crossfire.jxclient.gui.list.GUIList
All Implemented Interfaces:
GUIScrollable, java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable
Direct Known Subclasses:
GUICharacterList, GUIItemList, GUIMetaElementList

public abstract class GUIList
extends ActivatableGUIElement
implements GUIScrollable

A GUIElement that displays a list of entries.

See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
 
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
private  int cellHeight
          The height of a list cell in pixels.
private  CommandList doubleClickCommandList
          The CommandList to execute on double-clicks or null to ignore double-clicks.
private  javax.swing.JList list
          The list used to display the cells.
private  GUIListCellRenderer listCellRenderer
          The GUIListCellRenderer for the list.
private  javax.swing.event.ListSelectionListener listSelectionListener
          The ListSelectionListener attached to list.
private  javax.swing.DefaultListModel model
          The list model of list.
private  javax.swing.JScrollPane scrollPane
          The scroll pane instance used to display the list.
private static long serialVersionUID
          The serial version UID.
private  int tooltipIndex
          The index of the currently shown tooltip.
private  java.awt.Rectangle tooltipRectangle
          The location of the tooltip.
private  GUIListViewport viewport
          The viewport used by scrollPane.
 
Fields inherited from class com.realtime.crossfire.jxclient.gui.gui.GUIElement
bufferedImageSync
 
Fields inherited from class javax.swing.JComponent
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
 
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
protected GUIList(TooltipManager tooltipManager, GUIElementListener elementListener, java.lang.String name, Extent extent, int cellWidth, int cellHeight, GUIListCellRenderer listCellRenderer, CommandList doubleClickCommandList)
          Creates a new instance.
 
Method Summary
protected  void addElement(GUIElement element)
          Adds an GUIElement to the list.
 boolean canMoveSelection(int diffLines, int diffElements)
          Returns whether the selection can be moved.
 boolean canScroll(int distance)
          Returns whether the list can be scrolled.
 void dispose()
          Releases all allocated resources.
private  void doSelect(java.awt.event.MouseEvent e)
          Selects the list entry corresponding to a MouseEvent instance.
private  void doTooltip(java.awt.event.MouseEvent e)
          Updates the tooltip text corresponding to a MouseEvent instance.
 GUIElement getElement(int index)
          Returns the GUIElement for a given index.
protected  java.lang.Object getSelectedObject()
          Returns the selected list object.
 void mouseClicked(java.awt.event.MouseEvent e)
          Will be called when the user has clicked (pressed+released) this element.
 void mouseDragged(java.awt.event.MouseEvent e)
          Will be called when the mouse moves within this component while the button is pressed.
 void mouseEntered(java.awt.event.MouseEvent e)
          Will be called when the mouse has entered the bounding box of this element.
 void mouseExited(java.awt.event.MouseEvent e)
          Will be called when the mouse has left the bounding box of this element.
 void mouseMoved(java.awt.event.MouseEvent e)
          Will be called when the mouse moves within this component.
 void mousePressed(java.awt.event.MouseEvent e)
          Will be called when the user has pressed the mouse inside this element.
 void moveSelection(int diffLines, int diffElements)
          Moves the selection.
protected  void render(java.awt.Graphics2D g2)
          Paints the element's contents into the passed graphics.
 void resetScroll()
          Resets the scroll index to the default value.
protected  int resizeElements(int newSize)
          Changes the number of list elements.
 void scroll(int distance)
          Moves the list.
protected  void selectionChanged()
          Called whenever the selected list entry has changed.
protected abstract  void selectionChanged(int selectedIndex)
          Called whenever the selected list entry has changed.
 void setChanged()
          Records that GUIElement.bufferedImage has changed and must be repainted.
protected  void setLayoutOrientation(int layoutOrientation, int visibleRowCount)
          Sets the layout orientation.
protected  void setSelectedIndex(int newIndex)
          Update the selected list entry.
 void updateResolution(int screenWidth, int screenHeight)
          Updates the location and size to a new screen resolution.
private  void updateTooltip()
          Updates the current tooltip text.
protected abstract  void updateTooltip(int index, int x, int y, int w, int h)
          Updates the tooltip text.
 
Methods inherited from class com.realtime.crossfire.jxclient.gui.gui.ActivatableGUIElement
activeChanged, isActive, setActive
 
Methods inherited from class com.realtime.crossfire.jxclient.gui.gui.GUIElement
createBufferGraphics, getElementX, getElementY, getGui, getName, getTooltipText, hasBufferedImage, isChanged, isDefault, isElementAtPoint, isElementVisible, isIgnore, mouseReleased, paintComponent, resetChanged, setChangedListener, setChangedNoListeners, setDefault, setElementLocation, setElementSize, setElementVisible, setGui, setIgnore, setTooltipText, setTooltipText, toString, updateResolutionConstant
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getAccessibleContext, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getUIClassID, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintImmediately, paintImmediately, paramString, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update, updateUI
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, 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, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, transferFocus, transferFocusBackward, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

cellHeight

private final int cellHeight
The height of a list cell in pixels.


doubleClickCommandList

@Nullable
private final CommandList doubleClickCommandList
The CommandList to execute on double-clicks or null to ignore double-clicks.


list

@NotNull
private final javax.swing.JList list
The list used to display the cells.


listCellRenderer

@NotNull
private final GUIListCellRenderer listCellRenderer
The GUIListCellRenderer for the list.


listSelectionListener

@NotNull
private final javax.swing.event.ListSelectionListener listSelectionListener
The ListSelectionListener attached to list.


model

@NotNull
private final javax.swing.DefaultListModel model
The list model of list.


scrollPane

@NotNull
private final javax.swing.JScrollPane scrollPane
The scroll pane instance used to display the list.


serialVersionUID

private static final long serialVersionUID
The serial version UID.

See Also:
Constant Field Values

tooltipIndex

private int tooltipIndex
The index of the currently shown tooltip. Set to -1 if no tooltip is shown.


tooltipRectangle

@Nullable
private java.awt.Rectangle tooltipRectangle
The location of the tooltip. Set to null if no tooltip is shown.


viewport

@NotNull
private final GUIListViewport viewport
The viewport used by scrollPane.

Constructor Detail

GUIList

protected GUIList(@NotNull
                  TooltipManager tooltipManager,
                  @NotNull
                  GUIElementListener elementListener,
                  @NotNull
                  java.lang.String name,
                  @NotNull
                  Extent extent,
                  int cellWidth,
                  int cellHeight,
                  @NotNull
                  GUIListCellRenderer listCellRenderer,
                  @Nullable
                  CommandList doubleClickCommandList)
Creates a new instance.

Parameters:
tooltipManager - the tooltip manager to update
elementListener - the element listener to notify
name - the name of this element
extent - the extent of this element
cellWidth - the width of each cell
cellHeight - the height of each cell
listCellRenderer - the renderer for the list
doubleClickCommandList - the command list to execute on double-click or null to ignore double-clicks
Method Detail

addElement

protected void addElement(@NotNull
                          GUIElement element)
Adds an GUIElement to the list.

Parameters:
element - the element to add

canMoveSelection

public boolean canMoveSelection(int diffLines,
                                int diffElements)
Returns whether the selection can be moved.

Parameters:
diffLines - the distance in lines to move
diffElements - the distance in elements to move
Returns:
whether moving is possible

canScroll

public boolean canScroll(int distance)
Returns whether the list can be scrolled.

Specified by:
canScroll in interface GUIScrollable
Parameters:
distance - the distance to scroll
Returns:
whether scrolling is possible

dispose

public void dispose()
Releases all allocated resources.

Overrides:
dispose in class GUIElement

doSelect

private void doSelect(@NotNull
                      java.awt.event.MouseEvent e)
Selects the list entry corresponding to a MouseEvent instance.

Parameters:
e - the mouse event instance

doTooltip

private void doTooltip(@NotNull
                       java.awt.event.MouseEvent e)
Updates the tooltip text corresponding to a MouseEvent instance.

Parameters:
e - the mouse event instance

getElement

@NotNull
public GUIElement getElement(int index)
Returns the GUIElement for a given index.

Parameters:
index - the index
Returns:
the gui element

getSelectedObject

@NotNull
protected java.lang.Object getSelectedObject()
Returns the selected list object.

Returns:
the selected object or null if none is selected

mouseClicked

public void mouseClicked(@NotNull
                         java.awt.event.MouseEvent e)
Will be called when the user has clicked (pressed+released) this element. This event will be delivered after GUIElement.mouseReleased(MouseEvent).

Overrides:
mouseClicked in class GUIElement
Parameters:
e - the mouse event relative to this element

mouseDragged

public void mouseDragged(@NotNull
                         java.awt.event.MouseEvent e)
Will be called when the mouse moves within this component while the button is pressed. This event will be delivered after GUIElement.mouseMoved(MouseEvent).

Note: if the mouse leaves this element's bounding box while the mouse button is still pressed, further mouseDragged (but no mouseMoved) events will be generated.

Overrides:
mouseDragged in class GUIElement
Parameters:
e - the mouse event relative to this element

mouseEntered

public void mouseEntered(@NotNull
                         java.awt.event.MouseEvent e)
Will be called when the mouse has entered the bounding box of this element.

Overrides:
mouseEntered in class GUIElement
Parameters:
e - the mouse event relative to this element

mouseExited

public void mouseExited(@NotNull
                        java.awt.event.MouseEvent e)
Will be called when the mouse has left the bounding box of this element. This function will not be called unless GUIElement.mouseEntered(MouseEvent) has been called before.

Overrides:
mouseExited in class GUIElement
Parameters:
e - the mouse event relative to this element

mouseMoved

public void mouseMoved(@NotNull
                       java.awt.event.MouseEvent e)
Will be called when the mouse moves within this component. before.

Overrides:
mouseMoved in class GUIElement
Parameters:
e - the mouse event relative to this element

mousePressed

public void mousePressed(@NotNull
                         java.awt.event.MouseEvent e)
Will be called when the user has pressed the mouse inside this element.

Overrides:
mousePressed in class ActivatableGUIElement
Parameters:
e - the mouse event relative to this element

moveSelection

public void moveSelection(int diffLines,
                          int diffElements)
Moves the selection.

Parameters:
diffLines - the distance in lines to move
diffElements - the distance in elements to move

render

protected void render(@NotNull
                      java.awt.Graphics2D g2)
Paints the element's contents into the passed graphics.

Specified by:
render in class GUIElement
Parameters:
g2 - the graphics to paint to

resetScroll

public void resetScroll()
Resets the scroll index to the default value.

Specified by:
resetScroll in interface GUIScrollable

resizeElements

protected int resizeElements(int newSize)
Changes the number of list elements. If the new element count is less than the current count, excess elements are cut off. Otherwise the caller has to add elements with addElement(GUIElement).

Parameters:
newSize - the new element count
Returns:
the number of elements to add by the caller

scroll

public void scroll(int distance)
Moves the list.

Specified by:
scroll in interface GUIScrollable
Parameters:
distance - the distance to scroll

selectionChanged

protected void selectionChanged()
Called whenever the selected list entry has changed.


selectionChanged

protected abstract void selectionChanged(int selectedIndex)
Called whenever the selected list entry has changed.

Parameters:
selectedIndex - the selected list entry

setChanged

public void setChanged()
Records that GUIElement.bufferedImage has changed and must be repainted.

Overrides:
setChanged in class GUIElement

setLayoutOrientation

protected void setLayoutOrientation(int layoutOrientation,
                                    int visibleRowCount)
Sets the layout orientation. See JList.setLayoutOrientation(int) and JList.setVisibleRowCount(int).

Parameters:
layoutOrientation - the layout orientation
visibleRowCount - the number of visible rows

setSelectedIndex

protected void setSelectedIndex(int newIndex)
Update the selected list entry.

Parameters:
newIndex - the new selected list entry

updateResolution

public void updateResolution(int screenWidth,
                             int screenHeight)
Updates the location and size to a new screen resolution.

Overrides:
updateResolution in class GUIElement
Parameters:
screenWidth - the new screen width
screenHeight - the new screen height

updateTooltip

private void updateTooltip()
Updates the current tooltip text.


updateTooltip

protected abstract void updateTooltip(int index,
                                      int x,
                                      int y,
                                      int w,
                                      int h)
Updates the tooltip text.

Parameters:
index - the index to use
x - the x coordinate of the cell
y - the y coordinate of the cell
w - the width of the cell
h - the height of the cell