/*!
    \class QskSkinnable QskSkinnable.h

    \ingroup Framework

    QskSkinnable is the base for all objects, that can be configured by skin hints
    and are displayed by a skinlet. The configuration from the skin can be overwritten by
    adding values to the local skin hint table - it is even possible to replace the
    skinlet individually.

    In most cases a skinnable is a QskControl, but conceptually it is
    possible to have controls, that consist of many skinnables.

    \sa QskSkin, QskSkinlet, QskControl, QskSkinHintTable
*/

/*! \fn QskSkinnable::QskSkinnable()

    Constructs a skinnable where all settings will be resolved from the skin

    \sa effectiveSkin(), effectiveSkinlet, effectiveSkinHint
*/

/*! \fn QskSkinnable::~QskSkinnable()

    Called when the skinnable is destroyed.
*/

/*!
    \fn void QskSkinnable::setSkinlet

    \brief Set an individual skinlet to render/display the content

    Usually all skinnables of the same type are rendered by the same instance
    of a skinlet. For rare situations it can be useful to assign a different skinlet.

    When QskSkinlet::isOwnedBySkinnable() is true, the skinlet will be deleted,
    when the skinnable is deleted or a different skinlet gets assigned.

    \param skinlet Skinlet to render/layout the skinnable.
    
    \sa skinlet(), effectiveSkinlet(), resetSkinlet(),
        QskSkin::declareSkinlet, QskSkinlet::isOwnedBySkinnable()

    \note Overriding the skinlet that has been registered in the skin
          breaks the themeability of the skinnable.
*/

/*!
    \fn QskSkinnable::skinlet

    \return Skinlet, that has been assigned by setSkinlet(). Usually the skinnable
            is coupled to a default skinlet from the skin and the result is a nullptr.

    \sa setSkinlet(), effectiveSkinlet(), effectiveSkin()
*/

/*!
    \fn QskSkinnable::updateNode

    This method replaces the QQuickItem::updatePaintNode method as the
    preferred paint method to override when subclassing QskControl. This allows
    QskControl to perform some additional steps before calling updateNode(),
    and provides a consistent parent node which subclasses can rely on.

    The default implementation simply forwards the operation to the skinlet,

    \param parentNode The parent of the nodes to be added in this method.

    \note Overriding updateNode() might break the themeability and the usual
          strategy to implement custom painting is to customize or replace
          the skinlet.

    \sa QskSkinlet::updateSubNode()
*/

/*!
    \fn QskSkinnable::effectiveSkinHint

    \brief Find the value for a specific aspect

    If an animation is running for the given aspect its value will
        be returned as hint. Then effectiveSkinHint() tries to find a hint
        in the local table and finally tries to resolve the aspect from the
    hint table of the skin.

    \param aspect Initial aspect, to feed the skin hint lookup algorithm.
    \param status Optional status information
    \return Hint value, or an invalid QVariant if no value was found

    \sa effectiveSubcontrol(), effectivePlacement()
*/

/*! \fn QskSkinnable::effectiveFont

    Finds the font role for the given aspect and returns
    the corresponding font from the font table of the skin.

    \param aspect Unresolved aspect
    \return Font, corresponding to the resolved aspect 

    \sa fontRoleHint(), effectiveSkinHint(), QskSkin::font()
*/

/*! \fn QskSkinnable::effectiveGraphicFilter

    Finds the graphic role for the given aspect and returns
    the corresponding color filter from the skin

    \param aspect Unresolved aspect
    \return Color filter, corresponding to the resolved aspect 

    \sa graphicRoleHint(), effectiveSkinHint(), QskSkin::graphicFilter()
*/

/*! \fn QskSkinnable::setAnimationHint

    Insert an animation hint into the local hint table

    \param aspect Unresolved aspect
    \param hint Animation hint

    \sa animationHint(), effectiveAnimation()
*/

/*! \fn QskSkinnable::animationHint

    Retrieve the configuration of the animator for the current state.

    \param aspect Unresolved aspect
    \param status If status != nullptr additional information
                  about where the hint has been found is returned

    \sa effectiveSkinHint()
*/

/*! \fn QskSkinnable::effectiveAnimation

    Retrieve the configuration of the animator for reaching
    a specific state.

    \param type Metric, color or something else
    \param subControl Unsubstituted subControl
    \param state State bits
    \param status If status != nullptr additional information
                  about where the hint has been found is returned

    \return Value from the hint tables
    \sa animationHint()
*/

