Bug #: 4154
[WebKit-https.git] / SVGSupport / kdom / css / CSSRuleList.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 "CSSRuleImpl.h"
26 #include "CSSRuleList.h"
27 #include "CSSRuleListImpl.h"
28
29 #include "kdom/data/CSSConstants.h"
30 #include "CSSRuleList.lut.h"
31 using namespace KDOM;
32 using namespace KJS;
33
34 /*
35 @begin CSSRuleList::s_hashTable 2
36  length         CSSRuleListConstants::Length            DontDelete|ReadOnly
37 @end
38 @begin CSSRuleListProto::s_hashTable 2
39  item           CSSRuleListConstants::Item              DontDelete|Function 1
40 @end
41 */
42
43 KDOM_IMPLEMENT_PROTOTYPE("CSSRuleList", CSSRuleListProto, CSSRuleListProtoFunc)
44
45 Value CSSRuleList::getValueProperty(ExecState *, int token) const
46 {
47         switch(token)
48         {
49                 case CSSRuleListConstants::Length:
50                         return Number(length());
51                 default:
52                         kdWarning() << "Unhandled token in " << k_funcinfo << " : " << token << endl;
53         }
54
55         return Undefined();
56 }
57
58 Value CSSRuleListProtoFunc::call(ExecState *exec, Object &thisObj, const List &args)
59 {
60         KDOM_CHECK_THIS(CSSRuleList)
61
62         switch(id)
63         {
64                 case CSSRuleListConstants::Item:
65                 {
66                         unsigned long index = args[0].toUInt32(exec);
67                         return getDOMCSSRule(exec, obj.item(index));
68                 }
69                 default:
70                         kdWarning() << "Unhandled function id in " << k_funcinfo << " : " << id << endl;
71         }
72
73         return Undefined();
74 }
75
76 CSSRuleList CSSRuleList::null;
77
78 CSSRuleList::CSSRuleList() : d(0)
79 {
80 }
81
82 CSSRuleList::CSSRuleList(CSSRuleListImpl *i) : d(i)
83 {
84         if(d)
85                 d->ref();
86 }
87
88 CSSRuleList::CSSRuleList(StyleListImpl *lst)
89 {
90         d = new CSSRuleListImpl();
91         d->ref();
92         
93         if(lst)
94         {
95                 for(unsigned long i = 0; i < lst->length() ; ++i)
96                 {
97                         StyleBaseImpl *style = lst->item(i);
98                         if(style->isRule())
99                                 d->insertRule(static_cast<CSSRuleImpl *>(style), d->length());
100                 }
101         }
102 }
103
104 CSSRuleList::CSSRuleList(const CSSRuleList &other) : d(0)
105 {
106         (*this) = other;
107 }
108
109 KDOM_IMPL_DTOR_ASSIGN_OP(CSSRuleList)
110
111 unsigned long CSSRuleList::length() const
112 {
113         if(!d)
114                 return 0;
115
116         return d->length();
117 }
118
119 CSSRule CSSRuleList::item(unsigned long index) const
120 {
121         if(!d)
122                 return CSSRule::null;
123
124         return CSSRule(d->item(index));
125 }
126
127 // vim:ts=4:noet