javauis/m2g_qt/javasrc/com/nokia/microedition/m2g/M2GDocument.java
author hgs
Fri, 29 Oct 2010 11:49:32 +0300
changeset 87 1627c337e51e
parent 80 d6dafc5d983f
permissions -rw-r--r--
v2.2.21_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
80
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     1
/*
87
1627c337e51e v2.2.21_1
hgs
parents: 80
diff changeset
     2
* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
80
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     3
* All rights reserved.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     8
*
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     9
* Initial Contributors:
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    11
*
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    12
* Contributors:
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    13
*
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    14
* Description:
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    15
*
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    16
*/
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    17
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    18
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    19
package com.nokia.microedition.m2g;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    20
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    21
import org.w3c.dom.*;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    22
import org.w3c.dom.events.*;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    23
import org.w3c.dom.svg.SVGElement;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    24
import java.io.IOException;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    25
import java.util.Hashtable;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    26
import java.lang.ref.WeakReference;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    27
import java.util.Vector;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    28
import java.util.Enumeration;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    29
import javax.microedition.m2g.*;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    30
import com.nokia.microedition.m2g.connection.*;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    31
import com.nokia.mj.impl.utils.Logger;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    32
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    33
public class M2GDocument extends M2GObject
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    34
        implements Document, M2GConnectionPolicyHandler
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    35
{
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    36
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    37
    // STATIC CONSTANTS
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    38
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    39
    // Error constants
87
1627c337e51e v2.2.21_1
hgs
parents: 80
diff changeset
    40
80
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    41
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    42
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    43
    // VARIABLES
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    44
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    45
    private M2GEventDispatcher iEventDispatcher = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    46
    private ExternalResourceHandler iResourceHandler = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    47
    private M2GSVGImage iImage = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    48
    private M2GSVGSVGElement iRootElement = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    49
    private final M2GLiveElements iLiveElements = new M2GLiveElements(true);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    50
    private M2GConnectionPolicy iConnectionPolicy =
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    51
        M2GConnectionFactory.getDefaultPolicy();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    52
    boolean iConnectionRight = true;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    53
    Vector iExternalResources = new Vector();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    54
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    55
    /** A base url from where a document was downloaded */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    56
    String iBaseUrl;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    57
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    58
    /** The suffix of the url from where the document was open*/
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    59
    String iSuffixUrl;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    60
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    61
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    62
       * Observer to be notified about changes in DOM
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    63
       * @see M2GDOMChangeObserver.notifyDOMChange()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    64
       */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    65
    private M2GDOMChangeObserver  iDOMChangeObserver = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    66
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    67
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    68
    // METHODS
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    69
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    70
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    71
     * Creates new document object. If aData is null or empty then
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    72
     * an empty document is create.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    73
     * @param aImage Svg image
87
1627c337e51e v2.2.21_1
hgs
parents: 80
diff changeset
    74
     * @param aBaseUrl A base url from where a document is downloaded.
80
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    75
     * @param aSuffixUrl A suffix url from where a document is downloaded
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    76
     * @param aData Plain text svg data
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    77
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    78
    public M2GDocument(M2GSVGImage aImage, String aBaseUrl, String aSuffixUrl,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    79
                       String aData)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    80
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    81
        super();
87
1627c337e51e v2.2.21_1
hgs
parents: 80
diff changeset
    82
80
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    83
        iImage      = aImage;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    84
        iBaseUrl    = aBaseUrl;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    85
        iSuffixUrl  = aSuffixUrl;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    86
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    87
        setHandle(_createDocument(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    88
                      getNativeSVGProxyHandle(),
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    89
                      aData)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    90
                 );
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    91
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    92
        doConstruct();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    93
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    94
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    95
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    96
    * @see org.w3c.dom.Node#appendChild()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    97
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    98
    public Node appendChild(Node newChild) throws DOMException
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    99
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   100
        // Optimization: if(!getConnectionPolicy().getAccessRight())
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   101
        if (!iConnectionRight)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   102
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   103
            Logger.ELOG(Logger.EJavaUI, "appendChild() - access rights failure");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   104
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   105
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   106
        Logger.ELOG(Logger.EJavaUI, "appendChild() - exception: "
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   107
                    + /*SF*/"Cannot appendChild to a Document node."/*SF*/);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   108
        throw new DOMException(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   109
            DOMException.HIERARCHY_REQUEST_ERR,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   110
            /*SF*/"Cannot appendChild to a Document node."/*SF*/);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   111
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   112
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   113
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   114
     * Appends external resource uri to internal container
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   115
     * @param aUri External resource uri
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   116
     * @return true if succeeds
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   117
       */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   118
    boolean appendExternalResourceURI(String aUri)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   119
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   120
        boolean result = false;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   121
        if (aUri != null && !aUri.equals(""))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   122
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   123
            synchronized (iExternalResources)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   124
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   125
                if (!iExternalResources.contains(aUri))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   126
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   127
                    iExternalResources.addElement(aUri);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   128
                    result = true;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   129
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   130
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   131
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   132
        Logger.LOG(Logger.EJavaUI, Logger.EInfo, "appendExternalResourceURI() uri=" +
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   133
                   ((aUri != null) ? aUri : "null") + ", result=" + result + " - end");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   134
        return result;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   135
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   136
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   137
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   138
     * Checks if document contains the element
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   139
     * @param id
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   140
     * @return true if document contains the element
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   141
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   142
    public boolean containsElement(String id)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   143
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   144
        if (id == null || id.equals(""))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   145
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   146
            return false;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   147
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   148
        int handle = _getElementById(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   149
                         getNativeSVGProxyHandle(),
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   150
                         getHandle(), id);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   151
        return M2GObject.checkHandle(handle);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   152
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   153
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   154
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   155
     * Check if external resource uri exists in internal container
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   156
     * @param aUri External resource uri
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   157
     * @return true if uri exists in container
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   158
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   159
    boolean containsExternalResourceURI(String aUri)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   160
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   161
        boolean result = false;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   162
        if (aUri != null && !aUri.equals(""))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   163
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   164
            synchronized (iExternalResources)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   165
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   166
                result = iExternalResources.contains(aUri);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   167
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   168
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   169
        Logger.LOG(Logger.EJavaUI, Logger.EInfo, "containsExternalResourceURI() uri=" +
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   170
                   ((aUri != null) ? aUri : "null") + ", result=" + result + " - end");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   171
        return result;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   172
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   173
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   174
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   175
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   176
     * @see org.w3c.dom.Document#createElementNS()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   177
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   178
    public Element createElementNS(String namespaceURI, String qualifiedName)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   179
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   180
        if (namespaceURI == null || namespaceURI.equals(""))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   181
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   182
            Logger.ELOG(Logger.EJavaUI,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   183
                        "createElementNS() exception because namespace is null. qualifiedName="
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   184
                        + qualifiedName);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   185
            throw new NullPointerException(/*SF*/"The namespace URI is null."/*SF*/);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   186
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   187
        if (qualifiedName == null || qualifiedName.equals(""))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   188
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   189
            Logger.ELOG(Logger.EJavaUI,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   190
                        "createElementNS() exception - " + namespaceURI + ", "
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   191
                        + qualifiedName);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   192
            throw new NullPointerException(/*SF*/"The qualifiedName is null."/*SF*/);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   193
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   194
        // Checks element validity
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   195
        if (!M2GSVGConstants.isQualifiedElement(qualifiedName))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   196
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   197
            Logger.ELOG(Logger.EJavaUI, "createElementNS() exception - "
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   198
                        + namespaceURI + ", " + qualifiedName);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   199
            throw new DOMException(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   200
                DOMException.NOT_SUPPORTED_ERR,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   201
                /*SF*/"The type of element is not supported by the implementation."/*SF*/);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   202
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   203
        // Checks namespace validity
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   204
        if (!namespaceURI.equals(M2GSVGConstants.SVG_NAMESPACE_URI))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   205
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   206
            Logger.ELOG(Logger.EJavaUI, "createElementNS() exception - "
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   207
                        + namespaceURI + ", " + qualifiedName);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   208
            throw new DOMException(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   209
                DOMException.NOT_SUPPORTED_ERR,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   210
                /*SF*/"The URI is not the SVG namespace URI."/*SF*/);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   211
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   212
        // Creates native element. A native document owns the new element.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   213
        // NOTE: The element is NOT located in the DOM tree yet.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   214
        int elementHandle = _createElementNS(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   215
                                getNativeSVGProxyHandle(),
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   216
                                M2GSVGConstants.parseElementTypeId(qualifiedName),
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   217
                                getHandle());
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   218
        M2GSVGLocatableElement element = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   219
        // Checks native handle validity
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   220
        if (M2GObject.checkHandle(elementHandle))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   221
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   222
            // Creates java element object
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   223
            element = new M2GSVGLocatableElement(elementHandle, this);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   224
            registerLiveElement(element, new Integer(elementHandle));
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   225
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   226
        else
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   227
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   228
            Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   229
                       "createElementNS(): " + qualifiedName + " - end, NOK!!!");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   230
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   231
        return element;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   232
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   233
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   234
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   235
     * Checks document validity.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   236
     * @return true if valid
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   237
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   238
    public boolean doCheckValidity() throws IOException
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   239
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   240
        boolean result = false;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   241
        if (isHandleValid())
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   242
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   243
            M2GSVGSVGElement root = getRootElement();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   244
            if (root != null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   245
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   246
                // Check svg version and base profile
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   247
                root.checkVersionAndProfile();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   248
                result = true;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   249
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   250
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   251
        return result;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   252
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   253
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   254
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   255
     * Cleanup
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   256
     * @see com.nokia.microedition.m2g.M2GObject#doCleanup()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   257
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   258
    public void doCleanup()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   259
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   260
        if (isHandleValid())
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   261
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   262
            _deleteDocument(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   263
                getNativeSVGProxyHandle(),
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   264
                getHandle());
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   265
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   266
        iImage = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   267
        if (iEventDispatcher != null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   268
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   269
            iEventDispatcher.clear();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   270
            iEventDispatcher = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   271
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   272
        resetHandles();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   273
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   274
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   275
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   276
     * @see com.nokia.microedition.m2g.M2GObject#doConstruct()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   277
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   278
    protected void doConstruct()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   279
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   280
        super.doConstruct();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   281
        iEventDispatcher = new M2GEventDispatcher();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   282
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   283
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   284
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   285
     * Find an element from the handle-to-element map.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   286
     * @see M2GLiveElements#findElement()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   287
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   288
    public SVGElement findLiveElement(Integer aElementHandle)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   289
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   290
        return iLiveElements.findElement(aElementHandle);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   291
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   292
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   293
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   294
     * Get connection policy
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   295
     * @see M2GConnectionListener#getConnectionPolicy()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   296
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   297
    public M2GConnectionPolicy getConnectionPolicy()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   298
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   299
        return iConnectionPolicy;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   300
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   301
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   302
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   303
     * @see org.w3c.dom.Document#getDocumentElement()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   304
       */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   305
    public Element getDocumentElement()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   306
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   307
        // Optimization: if(!getConnectionPolicy().getAccessRight())
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   308
        if (!iConnectionRight)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   309
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   310
            Logger.ELOG(Logger.EJavaUI,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   311
                        "getDocumentElement() - access rights failure");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   312
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   313
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   314
        return getRootElement();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   315
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   316
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   317
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   318
    * @see org.w3c.dom.Document#getElementById()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   319
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   320
    public Element getElementById(String id)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   321
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   322
        // Optimization: if(!getConnectionPolicy().getAccessRight())
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   323
        if (!iConnectionRight)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   324
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   325
            Logger.ELOG(Logger.EJavaUI, "getElementById() - access rights failure");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   326
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   327
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   328
        if (id == null || id.equals(""))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   329
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   330
            Logger.ELOG(Logger.EJavaUI, "getElementById() - exception");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   331
            throw new NullPointerException(/*SF*/"The ID is null."/*SF*/);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   332
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   333
        int elementHandle = _getElementById(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   334
                                getNativeSVGProxyHandle(),
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   335
                                getHandle(),
87
1627c337e51e v2.2.21_1
hgs
parents: 80
diff changeset
   336
                                id);
80
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   337
        return M2GSVGElement.buildElement(elementHandle, this);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   338
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   339
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   340
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   341
     * Returns the image
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   342
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   343
    public M2GSVGImage getImage()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   344
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   345
        return iImage;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   346
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   347
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   348
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   349
     * @see org.w3c.dom.Node#getLocalName()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   350
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   351
    public String getLocalName()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   352
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   353
        // Optimization: if(!getConnectionPolicy().getAccessRight())
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   354
        if (!iConnectionRight)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   355
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   356
            Logger.ELOG(Logger.EJavaUI, "getLocalName() - access rights failure");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   357
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   358
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   359
        return null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   360
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   361
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   362
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   363
    * @see org.w3c.dom.Node#getNamespaceURI()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   364
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   365
    public String getNamespaceURI()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   366
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   367
        // Optimization: if(!getConnectionPolicy().getAccessRight())
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   368
        if (!iConnectionRight)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   369
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   370
            Logger.ELOG(Logger.EJavaUI, "getNamespaceURI() - access rights failure");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   371
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   372
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   373
        return null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   374
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   375
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   376
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   377
     * @see org.w3c.dom.Node#getParentNode()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   378
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   379
    public Node getParentNode()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   380
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   381
        // Optimization: if(!getConnectionPolicy().getAccessRight())
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   382
        if (!iConnectionRight)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   383
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   384
            Logger.ELOG(Logger.EJavaUI,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   385
                        "getParentNode() - access rights failure");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   386
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   387
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   388
        return null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   389
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   390
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   391
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   392
     * Get root element
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   393
     * @return M2GSVGSVGElement
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   394
       */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   395
    public M2GSVGSVGElement getRootElement()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   396
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   397
        if (iRootElement == null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   398
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   399
            iRootElement = M2GSVGSVGElement.buildRootElement(this);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   400
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   401
        return iRootElement;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   402
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   403
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   404
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   405
     * @see javax.microedition.m2g.ScalableImage#getViewportHeight()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   406
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   407
    public int getViewportHeight()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   408
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   409
        return _getViewportHeight(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   410
                   getNativeSVGProxyHandle(),
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   411
                   getHandle());
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   412
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   413
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   414
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   415
     * @see javax.microedition.m2g.ScalableImage#getViewportWidth()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   416
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   417
    public int getViewportWidth()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   418
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   419
        return _getViewportWidth(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   420
                   getNativeSVGProxyHandle(),
87
1627c337e51e v2.2.21_1
hgs
parents: 80
diff changeset
   421
                   getHandle());
80
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   422
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   423
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   424
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   425
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   426
     * Called by SVGImage upon creating an Event instance
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   427
     * Calls the handleEvent() of all the listeners of the event
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   428
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   429
    public void handleEvent(Event aEvent)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   430
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   431
        iEventDispatcher.handleEvent(aEvent);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   432
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   433
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   434
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   435
    * @see org.w3c.dom.Node#insertBefore()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   436
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   437
    public Node insertBefore(Node newChild, Node refChild)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   438
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   439
        // Optimization: if(!getConnectionPolicy().getAccessRight())
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   440
        if (!iConnectionRight)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   441
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   442
            Logger.ELOG(Logger.EJavaUI, "insertBefore() - access rights failure");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   443
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   444
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   445
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   446
        Logger.ELOG(Logger.EJavaUI, "insertBefore() DOMException");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   447
        throw new DOMException(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   448
            DOMException.HIERARCHY_REQUEST_ERR,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   449
            /*SF*/"Cannot insertBefore a Document node."/*SF*/);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   450
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   451
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   452
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   453
     * Checks if element is in DOM
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   454
     * @param aElementHandle -
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   455
     * @return true if element is in DOM
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   456
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   457
    public boolean isElementInDOM(int aElementHandle)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   458
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   459
        if (!M2GObject.checkHandle(aElementHandle))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   460
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   461
            return false;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   462
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   463
        return (_isElementInDOM(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   464
                    getNativeSVGProxyHandle(),
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   465
                    getHandle(),
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   466
                    aElementHandle) > 0 ? true : false);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   467
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   468
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   469
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   470
     * The external resource handler is invoked
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   471
     * for any external resource referenced in the document.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   472
     * @param aUri External resource referenced in the document
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   473
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   474
    public void invokeResourceHandler(String aUri)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   475
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   476
        Logger.LOG(Logger.EJavaUI, Logger.EInfo, "invokeResourceHandler() - URI="
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   477
                   + aUri + " - begin");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   478
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   479
        if ((iImage != null) && (iResourceHandler != null) &&
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   480
                (aUri != null) && (aUri.length() > 4))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   481
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   482
            StringBuffer urlBuf = new StringBuffer();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   483
            // The uri format for external resource must include the base url
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   484
            // from which the document was loaded. It's also checked that the
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   485
            // url read from svg doesn't contain already the base part.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   486
            if ((iBaseUrl != null) &&
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   487
                    !iBaseUrl.equals("") &&
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   488
                    (aUri.indexOf(iBaseUrl) == -1))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   489
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   490
                Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   491
                           "invokeResourceHandler() append base url=" + iBaseUrl);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   492
                urlBuf.append(iBaseUrl);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   493
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   494
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   495
            urlBuf.append(aUri);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   496
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   497
            // append the url suffix in case of drm open mode
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   498
            if (iSuffixUrl != null && !iSuffixUrl.equals(""))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   499
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   500
                Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   501
                           "invokeResourceHandler() append suffix url=" + iSuffixUrl);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   502
                urlBuf.append(iSuffixUrl);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   503
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   504
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   505
            Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   506
                       "invokeResourceHandler() handler uri=" + urlBuf.toString());
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   507
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   508
            iResourceHandler.requestResource(iImage, urlBuf.toString());
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   509
            appendExternalResourceURI(aUri);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   510
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   511
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   512
        Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   513
                   "invokeResourceHandler() - URI:" + aUri + " - end");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   514
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   515
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   516
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   517
     * Registers an event target and an event listener.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   518
     * @param aTarget Target element
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   519
     * @param aType Event type
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   520
     * @param aListener Event listener
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   521
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   522
    void register(EventTarget aTarget, String aType, EventListener aListener)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   523
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   524
        iEventDispatcher.register(aTarget, aType, aListener);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   525
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   526
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   527
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   528
     * Register element
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   529
     * @see M2GLiveElements#registerElement()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   530
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   531
    public void registerLiveElement(SVGElement aElement, Integer aElementHandle)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   532
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   533
        iLiveElements.registerElement(aElement, aElementHandle);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   534
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   535
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   536
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   537
     * @see org.w3c.dom.Node#removeChild()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   538
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   539
    public Node removeChild(Node oldChild) throws DOMException
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   540
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   541
        // Optimization: if(!getConnectionPolicy().getAccessRight())
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   542
        if (!iConnectionRight)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   543
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   544
            Logger.ELOG(Logger.EJavaUI, "removeChild() - access rights failure");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   545
            throw new SecurityException(M2GSVGConstants.ACCESS_RIGHTS_ESTR);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   546
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   547
        Logger.ELOG(Logger.EJavaUI, "removeChild() DOMException");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   548
        throw new DOMException(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   549
            DOMException.NOT_SUPPORTED_ERR,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   550
            /*SF*/"Cannot removeChild from a Document node."/*SF*/);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   551
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   552
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   553
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   554
     * Removes external resource uri from internal container
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   555
     * @param aUri External resource uri
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   556
     * @return true if succeeds
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   557
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   558
    boolean removeExternalResourceURI(String aUri)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   559
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   560
        boolean result = false;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   561
        if (aUri != null && !aUri.equals(""))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   562
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   563
            synchronized (iExternalResources)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   564
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   565
                result = iExternalResources.removeElement(aUri);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   566
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   567
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   568
        Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   569
                   "removeExternalResourceURI() uri="
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   570
                   + ((aUri != null) ? aUri : "null") + ", result=" + result + " - end");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   571
        return result;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   572
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   573
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   574
    /*
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   575
     * @see com.nokia.microedition.m2g.M2GSVGImage#requestCompleted()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   576
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   577
    public int requestCompleted(String aUri, byte[] aResourceData)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   578
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   579
        Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   580
                   "requestCompleted() uri=" + aUri + " - begin");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   581
        // If the aUri contains a base part it will be cut off
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   582
        if (!aUri.equals("") &&
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   583
                (iBaseUrl != null) &&
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   584
                !containsExternalResourceURI(aUri) &&
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   585
                (aUri.indexOf(iBaseUrl, 0) != -1))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   586
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   587
            aUri = aUri.substring(iBaseUrl.length(), aUri.length());
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   588
            Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   589
                       "requestCompleted() uri when base part is cut off=" + aUri);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   590
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   591
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   592
        // Execute tha request command.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   593
        int status = _requestCompleted(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   594
                         getNativeSVGProxyHandle(),
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   595
                         getHandle(), aUri, aResourceData);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   596
        if ((status == 0) || aUri.equals(""))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   597
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   598
            Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   599
                       "requestCompleted() remove URI=" + aUri);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   600
            removeExternalResourceURI(aUri);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   601
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   602
        return status;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   603
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   604
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   605
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   606
     * Set connection policy
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   607
     * @see M2GConnectionListener#setConnectionPolicy()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   608
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   609
    public void setConnectionPolicy(M2GConnectionPolicy aConnectionPolicy)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   610
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   611
        iConnectionPolicy = aConnectionPolicy;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   612
        if (iConnectionPolicy != null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   613
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   614
            iConnectionRight = iConnectionPolicy.getAccessRight();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   615
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   616
        else
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   617
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   618
            iConnectionRight = true;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   619
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   620
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   621
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   622
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   623
     * Set image
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   624
     * @param aImage Image
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   625
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   626
    public void setImage(M2GSVGImage aImage)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   627
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   628
        iImage = aImage;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   629
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   630
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   631
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   632
     * Set external resource handler
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   633
     * @param aHandler External resource handler
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   634
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   635
    public void setResourceHandler(ExternalResourceHandler aHandler)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   636
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   637
        iResourceHandler = aHandler;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   638
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   639
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   640
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   641
     * @see javax.microedition.m2g.ScalableImage#setViewportHeight()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   642
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   643
    public void setViewportHeight(int height)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   644
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   645
        Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   646
                   "setViewportHeight():" + height + " - begin");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   647
        if (height < 0)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   648
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   649
            Logger.ELOG(Logger.EJavaUI, "setViewportHeight():"
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   650
                        + height + " - IllegalArgumentException is thrown");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   651
            throw new IllegalArgumentException(/*SF*/"The height is negative."/*SF*/);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   652
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   653
        _setViewportHeight(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   654
            getNativeSVGProxyHandle(),
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   655
            getHandle(),
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   656
            height);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   657
        Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   658
                   "setViewportHeight():" + height + " - end");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   659
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   660
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   661
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   662
     * @see javax.microedition.m2g.ScalableImage#setViewportWidth()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   663
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   664
    public void setViewportWidth(int width)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   665
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   666
        Logger.LOG(Logger.EJavaUI, Logger.EInfo, "setViewportWidth:" + width + " - begin");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   667
        if (width < 0)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   668
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   669
            Logger.ELOG(Logger.EJavaUI, "setViewportWidth():"
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   670
                        + width + " - IllegalArgumentException is thrown");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   671
            throw new IllegalArgumentException(/*SF*/"The width is negative."/*SF*/);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   672
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   673
        _setViewportWidth(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   674
            getNativeSVGProxyHandle(),
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   675
            getHandle(),
87
1627c337e51e v2.2.21_1
hgs
parents: 80
diff changeset
   676
            width);
