Bug #: 4154
[WebKit-https.git] / SVGSupport / kdom / css / CSSMediaRule.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 "MediaList.h"
25 #include "DOMException.h"
26 #include "CSSMediaRule.h"
27 #include "DOMExceptionImpl.h"
28 #include "CSSMediaRuleImpl.h"
29
30 #include "kdom/data/CSSConstants.h"
31 #include "CSSMediaRule.lut.h"
32 using namespace KDOM;
33 using namespace KJS;
34
35 /*
36 @begin CSSMediaRule::s_hashTable 3
37  media                          CSSMediaRuleConstants::Media            DontDelete|ReadOnly
38  cssRules                       CSSMediaRuleConstants::CssRules         DontDelete|ReadOnly
39 @end
40 @begin CSSMediaRuleProto::s_hashTable 3
41  insertRule             CSSMediaRuleConstants::InsertRule    DontDelete|Function 2
42  deleteRule             CSSMediaRuleConstants::DeleteRule    DontDelete|Function 1
43 @end
44 */
45
46 KDOM_IMPLEMENT_PROTOTYPE("CSSMediaRule", CSSMediaRuleProto, CSSMediaRuleProtoFunc)
47
48 Value CSSMediaRule::getValueProperty(ExecState *exec, int token) const
49 {
50         switch(token)
51         {
52                 case CSSMediaRuleConstants::Media:
53                         return safe_cache<MediaList>(exec, media());
54                 case CSSMediaRuleConstants::CssRules:
55                         return safe_cache<CSSRuleList>(exec, cssRules());
56                 default:
57                         kdWarning() << "Unhandled token in " << k_funcinfo << " : " << token << endl;
58         }
59
60         return Undefined();
61 }
62
63 Value CSSMediaRuleProtoFunc::call(ExecState *exec, Object &thisObj, const List &args)
64 {
65         KDOM_CHECK_THIS(CSSMediaRule)
66         KDOM_ENTER_SAFE
67
68         switch(id)
69         {
70                 case CSSMediaRuleConstants::InsertRule:
71                 {
72                         DOMString rule = toDOMString(exec, args[0]);
73                         unsigned long index = args[1].toUInt32(exec);
74                         return Number(obj.insertRule(rule, index));
75                 }
76                 case CSSMediaRuleConstants::DeleteRule:
77                 {
78                         unsigned long index = args[0].toUInt32(exec);
79                         obj.deleteRule(index);
80                         return Undefined();
81                 }
82                 default:
83                         kdWarning() << "Unhandled function id in " << k_funcinfo << " : " << id << endl;
84         }
85
86         KDOM_LEAVE_SAFE(DOMException)
87         return Undefined();
88 }
89
90 // The qdom way...
91 #define impl (static_cast<CSSMediaRuleImpl *>(d))
92
93 CSSMediaRule CSSMediaRule::null;
94
95 CSSMediaRule::CSSMediaRule() : CSSRule()
96 {
97 }
98
99 CSSMediaRule::CSSMediaRule(const CSSMediaRule &other) : CSSRule()
100 {
101         (*this) = other;
102 }
103
104 CSSMediaRule::CSSMediaRule(const CSSRule &other) : CSSRule()
105 {
106         (*this) = other;
107 }
108
109 CSSMediaRule::CSSMediaRule(CSSMediaRuleImpl *i) : CSSRule(i)
110 {
111 }
112
113 CSSMediaRule::~CSSMediaRule()
114 {
115 }
116
117 CSSMediaRule &CSSMediaRule::operator=(const CSSMediaRule &other)
118 {
119         CSSRule::operator=(other);
120         return *this;
121 }
122
123 KDOM_CSSRULE_DERIVED_ASSIGN_OP(CSSMediaRule, MEDIA_RULE)
124
125 MediaList CSSMediaRule::media() const
126 {
127         if(!d)
128                 return MediaList::null;
129
130         return MediaList(impl->media());
131 }
132
133 CSSRuleList CSSMediaRule::cssRules() const
134 {
135         if(!d)
136                 return CSSRuleList::null;
137
138         return CSSRuleList(impl->cssRules());
139 }
140
141 unsigned long CSSMediaRule::insertRule(const DOMString &rule, unsigned long index)
142 {
143         if(!d)
144                 return index;
145
146         return impl->insertRule(rule, index);
147 }
148
149 void CSSMediaRule::deleteRule(unsigned long index)
150 {
151         if(d)
152                 return impl->deleteRule(index);
153 }
154
155 // vim:ts=4:noet