From 8c841835a7d3cbc938201b33ebfad0cb181d47a9 Mon Sep 17 00:00:00 2001 From: xue <> Date: Sun, 15 Jan 2006 14:45:37 +0000 Subject: --- demos/composer/protected/pages/ClassDefinition.php | 362 +++++++++++++++++++ demos/composer/protected/pages/Home.page | 4 +- demos/composer/protected/pages/Home.php | 397 +-------------------- 3 files changed, 375 insertions(+), 388 deletions(-) create mode 100644 demos/composer/protected/pages/ClassDefinition.php (limited to 'demos/composer') diff --git a/demos/composer/protected/pages/ClassDefinition.php b/demos/composer/protected/pages/ClassDefinition.php new file mode 100644 index 00000000..54e143e4 --- /dev/null +++ b/demos/composer/protected/pages/ClassDefinition.php @@ -0,0 +1,362 @@ +_className='ClassName'; + $this->_parentClass='TWebControl'; + $this->_interfaces=''; + $this->_properties=new TList; + $this->_events=new TList; + $this->_email=''; + $this->_author=''; + $this->_comments=''; + } + + public function render($writer) + { + $this->renderComments($writer); + $this->renderClass($writer); + } + + protected function renderComments($writer) + { + $str ="/**\n"; + $str.=" * Class {$this->ClassName}.\n"; + if($this->Comments!=='') + { + $str.=" *\n"; + $str.=implode("\n * ",explode("\n",wordwrap($this->Comments))); + $str.=" *\n\n"; + } + if($this->Author!=='') + { + $str.=" * @author {$this->Author}"; + if($this->Email!=='') + $str.=" <{$this->Email}>"; + $str.="\n"; + } + $str.=" * @version \$Revision: \$ \$Date: \$\n"; + $str.=" */\n"; + $writer->write($str); + } + + protected function renderClass($writer) + { + $writer->write("class {$this->ClassName}"); + if($this->ParentClass!=='') + $writer->write(" extends {$this->ParentClass}"); + if($this->Interfaces!=='') + $writer->write(" implements {$this->Interfaces}"); + $writer->write("\n{\n"); + $this->renderVariables($writer); + $this->renderProperties($writer); + $this->renderEvents($writer); + $writer->write("}\n"); + } + + private function getVariableName($propertyName) + { + return '_'.strtolower($propertyName[0]).substr($propertyName,1); + } + + protected function renderVariables($writer) + { + foreach($this->Properties as $property) + { + if($property->Storage==='Memory') + { + $name=$this->getVariableName($property->Name); + $value=$this->getValueAsString($property->DefaultValue,$property->Type); + $writer->write("\t/**\n\t * @var {$property->Type} {$property->Comments}\n\t */\n"); + $writer->write("\tprivate \$$name=$value;\n"); + } + } + } + + private function getValueAsString($value,$type) + { + switch($type) + { + case 'integer': + $value=TPropertyValue::ensureInteger($value); + break; + case 'float': + $value=TPropertyValue::ensureFloat($value); + break; + case 'boolean': + if(TPropertyValue::ensureBoolean($value)) + $value='true'; + else + $value='false'; + break; + case 'enumerable': + $value="'$value'"; + break; + case 'mixed': + $value='null'; + break; + case 'string': + $value="'$value'"; + break; + } + return "$value"; + } + + private function getValueConversionString($type) + { + switch($type) + { + case 'integer': return 'TPropertyValue::ensureInteger($value)'; + case 'float': return 'TPropertyValue::ensureFloat($value)'; + case 'boolean': return 'TPropertyValue::ensureBoolean($value)'; + case 'enumerable': return 'TPropertyValue::ensureEnum($value)'; + case 'mixed': return '$value'; + case 'string': return 'TPropertyValue::ensureString($value)'; + } + } + + protected function renderProperties($writer) + { + foreach($this->Properties as $property) + { + $name=$property->Name; + if($name==='') + continue; + $comments=implode("\n\t * ",explode("\n",wordwrap($property->Comments))); + $access=$property->IsProtected?'protected':'public'; + $setter='set'.$property->Name.'($value)'; + $getter='get'.$property->Name.'()'; + $value=$this->getValueAsString($property->DefaultValue,$property->Type); + if($property->Storage==='ViewState') + { + $readStatement="return \$this->getViewState('$name',$value);"; + $writeStatement="\$this->setViewState('$name',".$this->getValueConversionString($property->Type).",$value);"; + } + else if($property->Storage==='ControlState') + { + $readStatement="return \$this->getControlState('$name',$value);"; + $writeStatement="\$this->setControlState('$name',".$this->getValueConversionString($property->Type).",$value);"; + } + else + { + $varname=$this->getVariableName($property->Name); + $readStatement="return \$this->$varname;"; + $writeStatement="\$this->$varname=".$this->getValueConversionString($property->Type).";"; + } + $writer->write("\n\t/**\n\t * @return {$property->Type} $comments Defaults to $value.\n\t */\n"); + $writer->write("\t$access function $getter\n\t{\n\t\t$readStatement\n\t}\n"); + if(!$property->ReadOnly) + { + $writer->write("\n\t/**\n\t * @param {$property->Type} $comments\n\t */\n"); + $writer->write("\t$access function $setter\n\t{\n\t\t$writeStatement\n\t}\n"); + } + } + } + + protected function renderEvents($writer) + { + foreach($this->Events as $event) + { + $name=$event->Name; + if($name==='') + continue; + $comments=implode("\n\t * ",explode("\n",wordwrap($event->Comments))); + $writer->write("\n\t/**\n\t * Raises $name event.\n\t * $comments\n\t * @param TEventParameter event parameter\n\t */\n"); + $writer->write("\tpublic function on$name(\$param)\n\t{\n\t\t\$this->raiseEvent('$name',\$this,\$param);\n\t}\n"); + } + } + + public function getClassName() + { + return $this->_className; + } + + public function setClassName($value) + { + $this->_className=trim($value); + } + + public function getParentClass() + { + return $this->_parentClass; + } + + public function setParentClass($value) + { + $this->_parentClass=trim($value); + } + + public function getInterfaces() + { + return $this->_interfaces; + } + + public function setInterfaces($value) + { + $this->_interfaces=$value; + } + + public function getProperties() + { + if(!$this->_properties) + $this->_properties=new TList; + return $this->_properties; + } + + public function getEvents() + { + if(!$this->_events) + $this->_events=new TList; + return $this->_events; + } + + public function getComments() + { + return $this->_comments; + } + + public function setComments($value) + { + $this->_comments=$value; + } + + public function getAuthor() + { + return $this->_author; + } + + public function setAuthor($value) + { + $this->_author=trim($value); + } + + public function getEmail() + { + return $this->_email; + } + + public function setEmail($value) + { + $this->_email=trim($value); + } +} + +class EventDefinition extends TComponent +{ + private $_name=''; + private $_comments=''; + + public function getName() + { + return $this->_name; + } + + public function setName($value) + { + $this->_name=ucfirst(trim($value)); + } + + public function getComments() + { + return $this->_comments; + } + + public function setComments($value) + { + $this->_comments=$value; + } +} + +class PropertyDefinition extends TComponent +{ + private $_name=''; + private $_type='string'; + private $_default=''; + private $_readOnly=false; + private $_protected=false; + private $_storage='ViewState'; + private $_comments=''; + + public function getName() + { + return $this->_name; + } + + public function setName($value) + { + $this->_name=ucfirst(trim($value)); + } + + public function getType() + { + return $this->_type; + } + + public function setType($value) + { + $this->_type=trim($value); + } + + public function getDefaultValue() + { + return $this->_default; + } + + public function setDefaultValue($value) + { + $this->_default=trim($value); + } + + public function getReadOnly() + { + return $this->_readOnly; + } + + public function setReadOnly($value) + { + $this->_readOnly=TPropertyValue::ensureBoolean($value); + } + + public function getIsProtected() + { + return $this->_protected; + } + + public function setIsProtected($value) + { + $this->_protected=TPropertyValue::ensureBoolean($value); + } + + public function getStorage() + { + return $this->_storage; + } + + public function setStorage($value) + { + $this->_storage=trim($value); + } + + public function getComments() + { + return $this->_comments; + } + + public function setComments($value) + { + $this->_comments=$value; + } +} + +?> \ No newline at end of file diff --git a/demos/composer/protected/pages/Home.page b/demos/composer/protected/pages/Home.page index d4a9ce2f..7a0dd635 100644 --- a/demos/composer/protected/pages/Home.page +++ b/demos/composer/protected/pages/Home.page @@ -89,7 +89,7 @@ implements - + @@ -141,7 +141,7 @@ implements - + diff --git a/demos/composer/protected/pages/Home.php b/demos/composer/protected/pages/Home.php index 30da92a7..de340fba 100644 --- a/demos/composer/protected/pages/Home.php +++ b/demos/composer/protected/pages/Home.php @@ -1,5 +1,7 @@ PropertyList->DataSource=$this->ClassDefinition->Properties; - $this->EventList->DataSource=$this->ClassDefinition->Events; - $this->dataBind(); - } - public function propertyAction($sender,$param) { + if($param->CommandName==='add') + $this->ClassDefinition->Properties->add(new PropertyDefinition); if($param->CommandName==='remove') - { $this->ClassDefinition->Properties->removeAt($param->CommandParameter); - } else if($param->CommandName==='up') { $property=$this->ClassDefinition->Properties->itemAt($param->CommandParameter); @@ -50,15 +45,16 @@ class Home extends TPage $this->ClassDefinition->Properties->removeAt($param->CommandParameter); $this->ClassDefinition->Properties->insert($param->CommandParameter+1,$property); } - $this->refresh(); + $this->PropertyList->DataSource=$this->ClassDefinition->Properties; + $this->PropertyList->dataBind(); } public function eventAction($sender,$param) { - if($param->CommandName==='remove') - { + if($param->CommandName==='add') + $this->ClassDefinition->Events->add(new EventDefinition); + else if($param->CommandName==='remove') $this->ClassDefinition->Events->removeAt($param->CommandParameter); - } else if($param->CommandName==='up') { $property=$this->ClassDefinition->Events->itemAt($param->CommandParameter); @@ -71,19 +67,8 @@ class Home extends TPage $this->ClassDefinition->Events->removeAt($param->CommandParameter); $this->ClassDefinition->Events->insert($param->CommandParameter+1,$property); } - $this->refresh(); - } - - public function addProperty($sender,$param) - { - $this->ClassDefinition->Properties->add(new PropertyDefinition); - $this->refresh(); - } - - public function addEvent($sender,$param) - { - $this->ClassDefinition->Events->add(new EventDefinition); - $this->refresh(); + $this->EventList->DataSource=$this->ClassDefinition->Events; + $this->EventList->dataBind(); } public function onLoad($param) @@ -124,370 +109,10 @@ class Home extends TPage public function generateCode($sender,$param) { - $this->refresh(); $writer=Prado::createComponent('System.IO.TTextWriter'); $this->ClassDefinition->render($writer); $this->SourceCode->Text=$writer->flush(); } } -class ClassDefinition extends TComponent -{ - private $_className='ClassName'; - private $_parentClass='TWebControl'; - private $_interfaces=''; - private $_properties=null; - private $_events=null; - private $_email=''; - private $_author=''; - private $_comments=''; - - public function reset() - { - $this->_className='ClassName'; - $this->_parentClass='TWebControl'; - $this->_interfaces=''; - $this->_properties=new TList; - $this->_events=new TList; - $this->_email=''; - $this->_author=''; - $this->_comments=''; - } - - public function render($writer) - { - $this->renderComments($writer); - $this->renderClass($writer); - } - - protected function renderComments($writer) - { - $str ="/**\n"; - $str.=" * Class {$this->ClassName}.\n"; - if($this->Comments!=='') - { - $str.=" *\n"; - $str.=implode("\n * ",explode("\n",wordwrap($this->Comments))); - $str.=" *\n\n"; - } - if($this->Author!=='') - { - $str.=" * @author {$this->Author}"; - if($this->Email!=='') - $str.=" <{$this->Email}>"; - $str.="\n"; - } - $str.=" * @version \$Revision: \$ \$Date: \$\n"; - $str.=" */\n"; - $writer->write($str); - } - - protected function renderClass($writer) - { - $writer->write("class {$this->ClassName}"); - if($this->ParentClass!=='') - $writer->write(" extends {$this->ParentClass}"); - if($this->Interfaces!=='') - $writer->write(" implements {$this->Interfaces}"); - $writer->write("\n{\n"); - $this->renderVariables($writer); - $this->renderProperties($writer); - $this->renderEvents($writer); - $writer->write("}\n"); - } - - private function getVariableName($propertyName) - { - return '_'.strtolower($propertyName[0]).substr($propertyName,1); - } - - protected function renderVariables($writer) - { - foreach($this->Properties as $property) - { - if($property->Storage==='Memory') - { - $name=$this->getVariableName($property->Name); - $value=$this->getValueAsString($property->DefaultValue,$property->Type); - $writer->write("\t/**\n\t * @var {$property->Type} {$property->Comments}\n\t */\n"); - $writer->write("\tprivate \$$name=$value;\n"); - } - } - } - - private function getValueAsString($value,$type) - { - switch($type) - { - case 'integer': - $value=TPropertyValue::ensureInteger($value); - break; - case 'float': - $value=TPropertyValue::ensureFloat($value); - break; - case 'boolean': - if(TPropertyValue::ensureBoolean($value)) - $value='true'; - else - $value='false'; - break; - case 'enumerable': - $value="'$value'"; - break; - case 'mixed': - $value='null'; - break; - case 'string': - $value="'$value'"; - break; - } - return "$value"; - } - - private function getValueConversionString($type) - { - switch($type) - { - case 'integer': return 'TPropertyValue::ensureInteger($value)'; - case 'float': return 'TPropertyValue::ensureFloat($value)'; - case 'boolean': return 'TPropertyValue::ensureBoolean($value)'; - case 'enumerable': return 'TPropertyValue::ensureEnum($value)'; - case 'mixed': return '$value'; - case 'string': return 'TPropertyValue::ensureString($value)'; - } - } - - protected function renderProperties($writer) - { - foreach($this->Properties as $property) - { - $name=$property->Name; - if($name==='') - continue; - $comments=implode("\n\t * ",explode("\n",wordwrap($property->Comments))); - $access=$property->IsProtected?'protected':'public'; - $setter='set'.$property->Name.'($value)'; - $getter='get'.$property->Name.'()'; - $value=$this->getValueAsString($property->DefaultValue,$property->Type); - if($property->Storage==='ViewState') - { - $readStatement="return \$this->getViewState('$name',$value);"; - $writeStatement="\$this->setViewState('$name',".$this->getValueConversionString($property->Type).",$value);"; - } - else if($property->Storage==='ControlState') - { - $readStatement="return \$this->getControlState('$name',$value);"; - $writeStatement="\$this->setControlState('$name',".$this->getValueConversionString($property->Type).",$value);"; - } - else - { - $varname=$this->getVariableName($property->Name); - $readStatement="return \$this->$varname;"; - $writeStatement="\$this->$varname=".$this->getValueConversionString($property->Type).";"; - } - $writer->write("\n\t/**\n\t * @return {$property->Type} $comments Defaults to $value.\n\t */\n"); - $writer->write("\t$access function $getter\n\t{\n\t\t$readStatement\n\t}\n"); - if(!$property->ReadOnly) - { - $writer->write("\n\t/**\n\t * @param {$property->Type} $comments\n\t */\n"); - $writer->write("\t$access function $setter\n\t{\n\t\t$writeStatement\n\t}\n"); - } - } - } - - protected function renderEvents($writer) - { - foreach($this->Events as $event) - { - $name=$event->Name; - if($name==='') - continue; - $comments=implode("\n\t * ",explode("\n",wordwrap($event->Comments))); - $writer->write("\n\t/**\n\t * Raises $name event.\n\t * $comments\n\t * @param TEventParameter event parameter\n\t */\n"); - $writer->write("\tpublic function on$name(\$param)\n\t{\n\t\t\$this->raiseEvent('$name',\$this,\$param);\n\t}\n"); - } - } - - public function getClassName() - { - return $this->_className; - } - - public function setClassName($value) - { - $this->_className=trim($value); - } - - public function getParentClass() - { - return $this->_parentClass; - } - - public function setParentClass($value) - { - $this->_parentClass=trim($value); - } - - public function getInterfaces() - { - return $this->_interfaces; - } - - public function setInterfaces($value) - { - $this->_interfaces=$value; - } - - public function getProperties() - { - if(!$this->_properties) - $this->_properties=new TList; - return $this->_properties; - } - - public function getEvents() - { - if(!$this->_events) - $this->_events=new TList; - return $this->_events; - } - - public function getComments() - { - return $this->_comments; - } - - public function setComments($value) - { - $this->_comments=$value; - } - - public function getAuthor() - { - return $this->_author; - } - - public function setAuthor($value) - { - $this->_author=trim($value); - } - - public function getEmail() - { - return $this->_email; - } - - public function setEmail($value) - { - $this->_email=trim($value); - } -} - -class EventDefinition extends TComponent -{ - private $_name=''; - private $_comments=''; - - public function getName() - { - return $this->_name; - } - - public function setName($value) - { - $this->_name=ucfirst(trim($value)); - } - - public function getComments() - { - return $this->_comments; - } - - public function setComments($value) - { - $this->_comments=$value; - } -} - -class PropertyDefinition extends TComponent -{ - private $_name=''; - private $_type='string'; - private $_default=''; - private $_readOnly=false; - private $_protected=false; - private $_storage='ViewState'; - private $_comments=''; - - public function getName() - { - return $this->_name; - } - - public function setName($value) - { - $this->_name=ucfirst(trim($value)); - } - - public function getType() - { - return $this->_type; - } - - public function setType($value) - { - $this->_type=trim($value); - } - - public function getDefaultValue() - { - return $this->_default; - } - - public function setDefaultValue($value) - { - $this->_default=trim($value); - } - - public function getReadOnly() - { - return $this->_readOnly; - } - - public function setReadOnly($value) - { - $this->_readOnly=TPropertyValue::ensureBoolean($value); - } - - public function getIsProtected() - { - return $this->_protected; - } - - public function setIsProtected($value) - { - $this->_protected=TPropertyValue::ensureBoolean($value); - } - - public function getStorage() - { - return $this->_storage; - } - - public function setStorage($value) - { - $this->_storage=trim($value); - } - - public function getComments() - { - return $this->_comments; - } - - public function setComments($value) - { - $this->_comments=$value; - } -} - ?> \ No newline at end of file -- cgit v1.2.3