/*! \fn QskSkinnable::setSkinHint

    \brief Insert a hint into the local hint table

    Presentation, beheviour and layout of the scene graph nodes are
    affected by specific attributes - skin hints - that are configured
    in a table of the skin. Each skinnable has its own table
    where these attributes can be overloaded. Hints from the local
    table have precedence over those from the skin.
    
    The subControl bits of the aspect might be substituted, depending on
    the implementation of effectiveSubcontrol(). By inserting the hint
    directly into the hintTable() the substitution can be avoided.

    \param aspect Unsubstituted aspect
    \param hint Hint, might be anything that fits into a QVariant
                and is understood by the skinlet consuming it.

    \sa effectiveSkinHint(), resetSkinHint(), hintTable(), QskSkinHintTableEditor()
*/

/*! \fn QskSkinnable::resetSkinHint

    \brief Remove a hint from the local hint table

    After removing the hint from the local table the hint will
    be resolved fro the hint table of the skin.

    \param aspect Unsubstituted aspect

    \sa setSkinHint(), effectiveSkinHint()
*/

/*! \fn QskSkinnable::effectiveVariation

    The variation bits are added to an unresolved aspect when
    inserting or looking up values in the hint table.

    \return The default implementation returns QskAspect::NoVariation;

    \sa QskAspect::Variation, effectiveSkinHint()
*/

/*! \fn QskSkinnable::hintStatus

    \param aspect Unresolved aspect
    \return Informations about how the aspect would be resolved

    \sa effectiveSkinHint()
*/

/*! \fn QskSkinnable::setSkinState

    Set the state bits of the skinnable

    Depending on the state a skinnable might have different hints affecting
    its representation and/or behaviour.

    \param newState State bits
    \param animated If true, animators, that have been defined in the skin
                    for newState will be started

    \sa QskAspect, replaceSkinState()
*/

/*! \fn QskSkinnable::setSkinStateFlag

    Set/Clear a state in the state bits 

    \param stateFlag State bit
    \param on true or false

    \sa setSkinState(), skinState()
*/

/*! \fn QskSkinnable::replaceSkinState

    Overwrite the state bits of the skinnable without triggering
    any updates. Usually used for temporary modifications when
    retrieving skin hints.

    \param newState State bits

    \sa QskAspect, setSkinState()
*/

/*! \fn QskSkinnable::skinState

    The state bits are added to an unresolved aspect when
    inserting or looking up values in the hint table.

    \return Current state
    \sa setSkinStateFlag(), setSkinState()
*/

/*! \fn QskSkinnable::skinStateAsPrintable() const

    \return Current state as printable for debugging purposes
    \sa skinStateAsPrintable( QskAspect::State ) const
*/

/*! \fn QskSkinnable::skinStateAsPrintable( QskAspect::State ) const

    \param state State bits
    \return state as printable for debugging purposes

    \note A pointer to an internal buffer is returned, that might be
          overwritten by subsequent calls.
*/

/*! \fn QskSkinnable::subControlRect

    \brief Calculate position and size of a subControl

    A convenience method that forwards the calculation to the skinlet
    
    \param contentsRect Bounding rectangle for laying out the nodes of the skinnable
    \param subControl Unsubstituted subcontrol
    \return Geometry for the subControl

    \sa effectiveSkinlet(), QskSkinlet::subControlRect(), QskControl::contentsRect()
*/

/*! \fn QskSkinnable::subControlContentsRect

    \brief Calculate the inner rectangle for subControl

    The inner rectangle a subcontrol is its geometry with paddings, indentations
    being subtracted. F.e. the inner rectangle of QskPushButton::Panel is the
    bounding rectangle for laying out the QskPushButton::Text and
    QskPushButton::Graphic subcontrols.

    \param contentsRect Bounding rectangle for laying out the nodes of the skinnable
    \param subControl Unsubstituted subcontrol
    \return Geometry for contents inside the subControl

    \sa QskSkinlet::subControlRect(), innerBox()
*/

