Groovy Documentation

com.blogofbug.swing.layout
[Java] Class CaroselLayout

java.lang.Object
  com.blogofbug.swing.layout.CaroselLayout
All Implemented Interfaces:
LayoutManager, ActionListener

public class CaroselLayout
extends Object

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.

Authors:
bug


Nested Class Summary
class CaroselLayout.CaroselPosition

 
Field Summary
protected Hashtable additionalData

List of additional information held on components in the carousel

private Timer animationTimer

Time for driving animations

protected LinkedList components

List of components being laid out

private Container container

The container the layout is... laying out

private boolean depthBasedAlpha

Should items furtehr away from the observer be faded out?

private int neutralContentWidth

The width of a component when the scale is 1.0

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
CaroselLayout(Container forContainer)

Creates a new instance of the layout engine, tied to the specified container.

 
Method Summary
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 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 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 Object
wait, wait, wait, equals, toString, hashCode, getClass, notify, notifyAll
 

Field Detail

additionalData

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


animationTimer

private Timer animationTimer
Time for driving animations


components

protected LinkedList components
List of components being laid out


container

private Container container
The container the layout is... laying out


depthBasedAlpha

private boolean depthBasedAlpha
Should items furtehr away from the observer be faded out?


neutralContentWidth

private int neutralContentWidth
The width of a component when the scale is 1.0


numberOfItems

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


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 Detail

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 Detail

actionPerformed

public void actionPerformed(ActionEvent actionEvent)
Manages timer actions, terminating the timer if any event is fully achieved
Parameters:
actionEvent - the action event, although this will always be the timer


addLayoutComponent

public void addLayoutComponent(String name, Component comp)
Name is ignored
Parameters:
name - The name of the component, ignored.
comp - The component being added


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


finalizeLayoutImmediately

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


getAngle

public double getAngle()
Returns the current rotational angle
Returns:
The current rotated angle in radians


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


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)


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


getPosition

protected 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!


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


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


isAnimating

protected boolean isAnimating()
Determines if an animation is currently playing
Returns:
true if it is animating, false if it isn't


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
Parameters:
target - The container currently being laid out


minimumLayoutSize

public Dimension minimumLayoutSize(Container parent)
Cheats and bases it's size on the prefered sizes of each component
Parameters:
parent - The container interested in the layout size
Returns:
The minimum size of the layout. See above.


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


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
Parameters:
parent - The container for the layout
Returns:
The prefered size of the layout


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.


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.


removeLayoutComponent

public void removeLayoutComponent(Component comp)
Remove the component
Parameters:
comp - The component being removed


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


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


setFrontMostComponent

public void setFrontMostComponent(Component component)
Moves the specified component to the front
Parameters:
component - The component move to the front


setNeutralContentWidth

public void setNeutralContentWidth(int neutralContentWidth)
Specify the neutral content width of any laid out component.
Parameters:
neutralContentWidth - The neutral width of components


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


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


 

Groovy Documentation