/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * The contents of this file are subject to the Netscape Public License * Version 1.0 (the "NPL"); you may not use this file except in * compliance with the NPL. You may obtain a copy of the NPL at * http://www.mozilla.org/NPL/ * * Software distributed under the NPL is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL * for the specific language governing rights and limitations under the * NPL. * * The Initial Developer of this code under the NPL is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All Rights * Reserved. */ #ifndef nsIContent_h___ #define nsIContent_h___ #include #include "nslayout.h" #include "nsISupports.h" class nsIAtom; class nsIContentDelegate; class nsIDocument; class nsIPresContext; class nsISizeofHandler; class nsString; class nsString; class nsVoidArray; // IID for the nsIContent interface #define NS_ICONTENT_IID \ { 0x78030220, 0x9447, 0x11d1, \ {0x93, 0x23, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32} } /** * Content attribute states */ enum nsContentAttr { // Attribute does not exist on the piece of content eContentAttr_NotThere, // Attribute exists, but has no value, e.g. "BORDER" in eContentAttr_NoValue, // Attribute exists and has a value. However, value may be the // empty string. e.g.
or
eContentAttr_HasValue }; // A node of content in a documents content model. This interface // is supported by all content objects. class nsIContent : public nsISupports { public: virtual nsIDocument* GetDocument() const = 0; virtual void SetDocument(nsIDocument* aDocument) = 0; virtual nsIContent* GetParent() const = 0; virtual void SetParent(nsIContent* aParent) = 0; virtual PRBool CanContainChildren() const = 0; virtual PRInt32 ChildCount() const = 0; virtual nsIContent* ChildAt(PRInt32 aIndex) const = 0; virtual PRInt32 IndexOf(nsIContent* aPossibleChild) const = 0; virtual PRBool InsertChildAt(nsIContent* aKid, PRInt32 aIndex) = 0; virtual PRBool ReplaceChildAt(nsIContent* aKid, PRInt32 aIndex) = 0; virtual PRBool AppendChild(nsIContent* aKid) = 0; virtual PRBool RemoveChildAt(PRInt32 aIndex) = 0; virtual nsIAtom* GetTag() const = 0; /** * Set attribute values. All attribute values are assumed to have a * canonical String representation that can be used for these * methods. The setAttribute method is assumed to perform a translation * of the canonical form into the underlying content specific * form. * * aValue may legitimately be the empty string. */ virtual void SetAttribute(const nsString& aName, const nsString& aValue) = 0; /** * Get the current value of the attribute. This returns a form that is * suitable for passing back into setAttribute. * * */ virtual nsContentAttr GetAttribute(const nsString& aName, nsString& aResult) const = 0; virtual nsIContentDelegate* GetDelegate(nsIPresContext* aCX) = 0; virtual void List(FILE* out = stdout, PRInt32 aIndent = 0) const = 0; /** * Return the number of bytes consumed by this node of content and * anything that it can reach. */ virtual PRUint32 SizeOf(nsISizeofHandler* aHandler) const = 0; }; #endif /* nsIContent_h___ */