From 75a0a250cc6735d13b3b782daf0127298b37c2b9 Mon Sep 17 00:00:00 2001 From: wei <> Date: Thu, 4 May 2006 02:02:43 +0000 Subject: Adding TCallback component. --- framework/Web/UI/ActiveControls/TCallback.php | 165 ++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 framework/Web/UI/ActiveControls/TCallback.php (limited to 'framework/Web/UI/ActiveControls/TCallback.php') diff --git a/framework/Web/UI/ActiveControls/TCallback.php b/framework/Web/UI/ActiveControls/TCallback.php new file mode 100644 index 00000000..d3b1f54d --- /dev/null +++ b/framework/Web/UI/ActiveControls/TCallback.php @@ -0,0 +1,165 @@ +setAdapter(new TActiveControlAdapter($this)); + } + + /** + * @return string tag name of the panel + */ + protected function getTagName() + { + return 'div'; + } + + /** + * @return boolean whether callback event trigger by this button will cause + * input validation, default is true + */ + public function getCausesValidation() + { + return $this->getViewState('CausesValidation',true); + } + + /** + * @param boolean whether callback event trigger by this button will cause + * input validation + */ + public function setCausesValidation($value) + { + $this->setViewState('CausesValidation',TPropertyValue::ensureBoolean($value),true); + } + + /** + * @return string the group of validators which the button causes validation + * upon callback + */ + public function getValidationGroup() + { + return $this->getViewState('ValidationGroup',''); + } + + /** + * @param string the group of validators which the button causes validation + * upon callback + */ + public function setValidationGroup($value) + { + $this->setViewState('ValidationGroup',$value,''); + } + + /** + * Callback client-side options can be set by setting the properties of + * the ClientSide property. E.g. + * See {@link TCallbackClientSideOptions} for details on the properties of + * ClientSide. + * @return TCallbackClientSideOptions client-side callback options. + */ + public function getClientSide() + { + if(is_null($this->_clientSide)) + $this->_clientSide = $this->createClientSideOptions(); + return $this->_clientSide; + } + + /** + * @return TCallbackClientSideOptions callback client-side options. + */ + protected function createClientSideOptions() + { + return new TCallbackClientSideOptions; + } + + /** + * @return boolean whether to perform validation if the callback is + * requested. + */ + protected function canCauseValidation() + { + if($this->getCausesValidation()) + { + $group=$this->getValidationGroup(); + return $this->getPage()->getValidators($group)->getCount()>0; + } + else + return false; + } + + /** + * Raises the callback event. This method is required by {@link + * ICallbackEventHandler} interface. If {@link getCausesValidation + * CausesValidation} is true, it will invoke the page's {@link TPage:: + * validate validate} method first. It will raise {@link onCallback + * OnCallback} event. This method is mainly used by framework and control + * developers. + * @param TCallbackEventParameter the event parameter + */ + public function raiseCallbackEvent($param) + { + if($this->getCausesValidation()) + $this->getPage()->validate($this->getValidationGroup()); + $this->onCallback($param); + } + + /** + * This method is invoked when a callback is requested. The method raises + * 'OnCallback' event to fire up the event handlers. If you override this + * method, be sure to call the parent implementation so that the event + * handler can be invoked. + * @param TCallbackEventParameter event parameter to be passed to the event handlers + */ + public function onCallback($param) + { + $this->raiseEvent('OnCallback', $this, $param); + } + + /** + * @return array list of callback javascript options. + */ + protected function getCallbackOptions() + { + $validate = $this->getCausesValidation(); + $options['CausesValidation']= $validate ? '' : false; + $options['ValidationGroup']=$this->getValidationGroup(); + return $options; + } + + /** + * Returns the javascript statement to invoke a callback request for this + * control. Additional options for callback can be set via subproperties of + * {@link getClientSide ClientSide} property. E.g. ClientSide.OnSuccess="..." + * @return string javascript statement to invoke a callback. + */ + public function getCallbackReference() + { + $client = $this->getPage()->getClientScript(); + return $client->getCallbackReference($this, $this->getCallbackOptions()); + } + + public function render($writer) + { + parent::render($writer); + if($this->getPage()->getIsCallback()) + $this->getPage()->getCallbackClient()->replace($this, $writer); + } +} + +?> -- cgit v1.2.3