javauis/lcdui_akn/javalcdui/javasrc/javax/microedition/lcdui/TextField.java
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 13 Oct 2010 14:23:59 +0300
branchRCL_3
changeset 83 26b2b12093af
parent 19 04becd199f91
permissions -rw-r--r--
Revision: v2.2.17 Kit: 201041

/*
* Copyright (c) 2007 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:
*
*/


package javax.microedition.lcdui;

import com.nokia.mj.impl.rt.legacy.NativeError;

public class TextField extends Item
{
    public static final int ANY = 0;
    public static final int EMAILADDR = 1;
    public static final int NUMERIC = 2;
    public static final int PHONENUMBER = 3;
    public static final int URL = 4;
    public static final int DECIMAL = 5;
    //
    public static final int PASSWORD = 0x10000;
    public static final int UNEDITABLE = 0x20000;
    public static final int SENSITIVE = 0x40000;
    public static final int NON_PREDICTIVE = 0x80000;
    public static final int INITIAL_CAPS_WORD = 0x100000;
    public static final int INITIAL_CAPS_SENTENCE = 0x200000;
    //
    public static final int CONSTRAINT_MASK = 0x0FFFF;
    //
    private int iMaxSize;
    private int iConstraints;

    public TextField(String aLabel,String aText,int aMaxSize,int aConstraints)
    {
        TextComponent.checkText(aText,aMaxSize);
        TextComponent.checkConstraints(aConstraints);

        synchronized (iToolkit)
        {
            final int toolkit = iToolkit.getHandle();
            final int handle = _create(toolkit, this, aLabel, aText, aConstraints, aMaxSize);
            iHandle  = Toolkit.checkHandle(handle);
            iMaxSize = NativeError.check(_getMaxSize(iHandle, toolkit));
        }

        iConstraints = aConstraints;
        iLabel       = aLabel;
        // assigned maximum capacity may be smaller than requested so must
        // go native to get real max size.
    }

    public int getCaretPosition()
    {
        synchronized (iToolkit)
        {
            return _getCaretPosition(getHandle(), iToolkit.getHandle());
        }
    }

    public String getString()
    {
        synchronized (iToolkit)
        {
            return GetString();
        }
    }

    final String GetString()
    {
        final String s = _getString(getHandle(),iToolkit.getHandle());
        return (s == null ? "" : s);
    }

    public void setString(String aText)
    {
        synchronized (iToolkit)
        {
            TextComponent.checkText(aText,iMaxSize);
            NativeError.check(_setString(getHandle(),iToolkit.getHandle(),aText));
            RefreshForm();
        }
    }

    public int getChars(char[] aData)
    {
        final String string;
        final int    length;
        synchronized (iToolkit)
        {
            string = GetString();
            length = Size();
        }
        return TextComponent.getCharsFromString(string,length,aData);
    }

    public void setChars(char[] aData,int aOffset,int aLength)
    {
        setString(TextComponent.getStringFromChars(aData,aOffset,aLength));
    }

    public void insert(String aSrc,int aPosition)
    {
        synchronized (iToolkit)
        {
            if (aSrc.length()+size() > iMaxSize)
            {
                throw new IllegalArgumentException();
            }
            NativeError.check(_insertString(getHandle(),iToolkit.getHandle(),aSrc,aPosition));
        }
    }

    public void insert(char[] aData,int aOffset,int aLength,int aPosition)
    {
        try
        {
            insert(new String(aData,aOffset,aLength),aPosition);
        }
        catch (StringIndexOutOfBoundsException aException)
        {
            throw new ArrayIndexOutOfBoundsException();
        }
    }

    public void delete(int aOffset,int aLength)
    {
        synchronized (iToolkit)
        {
            final int size = size();
            TextComponent.checkOffset(aOffset,aLength,size);
            NativeError.check(_delete(getHandle(),iToolkit.getHandle(),aOffset,aLength));
        }
    }

    public int getMaxSize()
    {
        return iMaxSize;
    }

    public int setMaxSize(int aMaxSize)
    {
        if (aMaxSize <= 0)
        {
            throw new IllegalArgumentException();
        }
        synchronized (iToolkit)
        {
            iMaxSize = NativeError.check(_setMaxSize(getHandle(),iToolkit.getHandle(),aMaxSize));
            return iMaxSize;
        }
    }

    public int size()
    {
        synchronized (iToolkit)
        {
            return Size();
        }
    }

    final int Size()
    {
        return _size(getHandle(),iToolkit.getHandle());
    }

    public void setConstraints(int aConstraints)
    {
        TextComponent.checkConstraints(aConstraints);
        synchronized (iToolkit)
        {
            NativeError.check(_setConstraints(getHandle(),iToolkit.getHandle(),aConstraints));
            iConstraints = aConstraints;
        }
    }

    public int getConstraints()
    {
        return iConstraints;
    }

    public void setInitialInputMode(String aCharacterSubset)
    {
        final String subset = aCharacterSubset==null?"":aCharacterSubset;
        synchronized (iToolkit)
        {
            NativeError.check(_setInitialInputMode(getHandle(), iToolkit.getHandle(), subset));
        }
    }

    private native int _create(int aToolkit,TextField aTextField,String aLabel,String aText,int aConstraints,int aMaxSize);
    private native int _getCaretPosition(int aTextField,int aToolkit);
    private native String _getString(int aTextField,int aToolkit);
    private native int _setString(int aTextField,int aToolkit,String aText);
    private native int _insertString(int aTextField,int aToolkit,String aText,int aPosition);
    private native int _delete(int aTextField,int aToolkit,int aOffset,int aLength);
    private native int _size(int aTextField,int aToolkit);
    private native int _setMaxSize(int aTextField,int aToolkit,int aMaxSize);
    private native int _getMaxSize(int aTextField,int aToolkit);
    private native int _setConstraints(int aTextField,int aToolkit,int aConstraints);
    private native int _setInitialInputMode(int aTextField,int aToolkit,String aCharacterSubset);
}