/*! \fn QskSkinnable::outerBoxSize

    \brief Calculate the size, when being expanded by paddings, indentations

    Paddings, indentations depend on attributes for the given aspect.

    \param aspect Unresolved aspect
    \param innerBoxSize Size to be expanded
    \return Expanded size

    The size hint for a "container" node usually depend on the hints of its
    inner nodes. F.e the size hint for QskPushButton::Panel depends on the size hints of 
    QskPushButton::Text and QskPushButton::Graphic. 

    \sa innerBoxSize(), outerBox(), innerBox()
*/

/*! \fn QskSkinnable::innerBoxSize

    \brief Calculate the size, with paddings, indentations being subtracted

    Paddings, indentations depend on attributes for the given aspect.

    \param aspect Unresolved aspect
    \param outerBoxSize Size to be shrunk
    \return Shrunk size

    \sa outerBoxSize(), innerBox(), outerBox()
*/

/*! \fn QskSkinnable::innerBox

    \brief Calculate the rectangle, whith paddings, indentations being subtracted

    Paddings, indentations depend on attributes for the given aspect.

    \param aspect Unresolved aspect
    \param outerBox Rectangle to be shrunk
    \return Shrunk rectangle

    \sa innerBoxSize(), outerBox()
*/

/*! \fn QskSkinnable::outerBox

    \brief Calculate the rectangle, when being expanded by paddings, indentations

    Paddings, indentations depend on attributes for the given aspect.

    \param aspect Unresolved aspect
    \param innerBox Rectangle to be expanded
    \return Expanded rectangle

    The size hint for a "container" node usually depend on the hints of its
    inner nodes. F.e the size hint for QskPushButton::Panel depends on the size hints of
    QskPushButton::Text and QskPushButton::Graphic. 

    \sa outerBoxSize(), innerBox()
*/

/*! \fn QskSkinnable::innerPadding

    \brief Calculate the padding from attributes for the given aspect

    Beside padding hints, the radii of the shape might have an effect

    \param aspect Unresolved aspect
    \param outerBoxSize Size of the box

    \return Effective padding
*/

/*! \fn QskSkinnable::effectiveSkinlet

    \return Skinlet that has been set with setSkinlet() - or the default
            skinlet from the skin, that had been registered for metaObject()
*/

/*! \fn QskSkinnable::effectiveSkin

    \return Almost always the current skin. The only exception is when manually
            setting a skinlet being created from a different skin.

    \sa QskSetup::skin(), QskSkinlet::skin()
*/

/*! \fn QskSkinnable::startTransition

    Start a transition for a specific aspect, that interpolates
    between 2 values. While the transition is in process a look up for
    the aspect will return the current value of the interpolation.

    In most cases startTransition() is called automatically, when
    the skinState() changes and am animation is found for the new
    state.

    \param aspect Unresolved aspect, only subcontrol substitution will be done
    \param from Start value of the transition

    \sa effectiveAnimation()
*/

/*! \fn QskSkinnable::effectiveSubcontrol

    Subcontrol substitution is a mechanism, that is used when a variation of
    an existing control needs to have skin hints, that can be configured
    individually without having to reimplement a new skinlet.

    F.e. a button on a toolbar is often flat with a hovering effect. In this
    case a tool button could be derived from QskPushButton, where the
    QskPushButton::Panel subcontrol gets substituted by a new subcontrol that
    is defined for the tool button.

    Subcontrol substitution is part of a concept that is known as
    \ref aspect resolving "aspect resolving".

    \param subControl Subcontrol
    \return Substituted subcontrol

    The default implementation is a no operation and does not substitute
*/

/*! \fn QskSkinnable::controlCast()
    
    Safe casting of the skinnable to a QskControl

    The operation is based on comparing metaObject()
    with QskControl::staticMetaObject() ( similar to what qobject_cast() does )

    \return Control if successful, or a nullptr otherwise
*/

/*! \fn QskSkinnable::controlCast() const

    Safe casting of the skinnable to a QskControl

    The operation is based on comparing metaObject()
    with QskControl::staticMetaObject() ( similar to what qobject_cast() does )
    
    \return Control if successful, or a nullptr otherwise
*/

/*! \fn QskSkinnable::owningControl

    In most cases a skinnable is one of the base classes of QskControl and
    the owning control is the derived control. But in case of a control, that
    is built from several skinnables this pure virtual method needs to be implemented.

    \return QskControl, that is owner of the skinnable. In most
            cases the skinnable is inherited 
*/

