diff options
Diffstat (limited to 'demos/composer/protected/pages')
-rw-r--r-- | demos/composer/protected/pages/Home.page | 17 | ||||
-rw-r--r-- | demos/composer/protected/pages/Home.php | 339 |
2 files changed, 328 insertions, 28 deletions
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 <com:TTextBox ID="ClassName" CssClass="slTextBox"/>
extends <com:TTextBox ID="ParentClass" CssClass="slTextBox"/>
implements <com:TTextBox ID="Interfaces" CssClass="slTextBox"/>
-<br/>
-Author Name: <com:TTextBox ID="AuthorName" CssClass="slTextBox"/>
-Author Email: <com:TTextBox ID="AuthorEmail" CssClass="slTextBox"/>
-<br/>
-Comments: <com:TTextBox ID="Comments" TextMode="MultiLine"/>
</com:TPanel>
<com:TPanel GroupingText="Property Definitions">
@@ -23,7 +18,7 @@ Comments: <com:TTextBox ID="Comments" TextMode="MultiLine"/> <th>Comments</th>
<th>Actions</th>
</tr>
-<com:TRepeater ID="Repeater">
+<com:TRepeater ID="PropertyList">
<prop:ItemTemplate>
<tr>
<td>
@@ -39,6 +34,7 @@ Comments: <com:TTextBox ID="Comments" TextMode="MultiLine"/> <com:TListItem Text="integer" />
<com:TListItem Text="boolean" />
<com:TListItem Text="enumerable" />
+ <com:TListItem Text="float" />
<com:TListItem Text="mixed" />
</com:TDropDownList>
</td>
@@ -67,6 +63,15 @@ Comments: <com:TTextBox ID="Comments" TextMode="MultiLine"/> <com:TPanel GroupingText="Event Definitions">
Event Definitions:
</com:TPanel>
+<br/>
+Comments
+(
+Author Name: <com:TTextBox ID="AuthorName" CssClass="slTextBox"/>
+Author Email: <com:TTextBox ID="AuthorEmail" CssClass="slTextBox"/>
+)
+<br/>
+<com:TTextBox ID="Comments" TextMode="MultiLine" Columns="80" Rows="6" />
+<br/>
<com:TButton Text="Generate Code" Click="generateCode" />
<pre>
<com:TLiteral ID="SourceCode" />
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="<?php\n\n";
- $code.="class ".$this->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);
}
}
|