1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/**
2635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * This library is free software; you can redistribute it and/or
5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modify it under the terms of the GNU Library General Public
6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * License as published by the Free Software Foundation; either
7635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * version 2 of the License, or (at your option) any later version.
8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * This library is distributed in the hope that it will be useful,
10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of
11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Library General Public License for more details.
13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * You should have received a copy of the GNU Library General Public License
15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * along with this library; see the file COPYING.LIB.  If not, write to
16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Boston, MA 02110-1301, USA.
18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *
19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */
20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "config.h"
22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if ENABLE(WML)
24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLTaskElement.h"
25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLAnchorElement.h"
27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLDoElement.h"
28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLNames.h"
29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLOnEventElement.h"
30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLPageState.h"
31635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLSetvarElement.h"
32635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectnamespace WebCore {
34635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
35635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectusing namespace WMLNames;
36635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
37635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectWMLTaskElement::WMLTaskElement(const QualifiedName& tagName, Document* doc)
38635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    : WMLElement(tagName, doc)
39635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
40635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
41635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
42635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectWMLTaskElement::~WMLTaskElement()
43635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
44635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
46635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid WMLTaskElement::insertedIntoDocument()
47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
48635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    WMLElement::insertedIntoDocument();
49635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
50a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    ContainerNode* parent = parentNode();
51635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (!parent || !parent->isWMLElement())
52635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        return;
53635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
54635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (parent->hasTagName(anchorTag))
55635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        static_cast<WMLAnchorElement*>(parent)->registerTask(this);
56635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    else if (parent->hasTagName(doTag))
57635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        static_cast<WMLDoElement*>(parent)->registerTask(this);
58635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    else if (parent->hasTagName(oneventTag))
59635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        static_cast<WMLOnEventElement*>(parent)->registerTask(this);
60635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
61635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid WMLTaskElement::removedFromDocument()
630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
64a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    ContainerNode* parent = parentNode();
650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (parent && parent->isWMLElement()) {
660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        if (parent->hasTagName(anchorTag))
670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            static_cast<WMLAnchorElement*>(parent)->deregisterTask(this);
680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        else if (parent->hasTagName(doTag))
690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            static_cast<WMLDoElement*>(parent)->deregisterTask(this);
700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        else if (parent->hasTagName(oneventTag))
710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            static_cast<WMLOnEventElement*>(parent)->deregisterTask(this);
720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    WMLElement::removedFromDocument();
750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
77635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid WMLTaskElement::registerVariableSetter(WMLSetvarElement* element)
78635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    ASSERT(m_variableSetterElements.find(element) == WTF::notFound);
800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_variableSetterElements.append(element);
810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid WMLTaskElement::deregisterVariableSetter(WMLSetvarElement* element)
840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    size_t position = m_variableSetterElements.find(element);
860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    ASSERT(position != WTF::notFound);
870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_variableSetterElements.remove(position);
88635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
89635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
90635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid WMLTaskElement::storeVariableState(WMLPageState* pageState)
91635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
92635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    if (!pageState || m_variableSetterElements.isEmpty())
93635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        return;
94635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
95635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    WMLVariableMap variables;
960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Vector<WMLSetvarElement*>::iterator it = m_variableSetterElements.begin();
970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Vector<WMLSetvarElement*>::iterator end = m_variableSetterElements.end();
98635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
99635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    for (; it != end; ++it) {
100635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        WMLSetvarElement* setterElement = (*it);
1010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        String name = setterElement->name();
1030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        if (name.isEmpty())
104635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            continue;
105635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        String value = setterElement->value();
1070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        variables.set(name, value);
108635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // The next setvar element may depend on this variable value. It's safe to store the current
1100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // name value pair in the page state, as the whole page state is replaced soon by this new map
1110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        pageState->storeVariable(name, value);
1120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
113635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
114635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    pageState->storeVariables(variables);
115635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
116635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
117635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
118635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
119635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif
120