/*! \fn QskSkinnable::metaObject

    \return Usually the metaObject of the owning control
    \sa owningControl()
*/

/*! \fn QskSkinnable::debug( QskAspect ) const

    Writes an aspect to qDebug() using the string conversions for metaObject()

    \param aspect Aspect to be printed
    \sa qskDebugAspect()
*/

/*! \fn QskSkinnable::debug( QskAspect::State ) const

    Writes a state to qDebug() using the string conversions for metaObject()
    
    \param state State to be printed
    \sa qskDebugState()
*/

/*! \fn QskSkinnable::debug( QDebug, QskAspect ) const

    Writes an aspect to a stream using the string conversions for metaObject()
    
    \param debug Debug stream
    \param aspect Aspect to be printed

    \sa qskDebugAspect()
*/

/*! \fn QskSkinnable::debug( QDebug, QskAspect::State ) const

    Writes a state to a stream using the string conversions for metaObject()
    
    \param debug Debug stream
    \param state State to be printed

    \sa qskDebugState()
*/

/*! \fn QskSkinnable::setColor( QskAspect, Qt::GlobalColor )

    \brief Sets a color hint.

    QskAspect::Color will be added to aspect.

    \param aspect Unresolved aspect
    \param color Color hint

    \sa setSkinHint(), QskAspect::Color
*/

/*! \fn QskSkinnable::setColor( QskAspect, QRgb )

    \brief Sets a color hint.

    QskAspect::Color will be added to aspect.

    \param aspect Unresolved aspect
    \param rgb Color hint

    \sa setSkinHint(), QskAspect::Color
*/

/*! \fn QskSkinnable::setColor( QskAspect, const QColor& )

    \brief Sets a color hint.

    QskAspect::Color will be added to aspect.

    \param aspect Unresolved aspect
    \param color Color hint

    \sa setSkinHint(), QskAspect::Color
*/

/*! \fn QskSkinnable::resetColor

    \brief Removes a color hint from the local table

    QskAspect::Color will be added to aspect.

    \param aspect Unresolved aspect
    \return true, if an entry in the local hint table was found and removed.

    \sa resetSkinHint(), setColor()
*/

/*! \fn QskSkinnable::color

    \brief Retrieves a color hint

    QskAspect::Color will be added to aspect.

    \param aspect Unresolved aspect
    \param status Optional status information
    \return Color hint, or QColor() if no value has been found

    \sa effectiveSkinHint(), setColor()
*/

/*! \fn QskSkinnable::setMetric

    \brief Sets a metric hint

    QskAspect::Metric will be added to aspect.

    \param aspect Unresolved aspect
    \param metric Metric hint

    \sa setSkinHint(), QskAspect::Metric
*/

/*! \fn QskSkinnable::resetMetric

    \brief Removes a metric hint from the local table

    QskAspect::Metric will be added to aspect.

    \param aspect Unresolved aspect
    \return true, if an entry in the local hint table was found and removed.

    \sa resetSkinHint(), setMetric()
*/

/*! \fn QskSkinnable::metric

    \brief Retrieves a metric hint

    QskAspect::Metric will be added to aspect.

    \param aspect Unresolved aspect
    \param status Optional status information

    \return Metric, or 0 if no value was found

    \sa effectiveSkinHint(), setMetric()
*/

/*! \fn QskSkinnable::setFlagHint

    \brief Sets a flag hint

    \param aspect Unresolved aspect
    \param flag Flag hint

    \sa setSkinHint(), QskAspect::Flag
*/

/*! \fn QskSkinnable::resetFlagHint

    \brief Removes a flag hint from the local table
    
    \param aspect Unresolved aspect
    \return true, if an entry in the local hint table was found and removed.
    
    \sa resetSkinHint(), setFlag()
*/

/*! \fn QskSkinnable::flagHint( QskAspect ) const

    \brief Retrieves a flag hint

    \param aspect Unresolved aspect
    \param status Optional status information
    \return Flag, or an invalid QVariant in case no value was found

    \sa effectiveSkinHint(), setFlag()
*/

/*! \fn template< typename T > T QskSkinnable::flagHint( QskAspect, T ) const

    \brief Retrieves a flag hint

    \param aspect Unresolved aspect
    \param defaultValue Default result, when no entry can be found in the hint tables

    \return Flag - or defaultValue if no value had been found
    
    \sa resetSkinHint(), setFlag()
*/

