OSDN Git Service

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