From adb9a7864e6fce08426af0b41bbc726388e296a7 Mon Sep 17 00:00:00 2001 From: xue <> Date: Sat, 21 Jan 2006 15:16:28 +0000 Subject: --- .gitattributes | 1 + framework/Collections/TAttributeCollection.php | 113 +++++++++++++++++++++++++ framework/TComponent.php | 6 +- framework/Web/UI/TControl.php | 11 ++- 4 files changed, 125 insertions(+), 6 deletions(-) create mode 100644 framework/Collections/TAttributeCollection.php diff --git a/.gitattributes b/.gitattributes index 13615635..159e10bd 100644 --- a/.gitattributes +++ b/.gitattributes @@ -154,6 +154,7 @@ framework/3rdParty/geshi/geshi/prado.php -text framework/3rdParty/geshi/geshi/xml.php -text framework/3rdParty/geshi/highlight.css -text framework/3rdParty/readme.html -text +framework/Collections/TAttributeCollection.php -text framework/Collections/TDummyDataSource.php -text framework/Collections/TList.php -text framework/Collections/TMap.php -text diff --git a/framework/Collections/TAttributeCollection.php b/framework/Collections/TAttributeCollection.php new file mode 100644 index 00000000..c8870919 --- /dev/null +++ b/framework/Collections/TAttributeCollection.php @@ -0,0 +1,113 @@ + + * @link http://www.pradosoft.com/ + * @copyright Copyright © 2005 PradoSoft + * @license http://www.pradosoft.com/license/ + * @version $Revision: $ $Date: $ + * @package System.Collections + */ + +/** + * Includes TMap class + */ +Prado::using('System.Collections.TMap'); + +/** + * TAttributeCollection class + * + * TAttributeCollection implements a collection for storing attribute names and values. + * + * Besides all functionalities provided by {@link TMap}, TAttributeCollection + * allows you to get and set attribute values like getting and setting + * properties. For example, the following usages are all valid for a + * TAttributeCollection object: + * + * $collection->Text='text'; + * echo $collection->Text; + * + * They are equivalent to the following: + * + * $collection->add('Text','text'); + * echo $collection->itemAt('Text'); + * + * + * Note, attribute names are case-insensitive. They are converted to lower-case + * in the collection storage. + * + * @author Qiang Xue + * @version $Revision: $ $Date: $ + * @package System.Collections + * @since 3.0 + */ +class TAttributeCollection extends TMap +{ + /** + * Returns a property value or an event handler list by property or event name. + * This method overrides the parent implementation by returning + * a key value if the key exists in the collection. + * @param string the property name or the event name + * @return mixed the property value or the event handler list + * @throws TInvalidOperationException if the property/event is not defined. + */ + public function __get($name) + { + $name=strtolower($name); + return $this->contains($name)?$this->itemAt($name):parent::__get($name); + } + + /** + * Sets value of a component property. + * This method overrides the parent implementation by adding a new key value + * to the collection. + * @param string the property name or event name + * @param mixed the property value or event handler + * @throws TInvalidOperationException If the property is not defined or read-only. + */ + public function __set($name,$value) + { + $this->add(strtolower($name),$value); + } + + /** + * Determines whether a property is defined. + * This method overrides parent implementation by returning true + * if the collection contains the named key. + * @param string the property name + * @return boolean whether the property is defined + */ + public function hasProperty($name) + { + $name=strtolower($name); + return $this->contains($name) || parent::hasProperty($name); + } + + /** + * Determines whether a property can be read. + * This method overrides parent implementation by returning true + * if the collection contains the named key. + * @param string the property name + * @return boolean whether the property can be read + */ + public function canGetProperty($name) + { + $name=strtolower($name); + return $this->contains($name) || parent::canGetProperty($name); + } + + /** + * Determines whether a property can be set. + * This method overrides parent implementation by always returning true + * because you can always add a new value to the collection. + * @param string the property name + * @return boolean true + */ + public function canSetProperty($name) + { + return true; + } +} + +?> \ No newline at end of file diff --git a/framework/TComponent.php b/framework/TComponent.php index 0befc27f..aa060750 100644 --- a/framework/TComponent.php +++ b/framework/TComponent.php @@ -169,7 +169,7 @@ class TComponent * @param string the property name * @return boolean whether the property is defined */ - final public function hasProperty($name) + public function hasProperty($name) { return method_exists($this,'get'.$name) || method_exists($this,'set'.$name); } @@ -181,7 +181,7 @@ class TComponent * @param string the property name * @return boolean whether the property can be read */ - final public function canGetProperty($name) + public function canGetProperty($name) { return method_exists($this,'get'.$name); } @@ -193,7 +193,7 @@ class TComponent * @param string the property name * @return boolean whether the property can be written */ - final public function canSetProperty($name) + public function canSetProperty($name) { return method_exists($this,'set'.$name); } diff --git a/framework/Web/UI/TControl.php b/framework/Web/UI/TControl.php index f9c07a8a..6448ffcd 100644 --- a/framework/Web/UI/TControl.php +++ b/framework/Web/UI/TControl.php @@ -10,6 +10,11 @@ * @package System.Web.UI */ +/** + * Includes TAttributeCollection class + */ +Prado::using('System.Collections.TAttributeCollection'); + /** * TControl class * @@ -488,7 +493,7 @@ class TControl extends TComponent return $attributes; else { - $attributes=new TMap; + $attributes=new TAttributeCollection; $this->setViewState('Attributes',$attributes,null); return $attributes; } @@ -1549,12 +1554,12 @@ interface IPostBackEventHandler * @param string the parameter associated with the postback event */ public function raisePostBackEvent($param); - + /** * Return an array of postback options. * The array of options are serialized to passed to corresponding javascript component code. * @return array options for javascript postback control - */ + */ public function getPostBackOptions(); } -- cgit v1.2.3