View Single Post
  #1  
Old 04-15-2007, 02:44 AM
Novo Novo is offline
[TServerDeveloper]
Join Date: Jun 2006
Posts: 448
Novo will become famous soon enough
communicator-tree class

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 addControlobj )
  {
  if ( ! 
obj.isinclass"communicator-tree" ) )
    {
    echo( 
obj.id SPC "is not a communicator-tree.");
    return 
false;
    }

  if ( 
this.controls.indexobj ) == -)
    
this.controls.addobj );
  if ( 
obj.parentControls.indexthis ) == -)
    
obj.parentControls.add(this);

  return 
true;
  }

public function 
remControlobj )
  {
  
obj.parentControls.removethis );
  
this.controls.removeobj );
  return 
true;
  }

public function 
getControlsctype )
  { 
// Searched entire directory
  
removeEmpty(); // Clean Up
  
for ( cthis.controls )
    {
    
temp.arr c.getControlsctype );
    if ( 
temp.arr.type() == )
      
temp.array.addarraytemp.arr );
    }

  if ( 
this.ctype == ctype )
    
temp.array.addthis );

  return 
temp.array;
  }

function 
onEvent()
  { 
// Recursive
  
param params;
  
removeEmpty(); // Clean up!
  
this.trigger"Event"param[0], param[1] );
  for ( 
cthis.controls )
    
c.trigger"Event"param );
  }

function 
onDestroy()
  {
  
removeEmpty(); // Clean up!
  
for ( cthis.parentControls )
    
c.remControlthis );
  for ( 
cthis.controls )
    
c.trigger"ParentDestroyed"this );

  
this.destroy();
  }

function 
onParentDestroyedthis )
  {
  
removeEmpty();
  
this.parentControls.removethis );

  
// No parent? Destroy itself!
  
if ( this.parentControls.size() == )
    
this.trigger"Destroy""" );
  }

function 
removeEmpty()
  {
  for ( 
0this.controls.size(); ++ )
    {
    if ( 
this.controls].type() != )
      {
      
this.controls.delete);
      -- 
i;
      }
    }

  return 
true;
  } 
A tree-based communicator.
Trigger an event on the top of the tree, and it goes all the way down.
Reply With Quote