From a06e326f247bff617191b1c87a7b004414495275 Mon Sep 17 00:00:00 2001 From: xue <> Date: Wed, 11 Jan 2006 21:23:44 +0000 Subject: --- demos/composer/protected/pages/Home.page | 17 +- demos/composer/protected/pages/Home.php | 339 +++++++++++++++++++++++++++++-- 2 files changed, 328 insertions(+), 28 deletions(-) (limited to 'demos/composer') diff --git a/demos/composer/protected/pages/Home.page b/demos/composer/protected/pages/Home.page index 648bec21..b446abd2 100644 --- a/demos/composer/protected/pages/Home.page +++ b/demos/composer/protected/pages/Home.page @@ -5,11 +5,6 @@ class extends implements -
-Author Name: -Author Email: -
-Comments: @@ -23,7 +18,7 @@ Comments: Comments Actions - + @@ -39,6 +34,7 @@ Comments: + @@ -67,6 +63,15 @@ Comments: Event Definitions: +
+Comments +( +Author Name: +Author Email: +) +
+ +
 
diff --git a/demos/composer/protected/pages/Home.php b/demos/composer/protected/pages/Home.php
index a2281828..3c2b4d22 100644
--- a/demos/composer/protected/pages/Home.php
+++ b/demos/composer/protected/pages/Home.php
@@ -2,37 +2,332 @@
 
 class Home extends TPage
 {
+	private $_classDefinition=null;
+
+	public function getClassDefinition()
+	{
+		if(!$this->_classDefinition)
+			$this->_classDefinition=new ClassDefinition;
+		return $this->_classDefinition;
+	}
+
+	public function onInit($param)
+	{
+		parent::onInit($param);
+		if(!$this->IsPostBack)
+		{
+			$properties=$this->ClassDefinition->Properties;
+			$properties[]=new PropertyDefinition;
+			$properties[]=new PropertyDefinition;
+			$properties[]=new PropertyDefinition;
+			$this->PropertyList->setDataSource($properties);
+			$this->dataBind();
+		}
+	}
+
+	/*
 	public function onLoad($param)
 	{
 		parent::onLoad($param);
 		if(!$this->IsPostBack)
 		{
-			$this->Repeater->setDataSource($this->getInitialProperties());
-			$this->Repeater->dataBind();
+			$this->PropertyList->setDataSource($this->getInitialProperties());
+			$this->PropertyList->dataBind();
 		}
 		else
-			$this->Repeater->ensureChildControls();
+			$this->PropertyList->ensureChildControls();
 	}
+	*/
 
-	protected function getInitialProperties()
+	public function onLoad($param)
 	{
-		return array(
-			new PropertyDefinition,
-			new PropertyDefinition,
-			new PropertyDefinition,
-			new PropertyDefinition,
-		);
+		parent::onLoad($param);
+		//if($this->IsPostBack && $this->IsValid)
+		if($this->IsPostBack)
+		{
+			$this->PropertyList->ensureChildControls();
+		}
 	}
 
 	public function generateCode($sender,$param)
 	{
-		$code="ClassName->Text." extends ".$this->ParentClass->Text."implements ".$this->Interfaces->Text;
-		$code.="\n";
-		$code.="{\n";
-		$code.="}\n";
-		$code.="?>";
-		$this->SourceCode->Text=htmlentities($code);
+		$def=$this->ClassDefinition;
+		$def->reset();
+		$def->ClassName=$this->ClassName->Text;
+		$def->ParentClass=$this->ParentClass->Text;
+		$def->Interfaces=$this->Interfaces->Text;
+		$def->Comments=$this->Comments->Text;
+		$def->Author=$this->AuthorName->Text;
+		$def->Email=$this->AuthorEmail->Text;
+		foreach($this->PropertyList->Items as $item)
+		{
+			$property=new PropertyDefinition;
+			$property->Name=$item->PropertyName->Text;
+			$property->Type=$item->PropertyType->Text;
+			$property->DefaultValue=$item->DefaultValue->Text;
+			$property->ReadOnly=$item->ReadOnly->Checked;
+			$property->IsProtected=$item->IsProtected->Checked;
+			$property->Comments=$item->Comments->Text;
+			$property->Storage=$item->Storage->Text;
+			$def->Properties[]=$property;
+		}
+		$writer=Prado::createComponent('System.IO.TTextWriter');
+		$this->ClassDefinition->render($writer);
+		$this->SourceCode->Text=highlight_string($writer->flush(),true);
+	}
+}
+
+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";
+			foreach(explode("\n",$this->Comments) as $line)
+				$str.=' * '.$line."\n";
+			$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";
+	}
+
+	protected function renderProperties($writer)
+	{
+		foreach($this->Properties as $property)
+		{
+			$comments=$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('{$property->Name}',$value);";
+				$writeStatement="\$this->setViewState('{$property->Name}',\$value,$value);";
+			}
+			else if($property->Storage==='ControlState')
+			{
+				$readStatement="return \$this->getControlState('{$property->Name}',$value);";
+				$writeStatement="\$this->setControlState('{$property->Name}',\$value,$value);";
+			}
+			else
+			{
+				$name=$this->getVariableName($property->Name);
+				$readStatement="return \$this->$name;";
+				$writeStatement="\$this->$name=$value;";
+			}
+			$writer->write("\t/**\n\t * @return {$property->Type} {$property->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("\t/**\n\t * @param {$property->Type} {$property->Comments}\n\t */\n");
+				$writer->write("\t$access function $setter\n\t{\n\t\t$writeStatement\n\t}\n");
+			}
+		}
+	}
+
+	protected function renderEvents($writer)
+	{
+	}
+
+	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=wordwrap($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=wordwrap($value);
 	}
 }
 
@@ -53,7 +348,7 @@ class PropertyDefinition extends TComponent
 
 	public function setName($value)
 	{
-		$this->_name=$value;
+		$this->_name=ucfirst(trim($value));
 	}
 
 	public function getType()
@@ -63,7 +358,7 @@ class PropertyDefinition extends TComponent
 
 	public function setType($value)
 	{
-		$this->_type=$value;
+		$this->_type=trim($value);
 	}
 
 	public function getDefaultValue()
@@ -73,7 +368,7 @@ class PropertyDefinition extends TComponent
 
 	public function setDefaultValue($value)
 	{
-		$this->_default=$value;
+		$this->_default=trim($value);
 	}
 
 	public function getReadOnly()
@@ -103,7 +398,7 @@ class PropertyDefinition extends TComponent
 
 	public function setStorage($value)
 	{
-		$this->_storage=$value;
+		$this->_storage=trim($value);
 	}
 
 	public function getComments()
@@ -113,7 +408,7 @@ class PropertyDefinition extends TComponent
 
 	public function setComments($value)
 	{
-		$this->_comments=$value;
+		$this->_comments=wordwrap($value);
 	}
 }
 
-- 
cgit v1.2.3