diff options
Diffstat (limited to 'tdehtml/dom/css_value.h')
-rw-r--r-- | tdehtml/dom/css_value.h | 745 |
1 files changed, 745 insertions, 0 deletions
diff --git a/tdehtml/dom/css_value.h b/tdehtml/dom/css_value.h new file mode 100644 index 000000000..5d4a043c7 --- /dev/null +++ b/tdehtml/dom/css_value.h @@ -0,0 +1,745 @@ +/* + * This file is part of the DOM implementation for KDE. + * + * (C) 1999 Lars Knoll ([email protected]) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + * This file includes excerpts from the Document Object Model (DOM) + * Level 2 Specification (Style) + * http://www.w3.org/TR/DOM-Level-2-Style/ + * Copyright � 2000 W3C� (MIT, INRIA, Keio), All Rights Reserved. + * + */ +#ifndef _CSS_css_value_h_ +#define _CSS_css_value_h_ + +#include <dom/dom_string.h> + +#include <tqcolor.h> + +#include <kdemacros.h> + +namespace DOM { + +class CSSStyleDeclarationImpl; +class CSSRule; +class CSSValue; + +/** + * The \c CSSStyleDeclaration interface represents a + * single <a href="http://www.w3.org/TR/REC-CSS2/syndata.html#block"> + * CSS declaration block </a> . This interface may be used to + * determine the style properties currently set in a block or to set + * style properties explicitly within the block. + * + * While an implementation may not recognize all CSS properties + * within a CSS declaration block, it is expected to provide access to + * all specified properties through the \c CSSStyleDeclaration + * interface. Furthermore, implementations that support a + * specific level of CSS should correctly handle <a + * href="http://www.w3.org/TR/REC-CSS2/about.html#shorthand"> CSS + * shorthand </a> properties for that level. For a further discussion + * of shorthand properties, see the \c CSS2Properties + * interface. + * + */ +class KHTML_EXPORT CSSStyleDeclaration +{ +public: + CSSStyleDeclaration(); + CSSStyleDeclaration(const CSSStyleDeclaration &other); + CSSStyleDeclaration(CSSStyleDeclarationImpl *impl); +public: + + CSSStyleDeclaration & operator = (const CSSStyleDeclaration &other); + + ~CSSStyleDeclaration(); + + /** + * The parsable textual representation of the declaration block + * (including the surrounding curly braces). Setting this + * attribute will result in the parsing of the new value and + * resetting of the properties in the declaration block. + * + */ + DOM::DOMString cssText() const; + + /** + * see cssText + * @exception CSSException + * SYNTAX_ERR: Raised if the specified CSS string value has a + * syntax error and is unparsable. + * + * @exception DOMException + * NO_MODIFICATION_ALLOWED_ERR: Raised if this declaration is + * readonly. + * + */ + void setCssText( const DOM::DOMString & ); + + /** + * The number of properties that have been explicitly set in this + * declaration block. + * + */ + unsigned long length() const; + + /** + * The CSS rule that contains this declaration block. + * + */ + CSSRule parentRule() const; + + /** + * Used to retrieve the value of a CSS property if it has been + * explicitly set within this declaration block. + * + * @param propertyName The name of the CSS property. See the <a + * href="http://www.w3.org/TR/REC-CSS2/propidx.html"> CSS property + * index </a> . + * + * @return Returns the value of the property if it has been + * explicitly set for this declaration block. Returns the empty + * string if the property has not been set. + * + */ + DOM::DOMString getPropertyValue ( const DOM::DOMString &propertyName ) const; + DOM::DOMString getPropertyValue ( const DOM::DOMString &propertyName ); + + /** + * Used to retrieve the object representation of the value of a + * CSS property if it has been explicitly set within this + * declaration block. This method returns null if the property is + * a <a href="http://www.w3.org/TR/REC-CSS2/about.html#shorthand"> + * shorthand </a> property. Shorthand property values can only be + * accessed and modified as strings, using the + * \c getPropertyValue and \c setProperty + * methods. + * + * @param propertyName The name of the CSS property. See the <a + * href="http://www.w3.org/TR/REC-CSS2/propidx.html"> CSS property + * index </a> . + * + * @return Returns the value of the property if it has been + * explicitly set for this declaration block. Returns the + * \c null if the property has not been set. + * + */ + CSSValue getPropertyCSSValue ( const DOM::DOMString &propertyName ) const; + CSSValue getPropertyCSSValue ( const DOM::DOMString &propertyName ); + + /** + * Used to remove a CSS property if it has been explicitly set + * within this declaration block. + * + * @param propertyName The name of the CSS property. See the <a + * href="http://www.w3.org/TR/REC-CSS2/propidx.html"> CSS property + * index </a> . + * + * @return Returns the value of the property if it has been + * explicitly set for this declaration block. Returns the empty + * string if the property has not been set or the property name + * does not correspond to a valid CSS2 property. + * + * @exception DOMException + * NO_MODIFICATION_ALLOWED_ERR: Raised if this declaration is + * readonly. + * + */ + DOM::DOMString removeProperty ( const DOM::DOMString &propertyName ); + + /** + * Used to retrieve the priority of a CSS property (e.g. the + * \c "important" qualifier) if the property has been + * explicitly set in this declaration block. + * + * @param propertyName The name of the CSS property. See the <a + * href="http://www.w3.org/TR/REC-CSS2/propidx.html"> CSS property + * index </a> . + * + * @return A string representing the priority (e.g. + * \c "important" ) if one exists. The empty string if none + * exists. + * + */ + DOM::DOMString getPropertyPriority ( const DOM::DOMString &propertyName ) const; + DOM::DOMString getPropertyPriority ( const DOM::DOMString &propertyName ); + + /** + * Used to set a property value and priority within this + * declaration block. + * + * @param propertyName The name of the CSS property. See the <a + * href="http://www.w3.org/TR/REC-CSS2/propidx.html"> CSS property + * index </a> . + * + * @param value The new value of the property. + * + * @param priority The new priority of the property (e.g. + * \c "important" ). + * + * @return + * + * @exception CSSException + * SYNTAX_ERR: Raised if the specified value has a syntax error + * and is unparsable. + * + * @exception DOMException + * NO_MODIFICATION_ALLOWED_ERR: Raised if this declaration is + * readonly. + * + */ + void setProperty ( const DOM::DOMString &propertyName, const DOM::DOMString &value, const DOM::DOMString &priority ); + + /** + * Used to retrieve the properties that have been explicitly set + * in this declaration block. The order of the properties + * retrieved using this method does not have to be the order in + * which they were set. This method can be used to iterate over + * all properties in this declaration block. + * + * @param index Index of the property name to retrieve. + * + * @return The name of the property at this ordinal position. The + * empty string if no property exists at this position. + * + */ + DOM::DOMString item ( unsigned long index ) const; + DOM::DOMString item ( unsigned long index ); + + /** + * @internal + * not part of the DOM + */ + CSSStyleDeclarationImpl *handle() const; + bool isNull() const; + +protected: + CSSStyleDeclarationImpl *impl; +}; + + +class CSSValueImpl; + +/** + * The \c CSSValue interface represents a simple or a + * complexe value. + * + */ +class KHTML_EXPORT CSSValue +{ +public: + CSSValue(); + CSSValue(const CSSValue &other); + CSSValue(CSSValueImpl *impl); +public: + + CSSValue & operator = (const CSSValue &other); + + ~CSSValue(); + /** + * An integer indicating which type of unit applies to the value. + * + * All CSS2 constants are not supposed to be required by the + * implementation since all CSS2 interfaces are optionals. + * + */ + enum UnitTypes { + CSS_INHERIT = 0, + CSS_PRIMITIVE_VALUE = 1, + CSS_VALUE_LIST = 2, + CSS_CUSTOM = 3, + CSS_INITIAL = 4 + }; + + /** + * A string representation of the current value. + * + */ + DOM::DOMString cssText() const; + + /** + * see cssText + * @exception CSSException + * SYNTAX_ERR: Raised if the specified CSS string value has a + * syntax error and is unparsable. + * + * @exception DOMException + * NO_MODIFICATION_ALLOWED_ERR: Raised if this declaration is + * readonly. + * + */ + void setCssText( const DOM::DOMString & ); + + /** + * A code defining the type of the value as defined above. + * + */ + unsigned short cssValueType() const; + + /** + * @internal + * not part of the DOM + */ + bool isCSSValueList() const; + bool isCSSPrimitiveValue() const; + CSSValueImpl *handle() const; + bool isNull() const; + +protected: + CSSValueImpl *impl; +}; + + +class CSSValueListImpl; +class CSSValue; + +/** + * The \c CSSValueList interface provides the absraction + * of an ordered collection of CSS values. + * + */ +class KHTML_EXPORT CSSValueList : public CSSValue +{ +public: + CSSValueList(); + CSSValueList(const CSSValueList &other); + CSSValueList(const CSSValue &other); + CSSValueList(CSSValueListImpl *impl); +public: + + CSSValueList & operator = (const CSSValueList &other); + CSSValueList & operator = (const CSSValue &other); + + ~CSSValueList(); + + /** + * The number of \c CSSValue s in the list. The range + * of valid values indices is \c 0 to \c length-1 + * inclusive. + * + */ + unsigned long length() const; + + /** + * Used to retrieve a CSS rule by ordinal index. The order in this + * collection represents the order of the values in the CSS style + * property. + * + * @param index Index into the collection. + * + * @return The style rule at the \c index position in + * the \c CSSValueList , or \c null if + * that is not valid index. + * + */ + CSSValue item ( unsigned long index ); + +protected: + CSSValueListImpl *vimpl; +}; + + +class CSSPrimitiveValueImpl; +class Counter; +class RGBColor; +class Rect; + +/** + * The \c CSSPrimitiveValue interface represents a single + * <a href="http://www.w3.org/TR/REC-CSS2/syndata.html#values"> CSS + * value </a> . This interface may be used to determine the value of a + * specific style property currently set in a block or to set a + * specific style properties explicitly within the block. An instance + * of this interface can be obtained from the + * \c getPropertyCSSValue method of the + * \c CSSStyleDeclaration interface. + * + */ +class KHTML_EXPORT CSSPrimitiveValue : public CSSValue +{ +public: + CSSPrimitiveValue(); + CSSPrimitiveValue(const CSSPrimitiveValue &other); + CSSPrimitiveValue(const CSSValue &other); + CSSPrimitiveValue(CSSPrimitiveValueImpl *impl); +public: + + CSSPrimitiveValue & operator = (const CSSPrimitiveValue &other); + CSSPrimitiveValue & operator = (const CSSValue &other); + + ~CSSPrimitiveValue(); + /** + * An integer indicating which type of unit applies to the value. + * + */ + enum UnitTypes { + CSS_UNKNOWN = 0, + CSS_NUMBER = 1, + CSS_PERCENTAGE = 2, + CSS_EMS = 3, + CSS_EXS = 4, + CSS_PX = 5, + CSS_CM = 6, + CSS_MM = 7, + CSS_IN = 8, + CSS_PT = 9, + CSS_PC = 10, + CSS_DEG = 11, + CSS_RAD = 12, + CSS_GRAD = 13, + CSS_MS = 14, + CSS_S = 15, + CSS_HZ = 16, + CSS_KHZ = 17, + CSS_DIMENSION = 18, + CSS_STRING = 19, + CSS_URI = 20, + CSS_IDENT = 21, + CSS_ATTR = 22, + CSS_COUNTER = 23, + CSS_RECT = 24, + CSS_RGBCOLOR = 25, + CSS_PAIR = 100, // We envision this being exposed as a means of getting computed style values for pairs + CSS_HTML_RELATIVE = 255 + }; + + /** + * The type of the value as defined by the constants specified + * above. + * + */ + unsigned short primitiveType() const; + + /** + * A method to set the float value with a specified unit. If the + * property attached with this value can not accept the specified + * unit or the float value, the value will be unchanged and a + * \c DOMException will be raised. + * + * @param unitType A unit code as defined above. The unit code can + * only be a float unit type (e.g. \c NUMBER , + * \c PERCENTAGE , \c CSS_EMS , \c CSS_EXS + * , \c CSS_PX , \c CSS_PX , + * \c CSS_CM , \c CSS_MM , \c CSS_IN + * , \c CSS_PT , \c CSS_PC , + * \c CSS_DEG , \c CSS_RAD , + * \c CSS_GRAD , \c CSS_MS , \c CSS_S + * , \c CSS_HZ , \c CSS_KHZ , + * \c CSS_DIMENSION ). + * + * @param floatValue The new float value. + * + * @return + * @exception DOMException + * INVALID_ACCESS_ERR: Raises if the attached property doesn't + * support the float value or the unit type. + * + * NO_MODIFICATION_ALLOWED_ERR: Raised if this property is + * readonly. + * + */ + void setFloatValue ( unsigned short unitType, float floatValue ); + + /** + * This method is used to get a float value in a specified unit. + * If this CSS value doesn't contain a float value or can't be + * converted into the specified unit, a \c DOMException + * is raised. + * + * @param unitType A unit code to get the float value. The unit + * code can only be a float unit type (e.g. \c CSS_NUMBER + * , \c CSS_PERCENTAGE , \c CSS_EMS + * , \c CSS_EXS , \c CSS_PX , + * \c CSS_PX , \c CSS_CM , \c CSS_MM + * , \c CSS_IN , \c CSS_PT , + * \c CSS_PC , \c CSS_DEG , \c CSS_RAD + * , \c CSS_GRAD , \c CSS_MS , + * \c CSS_S , \c CSS_HZ , \c CSS_KHZ + * , \c CSS_DIMENSION ). + * + * @return The float value in the specified unit. + * + * @exception DOMException + * INVALID_ACCESS_ERR: Raises if the CSS value doesn't contain a + * float value or if the float value can't be converted into the + * specified unit. + * + */ + // ### KDE 4: make this const! + float getFloatValue ( unsigned short unitType ); + + /** + * A method to set the string value with a specified unit. If the + * property attached to this value can't accept the specified unit + * or the string value, the value will be unchanged and a + * \c DOMException will be raised. + * + * @param stringType A string code as defined above. The string + * code can only be a string unit type (e.g. \c CSS_URI + * , \c CSS_IDENT , \c CSS_INHERIT + * and \c CSS_ATTR ). + * + * @param stringValue The new string value. If the + * \c stringType is equal to \c CSS_INHERIT , the + * \c stringValue should be \c inherit . + * + * @return + * @exception DOMException + * INVALID_ACCESS_ERR: Raises if the CSS value doesn't contain a + * string value or if the string value can't be converted into the + * specified unit. + * + * NO_MODIFICATION_ALLOWED_ERR: Raised if this property is + * readonly. + * + */ + void setStringValue ( unsigned short stringType, const DOM::DOMString &stringValue ); + + /** + * This method is used to get the string value in a specified + * unit. If the CSS value doesn't contain a string value, a + * \c DOMException is raised. + * + * @return The string value in the current unit. The current + * \c valueType can only be a string unit type (e.g. + * \c CSS_URI , \c CSS_IDENT and + * \c CSS_ATTR ). + * + * @exception DOMException + * INVALID_ACCESS_ERR: Raises if the CSS value doesn't contain a + * string value. + * + */ + // ### KDE4: make this const! + DOM::DOMString getStringValue ( ); + + /** + * This method is used to get the Counter value. If this CSS value + * doesn't contain a counter value, a \c DOMException + * is raised. Modification to the corresponding style property can + * be achieved using the \c Counter interface. + * + * @return The Counter value. + * + * @exception DOMException + * INVALID_ACCESS_ERR: Raises if the CSS value doesn't contain a + * Counter value. + * + */ + // ### KDE4: make this const! + Counter getCounterValue ( ); + + /** + * This method is used to get the Rect value. If this CSS value + * doesn't contain a rect value, a \c DOMException is + * raised. Modification to the corresponding style property can be + * achieved using the \c Rect interface. + * + * @return The Rect value. + * + * @exception DOMException + * INVALID_ACCESS_ERR: Raises if the CSS value doesn't contain a + * Rect value. + * + */ + // ### KDE4: make this const! + Rect getRectValue ( ); + + /** + * This method is used to get the RGB color. If this CSS value + * doesn't contain a RGB color value, a \c DOMException + * is raised. Modification to the corresponding style + * property can be achieved using the \c RGBColor + * interface. + * + * @return the RGB color value. + * + * @exception DOMException + * INVALID_ACCESS_ERR: Raises if the attached property can't + * return a RGB color value. + * + */ + // ### KDE4: make this const! + RGBColor getRGBColorValue ( ); +}; + + + +/** + * The \c RGBColor interface is used to represent any <a + * href="http://www.w3.org/TR/REC-CSS2/syndata.html#value-def-color"> + * RGB color </a> value. This interface reflects the values in the + * underlying style property. Hence, modifications made through this + * interface modify the style property. + * + */ +class KHTML_EXPORT RGBColor +{ +public: + RGBColor(); + /** + * @deprecated + */ + RGBColor(const TQColor& c) { m_color = c.rgb(); } + RGBColor(QRgb color); + + RGBColor(const RGBColor &other); + RGBColor & operator = (const RGBColor &other); + + ~RGBColor(); + + /** + * This attribute is used for the red value of the RGB color. + * + */ + CSSPrimitiveValue red() const; + + /** + * This attribute is used for the green value of the RGB color. + * + */ + CSSPrimitiveValue green() const; + + /** + * This attribute is used for the blue value of the RGB color. + * + */ + CSSPrimitiveValue blue() const; + + /** + * @internal + */ + QRgb color() const { return m_color; } +protected: + QRgb m_color; +}; + +class RectImpl; + +/** + * The \c Rect interface is used to represent any <a + * href="http://www.w3.org/TR/REC-CSS2/visufx.html#value-def-shape"> + * rect </a> value. This interface reflects the values in the + * underlying style property. Hence, modifications made through this + * interface modify the style property. + * + */ +class KHTML_EXPORT Rect +{ + friend class CSSPrimitiveValue; +public: + Rect(); + Rect(const Rect &other); + + Rect & operator = (const Rect &other); + + ~Rect(); + + /** + * This attribute is used for the top of the rect. + * + */ + CSSPrimitiveValue top() const; + + /** + * This attribute is used for the right of the rect. + * + */ + CSSPrimitiveValue right() const; + + /** + * This attribute is used for the bottom of the rect. + * + */ + CSSPrimitiveValue bottom() const; + + /** + * This attribute is used for the left of the rect. + * + */ + CSSPrimitiveValue left() const; + + /** + * @internal + * not part of the DOM + */ + RectImpl *handle() const; + bool isNull() const; + +protected: + RectImpl *impl; + Rect(RectImpl *i); +}; + +class CounterImpl; + +/** + * The \c Counter interface is used to represent any <a + * href="http://www.w3.org/TR/REC-CSS2/syndata.html#value-def-counter"> + * counter or counters function </a> value. This interface reflects + * the values in the underlying style property. Hence, modifications + * made through this interface modify the style property. + * + */ +class KHTML_EXPORT Counter +{ + friend class CSSPrimitiveValue; +public: + Counter(); + Counter(const Counter &other); +public: + + Counter & operator = (const Counter &other); + + ~Counter(); + + /** + * This attribute is used for the identifier of the counter. + * + */ + DOM::DOMString identifier() const; + + /** + * This attribute is used for the style of the list. + * + */ + DOM::DOMString listStyle() const; + + /** + * This attribute is used for the separator of nested counters. + * + */ + DOM::DOMString separator() const; + + /** + * @internal + * not part of the DOM + */ + CounterImpl *handle() const; + bool isNull() const; + +protected: + CounterImpl *impl; + Counter(CounterImpl *i); +}; + + +} // namespace + + +#endif |