\r
data.preMesure( w, h );\r
\r
- if( isNeedsDetection && ( data.boxWidth === XUI_Attr_AUTO || data.boxHeight === XUI_Attr_AUTO ) ) return false;\r
+ console.log( w + ' > ' + data.boxWidth );\r
+ \r
+ // data.boxWidth と data.boxHeight のどちらかでも Infinity\r
+ if( isNeedsDetection && data.boxWidth + data.boxHeight === XUI_Attr_AUTO ) return false;\r
\r
_x = data.contentL;\r
_y = data.contentT;\r
};\r
} else\r
if( data.contentHeight === XUI_Attr_AUTO ){\r
- data.contentHeight = data.minContentHeight !== XUI_Attr_AUTO ? data.minContentHeight : 0;\r
+ data.contentHeight = data.contentHeightMin !== XUI_Attr_AUTO ? data.contentHeightMin : 0;\r
};\r
\r
data.postMesure();\r
'X.UI._Box',\r
X_Class.NONE,\r
{\r
- supportAttrs : XUI_Attr_createAttrDef( XUI_AbstractUINode.prototype.supportAttrs, XUI_Layout_Canvas.overrideAttrsForSelf ),\r
+ usableAttrs : XUI_Attr_createAttrDef( XUI_AbstractUINode.prototype.usableAttrs, XUI_Layout_Canvas.overrideAttrsForSelf ),\r
\r
layout : null,\r
uinodes : null,\r
\r
Constructor : function( user, layout, args ){\r
var i = 0,\r
- l = args.length || 1,\r
+ l = args && args.length,\r
j = -1,\r
- uinodes, arg, _data, attrs, support, p;\r
+ uinodes, arg, _data, attrs, attrDef, p;\r
\r
//if( !args.length ) args = [ args ];\r
\r
if( !user[ 'instanceOf' ]( X.UI.Box ) ){\r
//throw new Error( 'Box を継承したインスタンスだけが _Box のオーナーになれます' );\r
- }; \r
+ };\r
\r
this.User = user;\r
\r
+ // TODO デフォルトの attr 指定の中から XNODE に指定するものを集めて適用。\r
this.xnode = X_Doc_create( 'div' );\r
\r
// すでに定義されていればそちらを採用\r
- // supportAttrs や attrClass が、layout を元に上書きされているため\r
+ // usableAttrs や attrClass が、layout を元に上書きされているため\r
this.layout = this.layout || layout;\r
\r
for( ; i < l; ++i ){\r
//throw new Error( 'インスタンスはすでに親に追加されています ' + arg );\r
};\r
} else\r
- if( arg[ 'instanceOf' ] && arg[ 'instanceOf' ]( Node ) ){\r
- //this.layout = arg;\r
- } else\r
- if( arg[ 'instanceOf' ] && arg[ 'instanceOf' ]( XUI_LayoutBase ) ){\r
- //this.layout = arg;\r
- } else\r
if( X_Type_isObject( arg ) ){\r
if( attrs ){\r
attrs = X_Class_override( attrs, arg );\r
\r
for( p in attrs ){\r
if( X_EMPTY_OBJECT[ p ] ) continue;\r
- ( support = this.supportAttrs[ p ] ) && this.setAttr( p, support, attrs[ p ] );\r
+ ( attrDef = this.usableAttrs[ p ] ) && this.setAttr( p, attrDef, attrs[ p ] );\r
};\r
},\r
/* Rellay */\r
initialize : function( root, rootData, parent, parentData ){\r
var uinodes = this.uinodes,\r
i = uinodes && uinodes.length;\r
- this.root = root;\r
- this.rootData = rootData;\r
- this.parent = parent;\r
- this.parentData = parentData;\r
- //this.xnode = X_Doc_create( 'div' );\r
\r
if( i ){\r
for( ; i; ){\r
}; \r
};\r
\r
- this.phase = 1;\r
- this.User[ 'dispatch' ]( { type : XUI_Event.INIT } );\r
+ XUI_AbstractUINode.prototype.initialize.apply( this, arguments );\r
},\r
\r
addToParent : function( parentXNode ){\r
l = uinodes && uinodes.length,\r
i;\r
\r
- parentXNode && parentXNode[ 'append' ]( this.xnode );\r
- \r
if( l ){\r
for( i = 0; i < l; ++i ){\r
uinodes[ i ].addToParent( this.xnode );\r
};\r
};\r
\r
- this.phase = 2;\r
- this.User[ 'dispatch' ]( { type : XUI_Event.ADDED } );\r
+ XUI_AbstractUINode.prototype.addToParent.apply( this, arguments );\r
},\r
\r
/* Rellay */\r
\r
addAt : function( index, _uinodes ){\r
//console.log( '# AddAt ' + this.phase )\r
- var uinodes = this.uinodes,\r
+ var uinodes = this.uinodes || ( this.uinodes = [] ),\r
num = uinodes.length,\r
p1 = 1 <= this.phase,\r
p2 = 2 <= this.phase,\r
_p1 = p1 && data.phase < 1;\r
_p2 = p2 && data.phase < 2;\r
_p1 && data.initialize( this.root, this.rootData, this.User, this );\r
- if( index <= num ){\r
- // _p2 && this.xnode.insertBefore( data.xnode, uinodes[ index + i ].xnode );\r
+ if( index < num ){\r
_p2 && uinodes[ index + i ].xnode[ 'prev' ]( data.xnode );\r
_p2 && data.addToParent( this.xnode );\r
uinodes.splice( index + i, 0, data );\r
} else {\r
_p2 && data.addToParent( this.xnode );\r
- uinodes[ uinodes.length ] = data; \r
+ uinodes[ uinodes.length ] = data;\r
};\r
p3 && data.phase < 3 && data.creationComplete();\r
};\r
X_Pair_create( this, XUI_Box( this, XUI_Layout_Canvas, arguments ) );\r
},\r
\r
- add : function( node /* , node, node ... */ ){\r
- X_Pair_get( this ).addAt( this.numNodes() + 1, Array.prototype.slice.call( arguments ) );\r
+ add : function( /* node, node, node ... */ ){\r
+ X_Pair_get( this ).addAt( this.numNodes() + 1, X_Array_copy( arguments ) );\r
return this;\r
},\r
- addAt : function( index, node /* , node, node ... */ ){\r
+ addAt : function( index /* , node , node, node ... */ ){\r
+ var nodes;\r
if( index < 0 ) index = 0;\r
- X_Pair_get( this ).addAt( arguments[ 0 ], Array.prototype.slice.call( arguments, 1 ) );\r
+ nodes = X_Array_copy( arguments );\r
+ X_Pair_get( this ).addAt( nodes.shift(), nodes );\r
return this;\r
},\r
- remove : function( node /* , node, node ... */ ){\r
- X_Pair_get( this )[ 'remove' ]( Array.prototype.slice.call( arguments ) );\r
+ remove : function( /* node, node, node ... */ ){\r
+ X_Pair_get( this )[ 'remove' ]( X_Array_copy( arguments ) );\r
return this;\r
},\r
removeAt : function( from, length ){\r
numNodes : function(){\r
var uinodes = X_Pair_get( this ).uinodes;\r
return uinodes && uinodes.length || 0;\r
+ },\r
+ \r
+ clone : function( opt_cloneListener ){\r
+ var clone = XUI_AbstractUINode.prototype.clone.call( this, opt_cloneListener ),\r
+ uinodes = X_Pair_get( this ).uinodes,\r
+ i = 0,\r
+ l = uinodes && uinodes.length,\r
+ copies = [];\r
+ \r
+ for( ; i < l; ++i ){\r
+ copies[ i ] = uinodes[ i ].clone( opt_cloneListener );\r
+ };\r
+\r
+ return l ? clone.add.apply( clone, copies ) : clone;\r
}\r
}\r
);\r
/*\r
* スーパークラスの属性定義リストをレイアウトの持つ属性定義で上書きした新しい属性定義リストを作る。\r
*/\r
- supports = XUI_Attr_createAttrDef( privateKlass.prototype.supportAttrs, layout.overrideAttrsForSelf );\r
+ supports = XUI_Attr_createAttrDef( privateKlass.prototype.usableAttrs, layout.overrideAttrsForSelf );\r
\r
klass = this.inherits( privateKlass );\r
- privateKlass.prototype.supportAttrs = supports;\r
+ privateKlass.prototype.usableAttrs = supports;\r
privateKlass.prototype.attrClass = XUI_Attr_preset( privateKlass.prototype.attrClass, supports, attrs );\r
} else {\r
- supports = XUI_Attr_createAttrDef( shadow.prototype.supportAttrs, layout.overrideAttrsForSelf );\r
+ supports = XUI_Attr_createAttrDef( shadow.prototype.usableAttrs, layout.overrideAttrsForSelf );\r
\r
klass = this.inherits(\r
boxName,\r
shadow.inherits(\r
{\r
layout : layout,\r
- supportAttrs : supports,\r
+ usableAttrs : supports,\r
attrClass : XUI_Attr_preset( shadow.prototype.attrClass, supports, attrs )\r
}\r
)\r