* @version $Revision: $ $Date: $ * @package System.Web.UI.WebControls * @since 3.0 */ class TWizard extends TWebControl implements INamingContainer { /** * @var mixed navigation template for the start step. */ private $_startNavigationTemplate=null; /** * @var mixed navigation template for internal steps. */ private $_stepNavigationTemplate=null; /** * @var mixed navigation template for the finish step. */ private $_finishNavigationTemplate=null; /** * @var mixed template for wizard header. */ private $_headerTemplate=null; /** * @var mixed template for the side bar. */ private $_sideBarTemplate=null; /** * @return string tag name for the wizard */ protected function getTagName() { return 'table'; } // SideBarDataList, MultiView, History /** * Creates a style object for the wizard. * This method creates a {@link TTableStyle} to be used by the wizard. * @return TTableStyle control style to be used */ protected function createStyle() { return new TTableStyle; } /** * @return integer the cellspacing for the table used by wizard. Defaults to -1, meaning not set. */ public function getCellSpacing() { if($this->getHasStyle()) return $this->getStyle()->getCellSpacing(); else return -1; } /** * @param integer the cellspacing for the table used by wizard. Defaults to -1, meaning not set. */ public function setCellSpacing($value) { $this->getStyle()->setCellSpacing($value); } /** * @return integer the cellpadding for the table used by wizard. Defaults to -1, meaning not set. */ public function getCellPadding() { if($this->getHasStyle()) return $this->getStyle()->getCellPadding(); else return -1; } /** * @param integer the cellpadding for the table used by wizard. Defaults to -1, meaning not set. */ public function setCellPadding($value) { $this->getStyle()->setCellPadding($value); } /** * @return TWizardStepBase the currently active wizard step */ public function getActiveStep() { } /** * @return integer the zero-based index of the active wizard step */ public function getActiveStepIndex() { } /** * @param integer the zero-based index of the wizard step to be activated */ public function setActiveStepIndex($value) { } public function getWizardSteps() { } public function getTemplatedSteps() { } public function getNavigationTableCell() { } /** * @return boolean whether to display a cancel in each wizard step. Defaults to false. */ public function getDisplayCancelButton() { return $this->getViewState('DisplayCancelButton',false); } /** * @param boolean whether to display a cancel in each wizard step. */ public function setDisplayCancelButton($value) { $this->setViewState('DisplayCancelButton',TPropertyValue::ensureBoolean($value),false); } /** * @return boolean whether to display a side bar that contains links to wizard steps. Defaults to true. */ public function getDisplaySideBar() { return $this->getViewState('DisplaySideBar',true); } /** * @param boolean whether to display a side bar that contains links to wizard steps. */ public function setDisplaySideBar($value) { $this->setViewState('DisplaySideBar',TPropertyValue::ensureBoolean($value),true); } /** * @return ITemplate navigation template for the start step. Defaults to null. */ public function getStartNavigationTemplate() { return $this->_startNavigationTemplate; } /** * @param ITemplate navigation template for the start step. */ public function setStartNavigationTemplate($value) { $this->_startNavigationTemplate=$value; } /** * @return ITemplate navigation template for internal steps. Defaults to null. */ public function getStepNavigationTemplate() { return $this->_stepNavigationTemplate; } /** * @param ITemplate navigation template for internal steps. */ public function setStepNavigationTemplate($value) { $this->_stepNavigationTemplate=$value; } /** * @return ITemplate navigation template for the finish step. Defaults to null. */ public function getFinishNavigationTemplate() { return $this->_finishNavigationTemplate; } /** * @param ITemplate navigation template for the finish step. */ public function setFinishNavigationTemplate($value) { $this->_finishNavigationTemplate=$value; } /** * @return ITemplate template for wizard header. Defaults to null. */ public function getHeaderTemplate() { return $this->_headerTemplate; } /** * @param ITemplate template for wizard header. */ public function setHeaderTemplate($value) { $this->_headerTemplate=$value; } /** * @return ITemplate template for the side bar. Defaults to null. */ public function getSideBarTemplate() { return $this->_sideBarTemplate; } /** * @param ITemplate template for the side bar. */ public function setSideBarTemplate($value) { $this->_sideBarTemplate=$value; } /** * @return string header text. Defaults to ''. */ public function getHeaderText() { return $this->getViewState('HeaderText',''); } /** * @param string header text. */ public function setHeaderText($value) { $this->setViewState('HeaderText',TPropertyValue::ensureString($value),''); } /** * @return string the URL that the browser will be redirected to if the cancel button in the * wizard is clicked. Defaults to ''. */ public function getCancelDestinationUrl() { return $this->getViewState('CancelDestinationUrl',''); } /** * @param string the URL that the browser will be redirected to if the cancel button in the * wizard is clicked. */ public function setCancelDestinationUrl($value) { $this->setViewState('CancelDestinationUrl',TPropertyValue::ensureString($value),''); } /** * @return string the URL that the browser will be redirected to if the wizard finishes. * Defaults to ''. */ public function getFinishDestinationUrl() { return $this->getViewState('FinishDestinationUrl',''); } /** * @param string the URL that the browser will be redirected to if the wizard finishes. */ public function setFinishDestinationUrl($value) { $this->setViewState('FinishDestinationUrl',TPropertyValue::ensureString($value),''); } /** * @return TWizardNavigationButtonStyle the style for the next button in the start wizard step. */ public function getStartNextButtonStyle() { if(($style=$this->getViewState('StartNextButtonStyle',null))===null) { $style=new TWizardNavigationButtonStyle; $style->setText('Next'); $this->setViewState('StartNextButtonStyle',$style,null); } return $style; } /** * @return TWizardNavigationButtonStyle the style for the next button in each internal wizard step. */ public function getStepNextButtonStyle() { if(($style=$this->getViewState('StepNextButtonStyle',null))===null) { $style=new TWizardNavigationButtonStyle; $style->setText('Next >'); $this->setViewState('StepNextButtonStyle',$style,null); } return $style; } /** * @return TWizardNavigationButtonStyle the style for the previous button in the start wizard step. */ public function getStepPreviousButtonStyle() { if(($style=$this->getViewState('StepPreviousButtonStyle',null))===null) { $style=new TWizardNavigationButtonStyle; $style->setText('< Previous'); $this->setViewState('StepPreviousButtonStyle',$style,null); } return $style; } /** * @return TWizardNavigationButtonStyle the style for the complete button in the finish wizard step. */ public function getFinishCompleteButtonStyle() { if(($style=$this->getViewState('FinishCompleteButtonStyle',null))===null) { $style=new TWizardNavigationButtonStyle; $style->setText('Complete'); $this->setViewState('FinishCompleteButtonStyle',$style,null); } return $style; } /** * @return TWizardNavigationButtonStyle the style for the previous button in the start wizard step. */ public function getFinishPreviousButtonStyle() { if(($style=$this->getViewState('FinishPreviousButtonStyle',null))===null) { $style=new TWizardNavigationButtonStyle; $style->setText('Previous'); $this->setViewState('FinishPreviousButtonStyle',$style,null); } return $style; } /** * @return TTableItemStyle the style for the side bar. */ public function getSideBarStyle() { if(($style=$this->getViewState('SideBarStyle',null))===null) { $style=new TTableItemStyle; $this->setViewState('SideBarStyle',$style,null); } return $style; } /** * @return TTableItemStyle the style for the header. */ public function getHeaderStyle() { if(($style=$this->getViewState('HeaderStyle',null))===null) { $style=new TTableItemStyle; $this->setViewState('HeaderStyle',$style,null); } return $style; } /** * @return TTableItemStyle the style for each internal wizard step. */ public function getStepStyle() { if(($style=$this->getViewState('StepStyle',null))===null) { $style=new TTableItemStyle; $this->setViewState('StepStyle',$style,null); } return $style; } /** * @return TStyle the style for the cancel button */ public function getCancelButtonStyle() { if(($style=$this->getViewState('CancelButtonStyle',null))===null) { $style=new TStyle; $this->setViewState('CancelButtonStyle',$style,null); } return $style; } /** * Raises OnActiveStepChanged event. * This event is raised when the current visible step is changed in the * wizard. * @param TEventParameter event parameter */ public function onActiveStepChanged($param) { $this->raiseEvent('OnActiveStepChanged',$this,$param); } /** * Raises OnCancelButtonClick event. * This event is raised when a cancel navigation button is clicked in the * current active step. * @param TEventParameter event parameter */ public function onCancelButtonClick($param) { $this->raiseEvent('OnCancelButtonClick',$this,$param); } /** * Raises OnFinishButtonClick event. * This event is raised when a finish navigation button is clicked in the * current active step. * @param TEventParameter event parameter */ public function onFinishButtonClick($param) { $this->raiseEvent('OnFinishButtonClick',$this,$param); } /** * Raises OnNextButtonClick event. * This event is raised when a next navigation button is clicked in the * current active step. * @param TEventParameter event parameter */ public function onNextButtonClick($param) { $this->raiseEvent('OnNextButtonClick',$this,$param); } /** * Raises OnPreviousButtonClick event. * This event is raised when a previous navigation button is clicked in the * current active step. * @param TEventParameter event parameter */ public function onPreviousButtonClick($param) { $this->raiseEvent('OnPreviousButtonClick',$this,$param); } /** * Raises OnSideBarButtonClick event. * This event is raised when a link button in the side bar is clicked. * @param TEventParameter event parameter */ public function onSideBarButtonClick($param) { $this->raiseEvent('OnSideBarButtonClick',$this,$param); } public function addedWizardStep($step) { if(($owner=$step->getOwner())!==null) $owner->getWizardSteps()->remove($step); $step->setOwner($this); $this->getMultiView()->getViews()->add($step); if($step instanceof TTemplateWizardStep) { // $this->_templatedSteps[]=$step; //$this->getTemplateWizardSteps()->add($step); // register it ??? } $this->onWizardStepsChanged(); } public function removedWizardStep($step) { $this->getMultiView()->getViews()->remove($step); $step->setOwner(null); if($step instanceof TTemplateWizardStep) { // $this->_templatedSteps.... //$this->getTemplateWizardSteps()->remove($step); } $this->onWizardStepsChanged(); } } /** * TWizardNavigationButtonStyle class. * TWizardNavigationButtonStyle defines the style applied to a wizard navigation button. * The button type can be specified via {@link setButtonType ButtonType}, which * can be 'Button', 'Image' or 'Link'. * If the button is an image button, {@link setImageUrl ImageUrl} will be * used to load the image for the button. * Otherwise, {@link setText Text} will be displayed as the button caption. * * @author Qiang Xue * @version $Revision: $ $Date: $ * @package System.Web.UI.WebControls * @since 3.0 */ class TWizardNavigationButtonStyle extends TStyle { private $_imageUrl=null; private $_text=null; private $_buttonType=null; /** * Sets the style attributes to default values. * This method overrides the parent implementation by * resetting additional TWizardButtonStyle specific attributes. */ public function reset() { parent::reset(); $this->_imageUrl=null; $this->_text=null; $this->_buttonType=null; } /** * Copies the fields in a new style to this style. * If a style field is set in the new style, the corresponding field * in this style will be overwritten. * @param TStyle the new style */ public function copyFrom($style) { parent::copyFrom($style); if($style instanceof TWizardButtonStyle) { if($this->_imageUrl===null && $style->_imageUrl!==null) $this->_imageUrl=$style->_imageUrl; if($this->_text===null && $style->_text!==null) $this->_text=$style->_text; if($this->_buttonType===null && $style->_buttonType!==null) $this->_buttonType=$style->_buttonType; } } /** * Merges the style with a new one. * If a style field is not set in this style, it will be overwritten by * the new one. * @param TStyle the new style */ public function mergeWith($style) { parent::mergeWith($style); if($style instanceof TWizardButtonStyle) { if($style->_imageUrl!==null) $this->_imageUrl=$style->_imageUrl; if($style->_text!==null) $this->_text=$style->_text; if($style->_buttonType!==null) $this->_buttonType=$style->_buttonType; } } public function getImageUrl() { return $this->_imageUrl===null?'':$this->_imageUrl; } public function setImageUrl($value) { $this->_imageUrl=$value; } public function getText() { return $this->_text===null?'':$this->_text; } public function setText($value) { $this->_text=$value; } public function getButtonType() { return $this->_buttonType===null?'Button':$this->_buttonType; } public function setButtonType($value) { $this->_buttonType=TPropertyValue::ensureEnum($value,'Button','Image','Link'); } } abstract class TWizardStepBase extends TView { private $_owner; public function loadState() { if($this->_owner && ($this->getTitle()!=='' || $this->getStepType()!=='')) $this->_owner->onWizardStepsChanged(); } public function getOwner() { return $this->_owner; } public function setOwner($owner) { $this->_owner=$owner; } public function getWizard() { return $this->_owner; } public function getTitle() { return $this->getViewState('Title',''); } public function setTitle($value) { $this->setViewState('Title',$value,''); if($this->_owner) $this->_owner->onWizardStepsChanged(); } public function getName() { if(($title=$this->getTitle())==='') return $this->getID(); else return $title; } public function getAllowReturn() { return $this->getViewState('AllowReturn',true); } public function setAllowReturn($value) { $this->setViewState('AllowReturn',TPropertyValue::ensureBoolean($value),true); } public function getStepType() { return $this->getViewState('StepType','Auto'); } public function setStepType($type) { $type=TPropertyValue::ensureEnum($type,'Auto','Complete','Finish','Start','Step'); if($type!==$this->getStepType()) { $this->setViewState('StepType',$type,'Auto'); if($this->_owner) $this->_owner->onWizardStepsChanged(); } } } class TWizardStep extends TWizardStepBase { } class TTemplateWizardStep extends TWizardStepBase { /** * @var ITemplate the template for displaying the content of a wizard step. */ private $_contentTemplate=null; /** * @var ITemplate the template for displaying the navigation UI of a wizard step. */ private $_navigationTemplate=null; /** * @return ITemplate the template for displaying the content of a wizard step. Defaults to null. */ public function getContentTemplate() { return $this->_contentTemplate; } /** * @param ITemplate the template for displaying the content of a wizard step. */ public function setContentTemplate($value) { $this->_contentTemplate=$value; } /** * @return ITemplate the template for displaying the navigation UI of a wizard step. Defaults to null. */ public function getNavigationTemplate() { return $this->_navigationTemplate; } /** * @param ITemplate the template for displaying the navigation UI of a wizard step. */ public function setNavigationTemplate($value) { $this->_navigationTemplate=$value; } } class TCompleteWizardStep extends TTemplateWizardStep { public function getStepType() { return 'Complete'; } public function setStepType($value) { throw new TInvalidOperationException('completewizardstep_steptype_readonly'); } } class TWizardStepCollection extends TList { /** * Constructor. * @param TWizard wizard that owns this collection */ public function __construct(TWizard $wizard) { $this->_wizard=$wizard; } /** * Inserts an item at the specified position. * This method overrides the parent implementation by checking if * the item being added is a {@link TWizardStepBase}. * @param integer the speicified position. * @param mixed new item */ public function insertAt($index,$item) { if($item instanceof TWizardStepBase) { parent::insertAt($index,$item); $this->_wizard->addedWizardStep($item); } else throw new TInvalidDataTypeException('wizardstepcollection_wizardstepbase_required'); } /** * Removes an item at the specified position. * @param integer the index of the item to be removed. * @return mixed the removed item. */ public function removeAt($index) { $step=parent::removeAt($index); $this->_wizard->removedWizardStep($step); return $step; } } ?>