OSDN Git Service

Version 0.6.57, fixed NS of X.UI & X.Class for __proto__.
[pettanr/clientJs.git] / 0.6.x / js / ui / 13_TileBox.js
index 9887b26..d118565 100644 (file)
@@ -1,56 +1,85 @@
-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    = X.UI._AbstractUINode.calcValue( attrs[ data.supportAttrs.gapX.No ], contentW );\r
+                       gapY    = X.UI._AbstractUINode.calcValue( attrs[ data.supportAttrs.gapY.No ], contentH );\r
+                       childW  = X.UI._AbstractUINode.calcValue( attrs[ data.supportAttrs.childWidth.No ], contentW );\r
+                       childH  = X.UI._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 + data.boxX, y + data.boxY );\r
        }\r
 });\r
 \r
-var TileBox = Box.inherits(\r
+X.UI.TileBox = X.UI.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