I am writing a widget which creates a horizontal tree. It is based on the
label widget and recursively creates copies of itself to the depth
specified. The problem I am having is that the eventlistener seems to fire
on all copies at the same time. When I mouse over one of the labels, they
all act as though they have been moused over. Here is the code:
/*
Tree Class
ParentLayer is a DynLayer
depth is the depth of the tree
RegionRect is the x,y,w,h of the remaining region to draw the tree in
*/
function Tree(ParentLayer,depth,RegionRect)
{
this.Label = Label;
this.Label();
this.setText('Sample text');
this.ParentLayer = ParentLayer;
this.TopNode = null;
this.BottomNode = null;
this.setSize(100,20);
this.TopNodeRect = new Array();
this.BottomNodeRect = new Array();
this.setDepth(depth,RegionRect);
this.setBgColor('#c0c0c0');
this.setWrap(false);
this.setSelectable(false);
var listener = new EventListener(this);
listener.onmouseover=function(event)
{
event.getTarget().setText('Mouse Over');
window.status = 'Last Event: onmouseover';
}
listener.onmouseout=function(event)
{
event.getTarget().setText('Normal');
window.status = 'Last Event: onmouseout';
}
listener.onclick=function(event)
{
event.getTarget().setText('Click');
window.status = 'Last Event: onrtmouseup';
}
listener.ondblclick=function(event)
{
event.getTarget().setText('Double Click');
window.status = 'Last Event: ondblclick';
}
this.addEventListener(listener);
this.ParentLayer.addChild(this);
}
Tree.prototype = new Label();
Tree.prototype.setDepth = function(newDepth,RegionRect)
{
this.depth = newDepth;
this.setRects(RegionRect);
if ( this.TopNode == null && this.depth > 1 )
{
this.TopNode = new
Tree(this.ParentLayer,this.depth-1,this.TopNodeRect);
this.BottomNode = new
Tree(this.ParentLayer,this.depth-1,this.BottomNodeRect);
}
if ( this.TopNode != null )
{
if (this.depth>1)
{
this.TopNode.setDepth(this.depth-1,this.TopNodeRect);
this.BottomNode.setDepth(this.depth-1,this.BottomNodeRect);
}
else
{
this.TopNode.setDepth(0,this.TopNodeRect);
this.BottomNode.setDepth(0,this.BottomNodeRect);
}
}
if (this.depth>0)
{
this.setVisible(true);
}
else
{
this.setVisible(false);
}
}
Tree.prototype.setRects = function(RegionRect)
{
this.RegionRect = RegionRect;
var TreeHeight = (this.RegionRect.h - this.getHeight())/2;
// Move the Label to the correct location
this.moveTo(this.RegionRect.x,this.RegionRect.y + TreeHeight);
if ( this.depth > 1 )
{
var GapWidth = (RegionRect.w - this.getWidth()*this.depth)/this.depth-1;
// Set the Rects for this object
this.TopNodeRect.x = this.RegionRect.x + this.getWidth() + GapWidth;
this.TopNodeRect.y = this.RegionRect.y;
this.TopNodeRect.w = this.RegionRect.w - this.getWidth() - GapWidth;
this.TopNodeRect.h = TreeHeight
this.BottomNodeRect.x = this.TopNodeRect.x;
this.BottomNodeRect.y = this.RegionRect.y + this.TopNodeRect.h +
this.getHeight();
this.BottomNodeRect.w = this.TopNodeRect.w;
this.BottomNodeRect.h = TreeHeight;
}
}
_______________________________________________
Dynapi-Help mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/dynapi-help