summaryrefslogtreecommitdiff
path: root/framework
diff options
context:
space:
mode:
authorxue <>2006-01-15 00:37:31 +0000
committerxue <>2006-01-15 00:37:31 +0000
commit0a40bca6deb8ee25fe9380c071d49b8234da76f2 (patch)
tree186298905b213a30a45a2edfefb04496d5160346 /framework
parent4f16184b10420304bd8c48a45001d849fa605557 (diff)
Fixed style merging problem.
Diffstat (limited to 'framework')
-rw-r--r--framework/Web/UI/WebControls/TFont.php22
-rw-r--r--framework/Web/UI/WebControls/TStyle.php217
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;
}
/**
@@ -545,20 +598,42 @@ class TTableItemStyle extends TStyle
}
/**
+ * 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.
* @param THtmlWriter the writer used for the rendering purpose
*/
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;
}
/**