Package org.pushingpixels.lafwidget.contrib.blogofbug.swing.layout

# Class CaroselLayout

java.lang.Object
org.pushingpixels.lafwidget.contrib.blogofbug.swing.layout.CaroselLayout

All Implemented Interfaces:
  `ActionListener`, `LayoutManager`, `EventListener`

Direct Known Subclasses:
  `OffsetCaroselLayout`

public class CaroselLayout extends Object implements LayoutManager, ActionListener
Layout engine for JCarousel components (although would work for any container). It does have a closer than usual relationship with the container, sometimes causing the container to repaint.

## Field Summary

Fields
Modifier and Type
Field
Description
`protected Hashtable`
`additionalData`
List of additional information held on components in the carousel
`protected LinkedList<Component>`
`components`
List of components being laid out
`protected int`
`numberOfItems`
Number of items in the carousel (that are visible)
`protected double`
`rotationalOffset`
The current degree of rotation of the carousel
`protected double`
`targetOffset`
The desired rotational offset, which will be moved to by a timer animating the carousel

## Constructor Summary

Constructors
Constructor
Description
`CaroselLayout(Container forContainer)`
Creates a new instance of the layout engine, tied to the specified container.

## Method Summary

Modifier and Type
Method
Description
`void`
`actionPerformed(ActionEvent actionEvent)`
Manages timer actions, terminating the timer if any event is fully achieved
`void`
`addLayoutComponent(String name, Component comp)`
Name is ignored
`protected Point`
`calculateCenter(Insets insets, int width, int height, int widest)`
Determines the center of the carousel
`void`
`finalizeLayoutImmediately()`
Moves everything to their "target" positions, without animating anything
`double`
`getAngle()`
Returns the current rotational angle
`protected Dimension`
`getCarouselRadius(Container target, Insets insets, int width, int height, int widestComponent)`
Determines the correct size of the carousel for the container
`int`
`getComponentCount()`
The number of components being laid out.
`int`
`getComponentIndex(Component comp)`
Gets the index of the supplied component
`int`
`getNeutralContentWidth()`
The size of comopnents a neutral width
`Component`
`getNextComponent(Component component)`
Retrieve the component after the specified one.
`protected org.pushingpixels.lafwidget.contrib.blogofbug.swing.layout.CaroselLayout.CaroselPosition`
`getPosition(Component comp)`
Gets the additional data stored by the layout manager for a given component
`Component`
`getPreviousComponent(Component component)`
Retrieve the component before the specified one.
`protected double`
`getScale(double angle, double x, double y, double carouselX, double carouselY)`
Determines the scale to be applied to the component.
`protected boolean`
`isAnimating()`
Determines if an animation is currently playing
`void`
`layoutContainer(Container target)`
Lays out all of the components on the carosel.
`Dimension`
`minimumLayoutSize(Container parent)`
Cheats and bases it's size on the prefered sizes of each component
`void`
`moveComponentTo(int i, Component comp)`
Moves a layout component at a particular location in the carousel
`Dimension`
`preferredLayoutSize(Container parent)`
Determine the widest and tallest dimensions, then return the height as 1.5 * the highest, and 3 * the widest
`protected void`
`recalculateCarosel()`
Updates all of the positions of the carousel.
`protected int`
`recalculateVisibleItems()`
Determines how many of the items being laid out are currently visible.
`void`
`removeLayoutComponent(Component comp)`
Remove the component
`void`
`setAngle(double d)`
Sets the current rotational angle.
`void`
`setDepthBasedAlpha(boolean depthBasedAlpha)`
Controls if items should fade as they move to the back of the carousel
`void`
`setFrontMostComponent(Component component)`
Moves the specified component to the front
`void`
`setNeutralContentWidth(int neutralContentWidth)`
Specify the neutral content width of any laid out component.
`protected final void`
`setTarget(double target)`
Sets a target angle to rotate to, always choses a direction that is less than or equal to 180 degrees
`protected boolean`
`shouldHide(Component comp, double angle, double s)`
Can be over-ridden to restrict the range of angles where the child component is shown

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### numberOfItems

protected int numberOfItems
Number of items in the carousel (that are visible)

### components

protected LinkedList<Component> components
List of components being laid out

### additionalData

protected Hashtable additionalData
List of additional information held on components in the carousel

### rotationalOffset

protected double rotationalOffset
The current degree of rotation of the carousel

### targetOffset

protected double targetOffset
The desired rotational offset, which will be moved to by a timer animating the carousel

## Constructor Details

### CaroselLayout

public CaroselLayout(Container forContainer)
Creates a new instance of the layout engine, tied to the specified container.

Parameters:
  `forContainer` - The container the layout will layout

## Method Details

### setNeutralContentWidth

public void setNeutralContentWidth(int neutralContentWidth)
Specify the neutral content width of any laid out component.

Parameters:
  `neutralContentWidth` - The neutral width of components

### moveComponentTo

public void moveComponentTo(int i, Component comp)
Moves a layout component at a particular location in the carousel

Parameters:
  `i` - The location at which to insert
  `comp` - The component to insert

### addLayoutComponent

public void addLayoutComponent(String name, Component comp)
Name is ignored

Specified by:
  `addLayoutComponent` in interface `LayoutManager`
Parameters:
  `name` - The name of the component, ignored.
  `comp` - The component being added

### removeLayoutComponent

public void removeLayoutComponent(Component comp)
Remove the component

