
04-15-2007, 04:42 AM
|
the fake one
|
 |
Join Date: Mar 2003
Location: San Francisco
Posts: 10,718
|
|
Quote:
Originally Posted by Novo
PHP Code:
/*********************************
(+) addControl( obj ) returns BOOL
- adds sub-controller
- MUST be in class "communicator-tree"
(+) remControl( obj ) returns BOOL
- removes sub-controller
(+) getControls( ctype ) returns controls[];
- Returns array of all objects with this.ctype == ctype
- Recursive ( applies to sub-controllers, and thenforth )
(-) removeEmpty() returns BOOL
- Cleans up controls list of empty objects (object.type() != 2 )
( ) onEvent( event, param1, param2, param3, ... )
- called through obj.trigger( "Event", param1, param2, param3 );
- Is recursive
- to override, do this:
function onEvent()
{
// Stuff
controller::onEvent( params[0], ..., params[n] );
}
( ) onEvent[EventName]( params )
- Event Called when onEvent( EventName, params ) is.
- no default.
( ) onDestroy()
- SHOULD BE USED INSTEAD OF obj.destroy();
- called to destroy object
( ) onParentDestroy()
- Event Called when Parent Destroyed
- default:
if other parent, stay alive, else
call Destroy
- to override, do this:
function onParentDestroyed( obj )
{
this.parentControls.remove( obj );
return;
}
*********************************/
public function addControl( obj )
{
if ( ! obj.isinclass( "communicator-tree" ) )
{
echo( obj.id SPC "is not a communicator-tree.");
return false;
}
if ( this.controls.index( obj ) == -1 )
this.controls.add( obj );
if ( obj.parentControls.index( this ) == -1 )
obj.parentControls.add(this);
return true;
}
public function remControl( obj )
{
obj.parentControls.remove( this );
this.controls.remove( obj );
return true;
}
public function getControls( ctype )
{ // Searched entire directory
removeEmpty(); // Clean Up
for ( c: this.controls )
{
temp.arr = c.getControls( ctype );
if ( temp.arr.type() == 3 )
temp.array.addarray( temp.arr );
}
if ( this.ctype == ctype )
temp.array.add( this );
return temp.array;
}
function onEvent()
{ // Recursive
param = params;
removeEmpty(); // Clean up!
this.trigger( "Event"@ param[0], param[1] );
for ( c: this.controls )
c.trigger( "Event", param );
}
function onDestroy()
{
removeEmpty(); // Clean up!
for ( c: this.parentControls )
c.remControl( this );
for ( c: this.controls )
c.trigger( "ParentDestroyed", this );
this.destroy();
}
function onParentDestroyed( this )
{
removeEmpty();
this.parentControls.remove( this );
// No parent? Destroy itself!
if ( this.parentControls.size() == 0 )
this.trigger( "Destroy", "" );
}
function removeEmpty()
{
for ( i = 0; i < this.controls.size(); i ++ )
{
if ( this.controls[ i ].type() != 2 )
{
this.controls.delete( i );
-- i;
}
}
return true;
}
A tree-based communicator.
Trigger an event on the top of the tree, and it goes all the way down.
|
Out of curiosity ... what does that do? |
|
|