/*
 * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
 */

#ifndef DO_NO_IMPORTS
import "oaidl.idl";
import "ocidl.idl";
import "DOMCore.idl";
import "IWebScriptObject.idl";
#endif

interface IDOMObject;
interface IDOMCSSValue;
interface IDOMCSSStyleDeclaration;
interface IDOMCSSStyleSheet;
interface IDOMCSSRule;
interface IDOMElement;

/*
    @interface DOMDocument (DOMViewCSS)
*/
[
    object,
    oleautomation,
    uuid(43EFE238-A4DF-400a-983D-FCE0C0F56BCD),
    pointer_default(unique)
]
interface IDOMViewCSS : IUnknown
{
    /*
        - (DOMCSSStyleDeclaration *)getComputedStyle:(DOMElement *)elt :(NSString *)pseudoElt;
    */
    HRESULT getComputedStyle([in] IDOMElement* elt, [in] BSTR pseudoElt, [out, retval] IDOMCSSStyleDeclaration** result);
}

/*
    @interface DOMCSSRuleList : DOMObject
*/
[
    object,
    oleautomation,
    uuid(D45DA43D-5EDB-4315-A097-3ED3FA089193),
    pointer_default(unique)
]
interface IDOMCSSRuleList : IDOMObject
{
    /*
        - (unsigned)length;
    */
    HRESULT length([out, retval] UINT* result);

    /*
        - (DOMCSSRule *)item:(unsigned)index;
    */
    HRESULT item([in] UINT index, [out, retval] IDOMCSSRule** result);
}

/*
    @interface DOMCSSRule : DOMObject
*/
[
    object,
    oleautomation,
    uuid(05947A31-9E1C-4c98-8608-6688959D6542),
    pointer_default(unique)
]
interface IDOMCSSRule : IDOMObject
{
    /*
        - (unsigned short)type;
    */
    HRESULT type([out, retval] unsigned short* result);

    /*
        - (NSString *)cssText;
    */
    HRESULT cssText([out, retval] BSTR* text);

    /*
        - (void)setCssText:(NSString *)cssText;
    */
    HRESULT setCssText([in] BSTR cssText);

    /*
        - (DOMCSSStyleSheet *)parentStyleSheet;
    */
    HRESULT parentStyleSheet([out, retval] IDOMCSSStyleSheet** sheet);

    /*
        - (DOMCSSRule *)parentRule;
    */
    HRESULT parentRule([out, retval] IDOMCSSRule** rule);
}

/*
    @interface DOMCSSStyleDeclaration : DOMObject
*/
[
    object,
    oleautomation,
    uuid(DBBE9A6B-D505-4647-B4AB-40A7CF3EE63E),
    pointer_default(unique)
]
interface IDOMCSSStyleDeclaration : IDOMObject
{
    /*
        - (NSString *)cssText;
    */
    HRESULT cssText([out, retval] BSTR* result);

    /*
        - (void)setCssText:(NSString *)cssText;
    */
    HRESULT setCssText([in] BSTR cssText);

    /*
        - (NSString *)getPropertyValue:(NSString *)propertyName;
    */
    HRESULT getPropertyValue([in] BSTR propertyName, [out, retval] BSTR* result);

    /*
        - (DOMCSSValue *)getPropertyCSSValue:(NSString *)propertyName;
    */
    HRESULT getPropertyCSSValue([in] BSTR propertyName, [out, retval] IDOMCSSValue** result);

    /*
        - (NSString *)removeProperty:(NSString *)propertyName;
    */
    HRESULT removeProperty([in] BSTR propertyName, [out, retval] BSTR* result);

    /*
        - (NSString *)getPropertyPriority:(NSString *)propertyName;
    */
    HRESULT getPropertyPriority([in] BSTR propertyName, [out, retval] BSTR* result);

    /*
        - (void)setProperty:(NSString *)propertyName :(NSString *)value :(NSString *)priority;
    */
    HRESULT setProperty([in] BSTR propertyName, [in] BSTR value, [in] BSTR priority);

    /*
        - (unsigned)length;
    */
    HRESULT length([out, retval] UINT* result);

    /*
        - (NSString *)item:(unsigned)index;
    */
    HRESULT item([in] UINT index, [out, retval] BSTR* result);

    /*
        - (DOMCSSRule *)parentRule;
    */
    HRESULT parentRule([out, retval] IDOMCSSRule** result);
}

/*
    @interface DOMCSSValue : DOMObject
*/
[
    object,
    oleautomation,
    uuid(51D29553-2AF7-4f52-AFE6-3C59196A8BAA),
    pointer_default(unique)
]
interface IDOMCSSValue : IDOMObject
{
    /*
        - (NSString *)cssText;
    */
    HRESULT cssText([out, retval] BSTR* text);

    /*
        - (void)setCssText:(NSString *)cssText;
    */
    HRESULT setCssText([in] BSTR text);

    /*
        - (unsigned short)cssValueType;
    */
    HRESULT cssValueType([out, retval] unsigned short *valueType);
}

/*
    @interface DOMCSSStyleSheet : DOMStyleSheet
*/
[
    object,
    oleautomation,
    uuid(14B1C213-1458-48a1-AD8F-54BFE64F9ECF),
    pointer_default(unique)
]
interface IDOMCSSStyleSheet : IDOMObject
{
    /*
        - (DOMCSSRule *)ownerRule;
    */
    HRESULT ownerRule([out, retval] IDOMCSSRule** rule);

    /*
        - (DOMCSSRuleList *)cssRules;
    */
    HRESULT cssRules([out, retval] IDOMCSSRuleList** ruleList);

    /*
        - (unsigned)insertRule:(NSString *)rule :(unsigned)index;
    */
    HRESULT insertRule([in] BSTR rule, [in] UINT index, [out, retval] UINT* result);

    /*
        - (void)deleteRule:(unsigned)index;
    */
    HRESULT deleteRule([in] UINT index);
}

/*
    @interface DOMElement (DOMElementCSSInlineStyle)
*/
[
    object,
    oleautomation,
    uuid(585127E2-D698-44c4-83EC-4D1E6E07E90D),
    pointer_default(unique)
]
interface IDOMElementCSSInlineStyle : IUnknown
{
    /*
        - (DOMCSSStyleDeclaration *)style;
    */
    HRESULT style([out, retval] IDOMCSSStyleDeclaration** result);
}