OSDN Git Service

Version 0.6.154, working X.UI!
[pettanr/clientJs.git] / 0.6.x / js / 20_ui / 12_HBox.js
1 var XUI_Layout_Horizontal = X[ 'UI' ][ 'Layout' ][ 'Horizontal' ] = XUI_createLayout( { \r
2         name : 'HorizontalLayout',\r
3         \r
4         overrideAttrsForSelf : {\r
5                 selectable  : false,\r
6                 role        : [ 0,              XUI_Dirty.CLEAN,  XUI_Attr_USER.UINODE, XUI_Attr_Type.INIT_ONLY | XUI_Attr_Type.LIST, 'none,chrome,container' ],\r
7                 width       : [ '100%',         XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],\r
8                 height      : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],\r
9                 childWidth  : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],\r
10                 childHeight : [ XUI_Attr_AUTO, XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH | XUI_Attr_Type.PERCENT | XUI_Attr_Type.AUTO ],\r
11                 gapX        : [ 0,              XUI_Dirty.LAYOUT, XUI_Attr_USER.LAYOUT, XUI_Attr_Type.LENGTH ]\r
12         },\r
13         \r
14         overrideAttrsForChild : {\r
15                 left   : false,\r
16                 right  : false,\r
17                 top    : true,\r
18                 bottom : true\r
19         },\r
20         \r
21         calculate : function( data, isNeedsDetection, x, y, w, h ){\r
22                 var ret     = isNeedsDetection,\r
23                         attrs   = data.attrObject || data.attrClass.prototype,\r
24                         uinodes = data.uinodes,\r
25                         l       = uinodes && uinodes.length,\r
26                         i,\r
27             contentW, contentH, autoW, autoH, detectionPhase, gapX,             \r
28                         childW, childH, _x, _y, _h, node, minFlag;\r
29 \r
30                 data.preMesure( w, h );\r
31                 \r
32                 contentW       = data.contentWidth;\r
33                 contentH       = data.contentHeight;\r
34                 autoW          = contentW === XUI_Attr_AUTO;\r
35                 autoH          = contentH === XUI_Attr_AUTO;\r
36                 detectionPhase = autoW || autoH;\r
37                 gapX           = XUI_AbstractUINode_calcValue( attrs[ data.supportAttrs.gapX.No ], contentW );\r
38                 childW         = XUI_AbstractUINode_calcValue( attrs[ data.supportAttrs.childWidth.No ], contentW );\r
39                 childH         = XUI_AbstractUINode_calcValue( attrs[ data.supportAttrs.childHeight.No ], contentH );\r
40                 _x             = 0; //data.contentL;\r
41                 _y             = 0; //data.contentT;            \r
42 \r
43                 if( !detectionPhase ) ret = false;\r
44 \r
45                 if( l ){\r
46                         _h = 0;\r
47                         for( i = 0; i < l; ++i ){\r
48                                 node = uinodes[ i ];\r
49                                 node.calculate( detectionPhase, _x, 0, childW, childH );\r
50                                 _x += node.boxWidth + gapX;\r
51                                 if( autoH ){\r
52                                         if( node.boxHeight !== XUI_Attr_AUTO ){\r
53                                                 h = node.boxHeight;\r
54                                         } else\r
55                                         if( node.minBoxHeight !== XUI_Attr_AUTO ){\r
56                                                 h = node.minBoxHeight;\r
57                                                 minFlag = true;\r
58                                         } else {\r
59                                                 h = 0;\r
60                                         };\r
61                                         if( _h < h ) _h = h;                            \r
62                                 };\r
63                         };\r
64                         _x -= gapX;\r
65                 } else {\r
66                         _h = data.minContentHeight !== XUI_Attr_AUTO ? data.minContentHeight : 0;\r
67                 };\r
68 \r
69                 if( detectionPhase ){\r
70                         if( autoW ) data.contentWidth  = _x;\r
71                         if( autoH ) data.contentHeight = _h;\r
72                         _x = 0; //data.contentL;\r
73                         for( i = 0; i < l; ++i ){\r
74                                 node = uinodes[ i ];\r
75                                 node.calculate( false, _x, 0, data.contentWidth, data.contentHeight );\r
76                                 _x += node.boxWidth + gapX;\r
77                         };\r
78                         data.postMesure();\r
79                 };\r
80                 \r
81                 if( !isNeedsDetection ){\r
82                         data.boxX += x;\r
83                         data.boxY += y;                 \r
84                 };\r
85                 return !ret;\r
86         }\r
87 });\r
88 \r
89 /*\r
90 X.UI.HBox = X.UI.Box.presets(\r
91         XUI_Layout_Horizontal,\r
92         'HBox',\r
93         {\r
94                 gapX : '0.2em'\r
95         }\r
96 );*/\r
97 \r
98 var XUI_HBox;\r
99 \r
100 X.UI.HBox = X.UI.Box.inherits(\r
101         'HBox',\r
102         X_Class.NONE,\r
103         {\r
104                 Constructor : function(){\r
105                         var supports;\r
106                         \r
107                         if( !XUI_HBox ){\r
108                                 supports = XUI_Attr_createAttrDef( XUI_Box.prototype.supportAttrs, XUI_Layout_Horizontal.overrideAttrsForSelf );\r
109                                 \r
110                                 XUI_HBox = XUI_Box.inherits(\r
111                                                         {\r
112                                                                 layout       : XUI_Layout_Horizontal,\r
113                                                                 supportAttrs : supports,\r
114                                                                 attrClass    : XUI_Attr_preset( XUI_Box.prototype.attrClass, supports, {\r
115                                                                                 gapX       : '0.2em'\r
116                                                                         } )\r
117                                                         }\r
118                                                 );      \r
119                         };\r
120                         X_Pair_create( this, XUI_HBox( this, XUI_Layout_Horizontal, arguments ) );\r
121                 }\r
122         });