diff -r 000000000000 -r eb1f2e154e89 textinput/peninputvkbcn/ctrlinc/peninputvkbcompositionfield.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputvkbcn/ctrlinc/peninputvkbcompositionfield.h Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,745 @@ +/* +* 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: CAknFepVkbCompositionField +* +*/ + + +#ifndef C_CAKNFEPVKBCOMPOSITIONFIELD_H +#define C_CAKNFEPVKBCOMPOSITIONFIELD_H + +#include + +class MAknFepVkbDataProvider; +class CAknFepVkbPinyinAnalyser; + +// property of Cpi engine, Private protocol since hard to modify ptiengine.h +const TInt KCpiMaxInputPhraseLen = 6; +/** + * Composition Element Type. + * + * @lib peninputvkbcn.lib + * @since S60 v3.2 + */ +enum TCompositionElementType + { + EElementTypeCompositionChar = 0x0001, //normal char + EElementTypeAutoSeparator = 0x0002, //auto separator + EElementTypeManualSeparator = 0x0004, //manual separator + EElementTypeSeparator = EElementTypeAutoSeparator | EElementTypeManualSeparator, + EElementTypeTonemark = 0x0008, //tomark + EElementTypeAuxilian = EElementTypeSeparator | EElementTypeTonemark, + EElementTypeConvertedChar = 0x0010 //converted char from engine + }; + +class CAknFepVkbCompositionField; + +/** + * CCompositionElement. + * + * @lib peninputvkbcn.lib + * @since S60 v3.2 + */ +class CCompositionElement: public CBase + { +public: + + /** + * Symbian constructor. + * + * @since S60 v3.2 + * @param aKey Input key + * @return Pointer to created CCompositionElement object + */ + static CCompositionElement* NewLC(const TDesC& aKey); + + /** + * destructor + * + * @since S60 v3.2 + * @return None + */ + virtual ~CCompositionElement(); + + /** + * Get the length of original input + * + * @since S60 v3.2 + * @return The length of original input + */ + virtual TInt OriginalCount() const; + + /** + * Undo convert + * + * @since S60 v3.2 + * @param aField The owner of unconverted components + * @param aStartPos The insert position + * @return Inserted elements count + */ + virtual TInt UndoConvertL(CAknFepVkbCompositionField* aField, TInt aStartPos); + + /** + * Get the key + * + * @since S60 v3.2 + * @return The key + */ + inline const TDesC* Key() const; + + /** + * Compare function + * + * @since S60 v3.2 + * @return ETrue if the key value is equal to aKeyValue, + * EFalse otherwise + */ + inline TBool operator == (TUint aKeyValue) const; + + /** + * Determine the type of element + * + * @since S60 v3.2 + * @param aType The type of element to judge + * @return ETrue if it is, otherwise EFalse + */ + inline TBool IsTypeOf(TCompositionElementType aType) const; + + /** + * Is this element is a separator? + * + * @since S60 v3.2 + * @return ETrue if element is a separator; otherwise EFalse + */ + inline TBool IsSeparator() const; + + /** + * Is this element is an atuo separator? + * + * @since S60 v3.2 + * @return ETrue if element is an auto separator; otherwise EFalse + */ + inline TBool IsAutoSeparator() const; + + /** + * Is this element is a manul separator? + * + * @since S60 v3.2 + * @return ETrue if element is a manul separator; otherwise EFalse + */ + inline TBool IsManualSeparator() const; + + + /** + * Is this element is a tone mark? + * + * @since S60 v3.2 + * @return ETrue if element is a tone mark; otherwise EFalse + */ + inline TBool IsTonemark() const; + + /** + * Is this element is a auxilian(separator or tone mark) + * + * @since S60 v3.2 + * @return ETrue if element is a manul separator; otherwise EFalse + */ + inline TBool IsAuxilian() const; + + /** + * Is this element is visible? + * + * @since S60 v3.2 + * @return ETrue if element is visible; otherwise EFalse + */ + inline TBool IsVisible(); + + /** + * Show/hide the element + * + * @since S60 v3.2 + * @param aHide Hide flag, + * @return None + */ + inline void Hide(TBool aHide); + + /** + * Get the CCompositionElement pointer of original input + * + * @since S60 v3.2 + * @return The length of original input + */ + virtual const CCompositionElement* OriginalContent( TInt aIndex ) const; + + +protected: + + /** + * C++ constructor + * + * @since S60 v3.2 + * @return None + */ + CCompositionElement(TInt aKeyType); + + /** + * 2nd constructor + * + * @since S60 v3.2 + * @param aKey Input key + * @return None + */ + void BaseConstructL(const TDesC& aKey); + +private: //data + + /** + * The key type + */ + const TInt iKeyType; + /** + * The key (Own) + * The iKey->Length() must be > 0 + */ + HBufC* iKey; + + TBool iHide; + }; + +/** + * CCompositionConvertedElement. + * + * @lib peninputvkbcn.lib + * @since S60 v3.2 + */ +class CCompositionConvertedElement: public CCompositionElement + { +public: + + /** + * Symbian constructor. + * + * @since S60 v3.2 + * @param aKey Input key + * @return Pointer to created CCompositionElement object + */ + static CCompositionConvertedElement* NewLC(const TDesC& aKey); + + /** + * destructor + * + * @since S60 v3.2 + * @return None + */ + virtual ~CCompositionConvertedElement(); + + /** + * Append a element to this converted element + * + * @since S60 v3.2 + * @param aElement The element to append + * @return None + */ + void AppendOriginal(const CCompositionElement* aElement); + +// from CCompositionElement + + /** + * From CCompositionElement + * Undo convert + * + * @since S60 v3.2 + * @param aField The owner of unconverted components + * @param aStartPos The insert position + * @return Inserted elements count + */ + TInt UndoConvertL(CAknFepVkbCompositionField* aField, TInt aStartPos); + + /** + * From CCompositionElement + * Get the length of original input + * + * @since S60 v3.2 + * @return The length of original input + */ + TInt OriginalCount() const; + + /** + * From CCompositionElement + * Get the CCompositionElement pointer of original input + * + * @since S60 v3.2 + * @return The length of original input + */ + virtual const CCompositionElement* OriginalContent( TInt aIndex ) const; + +private: + + /** + * C++ constructor + * + * @since S60 v3.2 + * @return None + */ + CCompositionConvertedElement(); + + /** + * 2nd constructor + * + * @since S60 v3.2 + * @param aKey Input key + * @return None + */ + void ConstructL(const TDesC& aKey); + +private: //data + + /** + * Original elements before converted + */ + RPointerArray iOriginalElements; + + }; + +/** + * CAknFepVkbCompositionField. + * + * @lib peninputvkbcn.lib + * @since S60 v3.2 + */ +class CAknFepVkbCompositionField: public CFepLayoutEditAreaBase + { + +public: + + friend class CCompositionConvertedElement; + + /** + * Symbian constructor. + * + * @since S60 v3.2 + * @param aMaxLength Length limitation, 0 means no limitation + * @param aRect The control rect + * @param aUiLayout The layout + * @param aControlId The control id. + * @return Pointer to created CAknFepVkbCompositionField object + */ + static CAknFepVkbCompositionField* NewL(TInt aMaxLength, + TRect aRect, + CFepUiLayout* aUiLayout, + TInt aControlId, + MAknFepVkbDataProvider* aDataProvider); + + /** + * destructor + * + * @since S60 v3.2 + * @return None + */ + virtual ~CAknFepVkbCompositionField(); + + /** + * HandleControlEvent + * + * @since S60 v3.2 + * @param aEventType The event type + * @param aCtrl The sender + * @param aEventData The event data. + * @return None + */ + void HandleControlEvent(TInt aEventType, CFepUiBaseCtrl* aCtrl, const TDesC& aEventData); + + /** + * Get the length of current string in composition field + * + * @since S60 v3.2 + * @return The length of current string in composition field + */ + TInt Length() const ; + + /** + * Set warning color + * + * @since S60 v3.2 + * @param aColor The color. + * @return None + */ + void SetWarningColor(const TRgb& aColor); + + /** + * Set normal color + * + * @since S60 v3.2 + * @param aColor The color. + * @return None + */ + void SetNormalColor(const TRgb& aColor); + + /** + * Is there need to create new word + * + * @since S60 v3.2 + * @return ETrue if there is need to create new word, otherwise EFalse + */ + TBool NeedCreateWord(); + + /** + * Return the spell for new created words. + * + * @since S60 v3.2 + * @return The buffer for the gernated spell. + */ + TPtrC GetCreatedWordSpell(); + + /** + * Return whether the inputted spell is invalid + * + * @since S60 v3.2 + * @return Return whether the inputted spell is invalid. + */ + TBool IsValidSpell(); + + void ConstructFromResourceL(); + + void SizeChanged(TRect aRect); +private: + + /** + * C++ constructor + * + * @since S60 v3.2 + * @param aMaxLength Length limitation, 0 means no limitation + * @param aRect The control rect + * @param aUiLayout The layout + * @param aControlId The control id. + * @return None + */ + CAknFepVkbCompositionField(TInt aMaxLength, + TRect aRect, + CFepUiLayout* aUiLayout, + TInt aControlId, + MAknFepVkbDataProvider* aDataProvider); + + /** + * Second phase constructor + * + * @since S60 v3.2 + * @return None + */ + void ConstructL(); + + /** + * Insert a key + * + * @since S60 v3.2 + * @param aKey The key to insert. + * @return None + */ + void HandleInsertL(const TDesC& aKey); + + /** + * Generate first segment to analysis + * + * @since S60 v3.2 + * @return None + */ + void GetFirstSegmentL(); + + /** + * Insert an element + * + * @since S60 v3.2 + * @param aElement The element to insert. + * @return None + */ + void InsertElementL(const CCompositionElement* aElement); + + /** + * clear text + * + * @since S60 v3.2 + * @return None + */ + void ClearTextL(); + + /** + * Handle back key + * + * @since S60 v3.2 + * @return None + */ + void HandleBackL(); + + /** + * Submit all text + * + * @since S60 v3.2 + * @return None + */ + void HandleFlushL(); + + /** + * Handle Analysis Response + * + * @since S60 v3.2 + * @param aCompText Analysis result text. + * @return None + */ + void HandleAnalysisResponseL(const TDesC& aCompText); + + /** + * Handle converted result + * + * @since S60 v3.2 + * @param aConvertedText Converted result text. + * @return None + */ + void HandleConvertedResultL(const TDesC& aConvertedText); + + /** + * Elements operation: remove + * + * @since S60 v3.2 + * @param aStartPos Start position. + * @param aLength Length. + * @return None + */ + void Remove(TInt aStartPos, TInt aLength, TBool aDestroy = ETrue); + /** + * Elements operation: insert + * + * @since S60 v3.2 + * @param aPos Insert position. + * @param aElement The element. + * @return None + */ + void InsertL(TInt aPos, const CCompositionElement* aElement); + + /** + * Elements operation: clear + * + * @since S60 v3.2 + * @return None + */ + void Clear(); + + /** + * Submit the keys in elements and the cursor to editbase + * + * @since S60 v3.2 + * @param aPos Insert position. + * @return None + */ + void UpdateTextL(); + + /** + * Determine whether elment is allowed to insert + * + * @since S60 v3.2 + * @param aElement Element to insert + * @return ETrue for allowed otherwise EFalse; + */ + TBool IsAllowedInsert(const CCompositionElement* aElement); + + /** + * Send Analysis Request + * + * @since S60 v3.2 + * @param aRequest The request + * @return None; + */ + void SendAnalysisRequestL(); + + /** + * To test whether the all input keys are converted + * to chinese characters + * + * @since S60 v3.2 + * @return ETrue if finished, EFalse otherwise. + */ + TBool IsFinishComposition(); + + /** + * To test whether current pos element should be replaced by input one + * + * @since S60 v3.2 + * @param aElement The input element + * @param aPos The pos of element to test + * @return ETrue if current element should be replaced, EFalse otherwise. + */ + TBool IsReplacePosition(const CCompositionElement* aElement, TInt aPos); + + /** + * To test whether the one before current pos element should be replaced + * by input one + * + * @since S60 v3.2 + * @param aElement The input element + * @return ETrue if current element should be replaced, EFalse otherwise. + */ + TBool IsReplaceFront(const CCompositionElement* aElement); + + /** + * To test whether current pos element should be replaced by input one + * + * @since S60 v3.2 + * @param aElement The input element + * @return ETrue if current element should be replaced, EFalse otherwise. + */ + TBool IsReplaceBack(const CCompositionElement* aElement); + + /** + * Redo the format after deletion. + * + * @since S60 v3.2 + * @return None. + */ + void ReFomatAfterDelete(); + + /** + * Get display cursor positon by internal cursor position + * + * @since S60 v3.2 + * @param aInternalPos The internal position + * @return The display cursor position. + */ + TInt InternalPosToDisplayPos(TInt aInternalPos); + + /** + * Get internal cursor positon by display cursor position + * + * @since S60 v3.2 + * @param aInternalPos The internal position + * @return The display cursor position. + */ + TInt DisplayPosToInternaPos(TInt aDisplayPos); + + /** + * Remove the selected text + * + * @since S60 v3.2 + * @return None + */ + void RemoveSelection(); + +// from CFepLayoutEditAreaBase + + /** + * From CFepLayoutEditAreaBase + * Adjust the cursor when pointer down or move + * + * @since S60 v3.2 + * @return None + */ + void AdjustSelectedCompositionText(TInt& aPositionOfInsertionPointInBuffer); + + /** + * From CFepLayoutEditAreaBase + * Update editbase content when scrolling + * + * @since S60 v3.2 + * @param aCursorPos The cursor position + * @param aAnchorPos The anchor position + * @return None. + */ + void UpdateContent(const TCursorSelection& aCursorSel); + +private: //data + + /** + * Length limitation + */ + TInt iMaxLength; + + /** + * segment to analysis (Own) + */ + HBufC* iFirstSegment; + + /** + * first segment start position in buffer + */ + TInt iFirstSegmentOffset; + + /** + * first segment length in buffer + * iFirstSegmentLength may not equal to iFirstSegment.Length + * Because all automatical separators are removed in iFirstSegment + */ + TInt iFirstSegmentLength; + + /** + * Warning color + */ + TRgb iWarningColor; + + /** + * Normal color + */ + TRgb iNormalColor; + + /** + * Elements + */ + RPointerArray iElements; + + /** + * Current cursor position of + * internal data + */ + TInt iCurrentPos; + /** + * composition text start with manul separator + */ + //TInt iSavedCursorPos; + + /** + * Flag of is there need to create new word + */ + TBool iNeedCreateWord; + + /** + * The count of converted element + */ + TInt iConvertedElement; + + /** + * The count of converted element + */ + TBuf iCreateWordSpellBuffer; + + /** + * The analyser handle for spell decomposition + */ + CAknFepVkbPinyinAnalyser* iPinyinAnalyser; + CAknFepVkbPinyinAnalyser* iZhuyinAnalyser; + + /** + * The data provider + * Not own + */ + MAknFepVkbDataProvider* iDataProvider; + + /** + * Specify wether the spell is valid. + */ + TInt iIsValidSpells; + + }; + +#include "peninputvkbcompositionfield.inl" + +#endif //C_CAKNFEPVKBCOMPOSITIONFIELD_H + +// End Of File