From 55c4ac1bfe565f1ca7f537fdd8b7a201be28e581 Mon Sep 17 00:00:00 2001 From: xue <> Date: Thu, 10 Nov 2005 12:47:19 +0000 Subject: Initial import of prado framework --- framework/Web/UI/WebControls/TCheckBox.php | 399 +++++++++++++++++++++++++++++ 1 file changed, 399 insertions(+) create mode 100644 framework/Web/UI/WebControls/TCheckBox.php (limited to 'framework/Web/UI/WebControls/TCheckBox.php') diff --git a/framework/Web/UI/WebControls/TCheckBox.php b/framework/Web/UI/WebControls/TCheckBox.php new file mode 100644 index 00000000..02167544 --- /dev/null +++ b/framework/Web/UI/WebControls/TCheckBox.php @@ -0,0 +1,399 @@ + + * @link http://www.xisc.com/ + * @copyright Copyright © 2004-2005, Qiang Xue + * @license http://www.opensource.org/licenses/bsd-license.php BSD License + * @version $Revision: $ $Date: $ + * @package System.Web.UI.WebControls + */ + +/** + * TCheckBox class + * + * TCheckBox creates a check box on the page. + * You can specify the caption to display beside the check box by setting + * the Text property. The caption can appear either on the right + * or left of the check box, which is determined by the TextAlign + * property. + * + * To determine whether the TCheckBox component is checked, + * test the Checked property. The OnCheckedChanged event + * is raised when the Checked state of the TCheckBox component changes + * between posts to the server. You can provide an event handler for + * the OnCheckedChanged event to to programmatically + * control the actions performed when the state of the TCheckBox component changes + * between posts to the server. + * + * Note, Text will be HTML encoded before it is displayed in the TCheckBox component. + * If you don't want it to be so, set EncodeText to false. + * + * Namespace: System.Web.UI.WebControls + * + * Properties + * - Text, string, kept in viewstate + *
Gets or sets the text caption displayed in the TCheckBox component. + * - EncodeText, boolean, default=true, kept in viewstate + *
Gets or sets the value indicating whether Text should be HTML-encoded when rendering. + * - TextAlign, Left|Right, default=Right, kept in viewstate + *
Gets or sets the alignment of the text label associated with the TCheckBox component. + * - Checked, boolean, default=false, kept in viewstate + *
Gets or sets a value indicating whether the TCheckBox component is checked. + * - AutoPostBack, boolean, default=false, kept in viewstate + *
Gets or sets a value indicating whether the TCheckBox automatically posts back to the server when clicked. + * + * Events + * - OnCheckedChanged Occurs when the value of the Checked property changes between posts to the server. + * + * Examples + * - On a page template file, insert the following line to create a TCheckBox component, + * + * + * + * The checkbox will show "Agree" text on its right side. If the user makes any change + * to the Checked state, the checkAgree() method of the page class will be invoked automatically. + * + * TFont encapsulates the CSS style fields related with font settings. + * + * @author Qiang Xue + * @version $Revision: $ $Date: $ + * @package System.Web.UI.WebControls + * @since 3.0 + */ +class TCheckBox extends TWebControl implements IPostBackDataHandler, IValidatable +{ + public static $TEXT_ALIGN=array('Left','Right'); + + protected function getTagName() + { + return 'input'; + } + + protected function addAttributesToRender($writer) + { + } + + /** + * Loads user input data. + * This method is primarly used by framework developers. + * @param string the key that can be used to retrieve data from the input data collection + * @param array the input data collection + * @return boolean whether the data of the control has been changed + */ + public function loadPostData($key,$values) + { + $checked=$this->getChecked(); + if(isset($values[$key])!=$checked) + { + $this->setChecked(!$checked); + return true; + } + else + return false; + } + + + /** + * Raises postdata changed event. + * This method calls {@link onCheckedChanged} method. + * This method is primarly used by framework developers. + */ + public function raisePostDataChangedEvent() + { + $page=$this->getPage(); + if($this->getAutoPostBack() && !$page->getIsPostBackEventControlRegistered()) + { + $page->setAutoPostBackControl($this); + if($this->getCausesValidation()) + $page->validate($this->getValidationGroup()); + } + $this->onCheckedChanged(new TEventParameter); + } + + /** + * This method is invoked when the value of the Checked property changes between posts to the server. + * The method raises 'CheckedChanged' event to fire up the event delegates. + * If you override this method, be sure to call the parent implementation + * so that the event delegates can be invoked. + * @param TEventParameter event parameter to be passed to the event handlers + */ + protected function onCheckedChanged($param) + { + $this->raiseEvent('CheckedChanged',$this,$param); + } + + /** + * Returns the value of the property that needs validation. + * @return mixed the property value to be validated + */ + public function getValidationPropertyValue() + { + return $this->getChecked(); + } + + /** + * @return string the text caption of the checkbox + */ + public function getText() + { + return $this->getViewState('Text',''); + } + + /** + * Sets the text caption of the checkbox. + * @param string the text caption to be set + */ + public function setText($value) + { + $this->setViewState('Text',$value,''); + } + + /** + * @return string the alignment of the text caption + */ + public function getTextAlign() + { + return $this->getViewState('TextAlign','Right'); + } + + /** + * Sets the text alignment of the checkbox + * @param string either 'Left' or 'Right' + */ + public function setTextAlign($value) + { + $this->setViewState('TextAlign',TPropertyValue::ensureEnum($value,self::$TEXT_ALIGN),'Right'); + } + + /** + * @return boolean whether the checkbox is checked + */ + public function getChecked() + { + return $this->getViewState('Checked',false); + } + + /** + * Sets a value indicating whether the checkbox is to be checked or not. + * @param boolean whether the checkbox is to be checked or not. + */ + public function setChecked($value) + { + $this->setViewState('Checked',$value,false); + } + + /** + * @return boolean whether clicking on the checkbox will post the page. + */ + public function getAutoPostBack() + { + return $this->getViewState('AutoPostBack',false); + } + + /** + * Sets a value indicating whether clicking on the checkbox will post the page. + * @param boolean whether clicking on the checkbox will post the page. + */ + public function setAutoPostBack($value) + { + $this->setViewState('AutoPostBack',$value,false); + } + + /** + * @return boolean whether postback event trigger by this checkbox will cause input validation, default is true. + */ + public function getCausesValidation() + { + return $this->getViewState('CausesValidation',true); + } + + /** + * Sets the value indicating whether postback event trigger by this checkbox will cause input validation. + * @param boolean whether postback event trigger by this checkbox will cause input validation. + */ + public function setCausesValidation($value) + { + $this->setViewState('CausesValidation',TPropertyValue::ensureBoolean($value),true); + } + + /** + * @return string the group of validators which the checkbox causes validation upon postback + */ + public function getValidationGroup() + { + return $this->getViewState('ValidationGroup',''); + } + + /** + * @param string the group of validators which the checkbox causes validation upon postback + */ + public function setValidationGroup($value) + { + $this->setViewState('ValidationGroup',$value,''); + } + + /** + * Returns the attributes to be rendered. + * This method overrides the parent's implementation. + * @return ArrayObject attributes to be rendered + */ + protected function getAttributesToRender() + { + $attributes=parent::getAttributesToRender(); + if(isset($attributes['id'])) unset($attributes['id']); + if(isset($attributes['accesskey'])) unset($attributes['accesskey']); + if(isset($attributes['tabindex'])) unset($attributes['tabindex']); + return $attributes; + } + + /** + * Renders the body content of the control. + * This method overrides the parent's implementation. + * @return string the rendering result. + */ + protected function renderBody() + { + $name=$this->getUniqueID(); + $disabled=!$this->isEnabled(); + $id=$this->getClientID(); + + $input="isChecked()) + $input.=" checked=\"checked\""; + if($disabled) + $input.=" disabled=\"disabled\""; + if($this->isAutoPostBack()) + { + $page=$this->getPage(); + $script=$page->getPostBackClientEvent($this,''); + $input.=" onclick=\"javascript:$script\""; + } + $accessKey=$this->getAccessKey(); + if(strlen($accessKey)) + $input.=" accesskey=\"$accessKey\""; + $tabIndex=$this->getTabIndex(); + if(!empty($tabIndex)) + $input.=" tabindex=\"$tabIndex\""; + $input.='/>'; + $text=$this->isEncodeText()?pradoEncodeData($this->getText()):$this->getText(); + if(strlen($text)) + { + $label=""; + if($this->getTextAlign()=='Left') + $input="{$label}{$input}"; + else + $input.=$label; + } + return $input; + } + + protected function renderControl($writer) + { + $this->addAttributesToRender($writer); + $page=$this->getPage(); + $page->ensureRenderInForm($this); + $needSpan=true; + if($this->getStyleCreated()) + { + $this->getStyle()->addAttributesToRender($writer); + $needSpan=true; + } + if(!$this->getEnabled(true)) + { + $writer->addAttribute('disabled','disabled'); + $needSpan=true; + } + if(($tooltip=$this->getToolTip())!=='') + { + $writer->addAttribute('title',$tooltip); + $needSpan=true; + } + $onclick=null; + if($this->getHasAttributes()) + { + $attributes=$this->getAttributes(); + $value=$attributes->remove('value'); + $onclick=$attributes->remove('onclick'); + if($attributes->getCount()) + { + foreach($attributes as $name=>$value) + $writer->addAttribute($name,$value); + } + $needSpan=true; + if($value!==null) + $attributes->add('value',$value); + } + if($needSpan) + $writer->renderBeginTag('span'); + $clientID=$this->getClientID(); + if(($text=$this->getText())!=='') + { + if($this->getTextAlign()==='Left') + { + $this->renderLabel($writer,$text,$clientID); + $this->renderInputTag($writer,$clientID,$onclick); + } + else + { + $this->renderInputTag($writer,$clientID,$onclick); + $this->renderLabel($writer,$text,$clientID); + } + } + else + $this->renderInputTag($writer,$clientID,$onclick); + if($needSpan) + $writer->renderEndTag(); + } + + private function renderLabel($writer,$text,$clientID) + { + $writer->addAttribute('for',$clientID); + // todo: custom label attributes rendering + $writer->renderBeginTag('label'); + $writer->write($text); + $writer->renderEndTag(); + } + + protected function renderInputTag($writer,$clientID,$onclick) + { + if($clientID!=='') + $writer->addAttribute('id',$clientID); + $writer->addAttribute('type','checkbox'); + if(($uniqueID=$this->getUniqueID())!=='') + $writer->addAttribute('name',$uniqueID); + //todo: render value attribute here + if($this->getChecked()) + $writer->addAttribute('checked','checked'); + if(!$this->getEnabled(true)) + $writer->addAttribute('disabled','disabled'); + $page=$this->getPage(); + if($this->getAutoPostBack() && $page->getClientSupportsJavaScript()) + { + $option=new TPostBackOptions($this); + if($this->getCausesValidation() && $page->getValidators($this->getValidationGroup())->getCount()) + { + $option->PerformValidation=true; + $option->ValidationGroup=$this->getValidationGroup; + } + if($page->getForm()) + $option->AutoPostBack=true; + if(!empty($onclick)) + $onclick=rtrim($onclick,';').';'; + $onclick.=$page->getClientScript()->getPostBackEventReference($option); + } + if(!empty($onclick)) + $writer->addAttribute('onclick',$onclick); + if(($accesskey=$this->getAccessKey())!=='') + $writer->addAttribute('accesskey',$accesskey); + if(($tabindex=$this->getTabIndex())>0) + $writer->addAttribute('tabindex',$tabindex); + //todo: render input attributes + $writer->renderBeginTag('input'); + $writer->renderEndTag(); + } + // todo: onprerender??? +} + +?> \ No newline at end of file -- cgit v1.2.3