/*! \fn QskSkinnable::setStrutSizeHint( QskAspect, const QSizeF& )

    \brief Sets a metric hint

    QskAspect::Metric | QskAspect::StrutSize will be added to aspect.

    \param aspect Unresolved aspect
    \param size Strut size hint

    \sa setSkinHint(), QskAspect::Metric, QskAspect::StrutSize

*/

/*! \fn QskSkinnable::setStrutSizeHint( QskAspect, qreal, qreal )

    \brief Sets a strut size hint

    QskAspect::Metric | QskAspect::StrutSize will be added to aspect.

    \param aspect Unresolved aspect
    \param width Width of the strut size
    \param height Height of the strut size

    \sa setSkinHint(), QskAspect::Metric, QskAspect::StrutSize
*/

/*! \fn QskSkinnable::resetStrutSizeHint

    \brief Removes a strut size hint from the local table

    QskAspect::Metric | QskAspect::StrutSize will be added to aspect.

    \param aspect Unresolved aspect
    \return true, if an entry in the local hint table was found and removed.

    \sa resetSkinHint(), setStrutSizeHint()
*/

/*! \fn QskSkinnable::strutSizeHint

    \brief Retrieves a strut size hint

    QskAspect::Metric | QskAspect::StrutSize will be added to aspect.

    \param aspect Unresolved aspect
    \param status Optional status information
    \return Strut size, or QSizeF() if no value was found

    \sa effectiveSkinHint(), setStrutSizeHint()
*/

/*! \fn QskSkinnable::setMarginHint( QskAspect, qreal )

    \brief Sets a margin hint

    QskAspect::Metric | QskAspect::Margin will be added to aspect.

    \param aspect Unresolved aspect
    \param margin Margin

    \sa setSkinHint(), QskAspect::Metric, QskAspect::Margin
*/

/*! \fn QskSkinnable::setMarginHint( QskAspect, const QMarginsF& )

    \brief Sets a margin hint

    QskAspect::Metric | QskAspect::Margin will be added to aspect.

    \param aspect Unresolved aspect
    \param margin Margin
    
    \sa setSkinHint(), QskAspect::Metric, QskAspect::Margin
*/

/*! \fn QskSkinnable::resetMarginHint

    \brief Removes a margin hint from the local table

    QskAspect::Metric | QskAspect::Margin will be added to aspect.

    \param aspect Unresolved aspect
    \return true, if an entry in the local hint table was found and removed.

    \sa resetSkinHint(), setMarginHint()
*/

/*! \fn QskSkinnable::marginHint

    \brief Retrieves a margin hint

    QskAspect::Metric | QskAspect::Margin will be added to aspect.

    \param aspect Unresolved aspect
    \param status Optional status information
    \return margin, or QMarginsF() if no value was found

    \sa effectiveSkinHint(), setMarginHint()
*/

/*! \fn QskSkinnable::setPaddingHint( QskAspect, qreal )

    \brief Sets a padding hint

    QskAspect::Metric | QskAspect::Padding will be added to aspect.

    \param aspect Unresolved aspect
    \param padding Padding
    
    \sa setSkinHint(), QskAspect::Metric, QskAspect::Padding
*/

/*! \fn QskSkinnable::setPaddingHint( QskAspect, const QMarginsF& )

    \brief Sets a padding hint

    QskAspect::Metric | QskAspect::Padding will be added to aspect.

    \param aspect Unresolved aspect
    \param padding Padding

    \sa setSkinHint(), QskAspect::Metric, QskAspect::Padding
*/

/*! \fn QskSkinnable::resetPaddingHint

    \brief Removes a padding hint from the local table

    QskAspect::Metric | QskAspect::Padding will be added to aspect.

    \param aspect Unresolved aspect
    \return true, if an entry in the local hint table was found and removed.

    \sa resetSkinHint(), setPaddingHint()
*/

/*! \fn QskSkinnable::paddingHint

    \brief Retrieves a padding hint

    QskAspect::Metric | QskAspect::Padding will be added to aspect.

    \param aspect Unresolved aspect
    \param status Optional status information
    \return padding, or QMarginsF() if no value was found

    \sa effectiveSkinHint(), setPaddingHint()
*/

