Class VScrollTable

  • All Implemented Interfaces:
    com.google.gwt.event.dom.client.BlurHandler, com.google.gwt.event.dom.client.FocusHandler, com.google.gwt.event.dom.client.ScrollHandler, com.google.gwt.event.logical.shared.HasAttachHandlers, com.google.gwt.event.shared.EventHandler, com.google.gwt.event.shared.HasHandlers, com.google.gwt.user.client.EventListener, com.google.gwt.user.client.ui.HasVisibility, com.google.gwt.user.client.ui.HasWidgets, com.google.gwt.user.client.ui.HasWidgets.ForIsWidget, com.google.gwt.user.client.ui.IndexedPanel, com.google.gwt.user.client.ui.IndexedPanel.ForIsWidget, com.google.gwt.user.client.ui.InsertPanel, com.google.gwt.user.client.ui.InsertPanel.ForIsWidget, com.google.gwt.user.client.ui.IsWidget, DeferredWorker, Focusable, ActionOwner, VHasDropHandler, SubPartAware, Iterable<com.google.gwt.user.client.ui.Widget>
    Direct Known Subclasses:
    VTreeTable

    public class VScrollTable
    extends com.google.gwt.user.client.ui.FlowPanel
    implements com.google.gwt.user.client.ui.HasWidgets, com.google.gwt.event.dom.client.ScrollHandler, VHasDropHandler, com.google.gwt.event.dom.client.FocusHandler, com.google.gwt.event.dom.client.BlurHandler, Focusable, ActionOwner, SubPartAware, DeferredWorker
    VScrollTable VScrollTable is a FlowPanel having two widgets in it: * TableHead component * ScrollPanel TableHead contains table's header and widgets + logic for resizing, reordering and hiding columns. ScrollPanel contains VScrollTableBody object which handles content. To save some bandwidth and to improve clients responsiveness with loads of data, in VScrollTableBody all rows are not necessary rendered. There are "spacers" in VScrollTableBody to use the exact same space as non-rendered rows would use. This way we can use seamlessly traditional scrollbars and scrolling to fetch more rows instead of "paging". In VScrollTable we listen to scroll events. On horizontal scrolling we also update TableHeads scroll position which has its scrollbars hidden. On vertical scroll events we will check if we are reaching the end of area where we have rows rendered and TODO implement unregistering for child components in Cells
    • Field Detail

      • showRowHeaders

        public boolean showRowHeaders
        For internal use only. May be removed or replaced in the future.
      • paintableId

        public String paintableId
        For internal use only. May be removed or replaced in the future.
      • immediate

        public boolean immediate
        For internal use only. May be removed or replaced in the future.
      • selectLastItemInNextRender

        public boolean selectLastItemInNextRender
        For internal use only. May be removed or replaced in the future.
      • selectFirstItemInNextRender

        public boolean selectFirstItemInNextRender
        For internal use only. May be removed or replaced in the future.
      • focusFirstItemInNextRender

        public boolean focusFirstItemInNextRender
        For internal use only. May be removed or replaced in the future.
      • focusLastItemInNextRender

        public boolean focusLastItemInNextRender
        For internal use only. May be removed or replaced in the future.
      • selectionRangeStart

        public VScrollTable.VScrollTableBody.VScrollTableRow selectionRangeStart
        Helper to store selection range start in when using the keyboard

        For internal use only. May be removed or replaced in the future.

      • selectionChanged

        public boolean selectionChanged
        Flag for notifying when the selection has changed and should be sent to the server

        For internal use only. May be removed or replaced in the future.

      • bodyActionKeys

        public String[] bodyActionKeys
        For internal use only. May be removed or replaced in the future.
      • initializedAndAttached

        public boolean initializedAndAttached
        For internal use only. May be removed or replaced in the future.
      • headerChangedDuringUpdate

        public boolean headerChangedDuringUpdate
        Flag to indicate if a column width recalculation is needed due update.

        For internal use only. May be removed or replaced in the future.

      • tHead

        public final VScrollTable.TableHead tHead
        For internal use only. May be removed or replaced in the future.
      • totalRows

        public int totalRows
        For internal use only. May be removed or replaced in the future.
      • enabled

        public boolean enabled
        For internal use only. May be removed or replaced in the future.
      • showColHeaders

        public boolean showColHeaders
        For internal use only. May be removed or replaced in the future.
      • showColFooters

        public boolean showColFooters
        For internal use only. May be removed or replaced in the future.
      • recalcWidths

        public boolean recalcWidths
        Read from the "recalcWidths" -attribute. When it is true, the table will recalculate the widths for columns - desirable in some cases. For #1983, marked experimental. See also variable refreshContentWidths in method VScrollTable.TableHead.updateCellsFromUIDL(UIDL).

        For internal use only. May be removed or replaced in the future.

      • rendering

        public boolean rendering
        For internal use only. May be removed or replaced in the future.
      • tabIndex

        public int tabIndex
        For internal use only. May be removed or replaced in the future.
      • lastRenderedHeight

        public int lastRenderedHeight
        For internal use only. May be removed or replaced in the future.
      • serverCacheFirst

        public int serverCacheFirst
        Values (serverCacheFirst+serverCacheLast) sent by server that tells which rows (indexes) are in the server side cache (page buffer). -1 means unknown. The server side cache row MUST MATCH the client side cache rows. If the client side cache contains additional rows with e.g. buttons, it will cause out of sync when such a button is pressed. If the server side cache contains additional rows with e.g. buttons, scrolling in the client will cause empty buttons to be rendered (cached=true request for non-existing components) For internal use only. May be removed or replaced in the future.
      • serverCacheLast

        public int serverCacheLast
      • postponeSanityCheckForLastRendered

        public boolean postponeSanityCheckForLastRendered
        In several cases TreeTable depends on the scrollBody.lastRendered being 'out of sync' while the update is being done. In those cases the sanity check must be performed afterwards.
      • sizeNeedsInit

        public boolean sizeNeedsInit
        For internal use only. May be removed or replaced in the future.
      • multiselectPending

        public boolean multiselectPending
        For internal use only. May be removed or replaced in the future.
      • collapsibleMenuContent

        public CollapseMenuContent collapsibleMenuContent
        For internal use only. May be removed or replaced in the future.
    • Constructor Detail

      • VScrollTable

        public VScrollTable()
    • Method Detail

      • setStyleName

        public void setStyleName​(String style)
        Overrides:
        setStyleName in class com.google.gwt.user.client.ui.UIObject
      • setStylePrimaryName

        public void setStylePrimaryName​(String style)
        Overrides:
        setStylePrimaryName in class com.google.gwt.user.client.ui.UIObject
      • sendSelectedRows

        protected void sendSelectedRows()
        Sends the selection to the server if changed since the last update/visit.
      • sendSelectedRows

        protected void sendSelectedRows​(boolean immediately)
        Sends the selection to the server if it has been changed since the last update/visit.
        Parameters:
        immediately - set to true to immediately send the rows
      • getNavigationUpKey

        protected int getNavigationUpKey()
        Get the key that moves the selection head upwards. By default it is the up arrow key but by overriding this you can change the key to whatever you want.
        Returns:
        The keycode of the key
      • getNavigationDownKey

        protected int getNavigationDownKey()
        Get the key that moves the selection head downwards. By default it is the down arrow key but by overriding this you can change the key to whatever you want.
        Returns:
        The keycode of the key
      • getNavigationLeftKey

        protected int getNavigationLeftKey()
        Get the key that scrolls to the left in the table. By default it is the left arrow key but by overriding this you can change the key to whatever you want.
        Returns:
        The keycode of the key
      • getNavigationRightKey

        protected int getNavigationRightKey()
        Get the key that scroll to the right on the table. By default it is the right arrow key but by overriding this you can change the key to whatever you want.
        Returns:
        The keycode of the key
      • getNavigationSelectKey

        protected int getNavigationSelectKey()
        Get the key that selects an item in the table. By default it is the space bar key but by overriding this you can change the key to whatever you want.
        Returns:
      • getNavigationPageUpKey

        protected int getNavigationPageUpKey()
        Get the key the moves the selection one page up in the table. By default this is the Page Up key but by overriding this you can change the key to whatever you want.
        Returns:
      • getNavigationPageDownKey

        protected int getNavigationPageDownKey()
        Get the key the moves the selection one page down in the table. By default this is the Page Down key but by overriding this you can change the key to whatever you want.
        Returns:
      • getNavigationStartKey

        protected int getNavigationStartKey()
        Get the key the moves the selection to the beginning of the table. By default this is the Home key but by overriding this you can change the key to whatever you want.
        Returns:
      • getNavigationEndKey

        protected int getNavigationEndKey()
        Get the key the moves the selection to the end of the table. By default this is the End key but by overriding this you can change the key to whatever you want.
        Returns:
      • initializeRows

        public void initializeRows​(UIDL uidl,
                                   UIDL rowData)
        For internal use only. May be removed or replaced in the future.
      • updateColumnProperties

        public void updateColumnProperties​(UIDL uidl)
        For internal use only. May be removed or replaced in the future.
      • selectSelectedRows

        public boolean selectSelectedRows​(UIDL uidl)
        For internal use only. May be removed or replaced in the future.
      • updateSortingProperties

        public void updateSortingProperties​(UIDL uidl)
        For internal use only. May be removed or replaced in the future.
      • resizeSortedColumnForSortIndicator

        public void resizeSortedColumnForSortIndicator()
        For internal use only. May be removed or replaced in the future.
      • updateFirstVisibleAndScrollIfNeeded

        public void updateFirstVisibleAndScrollIfNeeded​(UIDL uidl)
        For internal use only. May be removed or replaced in the future.
      • measureRowHeightOffset

        protected int measureRowHeightOffset​(int rowIx)
      • updatePageLength

        public void updatePageLength​(UIDL uidl)
        For internal use only. May be removed or replaced in the future.
      • updateSelectionProperties

        public void updateSelectionProperties​(UIDL uidl,
                                              AbstractComponentState state,
                                              boolean readOnly)
        For internal use only. May be removed or replaced in the future.
      • updateDragMode

        public void updateDragMode​(UIDL uidl)
        For internal use only. May be removed or replaced in the future.
      • updateTotalRows

        public void updateTotalRows​(UIDL uidl)
        For internal use only. May be removed or replaced in the future.
      • setTotalRows

        protected void setTotalRows​(int newTotalRows)
      • getTotalRows

        public int getTotalRows()
      • getHierarchyColumnIndex

        protected int getHierarchyColumnIndex()
        This method exists for the needs of VTreeTable only. Not part of the official API, extend at your own risk. May be removed or replaced in the future.
        Returns:
        index of TreeTable's hierarchy column, or -1 if not applicable
      • updateMaxIndent

        public void updateMaxIndent()
        For internal use only. May be removed or replaced in the future.
      • focusRowFromBody

        public void focusRowFromBody()
        For internal use only. May be removed or replaced in the future.
      • selectLastRenderedRowInViewPort

        public void selectLastRenderedRowInViewPort​(boolean focusOnly)
        Selects the last row visible in the table

        For internal use only. May be removed or replaced in the future.

        Parameters:
        focusOnly - Should the focus only be moved to the last row
      • selectFirstRenderedRowInViewPort

        public void selectFirstRenderedRowInViewPort​(boolean focusOnly)
        Selects the first row visible in the table

        For internal use only. May be removed or replaced in the future.

        Parameters:
        focusOnly - Should the focus only be moved to the first row
      • setCacheRateFromUIDL

        public void setCacheRateFromUIDL​(UIDL uidl)
        For internal use only. May be removed or replaced in the future.
      • updateActionMap

        public void updateActionMap​(UIDL mainUidl)
        For internal use only. May be removed or replaced in the future.
      • getActionCaption

        public String getActionCaption​(String actionKey)
      • getActionIcon

        public String getActionIcon​(String actionKey)
      • updateBody

        public void updateBody​(UIDL uidl,
                               int firstRow,
                               int reqRows)
        For internal use only. May be removed or replaced in the future.
        Parameters:
        uidl - which contains row data
        firstRow - first row in data set
        reqRows - amount of rows in data set
      • updateRowsInBody

        public void updateRowsInBody​(UIDL partialRowUpdates)
        For internal use only. May be removed or replaced in the future.
      • discardRowsOutsideCacheWindow

        protected void discardRowsOutsideCacheWindow()
        Updates the internal cache by unlinking rows that fall outside of the caching window.
      • addAndRemoveRows

        public void addAndRemoveRows​(UIDL partialRowAdditions)
        Inserts rows in the table body or removes them from the table body based on the commands in the UIDL.

        For internal use only. May be removed or replaced in the future.

        Parameters:
        partialRowAdditions - the UIDL containing row updates.
      • isSelectable

        public boolean isSelectable()
        For internal use only. May be removed or replaced in the future.
      • setColWidth

        protected void setColWidth​(int colIndex,
                                   int w,
                                   boolean isDefinedWidth)
        Note: not part of the official API, extend at your own risk. May be removed or replaced in the future. Sets the indicated column's width for headers and scrollBody alike.
        Parameters:
        colIndex - index of the modified column
        w - new width (may be subject to modifications if doesn't meet minimum requirements)
        isDefinedWidth - disables expand ratio if set true
      • reOrderColumn

        protected void reOrderColumn​(String columnKey,
                                     int newIndex)
      • onDetach

        protected void onDetach()
        Overrides:
        onDetach in class com.google.gwt.user.client.ui.Widget
      • onAttach

        public void onAttach()
        Overrides:
        onAttach in class com.google.gwt.user.client.ui.Widget
      • sizeInit

        public void sizeInit()
        Run only once when component is attached and received its initial content. This function: * Syncs headers and bodys "natural widths and saves the values. * Sets proper width and height * Makes deferred request to get some cache rows For internal use only. May be removed or replaced in the future.
      • willHaveScrollbars

        protected boolean willHaveScrollbars()
        Note: this method is not part of official API although declared as protected. Extend at your own risk.
        Returns:
        true if content area will have scrollbars visible.
      • hideScrollPositionAnnotation

        public void hideScrollPositionAnnotation()
        For internal use only. May be removed or replaced in the future.
      • isScrollPositionVisible

        public boolean isScrollPositionVisible()
        For internal use only. May be removed or replaced in the future.
      • deselectAll

        public void deselectAll()
        Deselects all items
      • updatePageLength

        public void updatePageLength()
        Determines the pagelength when the table height is fixed.
      • updateWidth

        public void updateWidth()
        For internal use only. May be removed or replaced in the future.
      • setHeight

        public void setHeight​(String height)
        Overrides:
        setHeight in class com.google.gwt.user.client.ui.UIObject
      • updateHeight

        public void updateHeight()
        For internal use only. May be removed or replaced in the future.
      • setVisible

        public void setVisible​(boolean visible)
        Specified by:
        setVisible in interface com.google.gwt.user.client.ui.HasVisibility
        Overrides:
        setVisible in class com.google.gwt.user.client.ui.UIObject
      • buildCaptionHtmlSnippet

        protected String buildCaptionHtmlSnippet​(UIDL uidl)
        Helper function to build html snippet for column or row headers
        Parameters:
        uidl - possibly with values caption and icon
        Returns:
        html snippet containing possibly an icon + caption text
      • onScroll

        public void onScroll​(com.google.gwt.event.dom.client.ScrollEvent event)
        This method has logic which rows needs to be requested from server when user scrolls
        Specified by:
        onScroll in interface com.google.gwt.event.dom.client.ScrollHandler
      • calcFirstRowInViewPort

        protected int calcFirstRowInViewPort()
      • setRowFocus

        public boolean setRowFocus​(VScrollTable.VScrollTableBody.VScrollTableRow row)
        Moves the selection head to a specific row
        Parameters:
        row - The row to where the selection head should move
        Returns:
        Returns true if focus was moved successfully, else false
      • handleNavigation

        protected boolean handleNavigation​(int keycode,
                                           boolean ctrl,
                                           boolean shift)
        Handles the keyboard events handled by the table
        Parameters:
        event - The keyboard event received
        Returns:
        true iff the navigation event was handled
      • onFocus

        public void onFocus​(com.google.gwt.event.dom.client.FocusEvent event)
        Specified by:
        onFocus in interface com.google.gwt.event.dom.client.FocusHandler
      • onBlur

        public void onBlur​(com.google.gwt.event.dom.client.BlurEvent event)
        Specified by:
        onBlur in interface com.google.gwt.event.dom.client.BlurHandler
      • isFocusable

        public boolean isFocusable()
        Can the Table be focused?
        Returns:
        True if the table can be focused, else false
      • focus

        public void focus()
        Description copied from interface: Focusable
        Sets focus to this widget.
        Specified by:
        focus in interface Focusable
      • setProperTabIndex

        public void setProperTabIndex()
        Sets the proper tabIndex for scrollBodyPanel (the focusable elemen in the component).

        If the component has no explicit tabIndex a zero is given (default tabbing order based on dom hierarchy) or -1 if the component does not need to gain focus. The component needs no focus if it has no scrollabars (not scrollable) and not selectable. Note that in the future shortcut actions may need focus.

        For internal use only. May be removed or replaced in the future.

      • startScrollingVelocityTimer

        public void startScrollingVelocityTimer()
      • cancelScrollingVelocityTimer

        public void cancelScrollingVelocityTimer()
      • triggerLazyColumnAdjustment

        public void triggerLazyColumnAdjustment​(boolean now)
      • getWidgetForPaintable

        public com.google.gwt.user.client.ui.Widget getWidgetForPaintable()
      • getSubPartElement

        public com.google.gwt.user.client.Element getSubPartElement​(String subPart)
        Description copied from interface: SubPartAware
        Locates an element inside a component using the identifier provided in subPart. The subPart identifier is component specific and may be any string of characters, numbers, space characters and brackets.
        Specified by:
        getSubPartElement in interface SubPartAware
        Parameters:
        subPart - The identifier for the element inside the component
        Returns:
        The element identified by subPart or null if the element could not be found.
      • getSubPartName

        public String getSubPartName​(com.google.gwt.user.client.Element subElement)
        Description copied from interface: SubPartAware
        Provides an identifier that identifies the element within the component. The subElement is a part of the component and must never be null.

        Note! getSubPartElement(getSubPartName(element)) == element is not always true. A component can choose to provide a more generic identifier for any given element if the results of all interactions with subElement are the same as interactions with the element identified by the return value. For example a button can return an identifier for the root element even though a DIV inside the button was passed as subElement because interactions with the DIV and the root button element produce the same result.

        Specified by:
        getSubPartName in interface SubPartAware
        Parameters:
        subElement - The element the identifier string should uniquely identify
        Returns:
        An identifier that uniquely identifies subElement or null if no identifier could be provided.
      • onUnregister

        public void onUnregister()
        Since:
        7.2.6
      • isWorkPending

        public boolean isWorkPending()
        Description copied from interface: DeferredWorker
        Checks whether there are operations pending for this widget or connector that must be executed before reaching a steady state.
        Specified by:
        isWorkPending in interface DeferredWorker