X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2F20_ui%2F08_Box.js;h=613400a7537c30a88e6cc2bf011893de72b1cd6c;hb=3d352d8bf476ab57cc333e8d02d0e6ea5efa69b7;hp=1d01e5ec28c0be407a8f6318d84d42517afdcc2e;hpb=2956150a7c2798e60639b36d69b0c13f6b20a62a;p=pettanr%2FclientJs.git diff --git a/0.6.x/js/20_ui/08_Box.js b/0.6.x/js/20_ui/08_Box.js index 1d01e5e..613400a 100644 --- a/0.6.x/js/20_ui/08_Box.js +++ b/0.6.x/js/20_ui/08_Box.js @@ -24,7 +24,10 @@ var XUI_Layout_Canvas = X[ 'UI' ][ 'Layout' ][ 'Canvas' ] = XUI_createLayout( { data.preMesure( w, h ); - if( isNeedsDetection && ( data.boxWidth === XUI_Attr_AUTO || data.boxHeight === XUI_Attr_AUTO ) ) return false; + console.log( w + ' > ' + data.boxWidth ); + + // data.boxWidth と data.boxHeight のどちらかでも Infinity + if( isNeedsDetection && data.boxWidth + data.boxHeight === XUI_Attr_AUTO ) return false; _x = data.contentL; _y = data.contentT; @@ -32,20 +35,21 @@ var XUI_Layout_Canvas = X[ 'UI' ][ 'Layout' ][ 'Canvas' ] = XUI_createLayout( { _h = data.contentHeight; if( ( uinodes = data.uinodes ) && ( l = uinodes.length ) ){ + console.log( _w + ' x ' + _h + ' l:' + l ); for( i = 0; i < l; ++i ){ node = uinodes[ i ]; node.calculate( false, _x, _y, _w, _h ); }; } else if( data.contentHeight === XUI_Attr_AUTO ){ - data.contentHeight = data.minContentHeight !== XUI_Attr_AUTO ? data.minContentHeight : 0; + data.contentHeight = data.contentHeightMin !== XUI_Attr_AUTO ? data.contentHeightMin : 0; }; data.postMesure(); if( !isNeedsDetection ){ data.boxX += x; - data.boxY += y; + data.boxY += y; }; return true; } @@ -56,7 +60,7 @@ var XUI_Box = XUI_AbstractUINode.inherits( 'X.UI._Box', X_Class.NONE, { - supportAttrs : XUI_Attr_createAttrDef( XUI_AbstractUINode.prototype.supportAttrs, XUI_Layout_Canvas.overrideAttrsForSelf ), + usableAttrs : XUI_Attr_createAttrDef( XUI_AbstractUINode.prototype.usableAttrs, XUI_Layout_Canvas.overrideAttrsForSelf ), layout : null, uinodes : null, @@ -71,22 +75,23 @@ var XUI_Box = XUI_AbstractUINode.inherits( Constructor : function( user, layout, args ){ var i = 0, - l = args.length || 1, + l = args && args.length, j = -1, - uinodes, arg, _data, attrs, support, p; + uinodes, arg, _data, attrs, attrDef, p; //if( !args.length ) args = [ args ]; if( !user[ 'instanceOf' ]( X.UI.Box ) ){ //throw new Error( 'Box を継承したインスタンスだけが _Box のオーナーになれます' ); - }; + }; this.User = user; + // TODO デフォルトの attr 指定の中から XNODE に指定するものを集めて適用。 this.xnode = X_Doc_create( 'div' ); // すでに定義されていればそちらを採用 - // supportAttrs や attrClass が、layout を元に上書きされているため + // usableAttrs や attrClass が、layout を元に上書きされているため this.layout = this.layout || layout; for( ; i < l; ++i ){ @@ -99,12 +104,6 @@ var XUI_Box = XUI_AbstractUINode.inherits( //throw new Error( 'インスタンスはすでに親に追加されています ' + arg ); }; } else - if( arg[ 'instanceOf' ] && arg[ 'instanceOf' ]( Node ) ){ - //this.layout = arg; - } else - if( arg[ 'instanceOf' ] && arg[ 'instanceOf' ]( XUI_LayoutBase ) ){ - //this.layout = arg; - } else if( X_Type_isObject( arg ) ){ if( attrs ){ attrs = X_Class_override( attrs, arg ); @@ -118,18 +117,13 @@ var XUI_Box = XUI_AbstractUINode.inherits( for( p in attrs ){ if( X_EMPTY_OBJECT[ p ] ) continue; - ( support = this.supportAttrs[ p ] ) && this.setAttr( p, support, attrs[ p ] ); + ( attrDef = this.usableAttrs[ p ] ) && this.setAttr( p, attrDef, attrs[ p ] ); }; }, /* Rellay */ initialize : function( root, rootData, parent, parentData ){ var uinodes = this.uinodes, i = uinodes && uinodes.length; - this.root = root; - this.rootData = rootData; - this.parent = parent; - this.parentData = parentData; - //this.xnode = X_Doc_create( 'div' ); if( i ){ for( ; i; ){ @@ -137,8 +131,7 @@ var XUI_Box = XUI_AbstractUINode.inherits( }; }; - this.phase = 1; - this.User[ 'dispatch' ]( { type : XUI_Event.INIT } ); + XUI_AbstractUINode.prototype.initialize.apply( this, arguments ); }, addToParent : function( parentXNode ){ @@ -146,16 +139,13 @@ var XUI_Box = XUI_AbstractUINode.inherits( l = uinodes && uinodes.length, i; - parentXNode && parentXNode[ 'append' ]( this.xnode ); - if( l ){ for( i = 0; i < l; ++i ){ uinodes[ i ].addToParent( this.xnode ); }; }; - this.phase = 2; - this.User[ 'dispatch' ]( { type : XUI_Event.ADDED } ); + XUI_AbstractUINode.prototype.addToParent.apply( this, arguments ); }, /* Rellay */ @@ -218,7 +208,7 @@ var XUI_Box = XUI_AbstractUINode.inherits( addAt : function( index, _uinodes ){ //console.log( '# AddAt ' + this.phase ) - var uinodes = this.uinodes, + var uinodes = this.uinodes || ( this.uinodes = [] ), num = uinodes.length, p1 = 1 <= this.phase, p2 = 2 <= this.phase, @@ -233,14 +223,13 @@ var XUI_Box = XUI_AbstractUINode.inherits( _p1 = p1 && data.phase < 1; _p2 = p2 && data.phase < 2; _p1 && data.initialize( this.root, this.rootData, this.User, this ); - if( index <= num ){ - // _p2 && this.xnode.insertBefore( data.xnode, uinodes[ index + i ].xnode ); + if( index < num ){ _p2 && uinodes[ index + i ].xnode[ 'prev' ]( data.xnode ); _p2 && data.addToParent( this.xnode ); uinodes.splice( index + i, 0, data ); } else { _p2 && data.addToParent( this.xnode ); - uinodes[ uinodes.length ] = data; + uinodes[ uinodes.length ] = data; }; p3 && data.phase < 3 && data.creationComplete(); }; @@ -309,17 +298,19 @@ X.UI.Box = X.UI.AbstractUINode.inherits( X_Pair_create( this, XUI_Box( this, XUI_Layout_Canvas, arguments ) ); }, - add : function( node /* , node, node ... */ ){ - X_Pair_get( this ).addAt( this.numNodes() + 1, Array.prototype.slice.call( arguments ) ); + add : function( /* node, node, node ... */ ){ + X_Pair_get( this ).addAt( this.numNodes() + 1, X_Array_copy( arguments ) ); return this; }, - addAt : function( index, node /* , node, node ... */ ){ + addAt : function( index /* , node , node, node ... */ ){ + var nodes; if( index < 0 ) index = 0; - X_Pair_get( this ).addAt( arguments[ 0 ], Array.prototype.slice.call( arguments, 1 ) ); + nodes = X_Array_copy( arguments ); + X_Pair_get( this ).addAt( nodes.shift(), nodes ); return this; }, - remove : function( node /* , node, node ... */ ){ - X_Pair_get( this )[ 'remove' ]( Array.prototype.slice.call( arguments ) ); + remove : function( /* node, node, node ... */ ){ + X_Pair_get( this )[ 'remove' ]( X_Array_copy( arguments ) ); return this; }, removeAt : function( from, length ){ @@ -352,6 +343,20 @@ X.UI.Box = X.UI.AbstractUINode.inherits( numNodes : function(){ var uinodes = X_Pair_get( this ).uinodes; return uinodes && uinodes.length || 0; + }, + + clone : function( opt_cloneListener ){ + var clone = XUI_AbstractUINode.prototype.clone.call( this, opt_cloneListener ), + uinodes = X_Pair_get( this ).uinodes, + i = 0, + l = uinodes && uinodes.length, + copies = []; + + for( ; i < l; ++i ){ + copies[ i ] = uinodes[ i ].clone( opt_cloneListener ); + }; + + return l ? clone.add.apply( clone, copies ) : clone; } } ); @@ -395,20 +400,20 @@ X.UI.Box.presets = function(){ /* * スーパークラスの属性定義リストをレイアウトの持つ属性定義で上書きした新しい属性定義リストを作る。 */ - supports = XUI_Attr_createAttrDef( privateKlass.prototype.supportAttrs, layout.overrideAttrsForSelf ); + supports = XUI_Attr_createAttrDef( privateKlass.prototype.usableAttrs, layout.overrideAttrsForSelf ); klass = this.inherits( privateKlass ); - privateKlass.prototype.supportAttrs = supports; + privateKlass.prototype.usableAttrs = supports; privateKlass.prototype.attrClass = XUI_Attr_preset( privateKlass.prototype.attrClass, supports, attrs ); } else { - supports = XUI_Attr_createAttrDef( shadow.prototype.supportAttrs, layout.overrideAttrsForSelf ); + supports = XUI_Attr_createAttrDef( shadow.prototype.usableAttrs, layout.overrideAttrsForSelf ); klass = this.inherits( boxName, shadow.inherits( { layout : layout, - supportAttrs : supports, + usableAttrs : supports, attrClass : XUI_Attr_preset( shadow.prototype.attrClass, supports, attrs ) } )