michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: /* michael@0: * interface representing a collection of style data attached to a michael@0: * document, which may be or be combined into a style rule processor michael@0: */ michael@0: michael@0: #ifndef nsIStyleSheet_h___ michael@0: #define nsIStyleSheet_h___ michael@0: michael@0: #include "mozilla/MemoryReporting.h" michael@0: #include michael@0: #include "nsISupports.h" michael@0: michael@0: class nsString; michael@0: class nsIURI; michael@0: class nsIDocument; michael@0: michael@0: // IID for the nsIStyleSheet interface michael@0: // 3eb34a60-04bd-41d9-9f60-882694e61c38 michael@0: #define NS_ISTYLE_SHEET_IID \ michael@0: { 0x3eb34a60, 0x04bd, 0x41d9, \ michael@0: { 0x9f, 0x60, 0x88, 0x26, 0x94, 0xe6, 0x1c, 0x38 } } michael@0: michael@0: /** michael@0: * A style sheet is a thing associated with a document that has style michael@0: * rules. Those style rules can be reached in one of two ways, depending michael@0: * on which level of the nsStyleSet it is in: michael@0: * 1) It can be |QueryInterface|d to nsIStyleRuleProcessor michael@0: * 2) It can be |QueryInterface|d to nsCSSStyleSheet, with which the michael@0: * |nsStyleSet| uses an |nsCSSRuleProcessor| to access the rules. michael@0: */ michael@0: class nsIStyleSheet : public nsISupports { michael@0: public: michael@0: NS_DECLARE_STATIC_IID_ACCESSOR(NS_ISTYLE_SHEET_IID) michael@0: michael@0: // basic style sheet data michael@0: virtual nsIURI* GetSheetURI() const = 0; michael@0: virtual nsIURI* GetBaseURI() const = 0; michael@0: virtual void GetTitle(nsString& aTitle) const = 0; michael@0: virtual void GetType(nsString& aType) const = 0; michael@0: virtual bool HasRules() const = 0; michael@0: michael@0: /** michael@0: * Whether the sheet is applicable. A sheet that is not applicable michael@0: * should never be inserted into a style set. A sheet may not be michael@0: * applicable for a variety of reasons including being disabled and michael@0: * being incomplete. michael@0: * michael@0: */ michael@0: virtual bool IsApplicable() const = 0; michael@0: michael@0: /** michael@0: * Set the stylesheet to be enabled. This may or may not make it michael@0: * applicable. Note that this WILL inform the sheet's document of michael@0: * its new applicable state if the state changes but WILL NOT call michael@0: * BeginUpdate() or EndUpdate() on the document -- calling those is michael@0: * the caller's responsibility. This allows use of SetEnabled when michael@0: * batched updates are desired. If you want updates handled for michael@0: * you, see nsIDOMStyleSheet::SetDisabled(). michael@0: */ michael@0: virtual void SetEnabled(bool aEnabled) = 0; michael@0: michael@0: /** michael@0: * Whether the sheet is complete. michael@0: */ michael@0: virtual bool IsComplete() const = 0; michael@0: virtual void SetComplete() = 0; michael@0: michael@0: // style sheet owner info michael@0: virtual nsIStyleSheet* GetParentSheet() const = 0; // may be null michael@0: virtual nsIDocument* GetOwningDocument() const = 0; // may be null michael@0: virtual void SetOwningDocument(nsIDocument* aDocument) = 0; michael@0: michael@0: #ifdef DEBUG michael@0: virtual void List(FILE* out = stdout, int32_t aIndent = 0) const = 0; michael@0: #endif michael@0: michael@0: virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const = 0; michael@0: }; michael@0: michael@0: NS_DEFINE_STATIC_IID_ACCESSOR(nsIStyleSheet, NS_ISTYLE_SHEET_IID) michael@0: michael@0: #endif /* nsIStyleSheet_h___ */