Bug #: 4154
[WebKit-https.git] / SVGSupport / kdom / css / CSSRule.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 <kdom/Shared.h>
25 #include "CSSRule.h"
26 #include "CSSHelper.h"
27 #include "CSSRuleImpl.h"
28 #include "DOMException.h"
29 #include "CSSStyleSheet.h"
30 #include "DOMExceptionImpl.h"
31
32 #include "kdom/data/CSSConstants.h"
33 #include "CSSRule.lut.h"
34 using namespace KDOM;
35 using namespace KJS;
36
37 /*
38 @begin CSSRule::s_hashTable 5
39  type                           CSSRuleConstants::Type                          DontDelete|ReadOnly
40  cssText                        CSSRuleConstants::CssText                       DontDelete|ReadOnly
41  parentStyleSheet       CSSRuleConstants::ParentStyleSheet      DontDelete|ReadOnly
42  parentRule                     CSSRuleConstants::ParentRule            DontDelete|ReadOnly
43 @end
44 */
45
46 Value CSSRule::getValueProperty(ExecState *exec, int token) const
47 {
48         switch(token)
49         {
50                 case CSSRuleConstants::Type:
51                         return Number(type());
52                 case CSSRuleConstants::CssText:
53                         return getDOMString(cssText());
54                 case CSSRuleConstants::ParentStyleSheet:
55                         return safe_cache<CSSStyleSheet>(exec, parentStyleSheet());
56                 case CSSRuleConstants::ParentRule:
57                         return getDOMCSSRule(exec, parentRule());
58                 default:
59                         kdWarning() << "Unhandled token in " << k_funcinfo << " : " << token << endl;
60         }
61
62         return Undefined();
63 }
64
65 void CSSRule::putValueProperty(ExecState *exec, int token, const Value &value, int)
66 {
67         KDOM_ENTER_SAFE
68
69         switch(token)
70         {
71                 case CSSRuleConstants::CssText:
72                         setCssText(toDOMString(exec, value));
73                         break;
74                 default:
75                         kdWarning() << "Unhandled token in " << k_funcinfo << " : " << token << endl;
76         }
77
78         KDOM_LEAVE_SAFE(DOMException)
79 }
80
81 CSSRule CSSRule::null;
82
83 CSSRule::CSSRule() : d(0)
84 {
85 }
86
87 CSSRule::CSSRule(CSSRuleImpl *i) : d(i)
88 {
89         if(d)
90                 d->ref();
91 }
92
93 CSSRule::CSSRule(const CSSRule &other) : d(0)
94 {
95         (*this) = other;
96 }
97
98 KDOM_IMPL_DTOR_ASSIGN_OP(CSSRule)
99
100 unsigned short CSSRule::type() const
101 {
102         if(!d)
103                 return UNKNOWN_RULE;
104
105         return d->type();
106 }
107
108 void CSSRule::setCssText(const DOMString &text)
109 {
110         if(d)
111                 d->setCssText(text);
112 }
113
114 DOMString CSSRule::cssText() const
115 {
116         if(!d)
117                 return DOMString();
118
119         return d->cssText();
120 }
121
122 CSSStyleSheet CSSRule::parentStyleSheet() const
123 {
124         if(!d)
125                 return CSSStyleSheet::null;
126
127         return CSSStyleSheet(d->parentStyleSheet());
128 }
129
130 CSSRule CSSRule::parentRule() const
131 {
132         if(!d)
133                 return CSSRule::null;
134
135         return CSSRule(d->parentRule());
136 }
137
138 // vim:ts=4:noet