Class CascadingStylesheet

  • All Implemented Interfaces:
    Stylesheet

    public class CascadingStylesheet
    extends java.lang.Object
    implements Stylesheet
    Cascading stylesheet implementation strongly inspired by CSS.

    This stylesheet contains:

    • a default style that defines all the attributes,
    • a set of rules with a selector and a partial style.

    The style of a widget is determined following these steps:

    1. create an empty result style (no attributes set),
    2. merge widget with matching selectors rules (set by getSelectorStyle(Selector)),
    3. recursively merge with inherited attributes of parents (repeat previous step for parent recursively) (see Widget.getParent()),
    4. merge global style (set by getDefaultStyle()).
    The merge consists in completing the result style with all the set attributes of another style (see Style). The result style is complete at the end of the resolution.

    The implementation assumes that the style of the parent is resolved prior to the resolution of its children. It simplifies the cascading resolution because it avoids recursive resolution upward. In other words, that means that the resolution of the styles in a hierarchy must be done from top to bottom. That is the case for the widgets since Widget.updateStyle() is recursive (see Container.updateStyle()).

    • Constructor Detail

      • CascadingStylesheet

        public CascadingStylesheet()
        Creates a new cascading stylesheet.
    • Method Detail

      • getStyle

        public Style getStyle​(Widget widget)
        Description copied from interface: Stylesheet
        Gets the style for a widget.
        Specified by:
        getStyle in interface Stylesheet
        Parameters:
        widget - the widget to get the style for.
        Returns:
        the style applied to the widget.
      • getDefaultStyle

        public EditableStyle getDefaultStyle()
        Gets the default style. The style can be modified.

        This style is used as the root style of the cascading resolution. Its initial attributes are equal to the values defined in DefaultStyle.

        Returns:
        the editable default style.
      • resetDefaultStyle

        public void resetDefaultStyle()
        Resets the default style attributes to their initial value.
      • getSelectorStyle

        public EditableStyle getSelectorStyle​(Selector selector)
        Gets the style for a selector. The style can be modified.

        This style is applied to the widgets matching the selector.

        Parameters:
        selector - the selector.
        Returns:
        the editable style for the given selector.
      • resetSelectorStyle

        public void resetSelectorStyle​(Selector selector)
        Resets the style attributes for a selector.
        Parameters:
        selector - the selector.
      • reset

        public void reset()
        Resets the stylesheet to its initial state.
      • getStyleSources

        @Nullable
        public static Selector[] getStyleSources​(Style style)
        Gets the selectors used to create the given style.

        The returned array contains 16 entries: one for each parameter of the style. For each entry, the selector belongs to the rule selected to fill the matching parameter. A null entry means that the parameter is from the default style.

        The BON boolean constant DEBUG_CASCADINGSTYLE_ENABLED_CONSTANT must be set to true for this method to work. Beware that enabling that feature may downgrade the performances (more time to compute a style and more Java heap used).

        Parameters:
        style - the style to get the sources for
        Returns:
        the array of selectors
        Throws:
        java.lang.IllegalArgumentException - if the given style does not come from a CascadingStylesheet