Specified by:
  `removeLayoutComponent` in interface `LayoutManager`
Parameters:
  `comp` - The component being removed

### getPosition

protected org.pushingpixels.lafwidget.contrib.blogofbug.swing.layout.CaroselLayout.CaroselPosition getPosition(Component comp)
Gets the additional data stored by the layout manager for a given component

Parameters:
  `comp` - The component you wish retreive the data for
Returns:
  A position, which is added if it does not already exist. Never null unless you run out of memory!

### recalculateVisibleItems

protected int recalculateVisibleItems()
Determines how many of the items being laid out are currently visible.

Returns:
  How many of the items in the carousel are currently visible.

### recalculateCarosel

protected void recalculateCarosel()
Updates all of the positions of the carousel. Does not do a repaint, just does the math ready for the next one.

### minimumLayoutSize

public Dimension minimumLayoutSize(Container parent)
Cheats and bases it's size on the prefered sizes of each component

Specified by:
  `minimumLayoutSize` in interface `LayoutManager`
Parameters:
  `parent` - The container interested in the layout size
Returns:
  The minimum size of the layout. See above.

### preferredLayoutSize

public Dimension preferredLayoutSize(Container parent)
Determine the widest and tallest dimensions, then return the height as 1.5 * the highest, and 3 * the widest

Specified by:
  `preferredLayoutSize` in interface `LayoutManager`
Parameters:
  `parent` - The container for the layout
Returns:
  The prefered size of the layout

### calculateCenter

protected Point calculateCenter(Insets insets, int width, int height, int widest)
Determines the center of the carousel

Parameters:
  `insets` - The insets of the container
  `width` - The width of the container
  `height` - The height of the container
  `widest` - The widest component
Returns:
  A point at the center of the carousel

### setDepthBasedAlpha

public void setDepthBasedAlpha(boolean depthBasedAlpha)
Controls if items should fade as they move to the back of the carousel

Parameters:
  `depthBasedAlpha` - True if they should fade, false if they shouldn't

### shouldHide

protected boolean shouldHide(Component comp, double angle, double s)
Can be over-ridden to restrict the range of angles where the child component is shown

Parameters:
  `comp` - Controls if components are hidden or not, in the case of this layout it always returns false
  `angle` - The angle of the component under consideration
  `s` - The scale of the component under consideration
Returns:
  false if the component should not be shown

### getCarouselRadius

protected Dimension getCarouselRadius(Container target, Insets insets, int width, int height, int widestComponent)
Determines the correct size of the carousel for the container

Parameters:
  `target` - The target container
  `insets` - Insets into the target container
  `width` - Width of the target container
  `height` - Height of the target container
  `widestComponent` - The widest component in the container
Returns:
  The

### getScale

protected double getScale(double angle, double x, double y, double carouselX, double carouselY)
Determines the scale to be applied to the component. The default calculation divides the y co-ordinate by the y-cordinate of the centre. Other implimentations may use some of the other parameters

Parameters:
  `angle` - The angle of the component
  `x` - The x-position of the component
  `y` - The y-position of the component
  `carouselX` - The x centre of the carousel
  `carouselY` - The y centre of the carousel
Returns:
  A double which will be used to scale x and y co-ordinates

### layoutContainer

public void layoutContainer(Container target)
Lays out all of the components on the carosel. Using the preferred width and height to base scaling on

Specified by:
  `layoutContainer` in interface `LayoutManager`
Parameters:
  `target` - The container currently being laid out

### getAngle

public double getAngle()
Returns the current rotational angle

Returns:
  The current rotated angle in radians

### setAngle

public void setAngle(double d)
Sets the current rotational angle. Will not cause an animation to start

Parameters:
  `d` - The desired angle in radians

### isAnimating

protected boolean isAnimating()
Determines if an animation is currently playing

Returns:
  true if it is animating, false if it isn't

### actionPerformed

public void actionPerformed(ActionEvent actionEvent)
Manages timer actions, terminating the timer if any event is fully achieved

Specified by:
  `actionPerformed` in interface `ActionListener`
Parameters:
  `actionEvent` - the action event, although this will always be the timer

### finalizeLayoutImmediately

public void finalizeLayoutImmediately()
Moves everything to their "target" positions, without animating anything

### setTarget

protected final void setTarget(double target)
Sets a target angle to rotate to, always choses a direction that is less than or equal to 180 degrees

Parameters:
  `target` - The target angle in radians

### setFrontMostComponent

public void setFrontMostComponent(Component component)
Moves the specified component to the front

Parameters:
  `component` - The component move to the front

### getPreviousComponent

public Component getPreviousComponent(Component component)
Retrieve the component before the specified one. It does not filter out invisible ones.

Parameters:
  `component` - The component you are looking for the one before for.
Returns:
  The component before it

### getNextComponent

public Component getNextComponent(Component component)
Retrieve the component after the specified one. It does not filter out invisible ones.

Parameters:
  `component` - The component
Returns:
  The one after it

### getComponentCount

public int getComponentCount()
The number of components being laid out. Does not included hidden ones

Returns:
  The number of components

### getComponentIndex

public int getComponentIndex(Component comp)
Gets the index of the supplied component

Parameters:
  `comp` - The component
Returns:
  The index

### getNeutralContentWidth

public int getNeutralContentWidth()
The size of comopnents a neutral width

Returns:
  The size of components at neutral width (scale 1.0)