Source for file Toolbar.class.php

Documentation is available at Toolbar.class.php

  1. /**
  2.  * Класс Toolbar
  3.  *
  4.  * @package energine
  5.  * @author dr.Pavka
  6.  * @copyright ColoCall 2006
  7.  * @version $Id: fsource_energine__modulessharecomponentsToolbar.class.php.html,v 1.1 2007/09/17 14:32:32 pavka Exp $
  8.  */
  9.  
  10. require_once 'core/framework/DBWorker.class.php';
  11. require_once 'core/modules/share/components/Container.class.php';
  12. require_once 'core/modules/share/components/Link.class.php';
  13. require_once 'core/modules/share/components/Button.class.php';
  14. require_once 'core/modules/share/components/Submit.class.php';
  15. require_once 'core/modules/share/components/Separator.class.php';
  16. require_once 'core/modules/share/components/Switcher.class.php';
  17.  
  18. /**
  19.  * Панель инструментов
  20.  *
  21.  * @package energine
  22.  */
  23. class Toolbar extends Object {
  24.     /**
  25.      * Имя тeга
  26.      */
  27.     const TAG_NAME = 'toolbar';
  28.  
  29.     /**
  30.      * Документ
  31.      *
  32.      * @var DOMDocument 
  33.      * @access private
  34.      */
  35.     private $doc;
  36.  
  37.     /**
  38.      * Набор элементов управления
  39.      *
  40.      * @access private
  41.      * @var array 
  42.      */
  43.     private $controls = array();
  44.  
  45.     /**
  46.      * Имя панели инструментов
  47.      *
  48.      * @access private
  49.      * @var string 
  50.      */
  51.     private $name;
  52.  
  53.     /**
  54.      * Путь к директории содержащей рисунки
  55.      *
  56.      * @access private
  57.      * @var string 
  58.      */
  59.     private $imageDir;
  60.  
  61.     /**
  62.      * Дополнительные свойства панели инструментов
  63.      *
  64.      * @var array 
  65.      * @access private
  66.      */
  67.     private $properties = array();
  68.  
  69.     /**
  70.      * Присоединяет панель управления к компоненту
  71.      *
  72.      * @var Component 
  73.      * @access private
  74.      */
  75.     private $component;
  76.  
  77.     /**
  78.      * Конструктор
  79.      *
  80.      * @param string $name имя тулбара
  81.      * @param string $imageDir путь к директории содержащей рисунки
  82.      * @param string $module 
  83.      * @access public
  84.      */
  85.     public function __construct($name$imageDir false{
  86.         parent::__construct();
  87.         $this->name = $name;
  88.         $this->doc = new DOMDocument('1.0''UTF-8');
  89.         $this->imageDir = $imageDir;
  90.     }
  91.  
  92.     /**
  93.      * Привязывает панель управления к компоненту
  94.      *
  95.      * @param Component 
  96.      * @return void 
  97.      * @access public
  98.      */
  99.  
  100.     public function attachToComponent(Component $component{
  101.         $this->component = $component;
  102.     }
  103.  
  104.     /**
  105.      * Возвращает компонент к которому привязана панель управления
  106.      *
  107.      * @return Component 
  108.      * @access public
  109.      */
  110.  
  111.     public function getComponent({
  112.         return $this->component;
  113.     }
  114.  
  115.     /**
  116.      * Присоединение элемента управления к панели
  117.      *
  118.      * @param Control $control 
  119.      * @param Control $position если не указан, добавляем контрол в конец тулбара, если указан, то он добавляется в указанное место
  120.      * @return void 
  121.      * @access public
  122.      */
  123.     public function attachControl(Control $controlControl $position null{
  124.         $control->setIndex(arrayPush($this->controls$control));
  125.         $control->attach($this);
  126.     }
  127.  
  128.     /**
  129.      * Отсоединение элемента управления от панели
  130.      *
  131.      * @param Control $control 
  132.      * @return void 
  133.      * @access public
  134.      */
  135.     public function detachControl(Control $control{
  136.         if (!isset($this->controls[$control->getIndex()])) {
  137.             throw new SystemException('ERR_DEV_NO_CONTROL_TO_DETACH'SystemException::ERR_DEVELOPER);
  138.         }
  139.         unset($this->controls[$control->getIndex()]);
  140.     }
  141.  
  142.     /**
  143.      * Получение элемента управления по его идентификатору
  144.      *
  145.      * @param int $id 
  146.      * @return Control 
  147.      * @access public
  148.      */
  149.     public function getControlByID($id{
  150.         $result false;
  151.         foreach ($this->controls as $control{
  152.             if (method_exists($control'getID'&& $control->getID(== $id{
  153.                 $result $control;
  154.                 break;
  155.             }
  156.         }
  157.         return $result;
  158.     }
  159.  
  160.     /**
  161.      * Построение панели инструментов по XML-описанию
  162.      *
  163.      * @param SimpleXMLElement $toolbarDescription 
  164.      * @return boolean 
  165.      * @access public
  166.      */
  167.     public function loadXML(SimpleXMLElement $toolbarDescription{
  168.         if(!empty($toolbarDescription))
  169.         foreach ($toolbarDescription->control as $controlDescription{
  170.             if (!isset($controlDescription['type'])) {
  171.                 throw new SystemException('ERR_DEV_NO_CONTROL_TYPE'SystemException::ERR_DEVELOPER);
  172.             }
  173.  
  174.             $controlClassName = ucfirst((string)$controlDescription['type']);
  175.             if ($controlClassName == 'Togglebutton'$controlClassName 'Switcher'// dirty hack
  176.             if (!class_exists($controlClassNamefalse)) {
  177.                 throw new SystemException('ERR_DEV_NO_CONTROL_CLASS'SystemException::ERR_DEVELOPER$controlClassName);
  178.             }
  179.  
  180.             $control new $controlClassName(
  181.                 isset($controlDescription['id']? (string)$controlDescription['id'null
  182.             );
  183.  
  184.             $this->attachControl($control);
  185.             $control->loadFromXml($controlDescription);
  186.  
  187.         }
  188.     }
  189.  
  190.     /**
  191.      * Возвращает набор элементов управления
  192.      *
  193.      * @return array 
  194.      * @access public
  195.      */
  196.     public function getControls({
  197.         return $this->controls;
  198.     }
  199.  
  200.     /**
  201.      * Enter description here...
  202.      *
  203.      * @param string $name 
  204.      * @param mixed $value 
  205.      */
  206.     public function setProperty($name$value{
  207.         $this->properties[$name$value;
  208.     }
  209.  
  210.     /**
  211.      * Enter description here...
  212.      *
  213.      * @param string $name 
  214.      * @return mixed 
  215.      */
  216.     public function getProperty($name{
  217.         if (isset($this->properties[$name])) {
  218.             return $this->properties[$name];
  219.         }
  220.     }
  221.  
  222.     /**
  223.      * Построение панели инструментов
  224.      *
  225.      * @return DOMNode 
  226.      * @access public
  227.      */
  228.     public function build({
  229.         $result false;
  230.  
  231.         if (count($this->controls0{
  232.             $toolbarElem $this->doc->createElement(self::TAG_NAME);
  233.             $toolbarElem->setAttribute('name'$this->name);
  234.             if (!empty($this->properties)) {
  235.                 $props $this->doc->createElement('properties');
  236.                 foreach ($this->properties as $propName => $propValue{
  237.                     $prop $this->doc->createElement('property');
  238.                     $prop->setAttribute('name'$propName);
  239.                     $prop->appendChild($this->doc->createTextNode($propValue));
  240.                     $props->appendChild($prop);
  241.                 }
  242.                 $toolbarElem->appendChild($props);
  243.             }
  244.             foreach ($this->controls as $control{
  245.                 $toolbarElem->appendChild($this->doc->importNode($control->build()true));
  246.             }
  247.             $this->doc->appendChild($toolbarElem);
  248.             $result $this->doc->documentElement;
  249.         }
  250.  
  251.         return $result;
  252.     }
  253.  
  254.     /**
  255.      * Переводит все элементы управления
  256.      *
  257.      * @return void 
  258.      * @access public
  259.      */
  260.     public function translate({
  261.         foreach ($this->controls as $control{
  262.             $control->translate();
  263.         }
  264.     }
  265. }

Documentation generated on Mon, 17 Sep 2007 13:32:46 +0300 by phpDocumentor 1.4.0a2