* @link http://www.landwehr-software.de/ * @copyright Copyright © 2009 LANDWEHR Computer und Software GmbH * @license http://www.pradosoft.com/license/ * @package Prado\Web\UI\ActiveControls */ namespace Prado\Web\UI\ActiveControls; /** * Includes the following used classes */ Prado::using('System.Web.UI.WebControls.TMultiView'); /** * TActiveMultiView class. * * TActiveMultiView is the active counterpart to the original {@link TMultiView} control. * It re-renders on Callback when {@link setActiveView ActiveView} or * {@link setActiveViewIndex ActiveViewIndex} is called. * * Please refer to the original documentation of the regular counterpart for usage. * * @author LANDWEHR Computer und Software GmbH * @package Prado\Web\UI\ActiveControls * @since 3.1.6 */ class TActiveMultiView extends TMultiView implements IActiveControl { /** * Creates a new callback control, sets the adapter to * TActiveControlAdapter. */ public function __construct() { parent::__construct(); $this->setAdapter(new TActiveControlAdapter($this)); } /** * @return TBaseActiveControl standard active control options. */ public function getActiveControl() { return $this->getAdapter()->getBaseActiveControl(); } /** * Returns the id of the surrounding container (span). * @return string container id */ protected function getContainerID() { return $this->ClientID.'_Container'; } /** * Renders the TActiveMultiView. * If the MutliView did not pass the prerender phase yet, it will register itself for rendering later. * Else it will call the {@link renderMultiView()} method which will do the rendering of the MultiView. * @param THtmlWriter writer for the rendering purpose */ public function render($writer) { if($this->getHasPreRendered()) { $this->renderMultiView($writer); if($this->getActiveControl()->canUpdateClientSide()) $this->getPage()->getCallbackClient()->replaceContent($this->getContainerID(),$writer); } else $this->getPage()->getAdapter()->registerControlToRender($this,$writer); } /** * Renders the TActiveMultiView by writing a span tag with the container id obtained from {@link getContainerID()} * which will be called by the replacement method of the client script to update it's content. * @param $writer THtmlWriter writer for the rendering purpose */ protected function renderMultiView($writer) { $writer->addAttribute('id', $this->getContainerID()); $writer->renderBeginTag('span'); parent::render($writer); $writer->renderEndTag(); } /** * @param integer the zero-based index of the current view in the view collection. -1 if no active view. * @throws TInvalidDataValueException if the view index is invalid */ public function setActiveViewIndex($value) { $old=parent::getActiveViewIndex(); parent::setActiveViewIndex($value); if($this->getActiveControl()->canUpdateClientSide() && $old!=$value) $this->getPage()->getAdapter()->registerControlToRender($this,$this->getResponse()->createHtmlWriter()); } /** * @param TView the view to be activated * @throws TInvalidOperationException if the view is not in the view collection */ public function setActiveView($value) { $old=parent::getActiveView(); parent::setActiveView($value); if($this->getActiveControl()->canUpdateClientSide() && $old!=$value) $this->getPage()->getAdapter()->registerControlToRender($this,$this->getResponse()->createHtmlWriter()); } }