From 261c29ece2ccf37e6419b9886cefd29f9dbb3c89 Mon Sep 17 00:00:00 2001 From: xue <> Date: Fri, 17 Mar 2006 03:16:13 +0000 Subject: Using constants as item types. --- framework/Web/UI/WebControls/TBoundColumn.php | 8 +- framework/Web/UI/WebControls/TButtonColumn.php | 2 +- framework/Web/UI/WebControls/TCheckBoxColumn.php | 10 +- framework/Web/UI/WebControls/TDataGrid.php | 91 ++++---- framework/Web/UI/WebControls/TDataGridColumn.php | 4 +- framework/Web/UI/WebControls/TDataList.php | 19 +- .../Web/UI/WebControls/TEditCommandColumn.php | 4 +- framework/Web/UI/WebControls/THyperLinkColumn.php | 8 +- framework/Web/UI/WebControls/TRepeater.php | 52 +++-- framework/Web/UI/WebControls/TTemplateColumn.php | 14 +- framework/Web/UI/WebControls/TWizard.php | 250 ++++++++++++++++----- framework/core.php | 2 +- 12 files changed, 319 insertions(+), 145 deletions(-) diff --git a/framework/Web/UI/WebControls/TBoundColumn.php b/framework/Web/UI/WebControls/TBoundColumn.php index 393d5c11..5975ec02 100644 --- a/framework/Web/UI/WebControls/TBoundColumn.php +++ b/framework/Web/UI/WebControls/TBoundColumn.php @@ -97,7 +97,7 @@ class TBoundColumn extends TDataGridColumn parent::initializeCell($cell,$columnIndex,$itemType); switch($itemType) { - case 'EditItem': + case TDataGrid::IT_EDITITEM: $control=$cell; if(!$this->getReadOnly()) { @@ -108,9 +108,9 @@ class TBoundColumn extends TDataGridColumn if(($dataField=$this->getDataField())!=='') $control->attachEventHandler('OnDataBinding',array($this,'dataBindColumn')); break; - case 'Item': - case 'AlternatingItem': - case 'SelectedItem': + case TDataGrid::IT_ITEM: + case TDataGrid::IT_ALTERNATINGITEM: + case TDataGrid::IT_SELECTEDITEM: if($this->getDataField()!=='') $cell->attachEventHandler('OnDataBinding',array($this,'dataBindColumn')); break; diff --git a/framework/Web/UI/WebControls/TButtonColumn.php b/framework/Web/UI/WebControls/TButtonColumn.php index dc506b0a..12b38171 100644 --- a/framework/Web/UI/WebControls/TButtonColumn.php +++ b/framework/Web/UI/WebControls/TButtonColumn.php @@ -168,7 +168,7 @@ class TButtonColumn extends TDataGridColumn public function initializeCell($cell,$columnIndex,$itemType) { parent::initializeCell($cell,$columnIndex,$itemType); - if($itemType==='Item' || $itemType==='AlternatingItem' || $itemType==='SelectedItem' || $itemType==='EditItem') + if($itemType===TDataGrid::IT_ITEM || $itemType===TDataGrid::IT_ALTERNATINGITEM || $itemType===TDataGrid::IT_SELECTEDITEM || $itemType===TDataGrid::IT_EDITITEM) { if($this->getButtonType()==='LinkButton') $button=Prado::createComponent('System.Web.UI.WebControls.TLinkButton'); diff --git a/framework/Web/UI/WebControls/TCheckBoxColumn.php b/framework/Web/UI/WebControls/TCheckBoxColumn.php index f695bcdc..4df1e695 100644 --- a/framework/Web/UI/WebControls/TCheckBoxColumn.php +++ b/framework/Web/UI/WebControls/TCheckBoxColumn.php @@ -14,6 +14,10 @@ * TDataGridColumn class file */ Prado::using('System.Web.UI.WebControls.TDataGridColumn'); +/** + * TCheckBox class file + */ +Prado::using('System.Web.UI.WebControls.TCheckBox'); /** * TCheckBoxColumn class @@ -76,10 +80,10 @@ class TCheckBoxColumn extends TDataGridColumn public function initializeCell($cell,$columnIndex,$itemType) { parent::initializeCell($cell,$columnIndex,$itemType); - if($itemType==='EditItem' || $itemType==='Item' || $itemType==='AlternatingItem' || $itemType==='SelectedItem') + if($itemType===TDataGrid::IT_ITEM || $itemType===TDataGrid::IT_ALTERNATINGITEM || $itemType===TDataGrid::IT_SELECTEDITEM || $itemType===TDataGrid::IT_EDITITEM) { - $checkBox=Prado::createComponent('System.Web.UI.WebControls.TCheckBox'); - if($this->getReadOnly() || $itemType!=='EditItem') + $checkBox=new TCheckBox; + if($this->getReadOnly() || $itemType!==TDataGrid::IT_EDITITEM) $checkBox->setEnabled(false); $cell->setHorizontalAlign('Center'); $cell->getControls()->add($checkBox); diff --git a/framework/Web/UI/WebControls/TDataGrid.php b/framework/Web/UI/WebControls/TDataGrid.php index d9924cd2..0157b643 100644 --- a/framework/Web/UI/WebControls/TDataGrid.php +++ b/framework/Web/UI/WebControls/TDataGrid.php @@ -134,6 +134,21 @@ Prado::using('System.Web.UI.WebControls.TTable'); */ class TDataGrid extends TBaseDataList implements INamingContainer { + /** + * datagrid item types + */ + const IT_HEADER='Header'; + const IT_FOOTER='Footer'; + const IT_ITEM='Item'; + const IT_SEPARATOR='Separator'; + const IT_ALTERNATINGITEM='AlternatingItem'; + const IT_EDITITEM='EditItem'; + const IT_SELECTEDITEM='SelectedItem'; + const IT_PAGER='Pager'; + + /** + * Command name that TDataGrid understands. + */ const CMD_SELECT='Select'; const CMD_EDIT='Edit'; const CMD_UPDATE='Update'; @@ -395,14 +410,14 @@ class TDataGrid extends TBaseDataList implements INamingContainer if($current>=0 && $current<$itemCount) { $item=$items->itemAt($current); - if($item->getItemType()!=='EditItem') - $item->setItemType($current%2?'AlternatingItem':'Item'); + if($item->getItemType()!==self::IT_EDITITEM) + $item->setItemType($current%2?self::IT_ALTERNATINGITEM:self::IT_ITEM); } if($value>=0 && $value<$itemCount) { $item=$items->itemAt($value); - if($item->getItemType()!=='EditItem') - $item->setItemType('SelectedItem'); + if($item->getItemType()!==self::IT_EDITITEM) + $item->setItemType(self::IT_SELECTEDITEM); } } } @@ -445,9 +460,9 @@ class TDataGrid extends TBaseDataList implements INamingContainer $items=$this->getItems(); $itemCount=$items->getCount(); if($current>=0 && $current<$itemCount) - $items->itemAt($current)->setItemType($current%2?'AlternatingItem':'Item'); + $items->itemAt($current)->setItemType($current%2?self::IT_ALTERNATINGITEM:self::IT_ITEM); if($value>=0 && $value<$itemCount) - $items->itemAt($value)->setItemType('EditItem'); + $items->itemAt($value)->setItemType(self::IT_EDITITEM); } } @@ -901,7 +916,7 @@ class TDataGrid extends TBaseDataList implements INamingContainer $column->initialize(); if($allowPaging) $this->createPager(-1,-1,$columnCount,$ds); - $this->_header=$this->createItemInternal(-1,-1,'Header',false,null,$columns); + $this->_header=$this->createItemInternal(-1,-1,self::IT_HEADER,false,null,$columns); $selectedIndex=$this->getSelectedItemIndex(); $editIndex=$this->getEditItemIndex(); $index=0; @@ -909,18 +924,18 @@ class TDataGrid extends TBaseDataList implements INamingContainer foreach($ds as $data) { if($index===$editIndex) - $itemType='EditItem'; + $itemType=self::IT_EDITITEM; else if($index===$selectedIndex) - $itemType='SelectedItem'; + $itemType=self::IT_SELECTEDITEM; else if($index % 2) - $itemType='AlternatingItem'; + $itemType=self::IT_ALTERNATINGITEM; else - $itemType='Item'; + $itemType=self::IT_ITEM; $items->add($this->createItemInternal($index,$dsIndex,$itemType,false,null,$columns)); $index++; $dsIndex++; } - $this->_footer=$this->createItemInternal(-1,-1,'Footer',false,null,$columns); + $this->_footer=$this->createItemInternal(-1,-1,self::IT_FOOTER,false,null,$columns); if($allowPaging) $this->createPager(-1,-1,$columnCount,$ds); } @@ -963,7 +978,7 @@ class TDataGrid extends TBaseDataList implements INamingContainer $allowPaging=$ds->getAllowPaging(); if($allowPaging) $this->createPager(-1,-1,$columnCount,$ds); - $this->_header=$this->createItemInternal(-1,-1,'Header',true,null,$columns); + $this->_header=$this->createItemInternal(-1,-1,self::IT_HEADER,true,null,$columns); $selectedIndex=$this->getSelectedItemIndex(); $editIndex=$this->getEditItemIndex(); $index=0; @@ -973,18 +988,18 @@ class TDataGrid extends TBaseDataList implements INamingContainer if($keyField!=='') $keys->add($this->getDataFieldValue($data,$keyField)); if($index===$editIndex) - $itemType='EditItem'; + $itemType=self::IT_EDITITEM; else if($index===$selectedIndex) - $itemType='SelectedItem'; + $itemType=self::IT_SELECTEDITEM; else if($index % 2) - $itemType='AlternatingItem'; + $itemType=self::IT_ALTERNATINGITEM; else - $itemType='Item'; + $itemType=self::IT_ITEM; $items->add($this->createItemInternal($index,$dsIndex,$itemType,true,$data,$columns)); $index++; $dsIndex++; } - $this->_footer=$this->createItemInternal(-1,-1,'Footer',true,null,$columns); + $this->_footer=$this->createItemInternal(-1,-1,self::IT_FOOTER,true,null,$columns); if($allowPaging) $this->createPager(-1,-1,$columnCount,$ds); $this->setViewState('ItemCount',$index,0); @@ -1003,7 +1018,7 @@ class TDataGrid extends TBaseDataList implements INamingContainer /** * Creates a datagrid item instance based on the item type and index. * @param integer zero-based item index - * @param string item type, may be 'Header', 'Footer', 'Item', 'Separator', 'AlternatingItem', 'SelectedItem', 'EditItem'. + * @param string item type, may be self::IT_HEADER, self::IT_FOOTER, self::IT_ITEM, self::IT_SEPARATOR, self::IT_ALTERNATINGITEM, self::IT_SELECTEDITEM, self::IT_EDITITEM. * @return TDataGridItem created data list item */ protected function createItem($itemIndex,$dataSourceIndex,$itemType) @@ -1045,7 +1060,7 @@ class TDataGrid extends TBaseDataList implements INamingContainer $index=0; foreach($columns as $column) { - if($itemType==='Header') + if($itemType===self::IT_HEADER) $cell=new TTableHeaderCell; else $cell=new TTableCell; @@ -1057,7 +1072,7 @@ class TDataGrid extends TBaseDataList implements INamingContainer private function createPager($itemIndex,$dataSourceIndex,$columnSpan,$pagedDataSource) { - $item=$this->createItem($itemIndex,$dataSourceIndex,'Pager'); + $item=$this->createItem($itemIndex,$dataSourceIndex,self::IT_PAGER); $this->initializePager($item,$columnSpan,$pagedDataSource); $this->onItemCreated(new TDataGridItemEventParameter($item)); $this->getControls()->add($item); @@ -1258,9 +1273,9 @@ class TDataGrid extends TBaseDataList implements INamingContainer } else { - $column->setHeaderText('Item'); + $column->setHeaderText(self::IT_ITEM); $column->setDataField($key); - $column->setSortExpression('Item'); + $column->setSortExpression(self::IT_ITEM); $autoColumns->add($column); } } @@ -1322,31 +1337,31 @@ class TDataGrid extends TBaseDataList implements INamingContainer $itemType=$item->getItemType(); switch($itemType) { - case 'Header': + case self::IT_HEADER: if($headerStyle) $item->getStyle()->mergeWith($headerStyle); if(!$this->getShowHeader()) $item->setVisible(false); break; - case 'Footer': + case self::IT_FOOTER: if($footerStyle) $item->getStyle()->mergeWith($footerStyle); if(!$this->getShowFooter()) $item->setVisible(false); break; - case 'Separator': + case self::IT_SEPARATOR: if($separatorStyle) $item->getStyle()->mergeWith($separatorStyle); break; - case 'Item': + case self::IT_ITEM: if($itemStyle) $item->getStyle()->mergeWith($itemStyle); break; - case 'AlternatingItem': + case self::IT_ALTERNATINGITEM: if($alternatingItemStyle) $item->getStyle()->mergeWith($alternatingItemStyle); break; - case 'SelectedItem': + case self::IT_SELECTEDITEM: if($selectedItemStyle) $item->getStyle()->mergeWith($selectedItemStyle); if($index % 2==1) @@ -1360,7 +1375,7 @@ class TDataGrid extends TBaseDataList implements INamingContainer $item->getStyle()->mergeWith($alternatingItemStyle); } break; - case 'EditItem': + case self::IT_EDITITEM: if($editItemStyle) $item->getStyle()->mergeWith($editItemStyle); if($index % 2==1) @@ -1374,7 +1389,7 @@ class TDataGrid extends TBaseDataList implements INamingContainer $item->getStyle()->mergeWith($alternatingItemStyle); } break; - case 'Pager': + case self::IT_PAGER: if($pagerStyle) { $item->getStyle()->mergeWith($pagerStyle); @@ -1393,7 +1408,7 @@ class TDataGrid extends TBaseDataList implements INamingContainer default: break; } - if($this->_columns && $itemType!=='Pager') + if($this->_columns && $itemType!==self::IT_PAGER) { $n=$this->_columns->getCount(); $cells=$item->getCells(); @@ -1405,9 +1420,9 @@ class TDataGrid extends TBaseDataList implements INamingContainer $cell->setVisible(false); else { - if($itemType==='Header') + if($itemType===self::IT_HEADER) $style=$column->getHeaderStyle(false); - else if($itemType==='Footer') + else if($itemType===self::IT_FOOTER) $style=$column->getFooterStyle(false); else $style=$column->getItemStyle(false); @@ -1416,7 +1431,7 @@ class TDataGrid extends TBaseDataList implements INamingContainer } } } - else if($itemType==='Pager' && $invisibleColumns>0) + else if($itemType===self::IT_PAGER && $invisibleColumns>0) { $cell=$item->getCells()->itemAt(0); $cell->setColumnSpan($cell->getColumnSpan()-$invisibleColumns); @@ -1689,7 +1704,7 @@ class TDataGridItem extends TTableRow implements INamingContainer } /** - * @return string item type, can be 'Header','Footer','Item','AlternatingItem','SelectedItem','EditItem','Separator','Pager' + * @return string item type. */ public function getItemType() { @@ -1697,11 +1712,11 @@ class TDataGridItem extends TTableRow implements INamingContainer } /** - * @param mixed data to be associated with the item + * @param string item type, can be 'Header','Footer','Item','AlternatingItem','SelectedItem','EditItem','Separator','Pager' */ public function setItemType($value) { - $this->_itemType=TPropertyValue::ensureEnum($value,'Header','Footer','Item','AlternatingItem','SelectedItem','EditItem','Separator','Pager'); + $this->_itemType=$value; } /** diff --git a/framework/Web/UI/WebControls/TDataGridColumn.php b/framework/Web/UI/WebControls/TDataGridColumn.php index 6206e595..e8cc81aa 100644 --- a/framework/Web/UI/WebControls/TDataGridColumn.php +++ b/framework/Web/UI/WebControls/TDataGridColumn.php @@ -275,7 +275,7 @@ abstract class TDataGridColumn extends TApplicationComponent { switch($itemType) { - case 'Header': + case TDataGrid::IT_HEADER: $sortExpression=$this->getSortExpression(); $allowSorting=$sortExpression!=='' && (!$this->_owner || $this->_owner->getAllowSorting()); if($allowSorting) @@ -317,7 +317,7 @@ abstract class TDataGridColumn extends TApplicationComponent } } break; - case 'Footer': + case TDataGrid::IT_FOOTER: if(($text=$this->getFooterText())==='') $text=' '; $cell->setText($text); diff --git a/framework/Web/UI/WebControls/TDataList.php b/framework/Web/UI/WebControls/TDataList.php index 56e8d43c..f5f4b9fa 100644 --- a/framework/Web/UI/WebControls/TDataList.php +++ b/framework/Web/UI/WebControls/TDataList.php @@ -98,6 +98,15 @@ Prado::using('System.Web.UI.WebControls.TRepeatInfo'); */ class TDataList extends TBaseDataList implements INamingContainer, IRepeatInfoUser { + /** + * Command name that TDataList understands. + */ + const CMD_SELECT='Select'; + const CMD_EDIT='Edit'; + const CMD_UPDATE='Update'; + const CMD_DELETE='Delete'; + const CMD_CANCEL='Cancel'; + /** * @var TDataListItemCollection item list */ @@ -645,28 +654,28 @@ class TDataList extends TBaseDataList implements INamingContainer, IRepeatInfoUs { $this->onItemCommand($param); $command=$param->getCommandName(); - if(strcasecmp($command,'select')===0) + if(strcasecmp($command,self::CMD_SELECT)===0) { $this->setSelectedItemIndex($param->getItem()->getItemIndex()); $this->onSelectedIndexChanged(null); return true; } - else if(strcasecmp($command,'edit')===0) + else if(strcasecmp($command,self::CMD_EDIT)===0) { $this->onEditCommand($param); return true; } - else if(strcasecmp($command,'delete')===0) + else if(strcasecmp($command,self::CMD_DELETE)===0) { $this->onDeleteCommand($param); return true; } - else if(strcasecmp($command,'update')===0) + else if(strcasecmp($command,self::CMD_UPDATE)===0) { $this->onUpdateCommand($param); return true; } - else if(strcasecmp($command,'cancel')===0) + else if(strcasecmp($command,self::CMD_CANCEL)===0) { $this->onCancelCommand($param); return true; diff --git a/framework/Web/UI/WebControls/TEditCommandColumn.php b/framework/Web/UI/WebControls/TEditCommandColumn.php index abc372a0..65e389bd 100644 --- a/framework/Web/UI/WebControls/TEditCommandColumn.php +++ b/framework/Web/UI/WebControls/TEditCommandColumn.php @@ -153,9 +153,9 @@ class TEditCommandColumn extends TDataGridColumn public function initializeCell($cell,$columnIndex,$itemType) { parent::initializeCell($cell,$columnIndex,$itemType); - if($itemType==='Item' || $itemType==='AlternatingItem' || $itemType==='SelectedItem') + if($itemType===TDataGrid::IT_ITEM || $itemType===TDataGrid::IT_ALTERNATINGITEM || $itemType===TDataGrid::IT_SELECTEDITEM) $cell->getControls()->add($this->createButton('Edit',$this->getEditText(),false,'')); - else if($itemType==='EditItem') + else if($itemType===TDataGrid::IT_EDITITEM) { $controls=$cell->getControls(); $controls->add($this->createButton('Update',$this->getUpdateText(),$this->getCausesValidation(),$this->getValidationGroup())); diff --git a/framework/Web/UI/WebControls/THyperLinkColumn.php b/framework/Web/UI/WebControls/THyperLinkColumn.php index 96e905cd..9fc1e3d2 100644 --- a/framework/Web/UI/WebControls/THyperLinkColumn.php +++ b/framework/Web/UI/WebControls/THyperLinkColumn.php @@ -14,6 +14,10 @@ * TDataGridColumn class file */ Prado::using('System.Web.UI.WebControls.TDataGridColumn'); +/** + * THyperLink class file + */ +Prado::using('System.Web.UI.WebControls.THyperLink'); /** * THyperLinkColumn class @@ -165,9 +169,9 @@ class THyperLinkColumn extends TDataGridColumn public function initializeCell($cell,$columnIndex,$itemType) { parent::initializeCell($cell,$columnIndex,$itemType); - if($itemType==='Item' || $itemType==='AlternatingItem' || $itemType==='SelectedItem' || $itemType==='EditItem') + if($itemType===TDataGrid::IT_ITEM || $itemType===TDataGrid::IT_ALTERNATINGITEM || $itemType===TDataGrid::IT_SELECTEDITEM || $itemType===TDataGrid::IT_EDITITEM) { - $link=Prado::createComponent('System.Web.UI.WebControls.THyperLink'); + $link=new THyperLink; $link->setText($this->getText()); $link->setNavigateUrl($this->getNavigateUrl()); $link->setTarget($this->getTarget()); diff --git a/framework/Web/UI/WebControls/TRepeater.php b/framework/Web/UI/WebControls/TRepeater.php index 4fa2f9ae..3d57fbd5 100644 --- a/framework/Web/UI/WebControls/TRepeater.php +++ b/framework/Web/UI/WebControls/TRepeater.php @@ -56,6 +56,16 @@ Prado::using('System.Web.UI.WebControls.TDataBoundControl'); */ class TRepeater extends TDataBoundControl implements INamingContainer { + /** + * Repeater item types + */ + const IT_HEADER='Header'; + const IT_FOOTER='Footer'; + const IT_EMPTY='Empty'; + const IT_ITEM='Item'; + const IT_SEPARATOR='Separator'; + const IT_ALTERNATINGITEM='AlternatingItem'; + /** * @var ITemplate template for repeater items */ @@ -251,7 +261,7 @@ class TRepeater extends TDataBoundControl implements INamingContainer /** * Creates a repeater item instance based on the item type and index. * @param integer zero-based item index - * @param string item type, may be 'Header', 'Footer', 'Empty', 'Item', 'Separator', 'AlternatingItem', 'SelectedItem', 'EditItem'. + * @param string item type, may be 'Header', 'Footer', 'Empty', 'Item', 'Separator', 'AlternatingItem'. * @return TRepeaterItem created repeater item */ protected function createItem($itemIndex,$itemType) @@ -263,7 +273,7 @@ class TRepeater extends TDataBoundControl implements INamingContainer * Creates a repeater item and does databinding if needed. * This method invokes {@link createItem} to create a new repeater item. * @param integer zero-based item index. - * @param string item type, may be 'Header', 'Footer', 'Empty', 'Item', 'Separator', 'AlternatingItem', 'SelectedItem', 'EditItem'. + * @param string item type, may be 'Header', 'Footer', 'Empty', 'Item', 'Separator', 'AlternatingItem'. * @param boolean whether to do databinding for the item * @param mixed data to be associated with the item * @return TRepeaterItem the created item @@ -301,16 +311,12 @@ class TRepeater extends TDataBoundControl implements INamingContainer $template=null; switch($item->getItemType()) { - case 'Header': $template=$this->_headerTemplate; break; - case 'Footer': $template=$this->_footerTemplate; break; - case 'Empty': $template=$this->_emptyTemplate; break; - case 'Item': $template=$this->_itemTemplate; break; - case 'Separator': $template=$this->_separatorTemplate; break; - case 'AlternatingItem': $template=$this->_alternatingItemTemplate===null ? $this->_itemTemplate : $this->_alternatingItemTemplate; break; - case 'SelectedItem': - case 'EditItem': - default: - break; + case self::IT_HEADER: $template=$this->_headerTemplate; break; + case self::IT_FOOTER: $template=$this->_footerTemplate; break; + case self::IT_EMPTY : $template=$this->_emptyTemplate; break; + case self::IT_ITEM : $template=$this->_itemTemplate; break; + case self::IT_SEPARATOR : $template=$this->_separatorTemplate; break; + case self::IT_ALTERNATINGITEM : $template=$this->_alternatingItemTemplate===null ? $this->_itemTemplate : $this->_alternatingItemTemplate; break; } if($template!==null) $template->instantiateIn($item); @@ -374,19 +380,19 @@ class TRepeater extends TDataBoundControl implements INamingContainer $items=$this->getItems(); $hasSeparator=$this->_separatorTemplate!==null; if($this->_headerTemplate!==null) - $this->_header=$this->createItemInternal(-1,'Header',false,null); + $this->_header=$this->createItemInternal(-1,self::IT_HEADER,false,null); for($i=0;$i<$itemCount;++$i) { if($hasSeparator && $i>0) - $this->createItemInternal($i-1,'Separator',false,null); - $itemType=$i%2==0?'Item':'AlternatingItem'; + $this->createItemInternal($i-1,self::IT_SEPARATOR,false,null); + $itemType=$i%2==0?self::IT_ITEM:self::IT_ALTERNATINGITEM; $items->add($this->createItemInternal($i,$itemType,false,null)); } if($this->_footerTemplate!==null) - $this->_footer=$this->createItemInternal(-1,'Footer',false,null); + $this->_footer=$this->createItemInternal(-1,self::IT_FOOTER,false,null); } else if($this->_emptyTemplate!==null) - $this->createItemInternal(-1,'Empty',false,null); + $this->createItemInternal(-1,self::IT_EMPTY,false,null); $this->clearChildState(); } @@ -405,17 +411,17 @@ class TRepeater extends TDataBoundControl implements INamingContainer foreach($data as $dataItem) { if($itemIndex===0 && $this->_headerTemplate!==null) - $this->_header=$this->createItemInternal(-1,'Header',true,null); + $this->_header=$this->createItemInternal(-1,self::IT_HEADER,true,null); if($hasSeparator && $itemIndex>0) - $this->createItemInternal($itemIndex-1,'Separator',true,null); - $itemType=$itemIndex%2==0?'Item':'AlternatingItem'; + $this->createItemInternal($itemIndex-1,self::IT_SEPARATOR,true,null); + $itemType=$itemIndex%2==0?self::IT_ITEM:self::IT_ALTERNATINGITEM; $items->add($this->createItemInternal($itemIndex,$itemType,true,$dataItem)); $itemIndex++; } if($itemIndex>0 && $this->_footerTemplate!==null) - $this->_footer=$this->createItemInternal(-1,'Footer',true,null); + $this->_footer=$this->createItemInternal(-1,self::IT_FOOTER,true,null); if($itemIndex===0 && $this->_emptyTemplate!==null) - $this->createItemInternal(-1,'Empty',true,null); + $this->createItemInternal(-1,self::IT_EMPTY,true,null); $this->setViewState('ItemCount',$itemIndex,0); } @@ -622,7 +628,7 @@ class TRepeaterItem extends TControl implements INamingContainer public function __construct($itemIndex,$itemType) { $this->_itemIndex=$itemIndex; - $this->_itemType=TPropertyValue::ensureEnum($itemType,'Header','Footer','Empty','Item','AlternatingItem','SelectedItem','EditItem','Separator','Pager'); + $this->_itemType=$itemType; } /** diff --git a/framework/Web/UI/WebControls/TTemplateColumn.php b/framework/Web/UI/WebControls/TTemplateColumn.php index 08c4e2c6..f83e3290 100644 --- a/framework/Web/UI/WebControls/TTemplateColumn.php +++ b/framework/Web/UI/WebControls/TTemplateColumn.php @@ -138,18 +138,18 @@ class TTemplateColumn extends TDataGridColumn $template=null; switch($itemType) { - case 'Header': + case TDataGrid::IT_HEADER: $template=$this->_headerTemplate; break; - case 'Footer': + case TDataGrid::IT_FOOTER: $template=$this->_footerTemplate; break; - case 'Item': - case 'AlternatingItem': - case 'SelectedItem': + case TDataGrid::IT_ITEM: + case TDataGrid::IT_ALTERNATINGITEM: + case TDataGrid::IT_SELECTEDITEM: $template=$this->_itemTemplate; break; - case 'EditItem': + case TDataGrid::IT_EDITITEM: $template=$this->_editItemTemplate===null?$this->_itemTemplate:$this->_editItemTemplate; break; } @@ -159,7 +159,7 @@ class TTemplateColumn extends TDataGridColumn $cell->getControls()->clear(); $template->instantiateIn($cell); } - else if($itemType==='Item' || $itemType==='AlternatingItem' || $itemType==='SelectedItem' || $itemType==='EditItem') + else if($itemType===TDataGrid::IT_ITEM || $itemType===TDataGrid::IT_ALTERNATINGITEM || $itemType===TDataGrid::IT_SELECTEDITEM || $itemType===TDataGrid::IT_EDITITEM) $cell->setText(' '); } } diff --git a/framework/Web/UI/WebControls/TWizard.php b/framework/Web/UI/WebControls/TWizard.php index 75a571a5..29d97a45 100644 --- a/framework/Web/UI/WebControls/TWizard.php +++ b/framework/Web/UI/WebControls/TWizard.php @@ -2,18 +2,10 @@ Prado::using('System.Web.UI.WebControls.TMultiView'); Prado::using('System.Web.UI.WebControls.TPanel'); - -/** - -containment relationship - -wizard
- sidebar
- header
- step
-
- navigation -*/ +Prado::using('System.Web.UI.WebControls.TButton'); +Prado::using('System.Web.UI.WebControls.TLinkButton'); +Prado::using('System.Web.UI.WebControls.TImageButton'); +Prado::using('System.Web.UI.WebControls.TDataList'); /** * Class TWizard. @@ -64,10 +56,14 @@ class TWizard extends TWebControl implements INamingContainer private $_wizardSteps=null; private $_header; + private $_stepContent; + private $_sideBar; private $_startNavigation; private $_stepNavigation; private $_finishNavigation; private $_activeStepIndexSet=false; + private $_sideBarDataList; + /** * @return string tag name for the wizard */ @@ -82,7 +78,7 @@ class TWizard extends TWebControl implements INamingContainer $this->getWizardSteps()->add($object); } - // SideBarDataList, History + // SideBarDataLis /** * @return TWizardStep the currently active wizard step @@ -111,7 +107,11 @@ class TWizard extends TWebControl implements INamingContainer { $multiView->setActiveViewIndex($value); $this->_activeStepIndexSet=true; - // update sidebar list + if($this->_sideBarDataList!==null && $this->getSideBarTemplate()!==null) + { + $this->_sideBarDataList->setSelectedIndex($this->getActiveStepIndex()); + $this->_sideBarDataList->dataBind(); + } } } @@ -289,7 +289,7 @@ class TWizard extends TWebControl implements INamingContainer { if(($style=$this->getViewState('NavigationButtonStyle',null))===null) { - $style=new TWizardNavigationButtonStyle; + $style=new TStyle; $this->setViewState('NavigationButtonStyle',$style,null); } return $style; @@ -560,24 +560,47 @@ class TWizard extends TWebControl implements INamingContainer protected function applyControlProperties() { $this->applyHeaderProperties(); + $this->applySideBarProperties(); + $this->applyStepContentProperties(); $this->applyNavigationProperties(); } protected function applyHeaderProperties() { - $headerTemplate=$this->getHeaderTemplate(); - if($headerTemplate===null && $this->getHeaderText()==='') - $this->_header->setVisible(false); - else + if(($style=$this->getViewState('HeaderStyle',null))!==null) + $this->_header->getStyle()->mergeWith($style); + if($this->getHeaderTemplate()===null) { - if(($style=$this->getViewState('HeaderStyle',null))!==null) - $this->_header->getStyle()->mergeWith($style); - if($headerTemplate===null) + $this->_header->getControls()->clear(); + $this->_header->getControls()->add($this->getHeaderText()); + } + } + + protected function applySideBarProperties() + { + if($this->_sideBarDataList!==null && $this->getDisplaySideBar()) + { + $this->_sideBarDataList->setDataSource($this->getWizardSteps()); + $this->_sideBarDataList->setSelectedItemIndex($this->getActiveStepIndex()); + $this->_sideBarDataList->dataBind(); + if($this->getSideBarTemplate()!==null) { - $this->_header->getControls()->clear(); - $this->_header->getControls()->add($this->getHeaderText()); + $style=$this->getSideBarButtonStyle(); + foreach($this->_sideBarDataList->getItems() as $item) + { + if(($button=$item->findControl('SideBarButton'))!==null) + $button->getStyle()->mergeWith($style); + } } } + if(($style=$this->getViewState('SideBarStyle',null))!==null) + $this->_sideBar->getStyle()->mergeWith($style); + } + + protected function applyStepContentProperties() + { + if(($style=$this->getViewState('StepStyle',null))!==null) + $this->_stepContent->getStyle()->mergeWith($style); } protected function applyNavigationProperties() @@ -700,77 +723,180 @@ class TWizard extends TWebControl implements INamingContainer return $type; } - protected function createChildControls() + protected function reset() { - // reset wizard in case this was invoked previously $this->getControls()->clear(); $this->_header=null; + $this->_stepContent=null; + $this->_sideBar=null; + $this->_sideBarDataList=null; $this->_startNavigation=null; $this->_stepNavigation=null; $this->_finishNavigation=null; - // side bar - if($this->getDisplaySideBar()) - { - // render side bar here - } + } + + protected function createChildControls() + { + $this->reset(); + $this->createSideBar(); + $this->createHeader(); + $this->createStepContents(); + $this->createNavigation(); +// $this->clearChildState(); + } - // header + protected function createHeader() + { $this->_header=new TPanel; if(($template=$this->getHeaderTemplate())!==null) $template->instantiateIn($this->_header); else $this->_header->getControls()->add($this->getHeaderText()); $this->getControls()->add($this->_header); + } - // steps - $content=new TPanel; - $content->setID('WizardStep'); - $content->getControls()->add($this->getMultiView()); - $this->getMultiView()->setActiveViewIndex(0); - $this->getControls()->add($content); + protected function createSideBar() + { + if($this->getDisplaySideBar()) + { + if(($template=$this->getSideBarTemplate())!==null) + { + $this->_sideBar=new TPanel; + $template->instantiateIn($this->_sideBar); + } + else + $this->_sideBar=$this->createDefaultSideBar(); - $this->createStartNavigation(); - $this->createStepNavigation(); - $this->createFinishNavigation(); + $this->getControls()->add($this->_sideBar); - $this->clearChildState(); + if(($this->_sideBarDataList=$this->_sideBar->findControl('SideBarList'))!==null) + { + $this->_sideBarDataList->attachEventHandler('OnItemCommand',array($this,'dataListItemCommand')); + $this->_sideBarDataList->attachEventHandler('OnItemDataBound',array($this,'dataListItemDataBound')); + $this->_sideBarDataList->setDataSource($this->getWizardSteps()); + $this->_sideBarDataList->setSelectedItemIndex($this->getActiveStepIndex()); + $this->_sideBarDataList->dataBind(); + } + } + else + { + $this->_sideBar=new TPanel; + $this->getControls()->add($this->_sideBar); + } + } + + protected function createDefaultSideBar() + { + $sideBar=new TPanel; + $dataList=new TDataList; + $dataList->setID('SideBarList'); + $dataList->getSelectedItemStyle()->getFont()->setBold(true); + $dataList->setItemTemplate(new TWizardSideBarListItemTemplate); + $sideBar->getControls()->add($dataList); + return $sideBar; + } + + public function dataListItemCommand($sender,$param) + { + $item=$param->getItem(); + if($param->getCommandName()===self::CMD_MOVETO) + { + $stepIndex=$this->getActiveStepIndex(); + $newStepIndex=TPropertyValue::ensureInteger($param->getCommandParameter()); + $navParam=new TWizardNavigationEventParameter($stepIndex); + $navParam->setNextStepIndex($newStepIndex); + if($sender!==null && ($page=$this->getPage())!==null && !$page->getIsValid()) + $navParam->setCancelNavigation(true); + $this->_activeStepIndexSet=false; + $this->onSideBarButtonClick($navParam); + if(!$navParam->getCancelNavigation()) + { + if(!$this->_activeStepIndexSet && $this->allowNavigationToStep($newStepIndex)) + $this->setActiveStepIndex($newStepIndex); + } + else + $this->setActiveStepIndex($stepIndex); + } + } + + public function dataListItemDataBound($sender,$param) + { + $item=$param->getItem(); + $itemType=$item->getItemType(); + if($itemType==='Item' || $itemType==='AlternatingItem' || $itemType==='SelectedItem' || $itemType==='EditItem') + { + if(($button=$item->findControl('SideBarButton'))!==null) + { + $step=$item->getDataItem(); + if(($this->getStepType($step)==='Complete')) + $button->setEnabled(false); + if(($title=$step->getTitle())!=='') + $button->setText($title); + else + $button->setText($step->getID(false)); + $index=$this->getWizardSteps()->indexOf($step); + $button->setCommandName(self::CMD_MOVETO); + $button->setCommandParameter("$index"); + //if($button->getCausesValidation()) + // $button->attachEventHandler('OnCommand',array($this,'onCommand')); + } + } + } + + protected function createStepContents() + { + $this->_stepContent=new TPanel; + $this->_stepContent->getControls()->add($this->getMultiView()); + $this->getMultiView()->setActiveViewIndex(0); + $this->getControls()->add($this->_stepContent); + } + + protected function createNavigation() + { + $controls=$this->getControls(); + $this->_startNavigation=$this->createStartNavigation(); + $controls->add($this->_startNavigation); + $this->_stepNavigation=$this->createStepNavigation(); + $controls->add($this->_stepNavigation); + $this->_finishNavigation=$this->createFinishNavigation(); + $controls->add($this->_finishNavigation); } protected function createStartNavigation() { if(($template=$this->getStartNavigationTemplate())!==null) { - $this->_startNavigation=new TPanel; - $template->instantiateIn($this->_startNavigation); + $navigation=new TPanel; + $template->instantiateIn($navigation); } else - $this->_startNavigation=$this->createDefaultStartNavigation(); - $this->getControls()->add($this->_startNavigation); + $navigation=$this->createDefaultStartNavigation(); + return $navigation; } protected function createStepNavigation() { if(($template=$this->getStepNavigationTemplate())!==null) { - $this->_stepNavigation=new TPanel; - $template->instantiateIn($this->_stepNavigation); + $navigation=new TPanel; + $template->instantiateIn($navigation); } else - $this->_stepNavigation=$this->createDefaultStepNavigation(); - $this->getControls()->add($this->_stepNavigation); + $navigation=$this->createDefaultStepNavigation(); + return $navigation; } protected function createFinishNavigation() { if(($template=$this->getFinishNavigationTemplate())!==null) { - $this->_finishNavigation=new TPanel; - $template->instantiateIn($this->_finishNavigation); + $navigation=new TPanel; + $template->instantiateIn($navigation); } else - $this->_finishNavigation=$this->createDefaultFinishNavigation(); - $this->getControls()->add($this->_finishNavigation); + $navigation=$this->createDefaultFinishNavigation(); + return $navigation; } protected function createDefaultStartNavigation() @@ -820,13 +946,13 @@ class TWizard extends TWebControl implements INamingContainer switch($buttonStyle->getButtonType()) { case 'Button': - $button=Prado::createComponent('System.Web.UI.WebControls.TButton'); + $button=new TButton; break; case 'Link' : - $button=Prado::createComponent('System.Web.UI.WebControls.TLinkButton'); + $button=new TLinkButton; break; case 'Image' : - $button=Prado::createComponent('System.Web.UI.WebControls.TImageButton'); + $button=new TImageButton; $button->setImageUrl($style->getImageUrl()); break; default: @@ -1301,4 +1427,14 @@ class TWizardNavigationEventParameter extends TEventParameter } } +class TWizardSideBarListItemTemplate extends TComponent implements ITemplate +{ + public function instantiateIn($parent) + { + $button=new TLinkButton; + $button->setID('SideBarButton'); + $parent->getControls()->add($button); + } +} + ?> \ No newline at end of file diff --git a/framework/core.php b/framework/core.php index cd66e08c..77841fb2 100644 --- a/framework/core.php +++ b/framework/core.php @@ -402,7 +402,7 @@ class PradoBase */ public static function getVersion() { - return '3.0b'; + return '3.0RC1'; } /** -- cgit v1.2.3