2020-10-20 00:58:15 +02:00

123 lines
3.6 KiB
ActionScript
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
Copyright (c) 2009 Yahoo! Inc. All rights reserved.
The copyrights embodied in the content of this file are licensed under the BSD (revised) open source license
*/
package com.yahoo.astra.fl.controls.treeClasses {
//--------------------------------------
// Class description
//--------------------------------------
/**
* The LeafNode class is the base class for leaf nodes in the Tree.
* Leaf nodes are nodes that do not have any children.
* The class inherits from the base TNode class and provides logic
* for linking nodes hierarchically and retrieving relevant information
* about them.
*
* @author Allen Rabinovich
*
* @see com.yahoo.astra.fl.controls.treeClasses.TreeDataProvider
* @see com.yahoo.astra.fl.controls.treeClasses.TNode
* @see com.yahoo.astra.fl.controls.treeClasses.LeafNode
* @see com.yahoo.astra.fl.controls.treeClasses.RootNode
*/
public dynamic class LeafNode extends TNode {
/**
* @private
* The type of the node
*/
protected var _nodeType:String;
/**
* Constructor.
*
* @param pDP The data provider that will contain this node.
*/
public function LeafNode (pDP:TreeDataProvider) {
super(pDP);
_nodeType = TreeDataProvider.LEAF_NODE;
}
/**
* The node type marker. For the LeafNode,
* the value is constant and set to <code>TreeDataProvider.LEAF_NODE</code>
*
* @see com.yahoo.astra.fl.controls.treeClasses.TreeDataProvider
*/
public function get nodeType () : String {
return _nodeType;
}
/**
*
* Checks whether a particular field <code>fieldName</code> in the node
* object holds a particular <code>value</code>
*
* @return true if the field contains the specified value; false if not.
*/
public function checkForValue (fieldName:String, value:String) : TNode {
if (this[fieldName] == value) {
return (this as TNode);
}
else {
return null;
}
}
/**
*
* Gets the number of visible nodes for this node.
* For LeafNode, the value is always 1.
*
* @return 1
*/
public function getVisibleSize () : int {
return 1;
}
/**
* Draws the node by adding it to the Tree's dataProvider.
* Will only draw the node if all of its parents are open
* and if the node hasn't already been drawn.
*
*/
override public function drawNode () : void {
// Only draw the node if it's not already drawn and if it's open
if (_parentDataProvider.getItemIndex(this) == -1 && isVisible()) {
var myIndex:int = _parentNode.children.indexOf(this);
var actualIndex:int = 0;
for (var i:int = 0; i < myIndex; i++) {
actualIndex += _parentNode.children[i].getVisibleSize();
}
// If the node is at the top level, add it directly to the DataProvider at the right location
if (_parentNode is RootNode) {
if (_parentDataProvider.length > 0) {
_parentDataProvider.addItemAt(this, actualIndex);
}
else {
_parentDataProvider.addItem(this);
}
}
// If the node is nested, add it below the parent node with the correct offset
else {
var parentIndex:int = _parentDataProvider.getItemIndex(_parentNode);
_parentDataProvider.addItemAt(this, parentIndex + actualIndex + 1);
}
}
}
/**
* Hides the node by removing it from the dataProvider.
* Only hides the node if one of its parents is closed.
*
*/
override public function hideNode () : void {
// Only hide the node if it's not already hidden and is closed
if (_parentDataProvider.getItemIndex(this) != -1 && !isVisible()) {
_parentDataProvider.removeItem(this);
}
}
}
}