javauis/lcdui_akn/javalcdui/javasrc.nokialcdui/com/nokia/mid/ui/impl/TextEditorListenerImpl.java
branchRCL_3
changeset 19 04becd199f91
child 60 6c158198356e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/lcdui_akn/javalcdui/javasrc.nokialcdui/com/nokia/mid/ui/impl/TextEditorListenerImpl.java	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,178 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Receives callbacks from the native side.
+ *
+ */
+
+// PACKAGE
+package com.nokia.mid.ui.impl;
+
+// IMPORTS
+import com.nokia.mid.ui.TextEditorListener;
+import com.nokia.mid.ui.TextEditor;
+import com.nokia.mj.impl.rt.legacy.NativeError;
+import com.nokia.mj.impl.rt.legacy.ToolkitInvoker;
+import com.nokia.mj.impl.rt.support.Finalizer;
+
+
+// CLASS DESCRIPTION
+/**
+ * Receives callbacks from the native side.
+ */
+public class TextEditorListenerImpl
+{
+    // Data
+    private final TextEditor iEditor;
+    private final TextEditorListener iListener;
+    private final Object iToolkit;
+    private final ToolkitInvoker iToolkitInvoker;
+    private int iHandle;
+    private int iActions;
+    private Finalizer mFinalizer;
+
+    /**
+     * Constructor.
+     *
+     * @param aEditor
+     *            The editor to which this listener is associated to. ' @param
+     *            aListener The listener to which this implementation is
+     *            associated to. Actions are delivered to this object.
+     */
+    public TextEditorListenerImpl(
+        TextEditor aEditor,
+        TextEditorListener aListener)
+    {
+        iEditor = aEditor;
+        iListener = aListener;
+
+        // Toolkit invoker is needed for accessing javax.microedition.lcdui
+        // package
+        iToolkitInvoker = ToolkitInvoker.getToolkitInvoker();
+        iToolkit = iToolkitInvoker.getToolkit();
+
+        int handle = 0;
+        synchronized (iToolkit)
+        {
+            // Create native peer object for this Java object.
+            handle =
+                _createNativePeer(iToolkitInvoker.toolkitGetHandle(iToolkit));
+        }
+
+        // Check if construction failed and throw out of memory error.
+        if (handle <= NativeError.KErrNone)
+        {
+            throw new OutOfMemoryError();
+        }
+
+        // Construction was successful. Store handle and register for
+        // finalization.
+        iHandle = handle;
+        mFinalizer = new Finalizer()
+        {
+            public void finalizeImpl()
+            {
+                registeredFinalize();
+            }
+        };
+    }
+
+    /**
+     * This method is called when an action occurs in the native side.
+     *
+     * The actions are simply delegated to the associated
+     * <code>TextEditorListener</code> object which provids the actual
+     * functionality.
+     *
+     * @param aActions
+     *            The actions that occured.
+     * @return The status from the associated listener.
+     */
+    public void inputAction(int aActions)
+    {
+        // JDEBUG( "TextEditorListenerImpl.inputAction() + aActions=" + aActions
+        // );
+
+        try
+        {
+            iListener.inputAction(iEditor, aActions);
+        }
+        catch (Throwable t)
+        {
+            // JDEBUG(
+            // "TextEditorListenerImpl.inputAction(), exception in callback" );
+
+            // Ignored intentionally.
+
+            t.printStackTrace();
+        }
+
+        // JDEBUG( "TextEditorListenerImpl.inputAction() -" );
+    }
+
+    /**
+     * Returns the handle to the native side peer object.
+     *
+     * @return The handle to the native side peer object.
+     */
+    public int getHandle()
+    {
+        return iHandle;
+    }
+
+    /**
+     * Disposes the Landmark native peer objecct, if the handles are valid.
+     * Invalid (negative) handles indicate that their creation failed in the
+     * first place.
+     */
+    final void registeredFinalize()
+    {
+        // JDEBUG( "TextEditorListenerImpl.registeredFinalize() +" );
+
+        synchronized (iToolkit)
+        {
+            if (iHandle > 0)
+            {
+                _dispose(iToolkitInvoker.toolkitGetHandle(iToolkit), iHandle);
+
+                iHandle = 0;
+            }
+        }
+
+        // JDEBUG( "TextEditorListenerImpl.registeredFinalize() -" );
+    }
+
+    // Native methods
+
+    /**
+     * Creates the native side peer object for this object.
+     *
+     * @param aToolkitHandle
+     *            A handle to the LCDUI toolkit.
+     * @return A handle to the the native side peer object or a system-wide
+     *         error code.
+     */
+    private native int _createNativePeer(int aToolkitHandle);
+
+    /**
+     * Disposes the native side peer object.
+     *
+     * @param aToolkitHandle
+     *            A handle to the LCDUI toolkit.
+     * @param aNativePeerHandle
+     *            A handle to the native side peer object.
+     */
+    private native void _dispose(int aToolkitHandle, int aNativePeerHandle);
+}
+
+// End of file