--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fep/aknfep/inc/AknFepCaseManager.h Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,295 @@
+/*
+* Copyright (c) 2002 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:
+*
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+#ifndef _AKNFEP_CASE_MANAGER_H__
+#define _AKNFEP_CASE_MANAGER_H__
+
+#include "AknFepManager.h"
+
+#include <e32base.h>
+
+class CAknEdwinState;
+class CAknPictographInterface;
+
+
+class CAknFepCaseManager : public CBase
+ {
+private:
+ enum AknFepCaseManagerConsts
+ {
+ ETextCaseCharactersBufferMaxSize =16
+ };
+
+public:
+ /**
+ * Two phase constructor for this class
+ */
+ static CAknFepCaseManager* NewL(CAknFepManager& aFep);
+
+ /**
+ * C++ Destructor
+ */
+ ~CAknFepCaseManager();
+
+public:
+ /**
+ * Configure the current case state of the system based on the current
+ * editor state
+ */
+ void ConfigureCaseStateFromEditorState();
+
+ /**
+ * Start an automatic case update - determines the case of the next
+ * character based on the rules governing auto case update and applies
+ * this change accordingly
+ *
+ * @param aNaviEvent the type of event which prompted the case update
+ * (affects the final cursor position)
+ */
+ void UpdateCase(TWesternNaviEvent aNaviEvent);
+
+ /**
+ * Starts a manual case update
+ */
+ void ManualCaseUpdate();
+
+ /**
+ * Reverts the case of text input to the previous one in order to
+ * back out unneccasary case changes
+ */
+ void RevertCaseChange();
+
+ /**
+ * Set the case of text input
+ *
+ * @param aCase the case of the next character
+ * @param aOverrideNumericTest Isn't used in most cases, but if set, handles
+ * numeric mode as normal mode. Needed for selection
+ * style hash key loop implementation.
+ */
+ void SetCurrentCase(TInt aCase, TBool aOverrideNumericTest = EFalse);
+
+ /**
+ * Return the current case of text input
+ *
+ * @return integer representing an enumerated value of the current case
+ */
+ TInt CurrentCase() const;
+
+ /**
+ * check whether case can be changed
+ *
+ * @return Eture if case can be changed
+ */
+ TBool IsAbleChangeCase() const;
+
+ TInt PluginPermittedCases();
+
+ TBool CapsLockRequired(TInt aCurrentCase);
+ /* Teleca change begin, 18.08.2009 ssal */
+ /**
+ * Determines whether a character is one of Korean characters
+ * @param aChar the charcter to be checked
+ * @return ETrue if aChar is Korean character
+ */
+ TBool IsKoreanCharacter( TChar aChar ) const;
+ /* Teleca change end, 18.08.2009 ssal */
+private:
+ /**
+ * C++ Constructor
+ */
+ CAknFepCaseManager(CAknFepManager& aFep);
+
+ /**
+ * Second phase constructor for this class
+ */
+ void ConstructL();
+
+ /**
+ * Determines the position the cursor will be in when a navigation event is
+ * complete. This is used to determine the required case at that position.
+ *
+ * @param aNaviEvent the type of event after which the case will be updated
+ * @return The position in the document of the cursor when aNaviEvent is
+ * complete
+ */
+ TInt FindCursorPositionAtCaseCheck(TWesternNaviEvent aNaviEvent);
+
+ /**
+ * Determines, based on the case rules, whether text case needs to be
+ * applied for text input i.e. whether the next character needs
+ * to be entered in upper case and subsequent characters in lower case
+ *
+ * @return ETrue if text case needs to be applied for the next
+ * character
+ */
+ TBool TextCaseRequired(TInt aCursorPos);
+
+ /**
+ * Determines, based on the case rules, whether or not caps lock input style
+ * needs to be applied i.e. if the current case is upper and we should stay
+ * in upper following the entry of the next character
+ *
+ * @return ETrue if caps lock input style is to be applied
+ */
+ TBool CapsLockRequired(TInt aCursorPos, TInt aCurCase);
+
+ /**
+ * Determines the case of text input based on the rules governing
+ * case updates atarted by the user and applies this change accordingly
+ */
+ void DoManualCaseUpdate();
+
+ /**
+ * Applies the case change in the ptiengine (via the engine interface) and
+ * updates the edit state indicators accordingly
+ */
+ void ApplyCase();
+
+ /**
+ * Sets the system to be in fixed case. No case updates are permitted
+ * in this state
+ *
+ * @param aFixedCase if ETrue then no case updates are subsequently
+ * permitted
+ */
+ void SetFixedCase(TBool aFixedCase);
+
+ /**
+ * Determines if the current editor has the fixed case flag set
+ *
+ * @return ETrue if the fixed case flag is set on the current editor
+ */
+ TBool CurrentEditorIsFixedCase() const;
+
+ /**
+ * Determines if a case is one which is allowed in the current editor
+ * based on the editor's configuration
+ *
+ * @param aCase the case to be checked
+ * @return ETrue if aCase is permitted by the current editor
+ */
+ TBool IsCasePermitted(TInt aCase) const;
+
+ /**
+ *
+ *
+ *
+ * @param aChar the charcter to be checke
+ * @return ETrue
+ */
+ TBool IsTextCaseCharacter(TChar aChar) const;
+
+ /**
+ *
+ *
+ *
+ * @param aChar the charcter to be checked
+ * @return ETrue if aChar is full or half alphabet
+ */
+ TBool IsAlpha(TChar aChar) const;
+
+ /**
+ * Determines whether a character is one of Japanese characters
+ * Japanese character is included as below:
+ * - Hiragana/Kanji
+ * - Katakana (Both half and full)
+ * - Symbol (Full-width only)
+ * (including Full-width Full-Stop)
+ *
+ * @since S60 v3.1
+ * @param aChar the charcter to be checked
+ * @return ETrue if aChar is Japanese character
+ */
+ TBool IsJapaneseCharacter(TChar aChar) const;
+
+ /* Teleca change begin, 18.08.2009 ssal */
+ /**
+ * Determines whether a character is one of Korean hangul syllable
+ * @param aChar the charcter to be checked
+ * @return ETrue if aChar is korean character
+ */
+ TBool IsHangulSyllable(TChar aChar) const;
+
+ /**
+ * Determines whether a character is one of Korean hangul compatibility Jamo Syllable
+ * @param aChar the charcter to be checked
+ * @return ETrue if aChar is Korean character
+ */
+ TBool IsHangulCompatibilityJamo(TChar aChar) const;
+ /* Teleca change begin, 18.08.2009 ssal */
+
+public:
+ /**
+ * Calls to ManulaCaseUpdate() in lower case situation will switch to
+ * upper case even if text case would be normally selected.
+ */
+ inline void SetForceUpperCase();
+
+ /**
+ * Clear force upper case flag (see SetForceUpperCase()).
+ */
+ inline void ClearForceUpperCase();
+
+ inline TBool IsInverseCase() const;
+ inline void SetInverseCase( TBool aVal );
+
+private:
+ CAknFepManager& iFep; //not owned
+ CAknPictographInterface* iPictoInterface; //owned
+
+ TInt iCurrentCase;
+ TInt iPreviousCase;
+ TBool iFixedCase;
+ TBool iForceUpperCase;
+ TBool iInverseCase;
+ TBufC<ETextCaseCharactersBufferMaxSize> iTextCaseCharacters;
+ };
+
+inline void CAknFepCaseManager::SetForceUpperCase()
+ {
+ iForceUpperCase = ETrue;
+ }
+
+
+inline void CAknFepCaseManager::ClearForceUpperCase()
+ {
+ iForceUpperCase = EFalse;
+ }
+
+inline TBool CAknFepCaseManager::IsInverseCase() const
+ {
+ return iInverseCase;
+ }
+
+inline void CAknFepCaseManager::SetInverseCase( TBool aVal )
+ {
+ iInverseCase = aVal;
+ }
+
+#endif //_AKNFEP_CASE_MANAGER_H__