![JAR search and dependency download from the Maven repository](/logo.png)
rwt.widgets.util.CanvasLayoutImpl.js Maven / Gradle / Ivy
/*******************************************************************************
* Copyright: 2004, 2015 1&1 Internet AG, Germany, http://www.1und1.de,
* and EclipseSource
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this
* distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* 1&1 Internet AG and others - original API and implementation
* EclipseSource - adaptation for the Eclipse Remote Application Platform
******************************************************************************/
rwt.qx.Class.define("rwt.widgets.util.CanvasLayoutImpl",
{
extend : rwt.widgets.util.LayoutImpl,
/*
*****************************************************************************
CONSTRUCTOR
*****************************************************************************
*/
construct : function(vWidget) {
this.base(arguments, vWidget);
this._mirror = false;
},
/*
*****************************************************************************
MEMBERS
*****************************************************************************
*/
members :
{
setMirror : function( value ) {
this._mirror = value;
this.getWidget()._addChildrenToLayoutQueue( "left" );
this.getWidget()._addChildrenToLayoutQueue( "right" );
},
/*
---------------------------------------------------------------------------
[01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD
---------------------------------------------------------------------------
*/
/** Compute and return the box width of the given child */
/**
* Global Structure:
* [01] COMPUTE BOX DIMENSIONS FOR AN INDIVIDUAL CHILD
* [02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD
* [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN
* [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS
* [05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT
* [06] UPDATE LAYOUT ON JOB QUEUE FLUSH
* [07] UPDATE CHILDREN ON JOB QUEUE FLUSH
* [08] CHILDREN ADD/REMOVE/MOVE HANDLING
* [09] FLUSH LAYOUT QUEUES OF CHILDREN
* [10] LAYOUT CHILD
*
* Inherits from rwt.widgets.util.LayoutImpl:
* [03] COMPUTE NEEDED DIMENSIONS FOR ALL CHILDREN
* [04] UPDATE LAYOUT WHEN A CHILD CHANGES ITS OUTER DIMENSIONS
* [06] UPDATE LAYOUT ON JOB QUEUE FLUSH
* [07] UPDATE CHILDREN ON JOB QUEUE FLUSH
* [08] CHILDREN ADD/REMOVE/MOVE HANDLING
* [09] FLUSH LAYOUT QUEUES OF CHILDREN
*
* @type member
* @param vChild {var} TODOC
* @return {var} TODOC
*/
computeChildBoxWidth : function(vChild)
{
var vValue = null;
if (vChild._computedLeftTypeNull || vChild._computedRightTypeNull) {
vValue = vChild.getWidthValue();
} else if (vChild._hasParent) {
vValue = this.getWidget().getInnerWidth() - vChild.getLeftValue() - vChild.getRightValue();
}
return vValue !== null ? vValue : vChild._computeBoxWidthFallback();
},
/**
* Compute and return the box height of the given child
*
* @type member
* @param vChild {var} TODOC
* @return {var} TODOC
*/
computeChildBoxHeight : function(vChild)
{
var vValue = null;
if (vChild._computedTopTypeNull || vChild._computedBottomTypeNull) {
vValue = vChild.getHeightValue();
} else if (vChild._hasParent) {
vValue = this.getWidget().getInnerHeight() - vChild.getTopValue() - vChild.getBottomValue();
}
return vValue !== null ? vValue : vChild._computeBoxWidthFallback();
},
/*
---------------------------------------------------------------------------
[02] COMPUTE NEEDED DIMENSIONS FOR AN INDIVIDUAL CHILD
---------------------------------------------------------------------------
*/
/**
* Compute and return the needed width of the given child
*
* @type member
* @param vChild {var} TODOC
* @return {var} TODOC
*/
computeChildNeededWidth : function(vChild)
{
var vLeft = vChild._computedLeftTypePercent ? null : vChild.getLeftValue();
var vRight = vChild._computedRightTypePercent ? null : vChild.getRightValue();
var vMinBox = vChild._computedMinWidthTypePercent ? null : vChild.getMinWidthValue();
var vMaxBox = vChild._computedMaxWidthTypePercent ? null : vChild.getMaxWidthValue();
if (vLeft != null && vRight != null) {
var vBox = vChild.getPreferredBoxWidth() || 0;
} else {
var vBox = (vChild._computedWidthTypePercent ? null : vChild.getWidthValue()) || vChild.getPreferredBoxWidth() || 0;
}
return rwt.util.Numbers.limit(vBox, vMinBox, vMaxBox) + vLeft + vRight + vChild.getMarginLeft() + vChild.getMarginRight();
},
/**
* Compute and return the needed height of the given child
*
* @type member
* @param vChild {var} TODOC
* @return {var} TODOC
*/
computeChildNeededHeight : function(vChild)
{
var vTop = vChild._computedTopTypePercent ? null : vChild.getTopValue();
var vBottom = vChild._computedBottomTypePercent ? null : vChild.getBottomValue();
var vMinBox = vChild._computedMinHeightTypePercent ? null : vChild.getMinHeightValue();
var vMaxBox = vChild._computedMaxHeightTypePercent ? null : vChild.getMaxHeightValue();
if (vTop != null && vBottom != null) {
var vBox = vChild.getPreferredBoxHeight() || 0;
} else {
var vBox = (vChild._computedHeightTypePercent ? null : vChild.getHeightValue()) || vChild.getPreferredBoxHeight() || 0;
}
return rwt.util.Numbers.limit(vBox, vMinBox, vMaxBox) + vTop + vBottom + vChild.getMarginTop() + vChild.getMarginBottom();
},
/*
---------------------------------------------------------------------------
[05] UPDATE CHILD ON INNER DIMENSION CHANGES OF LAYOUT
---------------------------------------------------------------------------
*/
/**
* Actions that should be done if the inner width of the widget was changed.
* Normally this includes update to percent values and ranges.
*
* @type member
* @param vChild {var} TODOC
* @return {var} TODOC
*/
updateChildOnInnerWidthChange : function(vChild)
{
// this makes sure that both functions get executed before return
var vUpdatePercent = vChild._recomputePercentX();
var vUpdateRange = vChild._recomputeRangeX();
return vUpdatePercent || vUpdateRange;
},
/**
* Actions that should be done if the inner height of the widget was changed.
* Normally this includes update to percent values and ranges.
*
* @type member
* @param vChild {var} TODOC
* @return {var} TODOC
*/
updateChildOnInnerHeightChange : function(vChild)
{
// this makes sure that both functions get executed before return
var vUpdatePercent = vChild._recomputePercentY();
var vUpdateRange = vChild._recomputeRangeY();
return vUpdatePercent || vUpdateRange;
},
/*
---------------------------------------------------------------------------
[10] LAYOUT CHILD
---------------------------------------------------------------------------
*/
/**
* This is called from rwt.widgets.base.Widget and it's task is to apply the layout
* (excluding border and padding) to the child.
*
* @type member
* @param vChild {var} TODOC
* @param vJobs {var} TODOC
* @return {void}
*/
layoutChild : function(vChild, vJobs)
{
this.layoutChild_sizeX_essentialWrapper(vChild, vJobs);
this.layoutChild_sizeY_essentialWrapper(vChild, vJobs);
this.layoutChild_sizeLimitX(vChild, vJobs);
this.layoutChild_sizeLimitY(vChild, vJobs);
this.layoutChild_locationX(vChild, vJobs);
this.layoutChild_locationY(vChild, vJobs);
this.layoutChild_marginX(vChild, vJobs);
this.layoutChild_marginY(vChild, vJobs);
},
/**
* TODOC
*
* @type member
* @param vChild {var} TODOC
* @param vJobs {var} TODOC
* @return {void}
* @signature function(vChild, vJobs)
*/
layoutChild_sizeX : rwt.util.Variant.select("qx.client",
{
"trident|webkit|blink" : function(vChild, vJobs)
{
if (vJobs.initial || vJobs.width || vJobs.minWidth || vJobs.maxWidth || vJobs.left || vJobs.right)
{
if (vChild._computedMinWidthTypeNull && vChild._computedWidthTypeNull && vChild._computedMaxWidthTypeNull && !(!vChild._computedLeftTypeNull && !vChild._computedRightTypeNull)) {
vChild._resetRuntimeWidth();
} else {
vChild._renderRuntimeWidth(vChild.getBoxWidth());
}
}
},
"default" : function( vChild, vJobs ) {
if( vJobs.initial || vJobs.width ) {
if( vChild._computedWidthTypeNull ) {
vChild._resetRuntimeWidth();
} else {
vChild._renderRuntimeWidth( vChild.getWidthValue() );
}
}
}
}),
/**
* TODOC
*
* @type member
* @param vChild {var} TODOC
* @param vJobs {var} TODOC
* @return {void}
* @signature function(vChild, vJobs)
*/
layoutChild_sizeY : rwt.util.Variant.select("qx.client",
{
"trident|webkit|blink" : function(vChild, vJobs)
{
if (vJobs.initial || vJobs.height || vJobs.minHeight || vJobs.maxHeight || vJobs.top || vJobs.bottom)
{
if (vChild._computedMinHeightTypeNull && vChild._computedHeightTypeNull && vChild._computedMaxHeightTypeNull && !(!vChild._computedTopTypeNull && !vChild._computedBottomTypeNull)) {
vChild._resetRuntimeHeight();
} else {
vChild._renderRuntimeHeight(vChild.getBoxHeight());
}
}
},
"default" : function( vChild, vJobs ) {
if( vJobs.initial || vJobs.height ) {
if( vChild._computedHeightTypeNull ) {
vChild._resetRuntimeHeight();
} else {
vChild._renderRuntimeHeight( vChild.getHeightValue() );
}
}
}
}),
/**
* TODOC
*
* @type member
* @param vChild {var} TODOC
* @param vJobs {var} TODOC
* @return {void}
*/
layoutChild_locationX : function( vChild, vJobs ) {
if( this._mirror ) {
this.layoutChild_locationX_mirror( vChild, vJobs );
} else {
this.layoutChild_locationX_nomirror( vChild, vJobs );
}
},
layoutChild_locationX_nomirror : function( vChild, vJobs ) {
var vWidget = this.getWidget();
if( vJobs.initial || vJobs.left || vJobs.parentPaddingLeft ) {
if( vChild._computedLeftTypeNull ) {
if( vChild._computedRightTypeNull && vWidget.getPaddingLeft() > 0 ) {
vChild._renderRuntimeLeft( vWidget.getPaddingLeft() );
} else {
vChild._resetRuntimeLeft();
}
} else {
vChild._renderRuntimeLeft( vChild.getLeftValue() + vWidget.getPaddingLeft() );
}
}
if( vJobs.initial || vJobs.right || vJobs.parentPaddingRight ) {
if( vChild._computedRightTypeNull ) {
if( vChild._computedLeftTypeNull && vWidget.getPaddingRight() > 0 ) {
vChild._renderRuntimeRight( vWidget.getPaddingRight() );
} else {
vChild._resetRuntimeRight();
}
} else {
vChild._renderRuntimeRight( vChild.getRightValue() + vWidget.getPaddingRight() );
}
}
},
layoutChild_locationX_mirror : function( vChild, vJobs ) {
var vWidget = this.getWidget();
if( vJobs.initial || vJobs.left || vJobs.parentPaddingLeft ) {
if( vChild._computedLeftTypeNull ) {
if( vChild._computedRightTypeNull && vWidget.getPaddingLeft() > 0 ) {
vChild._renderRuntimeRight( vWidget.getPaddingLeft() );
} else {
vChild._resetRuntimeRight();
}
} else {
vChild._renderRuntimeRight( vChild.getLeftValue() + vWidget.getPaddingLeft() );
}
}
if( vJobs.initial || vJobs.right || vJobs.parentPaddingRight ) {
if( vChild._computedRightTypeNull ) {
if( vChild._computedLeftTypeNull && vWidget.getPaddingRight() > 0 ) {
vChild._renderRuntimeLeft( vWidget.getPaddingRight() );
} else {
vChild._resetRuntimeLeft();
}
} else {
vChild._renderRuntimeLeft( vChild.getRightValue() + vWidget.getPaddingRight() );
}
}
},
/**
* TODOC
*
* @type member
* @param vChild {var} TODOC
* @param vJobs {var} TODOC
* @return {void}
*/
layoutChild_locationY : function( vChild, vJobs ) {
var vWidget = this.getWidget();
if( vJobs.initial || vJobs.top || vJobs.parentPaddingTop ) {
if( vChild._computedTopTypeNull ) {
if( vChild._computedBottomTypeNull && vWidget.getPaddingTop() > 0 ) {
vChild._renderRuntimeTop( vWidget.getPaddingTop() );
} else {
vChild._resetRuntimeTop();
}
} else {
vChild._renderRuntimeTop( vChild.getTopValue() + vWidget.getPaddingTop() );
}
}
if( vJobs.initial || vJobs.bottom || vJobs.parentPaddingBottom ) {
if( vChild._computedBottomTypeNull ) {
if( vChild._computedTopTypeNull && vWidget.getPaddingBottom() > 0 ) {
vChild._renderRuntimeBottom( vWidget.getPaddingBottom() );
} else {
vChild._resetRuntimeBottom();
}
} else {
vChild._renderRuntimeBottom( vChild.getBottomValue() + vWidget.getPaddingBottom() );
}
}
}
}
} );
© 2015 - 2025 Weber Informatics LLC | Privacy Policy