<?php
Prado::using('Application.pages.ClassDefinition');
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->DataSource=$properties;
$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);
$this->ClassDefinition->Properties->removeAt($param->CommandParameter);
$this->ClassDefinition->Properties->insertAt($param->CommandParameter-1,$property);
}
else if($param->CommandName==='down')
{
$property=$this->ClassDefinition->Properties->itemAt($param->CommandParameter);
$this->ClassDefinition->Properties->removeAt($param->CommandParameter);
$this->ClassDefinition->Properties->insertAt($param->CommandParameter+1,$property);
}
$this->PropertyList->DataSource=$this->ClassDefinition->Properties;
$this->PropertyList->dataBind();
}
public function eventAction($sender,$param)
{
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);
$this->ClassDefinition->Events->removeAt($param->CommandParameter);
$this->ClassDefinition->Events->insertAt($param->CommandParameter-1,$property);
}
else if($param->CommandName==='down')
{
$property=$this->ClassDefinition->Events->itemAt($param->CommandParameter);
$this->ClassDefinition->Events->removeAt($param->CommandParameter);
$this->ClassDefinition->Events->insertAt($param->CommandParameter+1,$property);
}
$this->EventList->DataSource=$this->ClassDefinition->Events;
$this->EventList->dataBind();
}
public function onLoad($param)
{
parent::onLoad($param);
//if($this->IsPostBack && $this->IsValid)
if($this->IsPostBack)
{
$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;
}
foreach($this->EventList->Items as $item)
{
$event=new EventDefinition;
$event->Name=$item->EventName->Text;
$event->Comments=$item->Comments->Text;
$def->Events[]=$event;
}
}
}
public function generateCode($sender,$param)
{
$writer=Prado::createComponent('TTextWriter');
$this->ClassDefinition->render($writer);
$this->SourceCode->Text=$writer->flush();
}
}