Bug #: 4154
[WebKit-https.git] / SVGSupport / kdom / css / CSSStyleSheet.cpp
1 /*
2     Copyright (C) 2004 Nikolas Zimmermann <wildfox@kde.org>
3                                   2004 Rob Buis <buis@kde.org>
4
5     This file is part of the KDE project
6
7     This library is free software; you can redistribute it and/or
8     modify it under the terms of the GNU Library General Public
9     License as published by the Free Software Foundation; either
10     version 2 of the License, or (at your option) any later version.
11
12     This library is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15     Library General Public License for more details.
16
17     You should have received a copy of the GNU Library General Public License
18     along with this library; see the file COPYING.LIB.  If not, write to
19     the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20     Boston, MA 02111-1307, USA.
21 */
22
23 #include "Ecma.h"
24 #include "CSSRule.h"
25 #include "CSSHelper.h"
26 #include "CSSRuleList.h"
27 #include "DOMException.h"
28 #include "CSSStyleSheet.h"
29 #include "DOMExceptionImpl.h"
30 #include "CSSStyleSheetImpl.h"
31
32 #include "kdom/data/CSSConstants.h"
33 #include "CSSStyleSheet.lut.h"
34 using namespace KDOM;
35 using namespace KJS;
36
37 /*
38 @begin CSSStyleSheet::s_hashTable 3
39  ownerRule      CSSStyleSheetConstants::OwnerRule       DontDelete|ReadOnly
40  cssRules       CSSStyleSheetConstants::CssRules        DontDelete|ReadOnly
41 @end
42 @begin CSSStyleSheetProto::s_hashTable 3
43  insertRule     CSSStyleSheetConstants::InsertRule      DontDelete|Function 2
44  deleteRule     CSSStyleSheetConstants::DeleteRule      DontDelete|Function 1
45 @end
46 */
47
48 KDOM_IMPLEMENT_PROTOTYPE("CSSStyleSheet", CSSStyleSheetProto, CSSStyleSheetProtoFunc)
49
50 Value CSSStyleSheet::getValueProperty(ExecState *exec, int token) const
51 {
52         switch(token)
53         {
54                 case CSSStyleSheetConstants::OwnerRule:
55                         return getDOMCSSRule(exec, ownerRule());
56                 case CSSStyleSheetConstants::CssRules:
57                         return safe_cache<CSSRuleList>(exec, cssRules());
58                 default:
59                         kdWarning() << "Unhandled token in " << k_funcinfo << " : " << token << endl;
60         }
61
62         return Undefined();
63 }
64
65 Value CSSStyleSheetProtoFunc::call(ExecState *exec, Object &thisObj, const List &args)
66 {
67         KDOM_CHECK_THIS(CSSStyleSheet)
68         KDOM_ENTER_SAFE
69
70         switch(id)
71         {
72                 case CSSStyleSheetConstants::InsertRule:
73                 {
74                         DOMString rule = toDOMString(exec, args[0]);
75                         unsigned long index = args[1].toUInt32(exec);
76                         obj.insertRule(rule, index);
77                         return Undefined();
78                 }
79                 default:
80                         kdWarning() << "Unhandled function id in " << k_funcinfo << " : " << id << endl;
81         }
82
83         KDOM_LEAVE_SAFE(DOMException)
84         return Undefined();
85 }
86
87 // The qdom way...
88 #define impl (static_cast<CSSStyleSheetImpl *>(d))
89
90 CSSStyleSheet CSSStyleSheet::null;
91
92 CSSStyleSheet::CSSStyleSheet() : StyleSheet()
93 {
94 }
95
96 CSSStyleSheet::CSSStyleSheet(const CSSStyleSheet &other) : StyleSheet(other)
97 {
98 }
99
100 CSSStyleSheet::CSSStyleSheet(const StyleSheet &other)
101 {
102         if(!other.isCSSStyleSheet())
103                 d = 0;
104         else
105                 (*this) = other;
106 }
107
108 CSSStyleSheet::CSSStyleSheet(CSSStyleSheetImpl *i) : StyleSheet(i)
109 {
110 }
111
112 CSSStyleSheet::~CSSStyleSheet()
113 {
114 }
115
116 CSSStyleSheet &CSSStyleSheet::operator=(const CSSStyleSheet &other)
117 {
118         StyleSheet::operator=(other);
119         return *this;
120 }
121
122 CSSStyleSheet &CSSStyleSheet::operator=(const StyleSheet &other)
123 {
124         if(!other.isCSSStyleSheet())
125         {
126                 if(d)
127                         d->deref();
128
129                 d = 0;
130         }
131         else
132                 StyleSheet::operator=(other);
133
134         return *this;
135 }
136
137 CSSRule CSSStyleSheet::ownerRule() const
138 {
139         if(!d)
140                 return CSSRule::null;
141
142         return CSSRule(impl->ownerRule());
143 }
144
145 CSSRuleList CSSStyleSheet::cssRules() const
146 {
147         if(!d)
148                 return CSSRuleList::null;
149
150         return CSSRuleList(impl->cssRules());
151 }
152
153 unsigned long CSSStyleSheet::insertRule(const DOMString &rule, unsigned long index)
154 {
155         if(!d)
156                 return 0;
157
158         return impl->insertRule(rule, index);
159 }
160
161 void CSSStyleSheet::deleteRule(unsigned long index)
162 {
163         if(d)
164                 impl->deleteRule(index);
165 }
166
167 DOMString CSSStyleSheet::type() const
168 {
169         return "text/css";
170 }
171
172 void CSSStyleSheet::setCssText(const DOMString &cssText)
173 {
174         if(d)
175                 impl->parseString(cssText);
176 }
177
178 // vim:ts=4:noet