summaryrefslogtreecommitdiffstats
path: root/khtml/css/css_stylesheetimpl.h
diff options
context:
space:
mode:
Diffstat (limited to 'khtml/css/css_stylesheetimpl.h')
-rw-r--r--khtml/css/css_stylesheetimpl.h192
1 files changed, 192 insertions, 0 deletions
diff --git a/khtml/css/css_stylesheetimpl.h b/khtml/css/css_stylesheetimpl.h
new file mode 100644
index 000000000..0b35c2104
--- /dev/null
+++ b/khtml/css/css_stylesheetimpl.h
@@ -0,0 +1,192 @@
+/*
+ * This file is part of the DOM implementation for KDE.
+ *
+ * Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org)
+ * (C) 2004 Apple Computer, Inc.
+ *
+ * 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.
+ *
+ */
+#ifndef _CSS_css_stylesheetimpl_h_
+#define _CSS_css_stylesheetimpl_h_
+
+#include <qvaluelist.h>
+#include <qptrlist.h>
+
+#include "dom/dom_string.h"
+#include "css/css_base.h"
+#include "misc/loader_client.h"
+#include "xml/dom_docimpl.h"
+
+namespace khtml {
+ class CachedCSSStyleSheet;
+ class DocLoader;
+}
+
+namespace DOM {
+
+class StyleSheet;
+class CSSStyleSheet;
+class CSSParser;
+class MediaListImpl;
+class CSSRuleImpl;
+class CSSRuleList;
+class CSSStyleRuleImpl;
+class CSSValueImpl;
+class NodeImpl;
+class DocumentImpl;
+
+class StyleSheetImpl : public StyleListImpl
+{
+public:
+ StyleSheetImpl(DOM::NodeImpl *ownerNode, DOM::DOMString href = DOMString());
+ StyleSheetImpl(StyleSheetImpl *parentSheet, DOM::DOMString href = DOMString());
+ StyleSheetImpl(StyleBaseImpl *owner, DOM::DOMString href = DOMString());
+ StyleSheetImpl(khtml::CachedCSSStyleSheet *cached, DOM::DOMString href = DOMString());
+ virtual ~StyleSheetImpl();
+
+ virtual bool isStyleSheet() const { return true; }
+
+ virtual DOM::DOMString type() const { return DOMString(); }
+
+ bool disabled() const { return m_disabled; }
+ void setDisabled( bool disabled );
+ DOM::NodeImpl *ownerNode() const { return m_parentNode; }
+ StyleSheetImpl *parentStyleSheet() const;
+ DOM::DOMString href() const { return m_strHref; }
+ DOM::DOMString title() const { return m_strTitle; }
+ MediaListImpl *media() const { return m_media; }
+ void setMedia( MediaListImpl *media );
+
+protected:
+ DOM::NodeImpl *m_parentNode;
+ DOM::DOMString m_strHref;
+ DOM::DOMString m_strTitle;
+ MediaListImpl *m_media;
+ bool m_disabled;
+};
+
+class CSSStyleSheetImpl : public StyleSheetImpl
+{
+public:
+ CSSStyleSheetImpl(DOM::NodeImpl *parentNode, DOM::DOMString href = DOMString(), bool _implicit = false);
+ CSSStyleSheetImpl(CSSStyleSheetImpl *parentSheet, DOM::DOMString href = DOMString());
+ CSSStyleSheetImpl(CSSRuleImpl *ownerRule, DOM::DOMString href = DOMString());
+ // clone from a cached version of the sheet
+ CSSStyleSheetImpl(DOM::NodeImpl *parentNode, CSSStyleSheetImpl *orig);
+ CSSStyleSheetImpl(CSSRuleImpl *ownerRule, CSSStyleSheetImpl *orig);
+
+ ~CSSStyleSheetImpl() { delete m_namespaces; }
+
+ virtual bool isCSSStyleSheet() const { return true; }
+
+ virtual DOM::DOMString type() const { return "text/css"; }
+
+ CSSRuleImpl *ownerRule() const;
+ CSSRuleList cssRules();
+ unsigned long insertRule ( const DOM::DOMString &rule, unsigned long index, int &exceptioncode );
+ void deleteRule ( unsigned long index, int &exceptioncode );
+
+ void addNamespace(CSSParser* p, const DOM::DOMString& prefix, const DOM::DOMString& uri);
+ void determineNamespace(Q_UINT32& id, const DOM::DOMString& prefix);
+ Q_UINT32 defaultNamespace() { return m_defaultNamespace; };
+
+ void setCharset(const DOMString &charset) { m_charset = charset; }
+ const DOMString& charset() const { return m_charset; }
+
+ virtual bool parseString( const DOMString &string, bool strict = true );
+
+ bool isLoading() const;
+ void setNonCSSHints();
+
+ virtual void checkLoaded() const;
+
+ // ### remove? (clients should use sheet->doc()->docLoader())
+ khtml::DocLoader *docLoader() const
+ { return m_doc ? m_doc->docLoader() : 0; }
+
+ DocumentImpl *doc() const { return m_doc; }
+ bool implicit() const { return m_implicit; }
+protected:
+ DocumentImpl *m_doc;
+ bool m_implicit;
+ Q_UINT32 m_defaultNamespace;
+ CSSNamespace* m_namespaces;
+ DOMString m_charset;
+};
+
+// ----------------------------------------------------------------------------
+
+class StyleSheetListImpl : public khtml::Shared<StyleSheetListImpl>
+{
+public:
+ StyleSheetListImpl() {}
+ ~StyleSheetListImpl();
+
+ // the following two ignore implicit stylesheets
+ unsigned long length() const;
+ StyleSheetImpl *item ( unsigned long index );
+
+ void add(StyleSheetImpl* s);
+ void remove(StyleSheetImpl* s);
+
+ QPtrList<StyleSheetImpl> styleSheets;
+};
+
+// ----------------------------------------------------------------------------
+
+class MediaListImpl : public StyleBaseImpl
+{
+public:
+ MediaListImpl()
+ : StyleBaseImpl( 0 ) {}
+ MediaListImpl( CSSStyleSheetImpl *parentSheet )
+ : StyleBaseImpl(parentSheet) {}
+ MediaListImpl( CSSStyleSheetImpl *parentSheet,
+ const DOM::DOMString &media );
+ MediaListImpl( CSSRuleImpl *parentRule, const DOM::DOMString &media );
+
+ virtual bool isMediaList() const { return true; }
+
+ CSSStyleSheetImpl *parentStyleSheet() const;
+ CSSRuleImpl *parentRule() const;
+ unsigned long length() const { return m_lstMedia.count(); }
+ DOM::DOMString item ( unsigned long index ) const { return m_lstMedia[index]; }
+ void deleteMedium ( const DOM::DOMString &oldMedium );
+ void appendMedium ( const DOM::DOMString &newMedium ) { m_lstMedia.append(newMedium); }
+
+ DOM::DOMString mediaText() const;
+ void setMediaText(const DOM::DOMString &value);
+
+ /**
+ * Check if the list contains either the requested medium, or the
+ * catch-all "all" media type. Returns true when found, false otherwise.
+ * Since not specifying media types should be treated as "all" according
+ * to DOM specs, an empty list always returns true.
+ *
+ * _NOT_ part of the DOM!
+ */
+ bool contains( const DOM::DOMString &medium ) const;
+
+protected:
+ QValueList<DOM::DOMString> m_lstMedia;
+};
+
+
+} // namespace
+
+#endif
+