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