* @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
*/
/**
* TWebControl class
*
* TWebControl is the base class for controls that share a common set
* of UI-related properties and methods. TWebControl derived controls
* are usually corresponding to HTML tags. They thus have tag name, attributes
* and body contents. You can override {@link getTagName} to specify the tag name,
* {@link addAttributesToRender} to specify the attributes to be rendered,
* and {@link renderContents} to customize the body content rendering.
* TWebControl encapsulates a set of properties related with CSS style fields,
* such as BackColor, BorderWidth, etc.
*
* @author Qiang Xue
* @version $Revision: $ $Date: $
* @package System.Web.UI.WebControls
* @since 3.0
*/
class TWebControl extends TControl
{
/**
* @return string the access key of the control
*/
public function getAccessKey()
{
return $this->getViewState('AccessKey','');
}
/**
* Sets the access key of the control.
* Only one-character string can be set, or an exception will be raised.
* Pass empty string if you want to disable access key.
* @param string the access key to be set
* @throws TInvalidDataValueException if the access key is specified with more than one character
*/
public function setAccessKey($value)
{
if(strlen($value)>1)
throw new TInvalidDataValueException('invalid_accesskey',get_class($this));
$this->setViewState('AccessKey',$value,'');
}
/**
* @return string the background color of the control
*/
public function getBackColor()
{
if($style=$this->getViewState('Style',null))
return $style->getBackColor();
else
return '';
}
/**
* @param string the background color of the control
*/
public function setBackColor($value)
{
$this->getStyle()->setBackColor($value);
}
/**
* @return string the border color of the control
*/
public function getBorderColor()
{
if($style=$this->getViewState('Style',null))
return $style->getBorderColor();
else
return '';
}
/**
* @param string the border color of the control
*/
public function setBorderColor($value)
{
$this->getStyle()->setBorderColor($value);
}
/**
* @return string the border style of the control
*/
public function getBorderStyle()
{
if($style=$this->getViewState('Style',null))
return $style->getBorderStyle();
else
return '';
}
/**
* @param string the border style of the control
*/
public function setBorderStyle($value)
{
$this->getStyle()->setBorderStyle($value);
}
/**
* @return string the border width of the control
*/
public function getBorderWidth()
{
if($style=$this->getViewState('Style',null))
return $style->getBorderWidth();
else
return '';
}
/**
* @param string the border width of the control
*/
public function setBorderWidth($value)
{
$this->getStyle()->setBorderWidth($value);
}
/**
* @return TFont the font of the control
*/
public function getFont()
{
return $this->getStyle()->getFont();
}
/**
* @return string the foreground color of the control
*/
public function getForeColor()
{
if($style=$this->getViewState('Style',null))
return $style->getForeColor();
else
return '';
}
/**
* @param string the foreground color of the control
*/
public function setForeColor($value)
{
$this->getStyle()->setForeColor($value);
}
/**
* @return string the height of the control
*/
public function getHeight()
{
if($style=$this->getViewState('Style',null))
return $style->getHeight();
else
return '';
}
/**
* @param string the css class of the control
*/
public function setCssClass($value)
{
$this->getStyle()->setCssClass($value);
}
/**
* @return string the css class of the control
*/
public function getCssClass()
{
if($style=$this->getViewState('Style',null))
return $style->getCssClass();
else
return '';
}
/**
* @param string the height of the control
*/
public function setHeight($value)
{
$this->getStyle()->setHeight($value);
}
public function getStyleCreated()
{
return $this->getViewState('Style',null)!==null;
}
/**
* @return TStyle the object representing the css style of the control
*/
public function getStyle()
{
if($style=$this->getViewState('Style',null))
return $style;
else
{
$style=new TStyle;
$this->setViewState('Style',$style,null);
return $style;
}
}
/**
* Sets the css style string of the control.
* The style string will be prefixed to the styles set via other control properties (e.g. Height, Width).
* @param string the css style string
* @throws TInvalidDataValueException if the parameter is not a string
*/
public function setStyle($value)
{
if(is_string($value))
$this->getStyle()->setStyle($value);
else
throw new TInvalidDataValueException('invalid_style_value',get_class($this));
}
/**
* @return integer the tab index of the control
*/
public function getTabIndex()
{
return $this->getViewState('TabIndex',0);
}
/**
* Sets the tab index of the control.
* Pass 0 if you want to disable tab index.
* @param integer the tab index to be set
*/
public function setTabIndex($value)
{
$this->setViewState('TabIndex',TPropertyValue::ensureInteger($value),0);
}
/**
* Returns the tag name used for this control.
* By default, the tag name is 'span'.
* You can override this method to provide customized tag names.
* @return string tag name of the control to be rendered
*/
protected function getTagName()
{
return 'span';
}
/**
* @return string the tooltip of the control
*/
public function getToolTip()
{
return $this->getViewState('ToolTip','');
}
/**
* Sets the tooltip of the control.
* Pass empty string if you want to disable tooltip.
* @param string the tooltip to be set
*/
public function setToolTip($value)
{
$this->setViewState('ToolTip',$value,'');
}
/**
* @return string the width of the control
*/
public function getWidth()
{
if($style=$this->getViewState('Style',null))
return $style->getWidth();
else
return '';
}
/**
* @param string the width of the control
*/
public function setWidth($value)
{
$this->getStyle()->setWidth($value);
}
/**
* Adds attribute name-value pairs to renderer.
* This method can be overriden to provide customized attributes to be rendered.
* @param THtmlTextWriter the writer used for the rendering purpose
*/
protected function addAttributesToRender($writer)
{
if($this->getID()!=='')
$writer->addAttribute('id',$this->getClientID());
if(($accessKey=$this->getAccessKey())!=='')
$writer->addAttribute('accesskey',$accessKey);
if(!$this->getEnabled())
$writer->addAttribute('disabled','disabled');
if(($tabIndex=$this->getTabIndex())>0)
$writer->addAttribute('tabindex',$tabIndex);
if(($toolTip=$this->getToolTip())!=='')
$writer->addAttribute('title',$toolTip);
if($style=$this->getViewState('Style',null))
$style->addAttributesToRender($writer);
if($attributes=$this->getViewState('Attributes',null))
{
foreach($attributes as $name=>$value)
$writer->addAttribute($name,$value);
}
}
/**
* Renders the control.
* This method overrides the parent implementation by replacing it with
* the following sequence:
* - {@link renderBeginTag}
* - {@link renderContents}
* - {@link renderEndTag}
* @param THtmlTextWriter the writer used for the rendering purpose
*/
protected function render($writer)
{
$this->renderBeginTag($writer);
$this->renderContents($writer);
$this->renderEndTag($writer);
}
/**
* Renders the openning tag for the control (including attributes)
* @param THtmlTextWriter the writer used for the rendering purpose
*/
protected function renderBeginTag($writer)
{
$this->addAttributesToRender($writer);
$writer->renderBeginTag($this->getTagName());
}
/**
* Renders the body content enclosed between the control tag.
* By default, child controls and text strings will be rendered.
* You can override this method to provide customized content rendering.
* @param THtmlTextWriter the writer used for the rendering purpose
*/
protected function renderContents($writer)
{
parent::renderChildren($writer);
}
/**
* Renders the closing tag for the control
* @param THtmlTextWriter the writer used for the rendering purpose
*/
protected function renderEndTag($writer)
{
$writer->renderEndTag();
}
}
?>