fep/aknfep/src/AknFepUiInputStateJapaneseBase.cpp
changeset 0 eb1f2e154e89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fep/aknfep/src/AknFepUiInputStateJapaneseBase.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,459 @@
+/*
+* Copyright (c) 2002-2004 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:            Provides the TAknFepUiInputStateJapaneseBase methods.
+*
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+// INCLUDE FILES
+#include "AknFepUiInputStateJapaneseBase.h"
+#include "AknFepUIManagerStateInterface.h"   //MAknFepUIManagerStateInterface
+#include "AknFepManagerUIInterface.h"        //MAknFepManagerUIInterface
+#include "AknFepCaseManager.h"               // CAknFepCaseManager
+#include "AknFepGlobalEnums.h"
+#include "AknFepPanic.h"
+
+#include <PtiDefs.h>                // keys
+#include <avkon.rsg>
+
+// CONSTANTS
+#define EFirstHalfUpperChar  0x0041
+#define ELastHalfUpperChar   0x005A
+#define EFirstFullUpperChar  0xff21
+#define ELastFullUpperChar   0xff3A
+#define EFirstHalfLowerChar  0x0061
+#define ELastHalfLowerChar   0x007A
+#define EFirstFullLowerChar  0xff41
+#define ELastFullLowerChar   0xff5A
+
+/**
+ *  TAknFepUiInputStateJapaneseBase class.
+ *
+ */
+//============================ MEMBER FUNCTIONS ==============================
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateJapaneseBase::TAknFepUiInputStateJapaneseBase
+// C++ default Constructor
+// ---------------------------------------------------------------------------
+//
+TAknFepUiInputStateJapaneseBase::
+TAknFepUiInputStateJapaneseBase(MAknFepUIManagerStateInterface* aOwner,
+                                MAknFepUICtrlContainerJapanese* aUIContainer)
+    :TAknFepInputStateBase(aOwner)
+    {
+    iUIContainer = aUIContainer;
+    if (aOwner)
+        {
+        aOwner->FepMan()->SendUIActivatedNotification();
+        }
+    }
+
+/**
+ * MPtiObserver interface.
+ */
+//============================ MEMBER FUNCTIONS ==============================
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateJapaneseBase::KeyTimerExpired
+// Call this function when Multitap timer of PtiEngine was time-out
+// ---------------------------------------------------------------------------
+//
+void TAknFepUiInputStateJapaneseBase::KeyTimerExpired()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateJapaneseBase::LastWordInSelectionList
+// not-use Japanese state
+// ---------------------------------------------------------------------------
+//
+void TAknFepUiInputStateJapaneseBase::LastWordInSelectionList()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateJapaneseBase::FirstWordInSelectionList
+// not-use Japanese state
+// ---------------------------------------------------------------------------
+//
+void TAknFepUiInputStateJapaneseBase::FirstWordInSelectionList()
+    {
+    }
+
+/**
+ *  TAknFepUiInputStateJapaneseBase class.
+ *
+ */
+//============================ MEMBER FUNCTIONS ==============================
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateJapaneseBase::HandleKeyL
+// Hnadling Keypress events. This Method is called by CAknFepUIManagerJapanese
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepUiInputStateJapaneseBase::
+    HandleKeyL(TInt aKey, TKeyPressLength aLength)
+    {
+    TBool ret = ETrue;
+    if(iState == EInitial)
+        {
+        ret = EFalse;
+        }
+
+    if (iOwner->IsQwerty())
+        {
+        switch(aKey)
+            {
+            case EStdKeyLeftArrow:      /* 0x0e */
+            case EStdKeyRightArrow:     /* 0x0f */
+            case EStdKeyUpArrow:        /* 0x10 */
+            case EStdKeyDownArrow:      /* 0x11 */
+                {
+                // Long and short keypress is same Handling
+                ret = HandleNaviKeyL(aKey, aLength);
+                }
+                break;
+            case EKeyOK:
+            case EStdKeyEnter:          /* 0x03 */
+            case EStdKeyNkpEnter:       /* 0x88 */
+            case EStdKeyDevice3:        /* 0xA7 */
+                {
+                ret = HandleAuxKeyL(aKey, aLength);
+                }
+                break;
+            case EStdKeyBackspace:      /* 0x01 */
+            case EStdKeyEscape:         /* 0x04 */
+                {
+                // Long and short keypress is same Handling
+                ret = HandleAuxKeyL(aKey, aLength);
+                }
+                break;
+            case EStdKeySpace:
+                if( iState == EConversion
+                 || iState == ECandidate
+                 || iState == ECandidateRetroActive )
+                    {
+                    ret = HandleNaviKeyL(aKey, aLength);
+                    }
+                else
+                    {
+                    ret = HandleNumericShortKeyL(aKey);
+                    }
+                break;
+            default:
+                // for Qwerty
+                if (aLength == EShortKeyPress
+                 && IsQwertyKey(aKey))
+                    {
+                    ret = HandleNumericShortKeyL(aKey);
+                    }
+                break;
+            }
+        }
+    else
+        {
+        switch(aKey)
+            {
+            case EPtiKey0:
+            case EPtiKey1:
+            case EPtiKey2:
+            case EPtiKey3:
+            case EPtiKey4:
+            case EPtiKey5:
+            case EPtiKey6:
+            case EPtiKey7:
+            case EPtiKey8:
+            case EPtiKey9:
+            case EPtiKeyStar:
+                {
+                if(aLength == ELongKeyPress)
+                    {
+                    if (aKey != EPtiKeyStar)
+                        {
+                        ret = HandleNumericLongKeyL(aKey);
+                        }
+                    else
+                        {
+                        MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
+                        if (fepMan->HashKeySelectionInUse())
+                            {
+                            ret = ETrue;
+                            }
+                        }
+                    }
+                else if (aLength == EShortKeyPress)
+                    {
+                    ret = HandleNumericShortKeyL(aKey);
+                    }
+                }
+                break;
+            case EKeyLeftArrow:
+            case EKeyRightArrow:
+            case EKeyDownArrow:
+            case EKeyUpArrow:
+                {
+                // Long and short keypress is same Handling
+                ret = HandleNaviKeyL(aKey, aLength);
+                }
+                break;
+            case EKeyOK:
+                {
+                ret = HandleAuxKeyL(aKey, aLength);
+                }
+                break;
+            case EKeyBackspace:
+                {
+                // Long and short keypress is same Handling
+                ret = HandleAuxKeyL(aKey, aLength);
+                }
+                break;
+            default:
+                {
+                AknFepPanic(EAknFepPanicNotSupportKey);
+                }
+                break;
+            }
+        }
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateJapaneseBase::HandleCommandL
+// Handling Command events. This Method is called by CAknFepUIManagerJapanese.
+// ---------------------------------------------------------------------------
+//
+void TAknFepUiInputStateJapaneseBase::HandleCommandL(TInt /*aCommandId*/)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateJapaneseBase::operator=
+// A patch to force the vtable to be copied during an assignment.
+// ---------------------------------------------------------------------------
+//
+void TAknFepUiInputStateJapaneseBase::operator=(const TAknFepInputStateBase& aState)
+    {
+    Mem::Copy(this, &aState, sizeof(TAknFepUiInputStateJapaneseBase));
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateJapaneseBase::HandleNumericKeyL
+// Handling short keypress events of the numeric and the star.
+// HandleKeyEventL() call this method.
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepUiInputStateJapaneseBase::HandleNumericShortKeyL(TInt /*aKey*/)
+    {
+    return EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateJapaneseBase::HandleNumericLongKeyL
+// Handling Numeric long keypress event. HandleKeyEventL() call this method.
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepUiInputStateJapaneseBase::HandleNumericLongKeyL(TInt /*aKey*/)
+    {
+    iOwner->ChangeState(EMultiCompletion);
+    return EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateJapaneseBase::HandleNaviKeyL
+// Handling navigate keypress event. HandleKeyEventL() call this method.
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepUiInputStateJapaneseBase::HandleNaviKeyL(TInt /*aKey*/,
+                                                      TKeyPressLength /*aLength*/)
+    {
+    return EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateJapaneseBase::HandleAuxKeyL
+// Handling auxiliary keypress events including OK and Backspace.
+// HandleKeyEventL() call this method.
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepUiInputStateJapaneseBase::HandleAuxKeyL(TInt /*aKey*/,
+                                                     TKeyPressLength /*aLength*/)
+    {
+    return EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateJapaneseBase::UpdateInlineEditingCharacterL
+// Update inline editing string
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepUiInputStateJapaneseBase::UpdateInlineEditingCharacterL()
+    {
+    return EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateJapaneseBase::CommitInlineEditingCharacterL
+// Commit inline editing string
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepUiInputStateJapaneseBase::CommitInlineEditingCharacterL()
+    {
+    return EFalse;
+    }
+
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateJapaneseBase::UIContainer()
+// Getting UI container object
+// ---------------------------------------------------------------------------
+//
+
+MAknFepUICtrlContainerJapanese* TAknFepUiInputStateJapaneseBase::UIContainer()
+    {
+    return static_cast<MAknFepUICtrlContainerJapanese*>(iUIContainer);
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateJapaneseBase::UpdateCase
+// Update character case
+// ---------------------------------------------------------------------------
+//
+void TAknFepUiInputStateJapaneseBase::UpdateCase(TPtrC& aChar)
+    {
+    CAknFepCaseManager* caseMan = iOwner->CaseMan();
+    if (IsDiffrentCase(aChar))
+        {
+        caseMan->ManualCaseUpdate();
+        }
+    else
+        {
+        caseMan->UpdateCase(ENullNaviEvent);
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateJapaneseBase::IsDiffrentCase
+// Check whether last catacter case and current catacter case is same
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepUiInputStateJapaneseBase::IsDiffrentCase(TPtrC& aChar) const
+    {
+    TBool ret = EFalse;
+    CAknFepCaseManager* caseMan = iOwner->CaseMan();
+    TInt currentCase = caseMan->CurrentCase();
+    switch(currentCase)
+        {
+        case EAknEditorUpperCase:
+            {
+            if (IsLowerCase(aChar))
+                {
+                ret = ETrue;
+                }
+            }
+            break;
+        case EAknEditorLowerCase:
+            {
+            if (IsUpperCase(aChar))
+                {
+                ret = ETrue;
+                }
+            }
+        case EAknEditorTextCase:
+            break;
+        default: // Panic
+            {
+            AknFepPanic(EAknFepPanicBadCase);
+            }
+            break;
+        }
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateJapaneseBase::IsUpperCase
+// Check a caracter case is upper
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepUiInputStateJapaneseBase::IsUpperCase(TPtrC& aChar) const
+    {
+    if ((EFirstHalfUpperChar <= aChar[0] && aChar[0] <= ELastHalfUpperChar)
+     || (EFirstFullUpperChar <= aChar[0] && aChar[0] <= ELastFullUpperChar))
+        {
+        return ETrue;
+        }
+    return EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateJapaneseBase::IsLowerCase
+// Check a caracter case is lower
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepUiInputStateJapaneseBase::IsLowerCase(TPtrC& aChar) const
+    {
+    if ((EFirstHalfLowerChar <= aChar[0] && aChar[0] <= ELastHalfLowerChar)
+     || (EFirstFullLowerChar <= aChar[0] && aChar[0] <= ELastFullLowerChar))
+        {
+        return ETrue;
+        }
+    return EFalse;
+    }
+
+TBool TAknFepUiInputStateJapaneseBase::HandleQwertyShortKeyL(TInt /*aKey*/)
+    {
+    return EFalse;
+    }
+
+TBool TAknFepUiInputStateJapaneseBase::IsNumberKey(const TInt aKey)
+    {
+    TBool response = EFalse;
+    if (aKey >= EPtiKeyQwerty0 && aKey <= EPtiKeyQwerty9)
+        {
+        response = ETrue;
+        }
+    return response;
+    }
+
+TBool TAknFepUiInputStateJapaneseBase::IsQwertyKey(const TInt aKey)
+    {
+    TBool response = EFalse;
+    if ( (aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ) ||
+        IsNumberKey( aKey ) ||
+        aKey == EStdKeySpace ||
+        aKey == EPtiKeyQwertyPlus ||
+        aKey == EPtiKeyQwertyMinus ||
+        aKey == EPtiKeyQwertyComma ||
+        aKey == EPtiKeyQwertySemicolon ||
+        aKey == EPtiKeyQwertyFullstop ||
+        aKey == EPtiKeyQwertyHash ||
+        aKey == EPtiKeyQwertySlash ||
+        aKey == EPtiKeyQwertyApostrophe)
+        {
+        response = ETrue;
+        }
+    return response;
+    }
+
+// End of file