View Single Post
  #2  
Old 04-15-2007, 04:42 AM
cbk1994 cbk1994 is offline
the fake one
cbk1994's Avatar
Join Date: Mar 2003
Location: San Francisco
Posts: 10,718
cbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond repute
Send a message via AIM to cbk1994
Quote:
Originally Posted by Novo View Post
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?
__________________
Reply With Quote