java.lang.Object
org.pushingpixels.radiance.theming.extras.internal.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 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
    • animationTimer

      private Timer animationTimer
      Time for driving animations
    • 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
  • 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 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)