getSuggestions()->setDataSource($data);
}
public function getResultPanel()
{
if(is_null($this->_resultPanel))
$this->_resultPanel = $this->createResultPanel();
return $this->_resultPanel;
}
protected function createResultPanel()
{
$panel = Prado::createComponent('System.Web.UI.WebControls.TPanel');
$this->getControls()->add($panel);
$panel->setID('result');
return $panel;
}
/**
* @return TRepeater suggestion list repeater
*/
public function getSuggestions()
{
if(is_null($this->_repeater))
$this->_repeater = $this->createRepeater();
return $this->_repeater;
}
/**
*
*/
protected function createRepeater()
{
$repeater = Prado::createComponent('System.Web.UI.WebControls.TRepeater');
$repeater->setHeaderTemplate(new TAutoCompleteTemplate('
'));
$repeater->setFooterTemplate(new TAutoCompleteTemplate('
'));
$repeater->setItemTemplate(new TTemplate('<%# $this->DataItem %>',null));
$this->getControls()->add($repeater);
return $repeater;
}
/**
* @return TCallbackClientSideOptions callback client-side options.
*/
protected function createClientSideOptions()
{
$options = new TAutoCompleteClientSideOptions;
$options->setEnablePageStateUpdate(false);
return $options;
}
public function renderEndTag($writer)
{
$this->getPage()->getClientScript()->registerPradoScript('effects');
parent::renderEndTag($writer);
$this->renderResultPanel($writer);
}
public function renderResultPanel($writer)
{
$this->getResultPanel()->render($writer);
}
public function render($writer)
{
if($this->canUpdateClientSide())
{
$this->getSuggestions()->render($writer);
$boundary = $writer->getWriter()->getBoundary();
$writer->getWriter()->getResponse()->setData($boundary);
}
else
parent::render($writer);
}
/**
* @return array list of callback options.
*/
protected function getCallbackOptions()
{
$options = $this->getClientSide()->getOptions()->toArray();
if($this->getAutoPostBack())
$options = array_merge($options,$this->getPostBackOptions());
$options['ResultPanel'] = $this->getResultPanel()->getClientID();
$options['ID'] = $this->getClientID();
$options['EventTarget'] = $this->getUniqueID();
return $options;
}
/**
* Adds attribute name-value pairs to renderer.
* This method overrides the parent implementation with additional textbox specific attributes.
* @param THtmlWriter the writer used for the rendering purpose
*/
protected function addAttributesToRender($writer)
{
parent::addAttributesToRender($writer);
$this->renderClientControlScript($writer);
}
}
/**
* Client-side options for TAutoComplete.
*
* @author Wei Zhuo
* @version $Revision: $ $Date: $
* @package System.Web.UI.ActiveControls
* @since 3.0
*/
class TAutoCompleteClientSideOptions extends TCallbackClientSideOptions
{
public function getSeparator()
{
return $this->getOption('tokens');
}
public function setSeparator($value)
{
$this->setOption('tokens', $chars = preg_split('//', $value, -1, PREG_SPLIT_NO_EMPTY));
}
public function getFrequency()
{
return $this->getOption('frequency');
}
public function setFrequency($value)
{
$this->setOption('frequency', TPropertyValue::ensureFloat($value));
}
public function getMinChars()
{
return $this->getOption('minChars');
}
public function setMinChars($value)
{
$this->setOption('minChars', TPropertyValue::ensureInteger($value));
}
}
/**
* TWizardSideBarTemplate class.
* TWizardSideBarTemplate is the default template for wizard sidebar.
* @author Qiang Xue
* @version $Revision: $ $Date: $
* @package System.Web.UI.WebControls
* @since 3.0
*/
class TAutoCompleteTemplate extends TComponent implements ITemplate
{
private $_template;
public function __construct($template)
{
$this->_template = $template;
}
/**
* Instantiates the template.
* It creates a {@link TDataList} control.
* @param TControl parent to hold the content within the template
*/
public function instantiateIn($parent)
{
$parent->getControls()->add($this->_template);
}
}
?>