-var TileLayoutManager = ( new LayoutManagerBase() ).define( {\r
- allowForSelf : {\r
- childW : true,\r
- childH : true,\r
- gapX : true,\r
- gapY : true,\r
- padding : true\r
+X.UI.Layout.Tile = X.UI.Layout.create( { \r
+ name : 'TileLayout',\r
+ \r
+ overrideAttrsForSelf : {\r
+ selectable : false,\r
+ role : [ 0, X.UI.Dirty.CLEAN, X.UI.Attr.USER.UINODE, X.UI.Attr.Type.INIT_ONLY | X.UI.Attr.Type.LIST, 'none,chrome,container' ],\r
+ childWidth : [ '8em', X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT ],\r
+ childHeight : [ '8em', X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH | X.UI.Attr.Type.PERCENT ],\r
+ gapX : [ 0, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH ],\r
+ gapY : [ 0, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.LENGTH ],\r
+ hCenter : [ true, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.BOOLEAN ],\r
+ vCenter : [ true, X.UI.Dirty.LAYOUT, X.UI.Attr.USER.LAYOUT, X.UI.Attr.Type.BOOLEAN ]\r
},\r
- allowForChild : {\r
- x : false,\r
- y : false,\r
- w : false,\r
- h : false\r
+ \r
+ overrideAttrsForChild : {\r
+ left : false,\r
+ right : false,\r
+ top : false,\r
+ bottom : false,\r
+ width : false,\r
+ height : false\r
},\r
- calculate : function( data, x, y, w, h ){\r
- var nodes = data.nodes,\r
- styleData = data.styleData,\r
- cssObj = styleData._cssObj,\r
- childW = cssObj.childW,\r
- childH = cssObj.childH,\r
- gapX = cssObj.gapX,\r
- gapY = cssObj.gapY,\r
- padding = cssObj.padding,\r
- _x = padding,\r
- _y = padding,\r
- i = 0, l = nodes.length, node;\r
- if( l === 0 ){\r
- styleData.layout( x, y, w, 0 );\r
- return;\r
- };\r
- for( ; i < l; ++i ){\r
- node = nodes[ i ];\r
- if( node.instanceOf( _Box ) ){\r
- node.calculate( _x, _y, childW, childH );\r
- } else {\r
- node.styleData.layout( _x, _y, childW, childH );\r
- };\r
- _x += childW + gapX;\r
- if( w < _x ){\r
- _y += childH + gapY;\r
+ \r
+ calculate : function( data, isNeedsDetection, x, y, w, h ){\r
+ var attrs = data.attrObject || data.attrClass.prototype,\r
+ gapX, gapY, childW, childH,\r
+ uinodes, l, i, node,\r
+ _x, _y, _w, _h, numH, numV, n, startX, __x, __y;\r
+\r
+ data.preMesure( w, h );\r
+ \r
+ if( isNeedsDetection && ( data.boxWidth === X.UI.Attr.AUTO || data.boxHeight === X.UI.Attr.AUTO ) ) return;\r
+ \r
+ if( ( uinodes = data.uinodes ) && ( l = uinodes.length ) ){\r
+ _x = data.contentL;\r
+ _y = data.contentT;\r
+ _w = data.contentWidth;\r
+ gapX = _AbstractUINode.calcValue( attrs[ data.supportAttrs.gapX.No ], contentW );\r
+ gapY = _AbstractUINode.calcValue( attrs[ data.supportAttrs.gapY.No ], contentH );\r
+ childW = _AbstractUINode.calcValue( attrs[ data.supportAttrs.childWidth.No ], contentW );\r
+ childH = _AbstractUINode.calcValue( attrs[ data.supportAttrs.childHeight.No ], contentH );\r
+ numH = X.UI.Attr.FLOOR( ( _w + gapX ) / ( childW + gapX ) );\r
+ numV = l % numH ? X.UI.Attr.FLOOR( l / numH ) + 1 : l / numH;\r
+ _h = _y + data.contentB + ( childH + gapY ) * numH - gapY;\r
+ \r
+ startX = attrs[ data.supportAttrs.hCenter.No ] ?\r
+ ( _w - ( childW + gapX ) * numH - gapX ) / 2 : _x;\r
+ __x = startX;\r
+ __y = attrs[ data.supportAttrs.vCenter.No ] && _h <= h ?\r
+ ( h - _h ) / 2 + _y : _y;\r
+ \r
+ for( i = 0; i < l; ++i ){\r
+ node = uinodes[ i ];\r
+ node.calculate( false, __x, __y, childW, childH );\r
+ \r
+ if( i % numH === numH - 1 ){\r
+ __x = startX;\r
+ __y += childH + gapY;\r
+ } else {\r
+ __x += childW + gapX;\r
+ };\r
};\r
+ \r
+ data.contentHeight = _h;\r
+ \r
+ } else\r
+ if( data.contentHeight === X.UI.Attr.AUTO ){\r
+ data.contentHeight = data.minContentHeight !== X.UI.Attr.AUTO ? data.minContentHeight : 0;\r
};\r
- styleData.layout( x, y, w, _y + childH + padding );\r
+ \r
+ data.postMesure();\r
+ data.updateLayout( x, y );\r
}\r
});\r
\r
-var TileBox = Box.inherits(\r
+var TileBox = Box.presets(\r
'TileBox',\r
- X.Class.SUPER_ACCESS,\r
+ X.UI.Layout.Tile,\r
{\r
- Constructor : function(){\r
- this.style = DisplayNodeStyle( this, X.Class._newPrivate( this, TileLayoutManager, arguments ) );\r
- this.style.addName( 'TileBox' );\r
- }\r
+ gapX : '0.2em',\r
+ gapY : '0.2em',\r
+ hCenter : true,\r
+ vCenter : true\r
}\r
-);
\ No newline at end of file
+);\r