From 12c16fb3c7314b51d74dcaffdca4d311c6fad8c0 Mon Sep 17 00:00:00 2001 From: wei <> Date: Sun, 7 May 2006 09:47:15 +0000 Subject: Adding TAutoComplete --- framework/Web/UI/ActiveControls/TAutoComplete.php | 186 ++++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 framework/Web/UI/ActiveControls/TAutoComplete.php (limited to 'framework/Web/UI/ActiveControls/TAutoComplete.php') diff --git a/framework/Web/UI/ActiveControls/TAutoComplete.php b/framework/Web/UI/ActiveControls/TAutoComplete.php new file mode 100644 index 00000000..2ebba495 --- /dev/null +++ b/framework/Web/UI/ActiveControls/TAutoComplete.php @@ -0,0 +1,186 @@ +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->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); + } +} + +?> \ No newline at end of file -- cgit v1.2.3