/*! \fn QskSkinnable::setGradientHint

    \brief Sets a gradient as color hint

    QskAspect::Color will be added to aspect.

    \param aspect Unresolved aspect
    \param gradient Gradint

    \sa setSkinHint(), QskAspect::Color
*/

/*! \fn QskSkinnable::gradientHint

    \brief Retrieves a color hint as gradient

    QskAspect::Color will be added to aspect.
   
    \param aspect Unresolved aspect
    \param status Optional status information
    \return gradient, or QskGraient() if no value was found

    \sa effectiveSkinHint(), setGradientHint()
*/

/*! \fn QskSkinnable::setBoxShapeHint

    \brief Sets a shape hint

    QskAspect::Metric | QskAspect::Shape will be added to aspect.

    \param aspect Unresolved aspect
    \param shape Shape

    \sa setSkinHint(), QskAspect::Metric, QskAspect::Shape
*/

/*! \fn QskSkinnable::resetBoxShapeHint

    \brief Removes a shape hint from the local table

    QskAspect::Metric | QskAspect::Shape will be added to aspect.

    \param aspect Unresolved aspect
    \return true, if an entry in the local hint table was found and removed.

    \sa resetSkinHint(), setBoxShapeHint()
*/

/*! \fn QskSkinnable::boxShapeHint

    \brief Retrieves a shape hint

    QskAspect::Metric | QskAspect::Shape will be added to aspect.

    \param aspect Unresolved aspect
    \param status Optional status information
    \return shape, or QskBoxShapeMetrics() if no value was found

    \sa effectiveSkinHint(), setBoxShapeHint()
*/

/*! \fn QskSkinnable::setBoxBorderMetricsHint

    \brief Sets a border metrics hint

    QskAspect::Metric | QskAspect::Border will be added to aspect.

    \param aspect Unresolved aspect
    \param border Border metrics

    \sa setSkinHint(), QskAspect::Metric, QskAspect::Border
*/

/*! \fn QskSkinnable::resetBoxBorderMetricsHint

    \brief Removes a border metrics hint from the local table

    QskAspect::Metric | QskAspect::Border will be added to aspect.

    \param aspect Unresolved aspect
    \return true, if an entry in the local hint table was found and removed.

    \sa resetSkinHint(), setBoxBorderMetricsHint()
*/

/*! \fn QskSkinnable::boxBorderMetricsHint

    \brief Retrieves a border hint

    QskAspect::Metric | QskAspect::Border will be added to aspect.

    \param aspect Unresolved aspect
    \param status Optional status information
    \return border metrics, or QskBoxBorderMetrics() if no value was found

    \sa effectiveSkinHint(), setBoxBorderMetricsHint()
*/

/*! \fn QskSkinnable::setBoxBorderColorsHint

    \brief Sets a border colors hint

    QskAspect::Color | QskAspect::Border will be added to aspect.

    \param aspect Unresolved aspect
    \param border Border colors

    \sa setSkinHint(), QskAspect::Color, QskAspect::Border
*/

/*! \fn QskSkinnable::resetBoxBorderColorsHint

    \brief Removes a border colors hint from the local table

    QskAspect::Color | QskAspect::Border will be added to aspect.

    \param aspect Unresolved aspect
    \return true, if an entry in the local hint table was found and removed.

    \sa resetSkinHint(), setBoxBorderColorsHint()
*/

/*! \fn QskSkinnable::boxBorderColorsHint

    \brief Retrieves border colors hint

    QskAspect::Color | QskAspect::Border will be added to aspect.

    \param aspect Unresolved aspect
    \param status Optional status information
    \return border colors, or QskBoxBorderColors() if no value was found

    \sa effectiveSkinHint(), setBoxBorderColorsHint()
*/

/*! \fn QskSkinnable::setSpacingHint

    \brief Sets a spacing hint

    QskAspect::Metric | QskAspect::Spacing will be added to aspect.

    \param aspect Unresolved aspect
    \param spacing Spacing

    \sa setSkinHint(), QskAspect::Metric, QskAspect::Spacing
*/

/*! \fn QskSkinnable::resetSpacingHint

    \brief Removes a spacing hint from the local table

    QskAspect::Metric | QskAspect::Spacing will be added to aspect.

    \param aspect Unresolved aspect
    \return true, if an entry in the local hint table was found and removed.

    \sa resetSkinHint(), setSpacingHint()
*/

