Peter_Chea
05-23-2003, 04:55 PM
I am trying to create a layout that copy from another layout. However, I am unsure of how to pass an object through tag attribute.
<copyLayout axis="x" copyFrom="canvas.header"/>
<canvas debug="true">
<dataset name="test">
<flight>
<departure> 6:20 San Francisco</departure>
<arrival>7:37am Los angels</arrival>
<airline>American Airlines Flight 1905</airline>
<travelTime>1hr 25min</travelTime>
<price>141</price>
</flight>
<flight>
<departure> 7:20 San Francisco</departure>
<arrival>8:37am Los angels</arrival>
<airline>American Airlines Flight 1905</airline>
<travelTime>1hr 25min</travelTime>
<price>180</price>
</flight>
</dataset>
<class name="copyLayout" extends="layout" >
<attribute name="axis" value="y" onset="this.setAxis( axis )"
type="string" />
<attribute name="spacing" value="0"
onset="this.spacing = spacing;
if( this.subviews.length ) this.update()"/>
<attribute name="copyFrom" type="expression"/>
<method name="setAxis" args="a" >
this.axis = a;
this.sizeAxis = a == "x" ? "width" : "height"
</method>
<method name="addSubview" args="newsub">
this.updateDelegate.register( newsub, "on" + this.sizeAxis);
super.addSubview( newsub );
</method>
<method name="update">
<![CDATA[
if ( this.locked ) return;
var l = this.subviews.length;
if(copyFrom.subviews.length < l)
{
l = copyFrom.subviews.length;
}
var c = 0;
for(var i=0; i < l; i++) {
var src = copyFrom.subviews[i];
var dst = this.subviews[i];
dst.setAttribute(this.axis, src.getAttribute(this.axis));
dst.setAttribute(this.sizeAxis, src.getAttribute(this.sizeAxis));
}
]]>
</method>
</class>
<view name="header">
<button width="90" name="departureBtn">Depature</button>
<button width="90" name="arrivalBtn">Arrival</button>
<button width="90" name="airlineBtn"> Airline</button>
<button width="120" name="trvaleTimeBtn">Travel Time/# Stop</button>
<button width="90" name="priceBtn">Price</button>
<simplelayout axis="x"/>
</view>
<view name="view1" datapath="test:/flight">
<text datapath="departure/text()"/>
<text datapath="arrival/text()"/>
<text datapath="airline/text()"/>
<text datapath="travelTime/text()"/>
<text datapath="price/text()"/>
<copyLayout axis="x" copyFrom="canvas.header"/>
</view>
<simplelayout axis="y"/>
</canvas>
<copyLayout axis="x" copyFrom="canvas.header"/>
<canvas debug="true">
<dataset name="test">
<flight>
<departure> 6:20 San Francisco</departure>
<arrival>7:37am Los angels</arrival>
<airline>American Airlines Flight 1905</airline>
<travelTime>1hr 25min</travelTime>
<price>141</price>
</flight>
<flight>
<departure> 7:20 San Francisco</departure>
<arrival>8:37am Los angels</arrival>
<airline>American Airlines Flight 1905</airline>
<travelTime>1hr 25min</travelTime>
<price>180</price>
</flight>
</dataset>
<class name="copyLayout" extends="layout" >
<attribute name="axis" value="y" onset="this.setAxis( axis )"
type="string" />
<attribute name="spacing" value="0"
onset="this.spacing = spacing;
if( this.subviews.length ) this.update()"/>
<attribute name="copyFrom" type="expression"/>
<method name="setAxis" args="a" >
this.axis = a;
this.sizeAxis = a == "x" ? "width" : "height"
</method>
<method name="addSubview" args="newsub">
this.updateDelegate.register( newsub, "on" + this.sizeAxis);
super.addSubview( newsub );
</method>
<method name="update">
<![CDATA[
if ( this.locked ) return;
var l = this.subviews.length;
if(copyFrom.subviews.length < l)
{
l = copyFrom.subviews.length;
}
var c = 0;
for(var i=0; i < l; i++) {
var src = copyFrom.subviews[i];
var dst = this.subviews[i];
dst.setAttribute(this.axis, src.getAttribute(this.axis));
dst.setAttribute(this.sizeAxis, src.getAttribute(this.sizeAxis));
}
]]>
</method>
</class>
<view name="header">
<button width="90" name="departureBtn">Depature</button>
<button width="90" name="arrivalBtn">Arrival</button>
<button width="90" name="airlineBtn"> Airline</button>
<button width="120" name="trvaleTimeBtn">Travel Time/# Stop</button>
<button width="90" name="priceBtn">Price</button>
<simplelayout axis="x"/>
</view>
<view name="view1" datapath="test:/flight">
<text datapath="departure/text()"/>
<text datapath="arrival/text()"/>
<text datapath="airline/text()"/>
<text datapath="travelTime/text()"/>
<text datapath="price/text()"/>
<copyLayout axis="x" copyFrom="canvas.header"/>
</view>
<simplelayout axis="y"/>
</canvas>