I'm hoping someone can help me with my implementation of Richard Bennett's Fast
Tree Widget. I have included a copy of my code.
Basically I am building the Tree dynamically from an array so that I can alter
the data, then pass the new array to a function that builds a new tree with the
new values. The page has a search function that builds the new tree using only
array values that match the search criteria. The search results are the part
that has been giving me trouble for several days now. The tree gives a
javascript error when an expand is attempted with Netscape (linux/4.72 and
NT4.0/4.76). IE5.5 works fine but has other problems (tree nodes are blank).
JavaScript Error:
http://[path to dynapi]/src/lib/dynapi/ri/fasttreenode.js, line 188:
this.doc.images[this.id + "sw"] has no properties.
To get the error, type "par" (no quotes) in the first search box and press go,
then try to expand the new tree that is drawn.
This does not happen when I delete the tree and rebuild using all of the
original data (All Nets button). I once added a pop-up and confirmed that
this.doc.images.length=1 but I am unable to access any properties and so
get the error. Funny thing is, the image IS displayed so it should have some
properties! If I comment out line 188 referred to by the error then things
work.
Can anyone tell me what I'm missing? Is there a work around? Am I doing
something wrong?
TIA,
Ed Baxter
----------------------- BEGIN Code ------------------------
<HTML>
<HEAD>
<TITLE>Ri Fast Tree Example</TITLE>
<SCRIPT language="Javascript" src="src/dynapi.js"></SCRIPT>
<SCRIPT language="Javascript">
var theme = "src/lib/dynapi/images/common/"
DynAPI.setLibraryPath('src/lib/')
DynAPI.include('dynapi.api.*')
DynAPI.include('dynapi.ri.fasttreenode.js')
DynAPI.include('dynapi.util.thread.js');
DynAPI.include('dynapi.util.pathanim.js');
DynAPI.include('dynapi.gui.dynimage.js');
DynAPI.include('dynapi.gui.button.js');
DynAPI.include('dynapi.gui.scrollbar.js');
DynAPI.include('dynapi.gui.viewport.js');
DynAPI.include('dynapi.gui.scrollpane.js');
DynAPI.include('dynapi.gui.label.js');
DynAPI.include('dynapi.util.debug.js');
function DrawMain() {
// Get document width and height
w = this.getDocument().getWidth()
h = this.getDocument().getHeight()
D = DynAPI.document
L1=new DynLayer(null,0,0,w,100,'#ffffff','hidden')
L3=new DynLayer(null,0,101,w,40,'lightgreen','hidden')
L5=new DynLayer(null,0,h-100,w,100,'#ffffff','hidden')
L6=new DynLayer(null,0,150,w,100,'#ffffff','hidden')
D.addChild(L1);
D.addChild(L3);
D.addChild(L5);
D.addChild(L6);
L1.setVisible(true)
L3.setVisible(true)
L5.setVisible(true)
L6.setVisible(true)
FillLayers();
NewTree(ar,1);
}
function AllNets() {
DelTree()
NewTree(ar,1)
}
function AllNodes() {
DelTree()
NewTree(ar,2)
}
function FindNets(obj) {
var chk = ""
var k = -1
anets = new Array()
for (i=0;i<ar.length;i++) {
chk = ar[i].desc.toLowerCase().indexOf(obj.form[2].value.toLowerCase())
if (chk >= 0) {
k++
anets[k] = ar[i]
}
}
if (k < 0) {
alert("No Match Found")
} else {
DelTree()
NewTree(anets,1)
}
}
function FindNodes(obj) {
DelTree()
NewTree(ar,1)
// alert(obj.form[4].value);
}
function DelTree() {
L4.deleteAllChildren()
L4.deleteFromParent()
//alert(L4.debug())
}
function NewTree(a,f) {
alert("entering NewTree");
L6.setHTML("<HTML><BODY>   <b>Loading Data...<IMG
SRC=src/lib/dynapi/images/common/busy.gif WIDTH=15 HEIGHT=15></BODY></HTML>")
var node = new Array()
if (f==1) {
myTree = new RiFastSkinTreenode(0,0,600,'Nets',theme,16)
myTree.setColor("lightblue")
// myTree.setBgColor("beige") //Don't set anything for transparent
background
tmp = "<TABLE WIDTH=100% BORDER=0 width=600><TR><TD><IMG
SRC=src/lib/dynapi/images/common/blank.gif WIDTH=16 HEIGHT=1></TD><TD NOWRAP
WIDTH=35%><b>Net Name</b></TD><TD NOWRAP WIDTH=25%><b>Total Length</b></TD><TD NOWRAP
WIDTH=20%><b>% Manhattan</b></TD><TD NOWRAP WIDTH=10%><b>#Vias</b></TD><TD NOWRAP
WIDTH=10%><b>#Nodes</b></TD></TR></TABLE>"
head=myTree.add(tmp)
for (i=0;i<a.length;i++) {
tmp = "<TABLE WIDTH=95% BORDER=0><TR><TD>"+a[i].desc+"</TD></TR></TABLE>"
node[i]=myTree.add(tmp)
tmp2 = a[i].nodes
tmp3 = tmp2.split("|")
node[i].addNodeContent('<TABLE BORDER=0 WIDTH=500><TR><TD WIDTH=30%><b>Node
Name</b></TD><TD WIDTH=30%><b>Node Length</b></TD><TD WIDTH=10%><b>#Vias</b></TD><TD
WIDTH=30%><b>Net Name</b></TD></TR></TABLE>','javascript:false()',theme+'blank.gif')
for (x=0;x<tmp3.length;x++) {
node[i].addNodeContent('<TABLE BORDER=1
WIDTH=500>'+tmp3[x]+'</TABLE>','javascript:alert(\'Hey\')',theme+'blue-double-dot.gif')
}
node[i].closeContent()
}
} else {
myTree = new RiFastSkinTreenode(0,0,600,'Nodes',theme,16)
myTree.setColor("lightblue")
// myTree.setBgColor("beige") //Don't set anything for transparent
background
tmp = "<TABLE BORDER=0 WIDTH=500><TR><TD WIDTH=30%><b>Node Name</b></TD><TD
WIDTH=30%><b>Node Length</b></TD><TD WIDTH=10%><b>#Vias</b></TD><TD WIDTH=30%><b>Net
Name</b></TD></TR></TABLE>"
head=myTree.add(tmp)
for (i=0;i<a.length;i++) {
tmp2 = a[i].nodes
tmp3 = tmp2.split("|")
for (x=0;x<tmp3.length;x++) {
myTree.addNodeContent('<TABLE BORDER=1
WIDTH=500>'+tmp3[x]+'</TABLE>','javascript:alert(\'Hey\')',theme+'blue-double-dot.gif')
}
}
myTree.closeContent()
}
L4 = new ScrollPane(myTree)
L4.setVisible(false)
L4.moveTo(0,143)
L4.setSize(w,h-250)
L4.setBgColor('#ffffff')
D.addChild(L4)
L4.setVisible(true)
myTree.setVisible(true)
// myTree.openNode() //call this to open first level on load
}
var ar = new Array();
ar[0]=new Net("C_HLA_PAR</TD><TD WIDTH=30%>10444.76</TD><TD WIDTH=20%>174.6</TD><TD
WIDTH=10%>1</TD><TD WIDTH=5%>3","","","B40.59   3302.02   0  
C_HLA_PAR|J4.A105   1942.71   0   C_HLA_PAR|J40.59   5200.03   1
  C_HLA_PAR","","Node Label")
ar[1]=new Net("C_HLA_PD0</TD><TD WIDTH=30%>7458.28</TD><TD WIDTH=20%>248.45</TD><TD
WIDTH=10%>2</TD><TD WIDTH=5%>2","","","J4.A128   2561.72   1  
C_HLA_PD0|J40.27   4896.56   1   C_HLA_PD0","","Node Label")
ar[2]=new Net("C_HLA_PD1</TD><TD WIDTH=30%>6805.41</TD><TD WIDTH=20%>219.55</TD><TD
WIDTH=10%>2</TD><TD WIDTH=5%>2","","","J4.B128   1910.39   1  
C_HLA_PD1|J40.25   4895.02   1   C_HLA_PD1","","Node Label")
ar[3]=new Net("C_HLA_PD10</TD><TD WIDTH=30%>5579.76</TD><TD WIDTH=20%>119.05</TD><TD
WIDTH=10%>2</TD><TD WIDTH=5%>2","","","J4.B116   684.74   1  
C_HLA_PD10|J40.53   4895.02   1   C_HLA_PD10","","Node Label")
ar[4]=new Net("C_HLA_PD11</TD><TD WIDTH=30%>6716.67</TD><TD WIDTH=20%>193</TD><TD
WIDTH=10%>2</TD><TD WIDTH=5%>2","","","J4.A114   1821.65   1  
C_HLA_PD11|J40.51   4895.02   1   C_HLA_PD11","","Node Label")
ar[5]=new Net("C_HLA_PD12</TD><TD WIDTH=30%>5821.84</TD><TD WIDTH=20%>133.3</TD><TD
WIDTH=10%>2</TD><TD WIDTH=5%>2","","","J4.B112   926.82   1  
C_HLA_PD12|J40.41   4895.02   1   C_HLA_PD12","","Node Label")
function FillLayers() {
L1.setHTML("Header")
L5.setHTML("Diagram Viewer")
L3.setHTML("<CENTER><TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD NOWRAP><FORM
NAME=search><INPUT TYPE=button VALUE='All Nets' onClick=javascript:AllNets()>  
<INPUT TYPE=button VALUE='All Nodes' onClick=javascript:AllNodes()>   <INPUT
TYPE=text NAME=node SIZE=30><INPUT TYPE=button VALUE='Go'
onClick=javascript:FindNets(this)>   <INPUT TYPE=text NAME=net SIZE=30><INPUT
TYPE=button VALUE='Go' onClick=javascript:FindNodes(this)></FORM></TD></TR></TABLE>")
}
function Net(d,p,l,n,np,npl) {
this.desc = d;
this.pict = p;
this.lab = l;
this.nodes = n;
this.npict = np;
this.nlabel = npl;
return this;
}
DynAPI.onLoad=DrawMain;
</SCRIPT>
</HEAD>
<BODY BGCOLOR="#ffffff" onResize="document.location.href = document.location.href">
</BODY>
</HTML>
---------------- END Code -----------------------------
_______________________________________________
Dynapi-Help mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/dynapi-help