Class DockLayoutPanel

  • All Implemented Interfaces:
    HasAttachHandlers, HasHandlers, EventListener, AnimatedLayout, HasVisibility, HasWidgets, HasWidgets.ForIsWidget, IndexedPanel, IndexedPanel.ForIsWidget, IsWidget, ProvidesResize, RequiresResize, java.lang.Iterable<Widget>
    Direct Known Subclasses:
    SplitLayoutPanel

    public class DockLayoutPanel
    extends ComplexPanel
    implements AnimatedLayout, RequiresResize, ProvidesResize
    A panel that lays its child widgets out "docked" at its outer edges, and allows its last widget to take up the remaining space in its center.

    This widget will only work in standards mode, which requires that the HTML page in which it is run have an explicit <!DOCTYPE> declaration.

    Example

    public class DockLayoutPanelExample implements EntryPoint {
    
      public void onModuleLoad() {
        // Attach five widgets to a DockLayoutPanel, one in each direction. Lay
        // them out in 'em' units.
        DockLayoutPanel p = new DockLayoutPanel(Unit.EM);
        p.addNorth(new HTML("north"), 2);
        p.addSouth(new HTML("south"), 2);
        p.addEast(new HTML("east"), 2);
        p.addWest(new HTML("west"), 2);
        p.add(new HTML("center"));
    
        // Attach the LayoutPanel to the RootLayoutPanel. The latter will listen for
        // resize events on the window to ensure that its children are informed of
        // possible size changes.
        RootLayoutPanel rp = RootLayoutPanel.get();
        rp.add(p);
      }
    }
    

    Use in UiBinder Templates

    DockLayoutPanel elements in UiBinder templates lay out their children in elements tagged with the cardinal directions, and center:

    <g:center>
    <g:north>
    <g:south>
    <g:west>
    <g:east>

    Each child can hold only widget, and there can be only one <g:center>. However, there can be any number of the directional children.

    (Note that the tags of the child elements are not capitalized. This is meant to signal that they are not runtime objects, and so cannot have a ui:field attribute.)

    For example:

     <g:DockLayoutPanel unit='EM'>
       <g:north size='5'>
         <g:Label>Top</g:Label>
       </g:north>
       <g:center>
         <g:Label>Body</g:Label>
       </g:center>
       <g:west size='192'>
         <g:HTML>
           <ul>
             <li>Sidebar</li>
             <li>Sidebar</li>
             <li>Sidebar</li>
           </ul>
         </g:HTML>
       </g:west>
     </g:DockLayoutPanel>
     
    • Constructor Detail

      • DockLayoutPanel

        public DockLayoutPanel​(Style.Unit unit)
        Creates an empty dock panel.
        Parameters:
        unit - the unit to be used for layout
    • Method Detail

      • add

        public void add​(Widget widget)
        Adds a widget at the center of the dock. No further widgets may be added after this one.
        Specified by:
        add in interface HasWidgets
        Overrides:
        add in class Panel
        Parameters:
        widget - the widget to be added
        See Also:
        HasWidgets.add(Widget)
      • addEast

        public void addEast​(Widget widget,
                            double size)
        Adds a widget to the east edge of the dock.
        Parameters:
        widget - the widget to be added
        size - the child widget's size
      • addLineEnd

        public void addLineEnd​(Widget widget,
                               double size)
        Adds a widget to the end of the line. In LTR mode, the widget is added to the east. In RTL mode, the widget is added to the west.
        Parameters:
        widget - the widget to be added
        size - the child widget's size
      • addLineStart

        public void addLineStart​(Widget widget,
                                 double size)
        Adds a widget to the start of the line. In LTR mode, the widget is added to the west. In RTL mode, the widget is added to the east.
        Parameters:
        widget - the widget to be added
        size - the child widget's size
      • addNorth

        public void addNorth​(Widget widget,
                             double size)
        Adds a widget to the north edge of the dock.
        Parameters:
        widget - the widget to be added
        size - the child widget's size
      • addSouth

        public void addSouth​(Widget widget,
                             double size)
        Adds a widget to the south edge of the dock.
        Parameters:
        widget - the widget to be added
        size - the child widget's size
      • addWest

        public void addWest​(Widget widget,
                            double size)
        Adds a widget to the west edge of the dock.
        Parameters:
        widget - the widget to be added
        size - the child widget's size
      • animate

        public void animate​(int duration)
        Description copied from interface: AnimatedLayout
        Layout children, animating over the specified period of time.
        Specified by:
        animate in interface AnimatedLayout
        Parameters:
        duration - the animation duration, in milliseconds
      • animate

        public void animate​(int duration,
                            Layout.AnimationCallback callback)
        Description copied from interface: AnimatedLayout
        Layout children, animating over the specified period of time.

        This method provides a callback that will be informed of animation updates. This can be used to create more complex animation effects.

        Specified by:
        animate in interface AnimatedLayout
        Parameters:
        duration - the animation duration, in milliseconds
        callback - the animation callback
      • getWidgetContainerElement

        public Element getWidgetContainerElement​(Widget child)
        Gets the container element wrapping the given child widget.
        Parameters:
        child -
        Returns:
        the widget's container element
      • getWidgetDirection

        public DockLayoutPanel.Direction getWidgetDirection​(Widget child)
        Gets the layout direction of the given child widget.
        Parameters:
        child - the widget to be queried
        Returns:
        the widget's layout direction, or null if it is not a child of this panel
        Throws:
        java.lang.AssertionError - if the widget is not a child and assertions are enabled
      • getWidgetSize

        public java.lang.Double getWidgetSize​(Widget child)
        Gets the layout size of the given child widget.
        Parameters:
        child - the widget to be queried
        Returns:
        the widget's layout size, or null if it is not a child of this panel
        Throws:
        java.lang.AssertionError - if the widget is not a child and assertions are enabled
      • insertEast

        public void insertEast​(Widget widget,
                               double size,
                               Widget before)
        Adds a widget to the east edge of the dock, inserting it before an existing widget.
        Parameters:
        widget - the widget to be added
        size - the child widget's size
        before - the widget before which to insert the new child, or null to append
      • insertLineEnd

        public void insertLineEnd​(Widget widget,
                                  double size,
                                  Widget before)
        Adds a widget to the start of the line, inserting it before an existing widget. In LTR mode, the widget is added to the east. In RTL mode, the widget is added to the west.
        Parameters:
        widget - the widget to be added
        size - the child widget's size
        before - the widget before which to insert the new child, or null to append
      • insertLineStart

        public void insertLineStart​(Widget widget,
                                    double size,
                                    Widget before)
        Adds a widget to the end of the line, inserting it before an existing widget. In LTR mode, the widget is added to the west. In RTL mode, the widget is added to the east.
        Parameters:
        widget - the widget to be added
        size - the child widget's size
        before - the widget before which to insert the new child, or null to append
      • insertNorth

        public void insertNorth​(Widget widget,
                                double size,
                                Widget before)
        Adds a widget to the north edge of the dock, inserting it before an existing widget.
        Parameters:
        widget - the widget to be added
        size - the child widget's size
        before - the widget before which to insert the new child, or null to append
      • insertSouth

        public void insertSouth​(Widget widget,
                                double size,
                                Widget before)
        Adds a widget to the south edge of the dock, inserting it before an existing widget.
        Parameters:
        widget - the widget to be added
        size - the child widget's size
        before - the widget before which to insert the new child, or null to append
      • insertWest

        public void insertWest​(Widget widget,
                               double size,
                               Widget before)
        Adds a widget to the west edge of the dock, inserting it before an existing widget.
        Parameters:
        widget - the widget to be added
        size - the child widget's size
        before - the widget before which to insert the new child, or null to append
      • onResize

        public void onResize()
        Description copied from interface: RequiresResize
        This method must be called whenever the implementor's size has been modified.
        Specified by:
        onResize in interface RequiresResize
      • remove

        public boolean remove​(Widget w)
        Description copied from class: Panel
        Removes a child widget.

        How to Override this Method

        There are several important things that must take place in the correct order to properly remove a Widget from a Panel. Not all of these steps will be relevant to every Panel, but all of the steps must be considered.

        1. Validate: Make sure this Panel is actually the parent of the child Widget; return false if it is not.
        2. Orphan: Call Panel.orphan(Widget) first while the child Widget is still attached.
        3. Physical Detach: Adjust the DOM to account for the removal of the child Widget. The Widget's Element must be physically removed from the DOM.
        4. Logical Detach: Update the Panel's state variables to reflect the removal of the child Widget. Example: the Widget is removed from the Panel's WidgetCollection.

        Specified by:
        remove in interface HasWidgets
        Overrides:
        remove in class ComplexPanel
        Parameters:
        w - the widget to be removed
        Returns:
        true if the child was present
      • setWidgetHidden

        public void setWidgetHidden​(Widget widget,
                                    boolean hidden)
        Sets whether or not the given widget should be hidden.
        Parameters:
        widget - the widget to hide or display
        hidden - true to hide the widget, false to display it
      • setWidgetSize

        public void setWidgetSize​(Widget widget,
                                  double size)
        Updates the size of the widget passed in as long as it is not the center widget and updates the layout of the dock.
        Parameters:
        widget - the widget that needs to update its size
        size - the size to update the widget to
      • getCenter

        protected Widget getCenter()
      • getCenterHeight

        protected double getCenterHeight()
      • getCenterWidth

        protected double getCenterWidth()
      • insert

        protected void insert​(Widget widget,
                              DockLayoutPanel.Direction direction,
                              double size,
                              Widget before)
        Adds a widget to the specified edge of the dock. If the widget is already a child of this panel, this method behaves as though remove(Widget) had already been called.
        Parameters:
        widget - the widget to be added
        direction - the widget's direction in the dock
        before - the widget before which to insert the new child, or null to append
      • assertIsChild

        void assertIsChild​(Widget widget)