/*
* Copyright (c) 2002-2005 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: Implementation of the vkb client area
*
*/
#ifndef C_CAKNFEPVKBCLIENTAREA_H
#define C_CAKNFEPVKBCLIENTAREA_H
// INCLUDES
#include <peninputlayoutctrlgroup.h>
#include <peninputvkbctrlext.h>
#include "peninputvkb.hrh"
#include "peninputvkbwindow.h"
#include "peninputvkbcnlafdatamgr.h"
/** class forward decalaration */
class CFepUiLayout;
class CAknFepVkbCtrlPool;
class CAknFepLayoutPool;
class CAknFepVkbImLayout;
class CPeninputVkbLayoutInfo;
class MAknFepVkbDataProvider;
class CPeninputVkbCtrlExt;
class CAknFepVkbCompositionField;
class CFepCtrlDropdownList;
class CAknFepCtrlRangeBar;
class CAknFepCtrlEventButton;
class CFepLayoutEditAreaBase;
class CAknFepVkbNumericKepMappingMgr;
class CAknFepCtrlVkbLayout;
class CPeninputCnGenericVkbLafMgr;
// class declarations
/**
* client area class
*
* @lib peninputvkbcn.lib
* @since S60 v3.2
*/
class CAknFepVkbClientArea : public CControlGroup
{
public:
/**
* Create one CAknFepVkbClientArea object
*
* @since S60 v3.2
* @param aUiLayout The layout plugin
* @param aControlId This control ID
* @param aDataProvider The interface of data provider
* @return The CFepCtrlDropdownList object.
*/
static CAknFepVkbClientArea* NewL(CFepUiLayout* aUiLayout,
TInt aControlId,
MAknFepVkbDataProvider* aDataProvider,
CPeninputCnGenericVkbLafMgr* aLafMgr);
/**
* Create one CAknFepVkbClientArea object
*
* @since S60 v3.2
* @param aUiLayout The layout plugin
* @param aControlId This control ID
* @param aDataProvider The interface of data provider
* @return The CFepCtrlDropdownList object.
*/
static CAknFepVkbClientArea* NewLC(CFepUiLayout* aUiLayout,
TInt aControlId,
MAknFepVkbDataProvider* aDataProvider,
CPeninputCnGenericVkbLafMgr* aLafMgr);
/**
* Destructor
*
* @since S60 v3.2
* @return None.
*/
virtual ~CAknFepVkbClientArea();
/**
* Size change function
*
* @since S60 v3.2
* @return None.
*/
void SizeChanged();
/**
* Handle event
* @since Series 60 3.2
* @param aEventType The event type
* @param aCtrl The control who sends the event
* @param aEventData The event data
* @return None
*/
void HandleControlEvent(TInt aEventType, CFepUiBaseCtrl* aCtrl, const TDesC& aEventData);
/**
* Change input method layout
*
* @since S60 v3.2
* @param aRange The range defined in TAknFepVkbIMLayout
* @param aChangeVkb The flag of changing vkb or not
* @return None.
*/
void ChangeImLayout(TInt aImLayout, TBool aChangeVkb = ETrue);
/**
* Change vkb layout
*
* @since S60 v3.2
* @param aVkbLayout The new vkb layout
* @return None.
*/
void ChangeVkbLayout(TInt aVkbLayoutId = -1);
/**
* Loop vkb layout
*
* @since S60 v3.2
* @param aType The flag showing shift down or capslock down
* @return None.
*/
void LoopVkbLayout(TVkbShiftType aType, TBool aNotify = EFalse);
/**
* Get the string length in composition field
*
* @since S60 v3.2
* @return The string length in composition field.
*/
TInt CompositionFieldStringLength();
/**
* Set rect of parent, top parent, layout
*
* @since S60 v3.2
* @param aRect The rect of client rect
* @return None.
*/
void SetWholeWindowRect(const TRect& aRect);
/**
* Set top parent
*
* @since S60 v3.2
* @param aParent The vkb window
* @return None.
*/
void SetTopParent(CFepUiBaseCtrl* aParent);
/**
* Reorganize controls
*
* @since S60 v3.2
* @param aImLayout The input method layout
* @param aImLayoutChanged To indicate whether Im Layout changed
* @return None.
*/
void ReorganizeControls(CAknFepVkbImLayout* aImLayout, TBool aImLayoutChanged);
/**
* Get composition field
*
* @since S60 v3.2
* @return The composition field.
*/
CFepLayoutEditAreaBase* CompositionField();
/**
* Add controls into client area
*
* @since S60 v3.2
* @param aControl The control which will be added into client area
* @return The composition field.
*/
void AddControlL(CFepUiBaseCtrl* aControl);
/**
* Is there need to create new word
*
* @since S60 v3.2
* @return ETrue if need to create new word, otherwise EFalse
*/
TBool NeedCreateWord();
/**
* Get layout ID
*
* @since S60 v3.2
* @param aRange The current range
* @return The composition field.
*/
TAknFepVkbLayout ShiftCapsSingleVkbLayoutId( TInt aRange );
/**
* Is next candidate after last page exist?
*
* @since S60 v3.2
* @return ETrue if candidate eixst, otherwise EFalse
*/
void SetNextCandidateExistFlag(TBool aFlag);
/**
* Set if enable switch to hwr
*
* @since S60 v3.2
* @param aEnable The enable flag
* @return None
*/
void SetEnableSwitchToHwr(TBool aEnable);
/**
* Active current range
*
* @since S60 v3.2
* @return None
*/
void ActiveCurrentRange();
/**
* Return the spell for new created words.
*
* @since S60 v3.2
*
* @return The buffer for the gernated spell.
*/
TPtrC GetCreatedWordSpell();
void SetVkbLayoutSize(TInt aVkbLayoutId = -1);
/**
* Change Shift and CapsLock merged button status
*
* @since Series 60 3.2
* @param aIsShiftCase The Shift case
* @param aIsCapslockCase The CpasLock case
* @return None
*/
void ChangeMergedButtonStatus( const TInt aIsShiftCase,
const TInt aIsCapslockCase );
void ShowBubble(TBool aShow);
void ReorganizeZhuYinControls( TBool aShowArrowKey );
/**
* Dim arrow keys when the editor type is
* find pane or secret editor
*
* @since S60 v3.2
* @param aIsSecret The flag
* @return None
*/
void DimArrowKeys( TBool aDimArrow );
protected:
/**
* Constructor function
*
* @since S60 v3.2
* @param aUiLayout The layout plugin
* @param aControlId This control ID
* @param aDataProvider The interface of data provider
* @return None.
*/
CAknFepVkbClientArea(CFepUiLayout* aUiLayout,
TInt aControlId,
MAknFepVkbDataProvider* aDataProvider,
CPeninputCnGenericVkbLafMgr* aLafMgr);
/**
* 2nd construct function
*
* @since Series 60 3.2
* @return None
*/
void ConstructL();
/**
* Get default vkb layout according to range
*
* @since Series 60 3.2
* @param aRange the current range
* @return The default vkb layout.
*/
TAknFepVkbLayout GetDefaultVkbLayout(const TInt aRange);
/**
* Add drop down list into client area
*
* @since Series 60 3.2
* @return None
*/
void AddDropdownListL();
/**
* Add button into client area
*
* @since Series 60 3.2
* @param aControlId The button ID
* @param aEventId The event id
* @param aResId The resource id
* @param aUnicode The unicode
* @param aIsRepeat The flag showing whether it is repeat button
* @
*/
CAknFepCtrlEventButton* AddButtonL(const TInt aControlId,
const TInt aEventId,
const TInt aResId,
const TInt aUnicode = 0,
const TBool aIsRepeat = EFalse);
/**
* Add range bar into client area
*
* @since Series 60 3.2
* @return None
*/
void AddRangeBarL();
/**
* Reset some data in client area
*
* @since Series 60 3.2
* @param aImLayoutChanged To indicate whether Im Layout changed
* @return None
*/
void Reset(TBool aImLayoutChanged);
/**
* Dim keys in vkb controls
*
* @since Series 60 3.2
* @return None
*/
void DimKeys();
/**
* Clear all candidates
*
* @since Series 60 3.2
* @return None
*/
void ClearCandidatesInList();
/**
* Calculate postion function
*
* @since S60 v3.2
* @return None.
*/
void CalculatePosition( TInt aJustifyMode );
/**
* Change window position
*
* @since S60 v3.2
* @return None.
*/
void TopLeftJustify();
/**
* Change window position
*
* @since S60 v3.2
* @return None.
*/
void BottomRightJustify();
/**
* Change window position
*
* @since S60 v3.2
* @return None.
*/
void DataQueryJustify();
/**
* read from resource function
*
* @since Series 60 3.2
* @return None
*/
void ConstructFromResourceL();
/**
* Set control's text property, e.g. font,
* font color
*
* @since Series 60 3.2
* @return None
*/
void SetTextProperty();
private:
TInt FepCaseByCaseId( TInt aCaseId );
TInt CaseByShiftCapslockStatus();
TPeninputCnCellType GetCellType(TInt aColumns);
void DimKeysL();
void HandleStandby2CompositionEventL();
private:// data
/**
* The top parent
* Not own
*/
CFepUiBaseCtrl* iTopParent;
/**
* The control pooling
* Own
*/
CAknFepVkbCtrlPool* iCtrlPool;
/**
* The layout pooling
* Own
*/
CAknFepLayoutPool* iLayoutPool;
/**
* The current im layout
* Not own
*/
CAknFepVkbImLayout* iCurrentImLayout;
/**
* The current vkb layout
* Not own
*/
CPeninputVkbLayoutInfo* iCurrentVkbLayout;
/**
* The data provider
* Not own
*/
MAknFepVkbDataProvider* iDataProvider;
/**
* The vkb ctrl
* Not own
*/
CPeninputVkbCtrlExt* iVkbCtrl;
/**
* Vkb layout
* Own
*/
CAknFepCtrlVkbLayout* iVkbLayout;
/**
* The composition field
* Not own
*/
CAknFepVkbCompositionField* iCompositionField;
/**
* The drop down list
* Not own
*/
CFepCtrlDropdownList* iDropdownList;
/**
* The range bar
* Not own
*/
CAknFepCtrlRangeBar* iRangeBar;
/**
* The key mapping manager
* Own
*/
CAknFepVkbNumericKepMappingMgr* iKeyMappingMgr;
/**
* Indicate whether control's text property have
* been set, e.g. font, font color
*/
TBool iTextPropertySet;
/**
* Indicate whether drop down list's text property
* and unit size etc. have been set
*/
TBool iDropdownPropertySet;
CPeninputCnGenericVkbLafMgr* iLafMgr;
CAknFepVkbWindow* iVkbCnWindow;
TInt iCharWidth;
TInt iCharHeight;
TPoint iCharLeftTop;
TInt iBtnWidth;
TInt iBtnHeight;
TPoint iVkbBoardLeftTop;
/**
* Keep the current layout id
*/
TInt iVkbLayoutId;
/**
* Keep the control ID in ctrl pool not added to the control group
*/
RArray<TInt> iRemainedPoolControlIDs;
public:
TInt iCellAidGap;
};
#endif // C_CAKNFEPVKBCLIENTAREA_H
// End Of File