Source for file AObject.php

Documentation is available at AObject.php

  1. <?php
  2. /**
  3.  * AObject.php - The file for the AObject class
  4.  *  
  5.  * 
  6.  * @author Jordan Wambaugh
  7.  */
  8.  
  9.  
  10.  
  11. require_once 'ASignalDefinition.php';
  12. require_once 'AConnection.php';
  13. require_once 'AObjectRegistry.php';
  14. require_once 'Alia.php';
  15.  
  16. /**
  17.  * class AObject - The base class for all objects with signal/slot functionality
  18.  * 
  19.  * The AObject class is the base class for all widgets, and any other objects with signal/slot functionality.
  20.  * If you want to create your own object that will emit signals, it must extend AObject, or one of its subclasses.
  21.  * 
  22.  * 
  23.  * @package Alia
  24.  * @subpackage Core
  25.  * @author Jordan Wambaugh <jordan@wambaugh.org>
  26.  */
  27. abstract class AObject
  28. {
  29.      /*** Attributes: ***/
  30.  
  31.     /**
  32.      * an array containing all signal deffinitions
  33.      * @access private
  34.      * @var array 
  35.      * 
  36.      */
  37.     private $__signalDefinitions=array();
  38.  
  39.     /**
  40.      * An array containing all connections to this object
  41.      * @var AConnection 
  42.      * @access private
  43.      */
  44.     private $__connections=array();
  45.  
  46.     /**
  47.      * The unique ID of the object. This value is assigned by AObjectRegistry
  48.      * @access private
  49.      */
  50.     private $__objectID;
  51.  
  52.     /*
  53.      * adds the object to the object registry. All subclasses must call this.
  54.      */
  55.     public function __construct(){
  56.         AObjectRegistry::instance()->addObject($this);
  57.     }
  58.     
  59.  
  60.  
  61.  
  62.     /*
  63.      * returns the object's unique ID
  64.      */
  65.     public function getObjectID(){
  66.         return $this->__objectID;
  67.     }
  68.     
  69.     /*
  70.      * sets the object's unique ID
  71.      */
  72.     public function setObjectID($id){
  73.         $this->__objectID = $id;
  74.     }
  75.     
  76.     /**
  77.      * Defines a signal that other objects my connect slots to.
  78.      * @author Jordan Wambaugh <jordan@wambaugh.org>
  79.      * @param string name
  80.      * @param int parameterCount
  81.      * @return null 
  82.      * @access public
  83.      */
  84.     public function defineSignal$name,  $parameterCount =0{
  85.         $this->__signalDefinitions[]=new ASignalDefinition($name,$parameterCount);
  86.     // end of member function defineSignal
  87.  
  88.  
  89.     /**
  90.      * emit() - Emits a signal from this object to all connected slots
  91.      * 
  92.      * @author Jordan Wambaugh <jordan@wambaugh.org>
  93.      * @param string $signalName The name of the signal to emit
  94.      * @param array $args the arguments to send with the signal
  95.      * @return null 
  96.      * @access public
  97.      */
  98.     public function emit$signalName,$args=array()) {
  99.         if(!$this->__hasSignalDefinition($signalName)){
  100.             throw new Exception("Signal '$signalName' does not exist in class '".get_class($this)."'.");
  101.         }
  102.         $signalName=(string)$signalName;
  103.         
  104.         foreach ($this->__connections as $connection){
  105.             if($connection->getSignalName(== $signalName){
  106.                 //if we have a slot method in the connection, execute it. 
  107.                 if($connection->getSlotMethod()!=null){
  108.                     call_user_func_array(array(&$connection->targetObject,$connection->getSlotMethod()),$args);
  109.                 }
  110.                 //if there is javascript in the connection, send javascript to client
  111.                 if($connection->getJavascript()!=null){
  112.                     Alia::sendJScript($connection->getJavascript());
  113.                 }
  114.                }
  115.           }
  116.     // end of member function emit
  117.  
  118.  
  119.     /**
  120.      * Adds a slot connection
  121.      *
  122.      * @param AConnection $connection The connection to add
  123.      */
  124.     public function addConnection(AConnection $connection){
  125.         if(!$this->__hasSignalDefinition($connection->getSignalName())){
  126.             throw new Exception("Signal '".$connection->getSignalName()."' does not exist in class '".get_class($this)."'.");
  127.         }
  128.         $this->__connections[]=$connection;
  129.     }
  130.     
  131.     
  132.     
  133.     /**
  134.      * Returns true if there is a connection to a signal specified by $signalName
  135.      *
  136.      * @param string $signalName The name of the signal to search for
  137.      * @return bool True if there is a connection to the signal $signal
  138.      */
  139.     public function hasConnection($signal){
  140.         foreach ($this->__connections as $connection){
  141.             if($connection->getSignalName(== $signal){
  142.                 return true;
  143.             }
  144.         }
  145.         return false;
  146.     }
  147.     
  148.     /**
  149.      *
  150.      * @param string $name 
  151.      * @return bool True if the signal is defined in the object
  152.      */
  153.     private function __hasSignalDefinition($name){
  154.         foreach ($this->__signalDefinitions as $definition{
  155.             if($definition->getName()){
  156.                 return true;
  157.             }
  158.         }
  159.         return false;
  160.     }
  161.  
  162.     public function clearConnections(){
  163.         AConnectionRegistry::instance()->clearConnections($this);
  164.         $this->__connections = array();
  165.     }
  166. // end of AObject
  167. ?>

Documentation generated on Fri, 11 Jul 2008 13:28:42 -0400 by phpDocumentor 1.4.2