128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu/*
228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * Copyright (C) Research In Motion Limited 2010. All rights reserved.
328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu *
428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * This library is free software; you can redistribute it and/or
528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * modify it under the terms of the GNU Library General Public
628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * License as published by the Free Software Foundation; either
728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * version 2 of the License, or (at your option) any later version.
828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu *
928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * This library is distributed in the hope that it will be useful,
1028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * but WITHOUT ANY WARRANTY; without even the implied warranty of
1128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * Library General Public License for more details.
1328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu *
1428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * You should have received a copy of the GNU Library General Public License
1528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * along with this library; see the file COPYING.LIB.  If not, write to
1628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
1728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu * Boston, MA 02110-1301, USA.
1828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu */
1928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
2028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#ifndef SVGStaticListPropertyTearOff_h
2128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#define SVGStaticListPropertyTearOff_h
2228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
2328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#if ENABLE(SVG)
2428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#include "SVGListProperty.h"
2528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
2628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhunamespace WebCore {
2728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
2828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhutemplate<typename PropertyType>
2928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhuclass SVGStaticListPropertyTearOff : public SVGListProperty<PropertyType> {
3028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhupublic:
3128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    typedef SVGListProperty<PropertyType> Base;
3228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
3328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    typedef typename SVGPropertyTraits<PropertyType>::ListItemType ListItemType;
3428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    typedef SVGPropertyTearOff<ListItemType> ListItemTearOff;
3528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
3628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    static PassRefPtr<SVGStaticListPropertyTearOff<PropertyType> > create(SVGElement* contextElement, PropertyType& values)
3728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    {
3828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        ASSERT(contextElement);
3928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        return adoptRef(new SVGStaticListPropertyTearOff<PropertyType>(contextElement, values));
4028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    }
4128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
4228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    // SVGList API
4328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    void clear(ExceptionCode& ec)
4428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    {
4528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        Base::clearValues(m_values, ec);
4628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    }
4728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
4828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    unsigned numberOfItems() const
4928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    {
5028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        return Base::numberOfItemsValues(m_values);
5128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    }
5228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
5328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    ListItemType initialize(const ListItemType& newItem, ExceptionCode& ec)
5428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    {
5528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        return Base::initializeValues(m_values, newItem, ec);
5628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    }
5728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
5828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    ListItemType getItem(unsigned index, ExceptionCode& ec)
5928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    {
6028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        return Base::getItemValues(m_values, index, ec);
6128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    }
6228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
6328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    ListItemType insertItemBefore(const ListItemType& newItem, unsigned index, ExceptionCode& ec)
6428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    {
6528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        return Base::insertItemBeforeValues(m_values, newItem, index, ec);
6628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    }
6728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
6828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    ListItemType replaceItem(const ListItemType& newItem, unsigned index, ExceptionCode& ec)
6928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    {
7028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        return Base::replaceItemValues(m_values, newItem, index, ec);
7128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    }
7228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
7328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    ListItemType removeItem(unsigned index, ExceptionCode& ec)
7428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    {
7528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        return Base::removeItemValues(m_values, index, ec);
7628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    }
7728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
7828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    ListItemType appendItem(const ListItemType& newItem, ExceptionCode& ec)
7928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    {
8028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        return Base::appendItemValues(m_values, newItem, ec);
8128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    }
8228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
8328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhuprivate:
8428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    SVGStaticListPropertyTearOff(SVGElement* contextElement, PropertyType& values)
8528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        : SVGListProperty<PropertyType>(UndefinedRole)
8628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        , m_contextElement(contextElement)
8728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        , m_values(values)
8828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    {
8928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    }
9028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
9128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    virtual void commitChange()
9228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    {
9328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        m_values.commitChange(m_contextElement.get());
9428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    }
9528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
9628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    virtual void processIncomingListItemValue(const ListItemType&, unsigned*)
9728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    {
9828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        // no-op for static lists
9928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    }
10028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
10128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    virtual void processIncomingListItemWrapper(RefPtr<ListItemTearOff>&, unsigned*)
10228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    {
10328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu        ASSERT_NOT_REACHED();
10428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    }
10528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
10628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhuprivate:
10728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    RefPtr<SVGElement> m_contextElement;
10828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    PropertyType& m_values;
10928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu};
11028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
11128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu}
11228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
11328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#endif // ENABLE(SVG)
11428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#endif // SVGStaticListPropertyTearOff_h
115