80
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   677
        Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   678
                   "setViewportWidth:" + width + " - end");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   679
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   680
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   681
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   682
     * Unregister event listener
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   683
     * @param aTarget Target element
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   684
     * @param aType Event type
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   685
     * @param aListener Event listener
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   686
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   687
    void unregister(EventTarget aTarget, String aType, EventListener aListener)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   688
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   689
        iEventDispatcher.unregister(aTarget, aType, aListener);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   690
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   691
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   692
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   693
     * Unregister an element from the handle-to-element map
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   694
     * @see M2GLiveElements#unregisterElement()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   695
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   696
    public void unregisterLiveElement(Integer aElementHandle)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   697
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   698
        iLiveElements.unregisterElement(aElementHandle);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   699
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   700
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   701
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   702
    // INNER CLASSES
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   703
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   704
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   705
     * M2GLiveElements
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   706
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   707
    class M2GLiveElements
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   708
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   709
        private Hashtable iLiveElements = new Hashtable();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   710
        private boolean iUseWeakReference;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   711
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   712
        /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   713
         * Constructor
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   714
         */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   715
        public M2GLiveElements(boolean aUseWeakReference)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   716
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   717
            iUseWeakReference = aUseWeakReference;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   718
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   719
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   720
        /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   721
        * Find an element from the handle-to-element map.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   722
        * @param aElementHandle Handle
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   723
        * @return SVGElement. Null if not found
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   724
        */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   725
        public SVGElement findElement(Integer aElementHandle)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   726
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   727
            SVGElement element = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   728
            Object weakObject = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   729
            Object object = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   730
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   731
            synchronized (this)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   732
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   733
                Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   734
                           "** findElement() handle: " + aElementHandle + " - begin **");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   735
                object = iLiveElements.get(aElementHandle);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   736
                if (object != null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   737
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   738
                    if (iUseWeakReference)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   739
                    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   740
                        weakObject = ((WeakReference)object).get();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   741
                        if (weakObject == null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   742
                        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   743
                            Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   744
                                       "** findElement() handle: " + aElementHandle
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   745
                                       + " is garbage collected. **");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   746
                            iLiveElements.remove(aElementHandle);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   747
                        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   748
                        else
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   749
                        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   750
                            element = (SVGElement)weakObject;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   751
                        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   752
                    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   753
                    else
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   754
                    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   755
                        element = (SVGElement)object;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   756
                    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   757
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   758
                Logger.LOG(Logger.EJavaUI, Logger.EInfo,"** findElement() handle: " + aElementHandle
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   759
                           + ((element != null) ? " FOUND" : " NOT FOUND") + " - end **");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   760
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   761
            return element;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   762
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   763
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   764
        /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   765
         * Register element
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   766
         * @param aElement Element
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   767
         * @param aElementHandle Handle
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   768
         */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   769
        public void registerElement(SVGElement aElement, Integer aElementHandle)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   770
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   771
            if (aElement == null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   772
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   773
                return;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   774
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   775
            synchronized (this)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   776
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   777
                if (iUseWeakReference)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   778
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   779
                    iLiveElements.put(aElementHandle, new WeakReference(aElement));
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   780
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   781
                else
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   782
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   783
                    iLiveElements.put(aElementHandle, aElement);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   784
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   785
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   786
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   787
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   788
        /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   789
         * Unregister an element from the handle-to-element map
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   790
         * @param aElementHandle Handle
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   791
         */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   792
        public void unregisterElement(Integer aElementHandle)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   793
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   794
            synchronized (this)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   795
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   796
                iLiveElements.remove(aElementHandle);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   797
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   798
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   799
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   800
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   801
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   802
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   803
     * M2GEventDispatcher
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   804
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   805
    protected class M2GEventDispatcher
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   806
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   807
        static public final int INDEX_UNDEFINED = -1;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   808
        static public final int INDEX_CLICK = 0;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   809
        static public final int INDEX_ACTIVATE = 1;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   810
        static public final int INDEX_FOCUS_IN = 2;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   811
        static public final int INDEX_FOCUS_OUT = 3;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   812
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   813
        Hashtable[] iEventTypes;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   814
        int iCurrentIndex;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   815
        Hashtable iDelayedRegistrations = new Hashtable();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   816
        M2GEventData iCurrentEventData = new M2GEventData();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   817
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   818
        /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   819
         * Constructor
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   820
         */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   821
        public M2GEventDispatcher()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   822
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   823
            iEventTypes = new Hashtable[4];
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   824
            iCurrentIndex = INDEX_UNDEFINED;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   825
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   826
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   827
        /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   828
         * Clear all
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   829
         */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   830
        public void clear()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   831
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   832
            synchronized (this)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   833
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   834
                for (int index = 0; index < iEventTypes.length; index++)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   835
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   836
                    if (iEventTypes[index] != null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   837
                    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   838
                        iEventTypes[index].clear();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   839
                        iEventTypes[index] = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   840
                    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   841
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   842
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   843
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   844
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   845
        /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   846
         * Execute delayed registration
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   847
         * If an EventListener is added to an EventTarget while it is
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   848
         * processing an event, it will not be triggered by the current actions.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   849
         */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   850
        private void doDelayedRegistration()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   851
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   852
            try
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   853
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   854
                Enumeration registrations = iDelayedRegistrations.elements();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   855
                while (registrations.hasMoreElements())
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   856
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   857
                    M2GEventData eventData =
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   858
                        (M2GEventData)registrations.nextElement();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   859
                    register(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   860
                        eventData.iTarget, eventData.iType, eventData.iListener);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   861
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   862
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   863
            catch (NullPointerException e)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   864
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   865
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   866
            iDelayedRegistrations.clear();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   867
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   868
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   869
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   870
        /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   871
         * Handle event
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   872
         * @param aEvent Event
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   873
         */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   874
        public void handleEvent(Event aEvent)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   875
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   876
            synchronized (this)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   877
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   878
                if ((aEvent == null) || !prepare(aEvent.getType()))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   879
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   880
                    Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   881
                               "handleEvent() FAILED - event invalid");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   882
                    return;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   883
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   884
                Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   885
                           "handleEvent(): " + aEvent.getType() + " - begin");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   886
                EventTarget target = aEvent.getCurrentTarget();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   887
                if (target == null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   888
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   889
                    Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   890
                               "handleEvent() FAILED - event's target is null");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   891
                    return;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   892
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   893
                // Check if wrapped event target
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   894
                if (target instanceof M2GSVGElementWrapper)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   895
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   896
                    target = ((M2GSVGElementWrapper)target).getWrappedTarget();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   897
                    if (target == null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   898
                    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   899
                        Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   900
                                   "handleEvent() FAILED - wrapped event's target is null");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   901
                        return;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   902
                    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   903
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   904
                if (iEventTypes[iCurrentIndex].containsKey(target))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   905
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   906
                    Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   907
                               "handleEvent() - target handling begin");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   908
                    iCurrentEventData.set(target, aEvent.getType(), null);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   909
                    Vector listeners =
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   910
                        (Vector)iEventTypes[iCurrentIndex].get(iCurrentEventData.iTarget);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   911
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   912
                    if (listeners != null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   913
                    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   914
                        Enumeration index = listeners.elements();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   915
                        while (index.hasMoreElements())
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   916
                        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   917
                            Object listener = index.nextElement();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   918
                            if ((listener != null) && (listener instanceof EventListener))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   919
                            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   920
                                ((EventListener)listener).handleEvent(aEvent);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   921
                            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   922
                            else
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   923
                            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   924
                                Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   925
                                           "handleEvent(): listener is null!");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   926
                            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   927
                        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   928
                    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   929
                    else
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   930
                    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   931
                        Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   932
                                   "handleEvent(): listeners is null!");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   933
                    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   934
                    iCurrentEventData.clear();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   935
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   936
                else
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   937
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   938
                    Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   939
                               "handleEvent(): target not found");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   940
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   941
                // Execute the delayed registration.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   942
                doDelayedRegistration();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   943
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   944
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   945
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   946
        /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   947
         * Check is event targets are equal
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   948
         * @param aLhs Left hand side
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   949
         * @param aRhs Right hand side
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   950
         * @return True if equal
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   951
         */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   952
        private boolean isEquals(EventTarget aLhs, EventTarget aRhs)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   953
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   954
            int lhsHandle = M2GObject.INVALID_NATIVE_HANDLE;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   955
            int rhsHandle = M2GObject.INVALID_NATIVE_HANDLE;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   956
            if (aLhs instanceof M2GSVGElement)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   957
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   958
                lhsHandle = ((M2GSVGElement)aLhs).getHandle();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   959
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   960
            if (aRhs instanceof M2GSVGElement)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   961
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   962
                rhsHandle = ((M2GSVGElement)aRhs).getHandle();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   963
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   964
            if ((lhsHandle == rhsHandle) && (lhsHandle != M2GObject.INVALID_NATIVE_HANDLE))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   965
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   966
                return true;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   967
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   968
            return false;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   969
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   970
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   971
        /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   972
         * Set an index that points to an event type hash table.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   973
         * The hash table is created if needed.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   974
         * @param aType Type
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   975
         */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   976
        private boolean prepare(String aType)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   977
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   978
            if (!setIndex(aType))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   979
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   980
                return false;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   981
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   982
            if (iEventTypes[iCurrentIndex] == null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   983
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   984
                iEventTypes[iCurrentIndex] = new Hashtable();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   985
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   986
            return true;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   987
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   988
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   989
        /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   990
         * Register an event target and an event listener pair
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   991
         * @param aTarget Target
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   992
         * @param aType Type
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   993
         * @param aListener Listener
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   994
         */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   995
        public void register(EventTarget aTarget,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   996
                             String aType,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   997
                             EventListener aListener)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   998
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   999
            // NOTE: no need to check validity of aTarget & aListener. It's
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1000
            // already done.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1001
            synchronized (this)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1002
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1003
                if (!prepare(aType))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1004
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1005
                    Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1006
                               "register() - failed: " + aType);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1007
                    return;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1008
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1009
                // Check if delayed registration is needed
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1010
                // If an EventListener is added to an EventTarget while it is
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1011
                // processing an event, it will not be triggered by
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1012
                // the current actions.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1013
                if ((iCurrentEventData.iType == aType) &&
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1014
                        isEquals(iCurrentEventData.iTarget, aTarget))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1015
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1016
                    try
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1017
                    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1018
                        iDelayedRegistrations.put(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1019
                            aListener,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1020
                            new M2GEventData(aTarget, aType, aListener));
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1021
                    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1022
                    catch (NullPointerException e)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1023
                    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1024
                    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1025
                    return;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1026
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1027
                Vector listeners = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1028
                if (iEventTypes[iCurrentIndex].containsKey(aTarget))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1029
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1030
                    listeners = (Vector)iEventTypes[iCurrentIndex].get(aTarget);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1031
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1032
                else
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1033
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1034
                    listeners = new Vector();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1035
                    iEventTypes[iCurrentIndex].put(aTarget, listeners);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1036
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1037
                // Don't add if the event target already contains the same listener
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1038
                // for the same event.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1039
                if (!listeners.contains(aListener))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1040
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1041
                    listeners.addElement(aListener);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1042
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1043
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1044
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1045
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1046
        /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1047
         * Set an event type container index
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1048
         * @param aType Type
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1049
         * @return False if the type is invalid
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1050
         */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1051
        private boolean setIndex(String aType)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1052
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1053
            if (aType.equals(M2GSVGConstants.EVENT_ACTIVATE))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1054
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1055
                iCurrentIndex = INDEX_ACTIVATE;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1056
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1057
            else if (aType.equals(M2GSVGConstants.EVENT_CLICK))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1058
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1059
                iCurrentIndex = INDEX_CLICK;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1060
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1061
            else if (aType.equals(M2GSVGConstants.EVENT_FOCUS_IN))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1062
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1063
                iCurrentIndex = INDEX_FOCUS_IN;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1064
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1065
            else if (aType.equals(M2GSVGConstants.EVENT_FOCUS_OUT))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1066
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1067
                iCurrentIndex = INDEX_FOCUS_OUT;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1068
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1069
            else
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1070
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1071
                Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1072
                           "setIndex() type:" + aType + " FALSE - end");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1073
                // Wrong event type
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1074
                iCurrentIndex = INDEX_UNDEFINED;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1075
                return false;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1076
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1077
            return true;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1078
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1079
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1080
        /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1081
         * Unregister an event target and an event listener pair
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1082
         * @param aTarget Target
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1083
         * @param aType Type
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1084
         * @param aListener Listener
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1085
         */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1086
        public void unregister(EventTarget aTarget,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1087
                               String aType,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1088
                               EventListener aListener)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1089
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1090
            synchronized (this)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1091
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1092
                if (!prepare(aType))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1093
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1094
                    return;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1095
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1096
                // Remove delayed registration
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1097
                iDelayedRegistrations.remove(aListener);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1098
                // Remove real registration
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1099
                Vector listeners = (Vector)iEventTypes[iCurrentIndex].get(aTarget);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1100
                boolean removed = false;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1101
                if (listeners != null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1102
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1103
                    removed = listeners.removeElement(aListener);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1104
                    if (listeners.isEmpty())
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1105
                    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1106
                        iEventTypes[iCurrentIndex].remove(aTarget);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1107
                    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1108
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1109
                if (removed)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1110
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1111
                    Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1112
                               "unregister() ok - end");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1113
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1114
                else
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1115
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1116
                    Logger.LOG(Logger.EJavaUI, Logger.EInfo,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1117
                               "unregister() failed - end");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1118
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1119
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1120
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1121
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1122
        /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1123
         * Helper class for handling delayed registration
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1124
         */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1125
        class M2GEventData
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1126
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1127
            public EventTarget iTarget = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1128
            public String iType = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1129
            public EventListener iListener = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1130
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1131
            /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1132
             * Ctor
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1133
             */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1134
            public M2GEventData()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1135
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1136
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1137
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1138
            /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1139
             * Ctor
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1140
             * @param aTarget Target
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1141
             * @param aType Event type
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1142
             * @param aListener Event listener
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1143
             */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1144
            public M2GEventData(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1145
                EventTarget aTarget,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1146
                String aType,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1147
                EventListener aListener)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1148
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1149
                set(aTarget, aType, aListener);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1150
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1151
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1152
            /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1153
             * Clearing
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1154
             */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1155
            public void clear()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1156
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1157
                iTarget = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1158
                iType = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1159
                iListener = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1160
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1161
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1162
            /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1163
             * Setter
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1164
             * @param aTarget Target
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1165
             * @param aType Event type
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1166
             * @param aListener Event listener
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1167
             */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1168
            public void set(EventTarget aTarget,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1169
                            String aType,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1170
                            EventListener aListener)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1171
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1172
                iTarget = aTarget;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1173
                iType = aType;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1174
                iListener = aListener;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1175
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1176
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1177
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1178
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1179
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1180
    // STATIC METHODS
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1181
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1182
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1183
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1184
     * Creates an empty SVG document. The document contains a
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1185
     * root <svg> element with default viewport size of 100x100.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1186
       * @param aImage -
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1187
       * @param aHander -
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1188
       * @return document object
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1189
       * @throws IllegalArgumentException
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1190
       * @throws IOException
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1191
       */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1192
    static public M2GDocument buildEmptyDocument(M2GSVGImage aImage,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1193
            ExternalResourceHandler aHandler)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1194
    throws IllegalArgumentException, IOException
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1195
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1196
        return M2GDocument.buildDocument(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1197
                   aImage,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1198
                   null,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1199
                   null,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1200
                   M2GSVGConstants.getInstance().iEmptySvgDocument,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1201
                   aHandler);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1202
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1203
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1204
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1205
     * Builds document
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1206
     * @param aImage Svg image
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1207
    * @param aBaseUrl A base url from where a document is downloaded.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1208
    * @param aSuffixUrl The suffix url from where a document is downloaded.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1209
     * @param aData Plain text svg data
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1210
     * @param aHandler Resource handler. If null the default resource handler is
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1211
     * used.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1212
     * @return document object
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1213
     * @throws IllegalArgumentException
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1214
     * @throws IOException
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1215
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1216
    static public M2GDocument buildDocument(M2GSVGImage aImage,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1217
                                            String aBaseUrl,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1218
                                            String aSuffixUrl,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1219
                                            String aData,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1220
                                            ExternalResourceHandler aHandler)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1221
    throws IOException
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1222
    {
87
1627c337e51e v2.2.21_1
hgs
parents: 80
diff changeset
  1223
80
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1224
        if ((aData == null) || (aData.equals("")))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1225
        {
87
1627c337e51e v2.2.21_1
hgs
parents: 80
diff changeset
  1226
80
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1227
            throw new IOException(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1228
                /*SF*/"The SVG document does not conform to the XML 1.0 specification."/*SF*/);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1229
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1230
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1231
        M2GDocument document = new M2GDocument(aImage, aBaseUrl, aSuffixUrl, aData);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1232
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1233
        if (document.doCheckValidity())
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1234
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1235
            document.setResourceHandler(aHandler);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1236
            return document;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1237
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1238
        throw new IOException(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1239
            /*SF*/"The SVG document does not conform to the XML 1.0 specification."/*SF*/);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1240
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1241
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1242
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1243
     * Registers an observer to any DOM change
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1244
     * @since S60 3.2
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1245
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1246
    public void registerDOMChangeObserver(M2GDOMChangeObserver aDOMChangeObserver)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1247
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1248
        iDOMChangeObserver = aDOMChangeObserver;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1249
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1250
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1251
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1252
     * Notify the observer about any change in DOM
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1253
     * SVGSVGElement is always part of DOM
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1254
     * @since S60 3.2
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1255
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1256
    public void notifyDOMChangeObserver()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1257
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1258
        if (iDOMChangeObserver != null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1259
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1260
            iDOMChangeObserver.notifyDOMChange();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1261
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1262
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1263
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1264
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1265
     * Notify the observer about any change in DOM only if the node is in DOM
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1266
     * @param aNativeHandle the handle of a node
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1267
     * @since S60 3.2
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1268
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1269
    public void notifyDOMChangeObserver(int aNativeHandle)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1270
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1271
        if (iDOMChangeObserver != null && isElementInDOM(aNativeHandle))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1272
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1273
            iDOMChangeObserver.notifyDOMChange();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1274
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1275
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1276
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1277
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1278
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1279
    // NATIVE METHODS
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1280
    //--------------------------------------------------
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1281
    private native static int _createDocument(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1282
        int aSvgProxyHandle, String aString);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1283
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1284
    private native static int _createElementNS(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1285
        int aSvgProxyHandle, short aType,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1286
        int aDocumentHandle);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1287
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1288
    private native static void _deleteDocument(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1289
        int aSvgProxyHandle, int aDocumentHandle);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1290
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1291
    private native static int _getElementById(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1292
        int aSvgProxyHandle, int aDocumentHandle,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1293
        String aId);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1294
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1295
    private static native int _getViewportHeight(
87
1627c337e51e v2.2.21_1
hgs
parents: 80
diff changeset
  1296
        int aSvgProxyHandle, int aDocumentHandle);
80
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1297
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1298
    private static native int _getViewportWidth(
87
1627c337e51e v2.2.21_1
hgs
parents: 80
diff changeset
  1299
        int aSvgProxyHandle, int aDocumentHandle);
80
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1300
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1301
    private native static int _isElementInDOM(
87
1627c337e51e v2.2.21_1
hgs
parents: 80
diff changeset
  1302
        int aSvgProxyHandle, int aDocumentHandle,
80
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1303
        int aElementHandle);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1304
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1305
    private static native int _requestCompleted(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1306
        int aSvgProxyHandle, int aDocumentHandle,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1307
        String aUri, byte[] aResourceData);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1308
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1309
    private static native void _setViewportHeight(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1310
        int aSvgProxyHandle, int aDocumentHandle, int aHeight);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1311
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1312
    private static native void _setViewportWidth(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1313
        int aSvgProxyHandle, int aDocumentHandle, int aWidth);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1314
}
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
  1315