fep/aknfep/src/aknfepuiinputstateminiqwertystrokephrase.cpp
branchRCL_3
changeset 44 ecbabf52600f
child 50 5a1685599b76
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fep/aknfep/src/aknfepuiinputstateminiqwertystrokephrase.cpp	Wed Sep 01 12:23:33 2010 +0100
@@ -0,0 +1,565 @@
+/*
+* 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:           
+ *       Provides the  TAknFepInputStateEntryMiniQwertyStrokePhrase,
+ *       TAknFepInputStateEditingMiniQwertyStrokePhrase,
+ *       TAknFepUiInputStateCandidateMiniQwertyStrokePhrase methods.
+ *
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+// System includes
+#include <PtiEngine.h>  
+#include <PtiUserDicEntry.h>
+#include <aknnotewrappers.h> //CAknWarningNote
+#include <aknfep.rsg>  
+
+// User includes
+#include "AknFepUiCtrlContainerChinese.h"
+#include "AknFepUICtrlCandidatePane.h"
+#include "AknFepUICtrlInputPane.h"
+#include "aknfepuictrleditpane.h"           //phrase creation
+#include "AknFepUIManagerStateInterface.h"  
+#include "AknFepManager.h" 
+#include "aknfepuiinputstateminiqwertystrokephrase.h"
+const TInt KManualChangeState = 0; 
+
+// ---------------------------------------------------------------------------
+// TAknFepInputStateEntryMiniQwertyStrokePhrase::TAknFepInputStateEntryMiniQwertyStrokePhrase
+// C++ default constructor
+// ---------------------------------------------------------------------------
+//
+TAknFepInputStateEntryMiniQwertyStrokePhrase::TAknFepInputStateEntryMiniQwertyStrokePhrase(
+    MAknFepUIManagerStateInterface* aOwner,
+    MAknFepUICtrlContainerChinese* aUIContainer ):
+    TAknFepInputMiniQwertyStrokePhraseBase( aOwner, aUIContainer )
+    {
+    iState = EEntry;
+    UIContainer()->SetLayout( MAknFepUICtrlContainerChinese::ELayoutKeystroke );
+    UIContainer()->FocusCandidatePane( ETrue );
+    UIContainer()->CandidatePane()->SelectFirstPhrase();
+    UIContainer()->CandidatePane()->ShowCandidateOrdinals( EFalse );
+    UIContainer()->SetFepMan( iOwner->FepMan() );
+    // so that it could handle EKeyCBA1
+    iOwner->FepMan()->EntryPhrase( ETrue );
+    RefreshUI();
+    }
+// ---------------------------------------------------------------------------
+// TAknFepInputStateEntryMiniQwertyStrokePhraseCreation::HandleKeyL
+// Handle system key press event.
+// ---------------------------------------------------------------------------
+// 
+TBool TAknFepInputStateEntryMiniQwertyStrokePhrase::HandleKeyL( TInt aKey,
+    TKeyPressLength aLength )
+    {
+    TBool ret = ETrue;
+    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+    MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane();
+    switch ( aKey )
+        {
+        case EStdKeyLeftFunc: //chr key
+        case EKeyLeftShift:
+        case EKeyRightShift:
+        case EKeyLeftCtrl:
+        case EKeyRightCtrl:
+        case EKeyRightFunc://fn 
+        case EKeyLeftFunc: // fn 
+            {
+            iOwner->FepMan()->TryCloseUiL();
+            ret = EFalse;
+            break;
+            }
+        case EStdKeyDevice1: // cancel key
+            {
+            iOwner->FepMan()->TryCloseUiL();
+            break;
+            }
+        case EStdKeyEnter:
+        case EStdKeySingleQuote: // The "&" key
+            {
+            iOwner->FepMan()->PlaySound( EAvkonSIDStandardKeyClick );
+            break;
+            }
+        case EStdKeyUpArrow:
+            {
+            if ( candidatePane->IsFirstPage() )
+                {
+                UIContainer()->EditPaneWindow()->SetAutoChangeStateFlag( KManualChangeState );
+                iOwner->ChangeState( EMiniQwertyEdit );
+                }
+            else
+                {
+                candidatePane->PreviousCandidatePage();
+                candidatePane->SetCandidateBuffer();
+                candidatePane->SelectFirst();
+                UpdateIndicator();
+                }
+            break;
+            }
+        case EStdKeyDownArrow:
+            {
+            ret = TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL( aKey, aLength );
+            break;
+            }
+        case EStdKeyRightArrow:
+            {
+            if ( candidatePane->VisibleCandidateCount()!= 1 )
+                {
+                uiContainer->EditPaneWindow()->SetCandidateRefreshFlag( ETrue );
+                iOwner->ChangeState( ECandidate );
+                candidatePane->SelectNext();
+                }
+            break;
+            }
+        case EStdKeyLeftArrow:
+            {
+            if ( candidatePane->VisibleCandidateCount()!= 1 )
+                {
+                uiContainer->EditPaneWindow()->SetCandidateRefreshFlag( ETrue );
+                iOwner->ChangeState( ECandidate );
+                TInt numbertotal = UIContainer()->CandidatePane()->VisibleCandidateCount();
+                UIContainer()->CandidatePane()->SelectIndex( numbertotal-1 );
+                }
+            break;
+            }
+        case EStdKeyDevice0: //select key 
+        case EStdKeyDevice3: // msk 
+            {
+            TPtrC text = uiContainer->CandidatePane()->CurrentPhraseCandidate();
+            if ( text.Length() && aLength != ELongKeyPress )
+                {
+                if ( !CommitInlineEEPL( text ) )
+                    {
+                    DoActionAfterCommit();
+                    }
+                else
+                    {
+                    if ( CheckFirstGroupStroke() )
+                        {
+                        iOwner->ChangeState( ECandidate );
+                        }
+                    else
+                        {
+                        uiContainer->EditPaneWindow()->SetAutoChangeStateFlag( EAutoChangeStateFromInput );
+                        iOwner->ChangeState( EMiniQwertyEdit );
+                        }
+                    }
+                }
+            break;
+            }
+        default:
+            // chr + character 
+            if ( iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagQwertyChrKeyDepressed ) )
+                {
+                iOwner->FepMan()->TryCloseUiL();
+                ret = EFalse;
+                }
+            else if ( CAknFepFnKeyManager::EFnKeyNext == iOwner->FepMan()->FnKeyState() || CAknFepFnKeyManager::EFnKeyLock
+                == iOwner->FepMan()->FnKeyState() || CAknFepFnKeyManager::EFnKeyDown
+                == iOwner->FepMan()->FnKeyState() ) //fn play error tone
+                {
+                iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
+                }
+            else
+                {
+                ret = TAknFepInputMiniQwertyStrokePhraseBase::HandleKeyL(
+                    aKey, aLength );
+                }
+            break;
+        }
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputStateEditingMiniQwertyStrokePhrase::TAknFepInputStateEditingMiniQwertyStrokePhrase
+// C++ default constructor
+// ---------------------------------------------------------------------------
+//
+TAknFepInputStateEditingMiniQwertyStrokePhrase::TAknFepInputStateEditingMiniQwertyStrokePhrase(
+    MAknFepUIManagerStateInterface* aOwner,
+    MAknFepUICtrlContainerChinese* aUIContainer ):
+    TAknFepInputMiniQwertyStrokePhraseBase( aOwner, aUIContainer )
+    {
+    iState = EMiniQwertyEdit;
+    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+    RefreshUI();
+    uiContainer->FocusCandidatePane( EFalse );
+    uiContainer->CandidatePane()->ShowCandidateOrdinals( EFalse );
+    }
+// ---------------------------------------------------------------------------
+// TAknFepInputStateEditingMiniQwertyStrokePhrase::HandleKeyL
+// Handle system key press event.
+// ---------------------------------------------------------------------------
+// 
+TBool TAknFepInputStateEditingMiniQwertyStrokePhrase::HandleKeyL( TInt aKey,
+    TKeyPressLength aLength )
+    {
+    TBool ret = ETrue;
+    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+    MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane();
+    
+    //handle chr up when composition key with chr end
+    //avoid closing UI
+    if ( iOwner->FepMan()->GetComposChrFlag() && aKey == EStdKeyLeftFunc )
+        {
+        iOwner->FepMan()->SetComposChrFlag( EFalse );
+        return ETrue;
+        }
+    switch ( aKey )
+        {
+        case EKeyLeftShift:
+        case EKeyRightShift:
+        case EKeyLeftCtrl:
+        case EKeyRightCtrl:
+        case EKeyRightFunc://fn 
+        case EKeyLeftFunc: // fn 
+            {
+            if ( !uiContainer->EditPaneWindow()->GetAutoChangeStateFlag()
+                 || uiContainer->EditPaneWindow()->PhraseArray()->Count() != 0)
+                {
+                iOwner->FepMan()->PlaySound( EAvkonSIDStandardKeyClick );
+                }
+            else
+                {
+                iOwner->FepMan()->TryCloseUiL();
+                ret = EFalse;
+                }
+            break;
+            }
+        case EStdKeyLeftFunc: //chr key
+            {
+            iOwner->FepMan()->TryCloseUiL();
+            ret =EFalse;
+            }
+            // inactive 
+        case EStdKeyUpArrow:
+            {
+            break;
+            }
+            //if the canidate is empty ,inactive;else candiniate selecting state
+        case EStdKeyDownArrow:
+            {
+            if ( 0 != candidatePane->VisibleCandidateCount() )
+                {
+                uiContainer->EditPaneWindow()->SetChangeState( ETrue );
+                iOwner->ChangeState( ECandidate );
+                }
+            break;
+            }
+        case EStdKeyDevice1: //"cancle" key
+            {
+            iOwner->FepMan()->TryCloseUiL();
+            break;
+            }
+        case EStdKeySingleQuote:
+        case EStdKeyEnter:
+            {
+            iOwner->FepMan()->PlaySound( EAvkonSIDStandardKeyClick );
+            break;
+            }
+        default:
+            // chr + character 
+            if ( iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagQwertyChrKeyDepressed ) )
+                {
+                iOwner->FepMan()->SetComposChrFlag( ETrue );
+                if ( !uiContainer->EditPaneWindow()->GetAutoChangeStateFlag()
+                      || uiContainer->EditPaneWindow()->PhraseArray()->Count() != 0)
+                    {
+                    iOwner->FepMan()->PlaySound(EAvkonSIDStandardKeyClick);
+                    return  ETrue;
+                    }
+                else
+                    {
+                    iOwner->FepMan()->TryCloseUiL();
+                    return EFalse;
+                    }
+                }
+            else
+                {
+                ret = TAknFepInputMiniQwertyStrokePhraseBase::HandleKeyL(
+                    aKey, aLength);
+                break;
+                }
+        }
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateCandidateMiniQwertyStrokePhrase::TAknFepUiInputStateCandidateMiniQwertyStrokePhrase
+// C++ default constructor
+// ---------------------------------------------------------------------------
+//
+TAknFepUiInputStateCandidateMiniQwertyStrokePhrase::TAknFepUiInputStateCandidateMiniQwertyStrokePhrase(
+    MAknFepUIManagerStateInterface* aOwner,
+    MAknFepUICtrlContainerChinese* aUIContainer ):
+    TAknFepInputMiniQwertyStrokePhraseBase( aOwner, aUIContainer )
+    {
+    iState = ECandidate;
+    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+    uiContainer->FocusCandidatePane( ETrue );
+    uiContainer->CandidatePane()->ShowCandidateOrdinals( ETrue );
+    uiContainer->CandidatePane()->SelectFirstPhrase();
+    if ( uiContainer->EditPaneWindow()->GetCandidateRefreshFlag() )
+        {
+        uiContainer->EditPaneWindow()->DisableCursor();
+        uiContainer->EditPaneWindow()->SetCandidateRefreshFlag( EFalse );
+        }
+    else
+        {
+        RefreshUI();
+        }
+    }
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateCandidateMiniQwertyStrokePhrase::HandleKeyL
+// Handle system key press event.
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepUiInputStateCandidateMiniQwertyStrokePhrase::HandleKeyL(
+    TInt aKey, TKeyPressLength aLength )
+    {
+    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+    TInt selected = uiContainer->CandidatePane()->SelectedIndex();
+    TInt numbertotal = uiContainer->CandidatePane()->VisibleCandidateCount();
+    TBool ret = ETrue;
+
+    if ( iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagQwertyChrKeyDepressed )
+        || iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagShiftKeyDepressed ) )
+        {
+        iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
+        return ETrue;
+        }
+
+    switch ( aKey )
+        {
+        case EStdKeyBackspace:
+            {
+            uiContainer->CandidatePane()->SetCandidateBuffer();
+            uiContainer->EditPaneWindow()->SetAutoChangeStateFlag( KManualChangeState );
+            uiContainer->EditPaneWindow()->SetChangeState( ETrue );
+            iOwner->ChangeState( EMiniQwertyEdit );
+            iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL );
+            }
+            break;
+        case EStdKeyLeftArrow:
+            {
+            if ( selected == 0 )
+                {
+                uiContainer->CandidatePane()->SelectIndex( numbertotal-1 );
+                }
+            else
+                {
+                uiContainer->CandidatePane()->SelectIndex( selected - 1 );
+                }
+            }
+            break;
+        case EStdKeyRightArrow:
+            {
+            if ( selected == numbertotal-1 )
+                {
+                uiContainer->CandidatePane()->SelectIndex( 0 );
+                }
+            else
+                {
+                uiContainer->CandidatePane()->SelectIndex( selected + 1 );
+                }
+            }
+            break;
+        case EStdKeyDownArrow:
+            {
+            ret = TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL( aKey, aLength );
+            }
+            break;
+        case EStdKeyUpArrow:
+            {
+            if ( uiContainer->CandidatePane()->IsFirstPage() )
+                {
+                uiContainer->EditPaneWindow()->SetAutoChangeStateFlag( KManualChangeState );
+                iOwner->ChangeState( EMiniQwertyEdit );
+                }
+            else
+                {
+                uiContainer->CandidatePane()->PreviousCandidatePage();
+                uiContainer->CandidatePane()->SetCandidateBuffer();
+                uiContainer->CandidatePane()->SelectFirstPhrase();
+                UpdateIndicator();
+                }
+            }
+            break;
+        case EStdKeyDevice0:
+        case EStdKeyDevice3:
+            {
+            TPtrC text = uiContainer->CandidatePane()->CurrentPhraseCandidate();
+            if ( text.Length() && aLength != ELongKeyPress )
+                {
+                if ( !CommitInlineEEPL( text ) )
+                    {
+                    DoActionAfterCommit();
+                    }
+                else
+                    {
+                    if ( CheckFirstGroupStroke() )
+                        {
+                        RefreshUI();
+                        uiContainer->CandidatePane()->SelectFirstPhrase();
+                        }
+                    else
+                        {
+                        uiContainer->EditPaneWindow()->SetAutoChangeStateFlag( EAutoChangeStateFromCandidate );
+                        iOwner->ChangeState( EMiniQwertyEdit );
+                        }
+                    }
+                }
+            }
+            break;
+        case EStdKeyEnter:
+        case EKeyLeftCtrl:
+        case EKeyRightCtrl:
+        case EKeyLeftShift:
+        case EStdKeySpace:
+            {
+            iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
+            }
+            break;
+//        case EKeyRightShift:   // need to check later
+//            {
+//            return ret;
+//            }
+//            break;
+        default:
+            return TAknFepInputMiniQwertyStrokePhraseBase::HandleKeyL( aKey,
+                aLength );
+        }
+    return ret;
+    }
+// ---------------------------------------------------------------------------
+// TAknFepInputStateEditingMiniQwertyStrokePhrase::HandleCommandL
+// Handling Command
+// ---------------------------------------------------------------------------
+//
+void TAknFepInputStateEditingMiniQwertyStrokePhrase::HandleCommandL(
+    TInt aCommandId )
+    {
+    MAknFepUICtrlContainerChinese* uiContainer = UIContainer( );
+    switch ( aCommandId )
+        {
+        // Handle the event frome command.
+        case EAknSoftkeySelect:            
+            if ( !uiContainer->EditPaneWindow()->GetAutoChangeStateFlag( ) || uiContainer->EditPaneWindow()->PhraseArray()->Count( ) != 0 )
+                {
+                iOwner->FepMan()->PlaySound( EAvkonSIDStandardKeyClick );
+                }
+            else
+                {
+                iOwner->FepMan()->TryCloseUiL( );
+                }
+            break;
+        default:
+            TAknFepInputStateChineseBase::HandleCommandL( aCommandId );
+            break;
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// TAknFepInputStateEntryMiniQwertyStrokePhrase::HandleCommandL
+// Handling Command
+// ---------------------------------------------------------------------------
+//
+void TAknFepInputStateEntryMiniQwertyStrokePhrase::HandleCommandL(
+    TInt aCommandId )
+    {
+    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+    TPtrC text = uiContainer->CandidatePane()->CurrentPhraseCandidate();
+    switch ( aCommandId )
+        {
+        // Handle the event frome command.
+        case EAknSoftkeySelect:
+            if ( text.Length() )
+                {
+                if ( !CommitInlineEEPL( text ) )
+                    {
+                    DoActionAfterCommit();
+                    }
+                else
+                    {
+                    if ( CheckFirstGroupStroke() )
+                        {
+                        iOwner->ChangeState( ECandidate );
+                        }
+                    else
+                        {
+                        uiContainer->EditPaneWindow()->SetAutoChangeStateFlag(
+                            EAutoChangeStateFromInput );
+                        iOwner->ChangeState( EMiniQwertyEdit );
+                        }
+                    }
+                }
+            break;
+        default:
+            TAknFepInputStateChineseBase::HandleCommandL( aCommandId );
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateCandidateMiniQwertyStrokePhrase::HandleCommandL
+// Handling Command
+// ---------------------------------------------------------------------------
+//
+void TAknFepUiInputStateCandidateMiniQwertyStrokePhrase::HandleCommandL(
+    TInt aCommandId )
+    {
+    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+    TPtrC text = uiContainer->CandidatePane()->CurrentPhraseCandidate();
+    switch ( aCommandId )
+        {
+        // Handle the event frome command.
+        case EAknSoftkeySelect:
+            if ( text.Length() )
+                {
+                if ( !CommitInlineEEPL( text ) )
+                    {
+                    DoActionAfterCommit();
+                    }
+                else
+                    {
+                    if ( CheckFirstGroupStroke() )
+                        {
+                        RefreshUI();
+                        uiContainer->CandidatePane()->SelectFirstPhrase();
+                        }
+                    else
+                        {
+                        uiContainer->EditPaneWindow()->SetAutoChangeStateFlag(
+                            EAutoChangeStateFromCandidate );
+                        iOwner->ChangeState( EMiniQwertyEdit );
+                        }
+                    }
+                }
+            break;
+        default:
+            TAknFepInputStateChineseBase::HandleCommandL( aCommandId );
+            break;
+        }
+    }