/*! \fn QskSkinnable::spacingHint

    \brief Retrieves a spacing hint

    QskAspect::Metric | QskAspect::Spacing will be added to aspect.

    \param aspect Unresolved aspect
    \param status Optional status information
    \return spacing, or 0 if no value was found

    \sa effectiveSkinHint(), setSpacingHint()
*/

/*! \fn QskSkinnable::setAlignmentHint

    \brief Sets an alignment hint

    QskAspect::Flag | QskAspect::Alignment will be added to aspect.

    \param aspect Unresolved aspect
    \param alignment Alignment hint

    \sa setSkinHint(), QskAspect::Flag, QskAspect::Alignment

*/

/*! \fn QskSkinnable::resetAlignmentHint

    \brief Removes an alignment hint from the local table

    QskAspect::Flag | QskAspect::Alignment will be added to aspect.

    \param aspect Unresolved aspect
    \return true, if an entry in the local hint table was found and removed.

    \sa resetSkinHint(), setAlignmentHint()
*/

/*! \fn QskSkinnable::alignmentHint

    \brief Retrieves an alignment hint

    QskAspect::Flag | QskAspect::Alignment will be added to aspect.

    \param aspect Unresolved aspect
    \param defaultAlignment Default value
    \return alignment, or defaultAlignment if no value was found

    \sa effectiveSkinHint(), setAlignmentHint()
*/

/*! \fn QskSkinnable::setFontRoleHint

    \brief Sets a font role hint

    QskAspect::Flag | QskAspect::FontRole will be added to aspect.

    \param aspect Unresolved aspect
    \param role Font role

    \sa setSkinHint(), QskAspect::Flag, QskAspect::FontRole
*/

/*! \fn QskSkinnable::resetFontRoleHint

    \brief Removes a font role hint from the local table

    QskAspect::Flag | QskAspect::FontRole will be added to aspect.

    \param aspect Unresolved aspect
    \return true, if an entry in the local hint table was found and removed.

    \sa resetSkinHint(), setFontRoleHint()
*/

/*! \fn QskSkinnable::fontRoleHint

    \brief Retrieves a font role hint

    QskAspect::Flag | QskAspect::FontRole will be added to aspect.

    \param aspect Unresolved aspect
    \param status Optional status information
    \return font role, or 0 if no value was found

    \sa effectiveSkinHint(), setFontRoleHint()
*/

/*! \fn QskSkinnable::setGraphicRoleHint

    \brief Sets a graphic role hint

    QskAspect::Flag | QskAspect::GraphicRole will be added to aspect.

    \param aspect Unresolved aspect
    \param role Graphic role

    \sa setSkinHint(), QskAspect::Flag, QskAspect::GraphicRole
*/

/*! \fn QskSkinnable::resetGraphicRoleHint

    \brief Removes a graphic role hint from the local table

    QskAspect::Flag | QskAspect::GraphicRole will be added to aspect.

    \param aspect Unresolved aspect
    \return true, if an entry in the local hint table was found and removed.

    \sa resetSkinHint(), setGraphicRoleHint()
*/

/*! \fn QskSkinnable::graphicRoleHint

    \brief A Retrieves a graphic role hint

    QskAspect::Flag | QskAspect::GraphicRole will be added to aspect.

    \param aspect Unresolved aspect
    \param status Optional status information
    \return graphic role, or 0 if no value was found

    \sa effectiveSkinHint(), setGraphicRoleHint()
*/

/*! \fn QskSkinnable::isTransitionAccepted

    \brief Additional check if an transition should be started

    In certain situations a transition initiated from state depending hints
    needs to be avoided.

    \param aspect Aspect
    \return true, when owningControl()->isInitiallyPainted() is true
*/

/*! \fn QskSkinnable::hintTable()

    \brief Accessor for local skin hint table

    Definitions in the local hint table have precedence over those from
    the table of the skin. Initially the local table is empty.

    \return Reference to the local hint table

    \sa setSkinHint(), QskSkinHintTableEditor
*/

/*! \fn QskSkinnable::hintTable() const

    \brief Accessor for local skin hint table

    Definitions in the local hint table have precedence over those from
    the table of the skin. Initially the local table is empty.

    \return Reference to the local hint table

    \sa setSkinHint(), QskSkinHintTableEditor
*/
