A few more style cleanup changes I missed in my last commit.
[WebKit-https.git] / WebCore / bindings / js / kjs_css.h
1  // -*- c-basic-offset: 2 -*-
2 /*
3  *  This file is part of the KDE libraries
4  *  Copyright (C) 2000 Harri Porten (porten@kde.org)
5  *  Copyright (C) 2001 Peter Kelly (pmk@post.com)
6  *  Copyright (C) 2004, 2006 Apple Computer, Inc.
7  *
8  *  This library is free software; you can redistribute it and/or
9  *  modify it under the terms of the GNU Lesser General Public
10  *  License as published by the Free Software Foundation; either
11  *  version 2 of the License, or (at your option) any later version.
12  *
13  *  This library is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  *  Lesser General Public License for more details.
17  *
18  *  You should have received a copy of the GNU Lesser General Public
19  *  License along with this library; if not, write to the Free Software
20  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  */
22
23 #ifndef KJS_CSS_H_
24 #define KJS_CSS_H_
25
26 #include "Color.h"
27 #include "kjs_binding.h"
28
29 namespace WebCore {
30     class Counter;
31     class CSSPrimitiveValue;
32     class CSSRule;
33     class CSSRuleList;
34     class CSSStyleDeclaration;
35     class CSSStyleSheet;
36     class CSSValue;
37     class CSSValueList;
38     class JSCSSStyleDeclaration;
39     class MediaList;
40     class RectImpl;
41     class StyleSheet;
42     class StyleSheetList;
43 }
44
45 namespace KJS {
46
47   KJS_DEFINE_PROTOTYPE(DOMCSSStyleDeclarationProto)
48
49   class DOMCSSStyleDeclaration : public DOMObject {
50   public:
51     virtual ~DOMCSSStyleDeclaration();
52     virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&);
53     virtual void put(ExecState*, const Identifier& propertyName, JSValue*, int attr = None);
54     JSValue* getValueProperty(ExecState*, int token);
55
56     virtual const ClassInfo* classInfo() const { return &info; }
57     static const ClassInfo info;
58     enum { CssText, Length, ParentRule };
59     enum { GetPropertyValue, GetPropertyCSSValue, RemoveProperty, 
60            GetPropertyPriority, GetPropertyShorthand, IsPropertyImplicit, SetProperty, Item };
61     WebCore::CSSStyleDeclaration* impl() const { return m_impl.get(); }
62   private:
63     static JSValue* indexGetter(ExecState*, JSObject*, const Identifier&, const PropertySlot&);
64     static JSValue *cssPropertyGetter(ExecState*, JSObject*, const Identifier&, const PropertySlot&);
65
66     // Don't use this class directly -- use JSCSSStyleDeclaration instead
67     friend class WebCore::JSCSSStyleDeclaration;
68     DOMCSSStyleDeclaration(ExecState*, WebCore::CSSStyleDeclaration *s);
69
70     RefPtr<WebCore::CSSStyleDeclaration> m_impl;
71   };
72
73   JSValue* toJS(ExecState*, WebCore::CSSStyleDeclaration*);
74
75   class DOMStyleSheet : public DOMObject {
76   public:
77     DOMStyleSheet(ExecState*, WebCore::StyleShee*);
78     virtual ~DOMStyleSheet();
79     virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&);
80     JSValue* getValueProperty(ExecState*, int token) const;
81     virtual void put(ExecState*, const Identifier& propertyName, JSValue*, int attr = None);
82     virtual bool toBoolean(ExecState*) const { return true; }
83     virtual const ClassInfo* classInfo() const { return &info; }
84     static const ClassInfo info;
85     enum { Type, Disabled, OwnerNode, ParentStyleSheet, Href, Title, Media };
86     WebCore::StyleSheet* impl() const { return m_impl.get(); }
87   protected:
88     // Constructor for derived classes; doesn't set up a prototype.
89     DOMStyleSheet(WebCore::StyleSheet*);
90   private:
91     RefPtr<WebCore::StyleSheet> m_impl;
92   };
93
94   JSValue* toJS(ExecState*, PassRefPtr<WebCore::StyleSheet>);
95
96   class DOMStyleSheetList : public DOMObject {
97   public:
98     DOMStyleSheetList(ExecState*, WebCore::StyleSheetList*, WebCore::Document*);
99     virtual ~DOMStyleSheetList();
100     virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&);
101     JSValue* getValueProperty(ExecState*, int token) const;
102     // no put - all read-only
103     virtual const ClassInfo* classInfo() const { return &info; }
104     virtual bool toBoolean(ExecState*) const { return true; }
105     static const ClassInfo info;
106     WebCore::StyleSheetList* impl() const { return m_impl.get(); }
107     enum { Item, Length };
108   private:
109     static JSValue* indexGetter(ExecState*, JSObject*, const Identifier&, const PropertySlot&);
110     static JSValue* nameGetter(ExecState*, JSObject*, const Identifier&, const PropertySlot&);
111
112     RefPtr<WebCore::StyleSheetList> m_impl;
113     RefPtr<WebCore::Document> m_doc;
114   };
115
116   // The document is only used for get-stylesheet-by-name (make optional if necessary)
117   JSValue* toJS(ExecState*, WebCore::StyleSheetList*, WebCore::Document*);
118
119   class DOMMediaList : public DOMObject {
120   public:
121     DOMMediaList(ExecState*, WebCore::MediaList*);
122     virtual ~DOMMediaList();
123     virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&);
124     JSValue* getValueProperty(ExecState*, int token);
125     virtual void put(ExecState*, const Identifier& propertyName, JSValue*, int attr = None);
126     virtual const ClassInfo* classInfo() const { return &info; }
127     virtual bool toBoolean(ExecState*) const { return true; }
128     static const ClassInfo info;
129     enum { MediaText, Length,
130            Item, DeleteMedium, AppendMedium };
131     WebCore::MediaList* impl() const { return m_impl.get(); }
132   private:
133     static JSValue* indexGetter(ExecState*, JSObject*, const Identifier&, const PropertySlot&);
134     RefPtr<WebCore::MediaList> m_impl;
135   };
136
137   JSValue* toJS(ExecState*, WebCore::MediaList*);
138
139   class DOMCSSStyleSheet : public DOMStyleSheet {
140   public:
141     DOMCSSStyleSheet(ExecState*, WebCore::CSSStyleSheet*);
142     virtual ~DOMCSSStyleSheet();
143     virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&);
144     JSValue* getValueProperty(ExecState*, int token) const;
145     // no put - all read-only
146     virtual const ClassInfo* classInfo() const { return &info; }
147     static const ClassInfo info;
148     enum { OwnerRule, CssRules, Rules, InsertRule, DeleteRule, AddRule, RemoveRule };
149   };
150
151   class DOMCSSRuleList : public DOMObject {
152   public:
153     DOMCSSRuleList(ExecState*, WebCore::CSSRuleList*);
154     virtual ~DOMCSSRuleList();
155     virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&);
156     JSValue* getValueProperty(ExecState*, int token) const;
157     // no put - all read-only
158     virtual const ClassInfo* classInfo() const { return &info; }
159     static const ClassInfo info;
160     enum { Item, Length };
161     WebCore::CSSRuleList* impl() const { return m_impl.get(); }
162   private:
163     static JSValue* indexGetter(ExecState*, JSObject*, const Identifier&, const PropertySlot&);
164
165     RefPtr<WebCore::CSSRuleList> m_impl;
166   };
167
168   JSValue* toJS(ExecState*, WebCore::CSSRuleList*);
169
170   class DOMCSSRule : public DOMObject {
171   public:
172     DOMCSSRule(ExecState*, WebCore::CSSRule*);
173     virtual ~DOMCSSRule();
174     virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&);
175     JSValue* getValueProperty(ExecState*, int token) const;
176     virtual void put(ExecState*, const Identifier& propertyName, JSValue*, int attr = None);
177     void putValueProperty(ExecState*, int token, JSValue*, int attr);
178     virtual const ClassInfo* classInfo() const;
179     static const ClassInfo info;
180     static const ClassInfo style_info, media_info, fontface_info, page_info, import_info, charset_info;
181     enum { ParentStyleSheet, Type, CssText, ParentRule, Style_SelectorText, Style_Style,
182            Media_Media, Media_InsertRule, Media_DeleteRule, Media_CssRules,
183            FontFace_Style, Page_SelectorText, Page_Style,
184            Import_Href, Import_Media, Import_StyleSheet, Charset_Encoding };
185     WebCore::CSSRule* impl() const { return m_impl.get(); }
186   private:
187     RefPtr<WebCore::CSSRule> m_impl;
188   };
189
190   JSValue* toJS(ExecState*, WebCore::CSSRule*);
191
192   class DOMCSSValue : public DOMObject {
193   public:
194     DOMCSSValue(ExecState*, WebCore::CSSValue* v) : m_impl(v) { }
195     virtual ~DOMCSSValue();
196     virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&);
197     JSValue* getValueProperty(ExecState*, int token) const;
198     virtual void put(ExecState*, const Identifier& propertyName, JSValue*, int attr = None);
199     virtual const ClassInfo* classInfo() const { return &info; }
200     static const ClassInfo info;
201     enum { CssText, CssValueType };
202     WebCore::CSSValue* impl() const { return m_impl.get(); }
203   protected:
204     // Constructor for derived classes; doesn't set up a prototype.
205     DOMCSSValue(WebCore::CSSValue *v) : m_impl(v) { }
206   private:
207     RefPtr<WebCore::CSSValue> m_impl;
208   };
209
210   KJS_DEFINE_PROTOTYPE(DOMCSSValueProto)
211
212   JSValue* toJS(ExecState*, WebCore::CSSValue*);
213
214   class DOMCSSValueList : public DOMCSSValue {
215   public:
216     DOMCSSValueList(ExecState*, WebCore::CSSValueList*);
217     virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&);
218     JSValue* getValueProperty(ExecState*, int token) const;
219     // no put - all read-only
220     virtual const ClassInfo* classInfo() const { return &info; }
221     static const ClassInfo info;
222     enum { Length, Item };
223   private:
224     static JSValue* indexGetter(ExecState*, JSObject*, const Identifier&, const PropertySlot&);
225   };
226
227   class DOMRGBColor : public DOMObject {
228   public:
229     DOMRGBColor(unsigned color) : m_color(color) { }
230     ~DOMRGBColor();
231     virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&);
232     JSValue* getValueProperty(ExecState*, int token) const;
233     // no put - all read-only
234     virtual const ClassInfo* classInfo() const { return &info; }
235     static const ClassInfo info;
236     enum { Red, Green, Blue };
237   private:
238     unsigned m_color;
239   };
240
241   JSValue* getDOMRGBColor(ExecState*, unsigned color);
242
243   class DOMRect : public DOMObject {
244   public:
245     DOMRect(ExecState*, WebCore::RectImpl* r) : m_rect(r) { }
246     ~DOMRect();
247     virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&);
248     JSValue* getValueProperty(ExecState*, int token) const;
249     // no put - all read-only
250     virtual const ClassInfo* classInfo() const { return &info; }
251     static const ClassInfo info;
252     enum { Top, Right, Bottom, Left };
253   private:
254     RefPtr<WebCore::RectImpl> m_rect;
255   };
256
257   JSValue* toJS(ExecState*, WebCore::RectImpl*);
258
259 } // namespace
260
261 #endif