/*
* 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 TAknFepInputStateEntryMiniQwertyZhuyinPhrase,
*       TAknFepInputStateEditingMiniQwertyZhuyinPhrase,
*       TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase definition.
*
*/












#ifndef AKNFEPUIINPUTSTATEMINIQWERTYZHUYINPHRASE_H_
#define AKNFEPUIINPUTSTATEMINIQWERTYZHUYINPHRASE_H_

#include "aknfepuiinputminiqwertyzhuyinphrasebase.h"

/**
 *  TAknFepInputStateEntryMiniQwertyZhuyinPhrase class.
 *
 *  Implementation of Zhuyin phrase editing state
 *
 *  @lib avkonfep.dll
 *  @since S60 v3.2
 */

class TAknFepInputStateEditingMiniQwertyZhuyinPhrase : public TAknFepInputMiniQwertyZhuyinPhraseBase
    {
public:
    /**
     * C++ default constructor
     *
     * @since S60 V3.2
     * @param aOwner Pointer to UI manager state interface
     * @param aUIContainer Pointer to Chinese UI container
     */
    TAknFepInputStateEditingMiniQwertyZhuyinPhrase(
            MAknFepUIManagerStateInterface* aOwner,
            MAknFepUICtrlContainerChinese* aUIContainer );
    
    /**
     * From TAknFepInputStateCandidateBasePhrase
     * Handle system key press
     *
     * @since S60 v3.2
     * @param aKey System key event
     * @param aLength Key press length
     * @return ETrue if handle, otherwise this class do not handle this key
     */
     TBool HandleKeyL( TInt aKey, TKeyPressLength aLength );
     
     /**
      * Handling Command events.
      * This Method is called by CAknFepUIManagerJapanese.
      *
      * @param aCommandId Command ID value
      */
     void HandleCommandL( TInt aCommandId );
     
     /**
      * Add keystroke.
      * 
      * @since S60 v3.2.3.
      * @param aKey the input keystroke.
      * @return ETrue if that the key can add to the current keystroke, EFase others.
      */            
     TBool AddKeystrokeL( TInt aKey );
     
     /**
      * Revert the phrase to keystroke.
      * 
      * @since S60 v3.2.3.
      * @return None.
      */
     void RevertPhraseToKeystrokeL();
     
     /**
      * Add phrase to DB.
      * 
      * @since S60 v3.2.3.
      * @param aPhraseAdd The phrase to be added
      * @return None.
      */
     void AddPhraseToDB( const TDesC& aPhraseAdd );
     
     /**
      * Move the cursor to Left.
      * 
      * @since S60 v3.2.3.
      * @return ETrue if cursor can be moved, other EFalse.
      */         
     TBool MoveCursorLeft();
     
     /**
      * Move the cursor to Right.
      * 
      * @since S60 v3.2.3.
      * @return ETrue if cursor can be moved, other EFalse.
      */         
     TBool MoveCursorRight();

     /**
      * Handle Key Backspace
      * 
      * @since S60 v3.2.3.
      * @return None.
      */  
     void HandleKeyBackspaceL( TKeyPressLength aLength );
     
     /**
      * Commit content
      * 
      * @since S60 v3.2.3.
      * param aAddUDB ETrue if the content need to be added to UDB, otherwise EFalse.
      * @return None.
      */ 
     void CommitContentL( TBool aAddUDB );
     
     /**
      * Handle commit action
      * 
      * @since S60 v3.2.3.
      * @return None.
      */
     void HandleCommitL();
     
     /**
      * Refresh UI if necessary
      * 
      * @since S60 v3.2.3.
      * @return None.
      */
     void RefreshUI();
     
     /**
      * Refresh UI if necessary
      * 
      * @since S60 v3.2.3.
      * @return None.
      */
     void ImplicityShowInfo( TBool aGetScreenCoordinates );

     /**
      * Refresh UI if necessary
      * 
      * @since S60 v3.2.3.
      * @return None.
      */
     void ImplicityShowInfoL( TBool aGetScreenCoordinates );
     
     /**
      * Show EEP Info
      * 
      * @since S60 v3.2.3.
      * @return None.
      */
     void ShowEEPInfo();
    };

/**
 *  TAknFepInputStateSpellingMiniQwertyZhuyin class.
 *
 *  Implementation of Zhuyin phrase spelling selection state
 *
 *  @lib avkonfep.dll
 *  @since S60 v3.2
 */
class TAknFepInputStateSpellingMiniQwertyZhuyin: public TAknFepInputMiniQwertyZhuyinPhraseBase
    {
public:

    /**
     * C++ default constructor
     *
     * @since S60 V3.2
     * @param aOwner Pointer to UI manager state interface
     * @param aUIContainer Pointer to Chinese UI container
     */
    TAknFepInputStateSpellingMiniQwertyZhuyin(
        MAknFepUIManagerStateInterface* aOwner,
        MAknFepUICtrlContainerChinese* aUIContainer );
    
    /**
     * Handling Command events.
     * This Method is called by CAknFepUIManagerJapanese.
     *
     * @param aCommandId Command ID value
     */
    void HandleCommandL( TInt aCommandId );

private:
    /**
     * From TAknFepInputStateCandidateBasePhrase
     * Handle system key press
     *
     * @since S60 v3.2
     * @param aKey System key event
     * @param aLength Key press length
     * @return ETrue if handle, otherwise this class do not handle this key
     */
    TBool HandleKeyL(TInt aKey, TKeyPressLength aLength);

    /**
     * Refresh UI if necessary
     * 
     * @since S60 v3.2.3.
     * @return None.
     */
    void RefreshUI();
    
    /**
     * Refresh vaild key stroke length
     * 
     * @since S60 v3.2.3.
     * @return None.
     */
    void RefreshVaildKeyStroke();
    };

class TAknFepInputStateCanindateSelectingMiniQwertyZhuyin : public TAknFepInputMiniQwertyZhuyinPhraseBase
    {
public:
    /**
     * C++ default constructor
     *
     * @since S60 v3.2.3
     * @param aOwner Pointer to UI manager state interface
     * @param aUIContainer Pointer to Chinese UI container
     */
    TAknFepInputStateCanindateSelectingMiniQwertyZhuyin(
        MAknFepUIManagerStateInterface* aOwner,
        MAknFepUICtrlContainerChinese* aUIContainer
        );
   /**
    * From TAknFepInputStateMiniQwertyZhuyinPhraseCreationBase
    * Handle system key press
    *
    * @since S60 v3.2
    * @param aKey System key event
    * @param aLength Key press length
    * @return ETrue if handle, otherwise this class do not handle this key
    */
   TBool HandleKeyL(TInt aKey, TKeyPressLength aLength);
   
   /**
    * Handling Command events.
    * This Method is called by CAknFepUIManagerJapanese.
    *
    * @param aCommandId Command ID value
    */
   void HandleCommandL( TInt aCommandId );
   
   /**
     * commit the selected character into the editor pane 
     * @since S60 v3.2
     * @return none
     */
   void CommitCandidateL();
   
   /**
     * Check the select candidate numeric key is valid or not
     * @since S60 v3.2
     * @return ETure if the select number is valid ,others is EFalse
     */
   TBool SelectCandidate( TInt aKey );
   
   /**
     * the postion of the first tonemark appeared 
     * @since S60 v3.2
     */
    TInt GetIndexOfToneMark( const TDesC& aText);
    };

#endif /*AKNFEPUIINPUTSTATEMINIQWERTYZHUYINPHRASE_H_*/
