From 0a40bca6deb8ee25fe9380c071d49b8234da76f2 Mon Sep 17 00:00:00 2001 From: xue <> Date: Sun, 15 Jan 2006 00:37:31 +0000 Subject: Fixed style merging problem. --- framework/Web/UI/WebControls/TFont.php | 22 ++-- framework/Web/UI/WebControls/TStyle.php | 217 ++++++++++++++++++++++---------- 2 files changed, 160 insertions(+), 79 deletions(-) diff --git a/framework/Web/UI/WebControls/TFont.php b/framework/Web/UI/WebControls/TFont.php index 37a08546..61b43b27 100644 --- a/framework/Web/UI/WebControls/TFont.php +++ b/framework/Web/UI/WebControls/TFont.php @@ -209,26 +209,27 @@ class TFont extends TComponent /** * Merges the font with a new one. - * The fields in the new font will overwrite the current ones. + * If a style field is not set in the current style but set in the new style + * it will take the value from the new style. * @param TFont the new font */ public function mergeWith($font) { if($font===null || $font->_flags===0) return; - if($font->_flags & self::IS_SET_BOLD) + if(($font->_flags & self::IS_SET_BOLD) && !($this->_flags & self::IS_SET_BOLD)) $this->setBold($font->getBold()); - if($font->_flags & self::IS_SET_ITALIC) + if(($font->_flags & self::IS_SET_ITALIC) && !($font->_flags & self::IS_SET_ITALIC)) $this->setItalic($font->getItalic()); - if($font->_flags & self::IS_SET_OVERLINE) + if(($font->_flags & self::IS_SET_OVERLINE) && !($font->_flags & self::IS_SET_OVERLINE)) $this->setOverline($font->getOverline()); - if($font->_flags & self::IS_SET_STRIKEOUT) + if(($font->_flags & self::IS_SET_STRIKEOUT) && !($font->_flags & self::IS_SET_STRIKEOUT)) $this->setStrikeout($font->getStrikeout()); - if($font->_flags & self::IS_SET_UNDERLINE) + if(($font->_flags & self::IS_SET_UNDERLINE) && !($font->_flags & self::IS_SET_UNDERLINE)) $this->setUnderline($font->getUnderline()); - if($font->_flags & self::IS_SET_SIZE) + if(($font->_flags & self::IS_SET_SIZE) && !($this->_flags & self::IS_SET_SIZE)) $this->setSize($font->getSize()); - if($font->_flags & self::IS_SET_NAME) + if(($font->_flags & self::IS_SET_NAME) && !($this->_flags & self::IS_SET_NAME)) $this->setName($font->getName()); } @@ -239,8 +240,9 @@ class TFont extends TComponent */ public function copyFrom($font) { - $this->reset(); - $this->mergeWith($font); + $this->_flags=$font->_flags; + $this->_name=$font->_name; + $this->_size=$font->_size; } /** diff --git a/framework/Web/UI/WebControls/TStyle.php b/framework/Web/UI/WebControls/TStyle.php index 112efbca..1996ca47 100644 --- a/framework/Web/UI/WebControls/TStyle.php +++ b/framework/Web/UI/WebControls/TStyle.php @@ -38,11 +38,11 @@ class TStyle extends TComponent /** * @var string CSS class name */ - private $_class=''; + private $_class=null; /** * @var string CSS style string (those not represented by specific fields of TStyle) */ - private $_customStyle=''; + private $_customStyle=null; /** * @return string the background color of the control @@ -57,7 +57,7 @@ class TStyle extends TComponent */ public function setBackColor($value) { - if($value==='') + if(trim($value)==='') unset($this->_fields['background-color']); else $this->_fields['background-color']=$value; @@ -76,7 +76,7 @@ class TStyle extends TComponent */ public function setBorderColor($value) { - if($value==='') + if(trim($value)==='') unset($this->_fields['border-color']); else $this->_fields['border-color']=$value; @@ -96,7 +96,7 @@ class TStyle extends TComponent */ public function setBorderStyle($value) { - if($value==='') + if(trim($value)==='') unset($this->_fields['border-style']); else $this->_fields['border-style']=$value; @@ -115,7 +115,7 @@ class TStyle extends TComponent */ public function setBorderWidth($value) { - if($value==='') + if(trim($value)==='') unset($this->_fields['border-width']); else $this->_fields['border-width']=$value; @@ -126,7 +126,7 @@ class TStyle extends TComponent */ public function getCssClass() { - return $this->_class; + return $this->_class===null?'':$this->_class; } /** @@ -134,7 +134,7 @@ class TStyle extends TComponent */ public function setCssClass($value) { - $this->_class=$value; + $this->_class=trim($value)===''?null:$value; } /** @@ -160,7 +160,7 @@ class TStyle extends TComponent */ public function setForeColor($value) { - if($value==='') + if(trim($value)==='') unset($this->_fields['color']); else $this->_fields['color']=$value; @@ -179,7 +179,7 @@ class TStyle extends TComponent */ public function setHeight($value) { - if($value==='') + if(trim($value)==='') unset($this->_fields['height']); else $this->_fields['height']=$value; @@ -190,7 +190,7 @@ class TStyle extends TComponent */ public function getCustomStyle() { - return $this->_customStyle; + return $this->_customStyle===null?'':$this->_customStyle; } /** @@ -200,7 +200,7 @@ class TStyle extends TComponent */ public function setCustomStyle($value) { - $this->_customStyle=$value; + $this->_customStyle=trim($value)===''?null:$value; } /** @@ -252,10 +252,7 @@ class TStyle extends TComponent */ public function setWidth($value) { - if($value==='') - unset($this->_fields['width']); - else - $this->_fields['width']=$value; + $this->_fields['width']=$value; } /** @@ -265,8 +262,8 @@ class TStyle extends TComponent { $this->_fields=array(); $this->_font=null; - $this->_class=''; - $this->_customStyle=''; + $this->_class=null; + $this->_customStyle=null; } /** @@ -276,13 +273,33 @@ class TStyle extends TComponent */ public function copyFrom($style) { - $this->_fields=$style->_fields; - $this->_class=$style->_class; - $this->_customStyle=$style->_customStyle; - if($style->_font!==null) - $this->getFont()->copyFrom($style->_font); - else - $this->_font=null; + if($style!==null) + { + $this->reset(); + $this->_fields=$style->_fields; + $this->_class=$style->_class; + $this->_customStyle=$style->_customStyle; + if($style->_font!==null) + $this->getFont()->copyFrom($style->_font); + } + } + + /** + * Merges with a style. + * If a style field is not set in the current style but set in the new style + * it will take the value from the new style. + * @param TStyle the new style + */ + public function mergeWith($style) + { + if($style!==null) + { + $this->_fields=array_merge($style->_fields,$this->_fields); + if($this->_class===null) + $this->_class=$style->_class; + if($this->_font===null && $style->_font!==null) + $this->getFont()->mergeWith($style->_font); + } } /** @@ -323,23 +340,23 @@ class TTableStyle extends TStyle /** * @var string the URL of the background image for the table */ - private $_backImageUrl=''; + private $_backImageUrl=null; /** * @var string horizontal alignment of the contents within the table */ - private $_horizontalAlign='NotSet'; + private $_horizontalAlign=null; /** * @var integer cellpadding of the table */ - private $_cellPadding=-1; + private $_cellPadding=null; /** * @var integer cellspacing of the table */ - private $_cellSpacing=-1; + private $_cellSpacing=null; /** * @var string grid line setting of the table */ - private $_gridLines='None'; + private $_gridLines=null; /** * Sets the style attributes to default values. @@ -348,11 +365,11 @@ class TTableStyle extends TStyle */ public function reset() { - $this->_backImageUrl=''; - $this->_horizontalAlign='NotSet'; - $this->_cellPadding=-1; - $this->_cellSpacing=-1; - $this->_gridLines='None'; + $this->_backImageUrl=null; + $this->_horizontalAlign=null; + $this->_cellPadding=null; + $this->_cellSpacing=null; + $this->_gridLines=null; } /** @@ -364,13 +381,43 @@ class TTableStyle extends TStyle public function copyFrom($style) { parent::copyFrom($style); - $this->_backImageUrl=$style->_backImageUrl; - $this->_horizontalAlign=$style->_horizontalAlign; - $this->_cellPadding=$style->_cellPadding; - $this->_cellSpacing=$style->_cellSpacing; - $this->_gridLines=$style->_gridLines; + if($style instanceof TTableStyle) + { + $this->_backImageUrl=$style->_backImageUrl; + $this->_horizontalAlign=$style->_horizontalAlign; + $this->_cellPadding=$style->_cellPadding; + $this->_cellSpacing=$style->_cellSpacing; + $this->_gridLines=$style->_gridLines; + } + } + + /** + * Merges with a style. + * If a style field is not set in the current style but set in the new style + * it will take the value from the new style. + * This method overrides the parent implementation by + * merging with additional TTableStyle specific attributes. + * @param TStyle the new style + */ + public function mergeWith($style) + { + parent::mergeWith($style); + if($style instanceof TTableStyle) + { + if($style->_backImageUrl!==null && $this->_backImageUrl===null) + $this->_backImageUrl=$style->_backImageUrl; + if($style->_horizontalAlign!==null && $this->_horizontalAlign===null) + $this->_horizontalAlign=$style->_horizontalAlign; + if($style->_cellPadding!==null && $this->_cellPadding===null) + $this->_cellPadding=$style->_cellPadding; + if($style->_cellSpacing!==null && $this->_cellSpacing===null) + $this->_cellSpacing=$style->_cellSpacing; + if($style->_gridLines!==null && $this->_gridLines===null) + $this->_gridLines=$style->_gridLines; + } } + /** * Adds attributes related to CSS styles to renderer. * This method overrides the parent implementation. @@ -378,23 +425,23 @@ class TTableStyle extends TStyle */ public function addAttributesToRender($writer) { - if(($url=trim($this->_backImageUrl))!=='') + if(($url=trim($this->getBackImageUrl()))!=='') $writer->addStyleAttribute('background-image','url('.$url.')'); - if($this->_horizontalAlign!=='NotSet') - $writer->addStyleAttribute('text-align',strtolower($this->_horizontalAlign)); + if(($horizontalAlign=$this->getHorizontalAlign())!=='NotSet') + $writer->addStyleAttribute('text-align',strtolower($horizontalAlign)); - if($this->_cellPadding>=0) - $writer->addAttribute('cellpadding',"$this->_cellPadding"); + if(($cellPadding=$this->getCellPadding())>=0) + $writer->addAttribute('cellpadding',"$cellPadding"); - if($this->_cellSpacing>=0) + if(($cellSpacing=$this->getCellSpacing())>=0) { - $writer->addAttribute('cellspacing',"$this->_cellSpacing"); - if($this->_cellSpacing===0) + $writer->addAttribute('cellspacing',"$cellSpacing"); + if($this->getCellSpacing()===0) $writer->addStyleAttribute('border-collapse','collapse'); } - switch($this->_gridLines) + switch($this->getGridLines()) { case 'Horizontal' : $writer->addAttribute('rules','rows'); break; case 'Vertical' : $writer->addAttribute('rules','cols'); break; @@ -409,7 +456,7 @@ class TTableStyle extends TStyle */ public function getBackImageUrl() { - return $this->_backImageUrl; + return $this->_backImageUrl===null?'':$this->_backImageUrl; } /** @@ -418,7 +465,7 @@ class TTableStyle extends TStyle */ public function setBackImageUrl($value) { - $this->_backImageUrl=$value; + $this->_backImageUrl=trim($value)===''?null:$value; } /** @@ -426,7 +473,7 @@ class TTableStyle extends TStyle */ public function getHorizontalAlign() { - return $this->_horizontalAlign; + return $this->_horizontalAlign===null?'NotSet':$this->_horizontalAlign; } /** @@ -437,6 +484,8 @@ class TTableStyle extends TStyle public function setHorizontalAlign($value) { $this->_horizontalAlign=TPropertyValue::ensureEnum($value,array('NotSet','Left','Right','Center','Justify')); + if($this->_horizontalAlign==='NotSet') + $this->_horizontalAlign=null; } /** @@ -444,7 +493,7 @@ class TTableStyle extends TStyle */ public function getCellPadding() { - return $this->_cellPadding; + return $this->_cellPadding===null?-1:$this->_cellPadding; } /** @@ -455,6 +504,8 @@ class TTableStyle extends TStyle { if(($this->_cellPadding=TPropertyValue::ensureInteger($value))<-1) throw new TInvalidDataValueException('tablestyle_cellpadding_invalid'); + if($this->_cellPadding===-1) + $this->_cellPadding=null; } /** @@ -462,7 +513,7 @@ class TTableStyle extends TStyle */ public function getCellSpacing() { - return $this->_cellSpacing; + return $this->_cellSpacing===null?-1:$this->_cellSpacing; } /** @@ -473,6 +524,8 @@ class TTableStyle extends TStyle { if(($this->_cellSpacing=TPropertyValue::ensureInteger($value))<-1) throw new TInvalidDataValueException('tablestyle_cellspacing_invalid'); + if($this->_cellSpacing===-1) + $this->_cellSpacing=null; } /** @@ -480,7 +533,7 @@ class TTableStyle extends TStyle */ public function getGridLines() { - return $this->_gridLines; + return $this->_gridLines===null?'None':$this->_gridLines; } /** @@ -508,15 +561,15 @@ class TTableItemStyle extends TStyle /** * @var string horizontal alignment of the contents within the table item */ - private $_horizontalAlign='NotSet'; + private $_horizontalAlign=null; /** * @var string vertical alignment of the contents within the table item */ - private $_verticalAlign='NotSet'; + private $_verticalAlign=null; /** * @var boolean whether the content wraps within the table item */ - private $_wrap=true; + private $_wrap=null; /** * Sets the style attributes to default values. @@ -525,9 +578,9 @@ class TTableItemStyle extends TStyle */ public function reset() { - $this->_verticalAlign='NotSet'; - $this->_horizontalAlign='NotSet'; - $this->_wrap=true; + $this->_verticalAlign=null; + $this->_horizontalAlign=null; + $this->_wrap=null; } /** @@ -544,6 +597,28 @@ class TTableItemStyle extends TStyle $this->_wrap=$style->_wrap; } + /** + * Merges with a style. + * If a style field is not set in the current style but set in the new style + * it will take the value from the new style. + * This method overrides the parent implementation by + * merging with additional TTableItemStyle specific attributes. + * @param TStyle the new style + */ + public function mergeWith($style) + { + parent::mergeWith($style); + if($style instanceof TTableItemStyle) + { + if($style->_verticalAlign!==null && $this->_verticalAlign===null) + $this->_verticalAlign=$style->_verticalAlign; + if($style->_horizontalAlign!==null && $this->_horizontalAlign===null) + $this->_horizontalAlign=$style->_horizontalAlign; + if($style->_wrap!==null && $this->_wrap===null) + $this->_wrap=$style->_wrap; + } + } + /** * Adds attributes related to CSS styles to renderer. * This method overrides the parent implementation. @@ -551,14 +626,14 @@ class TTableItemStyle extends TStyle */ public function addAttributesToRender($writer) { - if(!$this->_wrap) + if(!$this->getWrap()) $writer->addStyleAttribute('nowrap','nowrap'); - if($this->_horizontalAlign!=='NotSet') - $writer->addAttribute('align',strtolower($this->_horizontalAlign)); + if(($horizontalAlign=$this->getHorizontalAlign())!=='NotSet') + $writer->addAttribute('align',strtolower($horizontalAlign)); - if($this->_verticalAlign!=='NotSet') - $writer->addAttribute('valign',strtolower($this->_verticalAlign)); + if(($verticalAlign=$this->getVerticalAlign())!=='NotSet') + $writer->addAttribute('valign',strtolower($verticalAlign)); parent::addAttributesToRender($writer); } @@ -568,7 +643,7 @@ class TTableItemStyle extends TStyle */ public function getHorizontalAlign() { - return $this->_horizontalAlign; + return $this->_horizontalAlign===null?'NotSet':$this->_horizontalAlign; } /** @@ -579,6 +654,8 @@ class TTableItemStyle extends TStyle public function setHorizontalAlign($value) { $this->_horizontalAlign=TPropertyValue::ensureEnum($value,array('NotSet','Left','Right','Center','Justify')); + if($this->_horizontalAlign==='NotSet') + $this->_horizontalAlign=null; } /** @@ -586,7 +663,7 @@ class TTableItemStyle extends TStyle */ public function getVerticalAlign() { - return $this->_verticalAlign; + return $this->_verticalAlign===null?'NotSet':$this->_verticalAlign; } /** @@ -597,6 +674,8 @@ class TTableItemStyle extends TStyle public function setVerticalAlign($value) { $this->_verticalAlign=TPropertyValue::ensureEnum($value,array('NotSet','Top','Bottom','Middel')); + if($this->_verticalAlign==='NotSet') + $this->_verticalAlign=null; } /** @@ -604,7 +683,7 @@ class TTableItemStyle extends TStyle */ public function getWrap() { - return $this->_wrap; + return $this->_wrap===null?true:$this->_wrap; } /** -- cgit v1.2.3