--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/classicui_plat/special_character_table_api/inc/AknCharMap.h Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,532 @@
+/*
+* 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:
+* Special character table control that is shown
+* inside special character table dialog.
+*
+*
+*/
+
+
+#ifndef AKNCHARMAP_H
+#define AKNCHARMAP_H
+
+#include <coecntrl.h>
+#include <AknUtils.h>
+#include <AknPictographDrawerInterface.h>
+
+// Maximum number of rows that fits visible to the screen.
+const TInt KSCTMaxVisibleRowsAPAC = 7;
+const TInt KSCTMaxVisibleRowsELAF = 8;
+#define KSCTMaxVisibleRows ( (AknLayoutUtils::Variant()==EApacVariant) ? KSCTMaxVisibleRowsAPAC : KSCTMaxVisibleRowsELAF )
+
+const TInt KCharMapCaseMask = 0xFF;
+
+enum TAknCharMapPictoMode
+ {
+ EAknCharMapPictoNoUse = 0x00010000,
+ EAknCharMapPictoFirst = 0x00020000
+ };
+
+enum TAknCharMapEmotionMode
+ {
+ EAknCharMapEmotionNoUse = 0x00040000,
+ EAknCharMapEmotionUse = 0x00080000,
+ EAknCharMapEmotionFirst = 0x00100000
+ };
+
+enum TAknChaMapTableCase
+ {
+ EAknCharMapTableNull = -1,
+ EAknCharMapTableSpecialChar = 0,
+ EAknCharMapTablePicto,
+ EAknCharMapTablePicto2
+ };
+
+enum TAknChaMapStatusChanged
+ {
+ EAknCharNoSelection = -1,
+ EAknCharSelectedSpecialCharacter = 0,
+ EAknCharChangedCategory,
+ EAknCharSelectedNextTableButton,
+ EAknCharSelectedTableExitButton
+ };
+
+
+class CEikScrollBarFrame;
+class CAknPictographInterface;
+class CAknCharMapHistory;
+class CAknCharMapExtension;
+class MAknSctFocusHandler;
+/**
+ * Special character table control for AVKON
+ *
+ */
+class CAknCharMap : public CCoeControl, public MAknPictographAnimatorCallBack, public MEikScrollBarObserver
+ {
+
+ friend class CAknCharMapExtension;
+
+public:
+
+ /**
+ * Character table constructor
+ *
+ */
+ IMPORT_C CAknCharMap();
+
+ /**
+ * Character table destructor
+ *
+ */
+ IMPORT_C ~CAknCharMap();
+
+ /**
+ * Character table resource constructor.
+ *
+ * @param aReader Special character table resource: SPECIAL_CHAR_TABLE
+ *
+ */
+ IMPORT_C void ConstructFromResourceL(TResourceReader& aReader);
+
+ /**
+ * Number of rows in special character map.
+ *
+ * @return Number of rows in special character map.
+ *
+ */
+ IMPORT_C TInt HeightInRows();
+
+ /**
+ * Set the emotion mode for the special character table.
+ *
+ * @param aMode The emotion mode for the special character table
+ * (EAknCharMapEmotionUse, EAknCharMapEmotionFirst, EAknCharMapEmotionNoUse).
+ */
+ IMPORT_C void SetEmotionModeL(TAknCharMapEmotionMode aMode);
+
+ /**
+ * Set the case for the special character table.
+ *
+ * @param aCharCase The case for the special character table
+ * (EAknSCTLowerCase or EAknSCTUpperCase).
+ */
+ IMPORT_C void SetCharacterCaseL(TInt aCharCase);
+
+ /**
+ * Sets reference to the buffer where selected special character(s) are put.
+ *
+ * @param aSpecialChars Reference to the buffer where selected special characters are put.
+ */
+ IMPORT_C void SetBuffer(TDes& aSpecialChars);
+
+ /**
+ * Reads special characters from the resource.
+ *
+ * @param aReader Special character table resource: SPECIAL_CHAR_TABLE
+ *
+ */
+ void ReadCharSetFromResourceL(TResourceReader& aReader);
+
+ /**
+ * Reads special characters from the resource and add recent characters.
+ *
+ * @param aReader Special character table resource: SPECIAL_CHAR_TABLE
+ *
+ */
+ void ReadAndAddCharSetFromResourceL(TResourceReader& aReader);
+
+public: // from CCoeControl
+ IMPORT_C TSize MinimumSize();
+ IMPORT_C TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode);
+ IMPORT_C TCoeInputCapabilities InputCapabilities() const;
+ IMPORT_C virtual void ActivateL();
+
+protected: // from CCoeControl
+ IMPORT_C void SizeChanged();
+ IMPORT_C void HandleResourceChange(TInt aType);
+ IMPORT_C TInt CountComponentControls() const;
+ IMPORT_C CCoeControl* ComponentControl(TInt aIndex) const;
+
+public: // new functions
+ void SetPictoMode(TAknCharMapPictoMode aMode);
+ void SetCaseTableL(const RArray<TInt> & aCase);
+ TInt LengthOfRecentChar();
+
+private: // from MAknPictographDrawerCallBack
+ void DrawPictographArea();
+
+public: // new methods
+ const TDesC* LowerCaseCharacters() const;
+ const TDesC* UpperCaseCharacters() const;
+ const TDesC* NumericCharacters() const;
+ void CopyCharactersL( const CAknCharMap& aCharMap );
+
+ TBool SwitchTablesL( TBool& aLayoutChanged );
+ TInt PageCount() const;
+ TInt CurrentPage() const;
+ TInt NextPageL();
+
+ void CreateOffscreenBackgroundL();
+ void DrawOffscreenBackgroundIfRequired() const;
+ void SetTitleL(TPtrC aTitle);
+ const TDesC* Title() const;
+ void DoLayout();
+
+ TBool HasPictoInterface() const;
+
+ /**
+ * Get the case for the special character table.
+ *
+ * @return aCharCase The case for the special character table
+ * (EAknSCTLowerCase, EAknSCTQwerty or EAknSCTUpperCase).
+ */
+ TInt CharacterCase();
+
+ void DisableRecentCharsRow();
+
+protected:
+ void Draw(const TRect& aRect) const;
+
+ /**
+ * Draw the special char inside the grid cell.
+ * @param aGC, the graphic context;
+ * @param aSctPosition, the rectangle inside the cell (exclude the cell edge).
+ * @param aCharIndex, the index of the special char, used to determin
+ * whether the char is recent char or not.
+ * @param aHighlighted, the flag to indicate if the char is highlighted.
+ * @param aDrawBackground, the flag to indicate if it is neccessary to brush
+ * the back ground inside the cell.
+ */
+ void DrawItem(
+ CWindowGc& aGc,
+ const TRect& aSctPosition,
+ TInt aCharIndex,
+ TBool aHighlighted,
+ TBool aDrawBackground ) const;
+
+ /**
+ * Draw the shade background inside the cell.
+ * @param aGC, the graphic context;
+ * @param aItemRect, the rectangle inside the cell (exclude the cell edge).
+ * @param aCharIndex, the index of the special char, used to determin
+ * whether the char is recent char or not.
+ * @param aHighlighted, the flag to indicate if the char is highlighted.
+ * @param aDrawBackground, the flag to indicate if it is neccessary to brush
+ * the back ground inside the cell.
+ */
+ void DrawItemShade( CWindowGc& aGc,
+ const TRect& aItemRect, TInt aCharIndex,
+ TBool aHighlighted,
+ TBool aDrawBackground ) const;
+
+ /**
+ * Set the pen size, color, etc. before drawing the frame of a special char
+ * item.
+ * Note: The frame is inside the cell.
+ *
+ * @param aGC, the graphic context;
+ */
+ void SetItemFrameStyle( CWindowGc& aGc) const;
+
+ /**
+ * Draw the frame of a special char item.
+ * Note: The frame is inside the cell.
+ *
+ * @param aGC, the graphic context;
+ * @param aItemRect, the rectangle inside the cell (exclude the cell edge).
+ * @param aCharIndex, the index of the special char, used to determin
+ * whether the char is recent char or not.
+ * @param aHighlighted, the flag to indicate if the char is highlighted.
+ * @param aDrawBackground, the flag to indicate if it is neccessary to brush
+ * the back ground inside the cell.
+ */
+ void DrawItemFrame( CWindowGc& aGc,
+ const TRect& aItemRect, TInt aCharIndex,
+ TBool aHighlighted,
+ TBool aDrawBackground ) const;
+
+ /**
+ * Set the pen size, color, etc. before drawing the thick frame of all
+ * recent chars.
+ * Note: The frame is always on the top of all SCT grid, or inside the
+ * MenuSct.
+ *
+ * @param aGC, the graphic context;
+ */
+ void SetRecentCharFrameStyle( CWindowGc& aGc) const;
+
+ /**
+ * Draw the frame of all recent chars.
+ * Note: The frame is always on the top of all SCT grid, or inside the
+ * MenuSct.
+ *
+ * @param aGC, the graphic context;
+ */
+ void DrawRecentCharFrame( CWindowGc& aGc) const;
+
+ /**
+ * Set the pen size, color, etc. before drawing the SCT grid.
+ *
+ * @param aGC, the graphic context;
+ */
+ void SetGridStyle( CWindowGc& aGc) const;
+
+ /**
+ * Draw the SCT grid. This is a better method. It will iterate
+ * all visible special chars, and draw a simple rect around it.
+ *
+ * @param aGC, the graphic context;
+ */
+ void DrawGrid( CWindowGc& aGc) const;
+
+ /**
+ * Get How many special chars are visible in the current page,
+ * or in the current MenuSct frame.
+ * @return the number of the visible special chars.
+ */
+ TInt NumberOfVisibleChars() const;
+
+ void DrawCursor() const;
+ void MoveCursorL(TInt aX, TInt aY);
+
+ void DrawCell( TInt aCursorPos, TBool aHighLighted ) const;
+ TRect CursorRect( TInt aCursorPos, TInt aCharIndex ) const;
+
+ void UpdateScrollIndicatorL();
+
+ void DrawPicto(
+ CWindowGc& aGc,
+ const TRect& aSctPosition,
+ TInt aCharIndex,
+ TBool aHighlighted,
+ TBool aDrawBackground ) const;
+
+ HBufC* AppendTextL(HBufC* aChars, HBufC* aText);
+ TInt SwitchAnotherTableL(TInt aIncrement);
+
+ void CountMaxColumnsAndCellSizes();
+
+ HBufC* CharsFromCase(TInt aCharCase) const;
+ TInt PageCountFromChars(TDesC& aChar) const;
+ TInt VisibleRows() const;
+
+ void CreatePictoCharL();
+ void AppendRecentCharL();
+ HBufC* InsertSwitchCharAndHistoryToCharsBufL(HBufC* aCharsBuf, TChar aSwitchChar, const TDesC& aHistory);
+ TBool IsRecentChar(TInt aIndex = 0) const;
+ void SaveRecentDataL(TChar aChar);
+ CAknCharMapExtension* Extension() const;
+
+ void UpdateHeadingPane( TBool aUpdateTitle );
+
+public:
+ /**
+ * This function handles pointer events directed at the charmapdialog.
+ * @param aPointerEvent The pointer event directed at the charmapdialog.
+ */
+ IMPORT_C virtual void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+
+ /**
+ * From CCoeControl
+ * Sets iCharmapObserver to be as observer
+ * @param aObserver pointer to observer
+ */
+ IMPORT_C void SetObserver( MCoeControlObserver* aObserver );
+
+private: //from CCoeContrl
+ void Reserved_1();
+ void Reserved_2();
+
+public:
+ /**
+ * This function handles pointer events directed at the charmapdialog.
+ * @param aScrollBar The scrollbar to be observed.
+ * @param aEventType The incomming event type so that correct functionality can be done.
+ */
+ void HandleScrollEventL(CEikScrollBar* aScrollBar, TEikScrollEvent aEventType);
+
+ /**
+ * Constructs a special character row for edit menu.
+ *
+ * @since 3.1
+ */
+ IMPORT_C void ConstructMenuSctRowL();
+
+ /**
+ * Sets the rect which SCT should use to draw itself.
+ * @param aRect The used rectangle.
+ * @since 3.1
+ */
+ IMPORT_C void SetMenuSctRect( const TRect& aRect );
+
+
+ /**
+ * Constructs a special character row for edit menu. Uses the given resource
+ * of a dialog to construct the special character table. The recently used characters
+ * are only from the selected special character table.
+ *
+ * @since S60 3.1
+ *
+ * @param aResourceId The resource id of the special character dialog which
+ * is used with editor.
+ */
+ IMPORT_C void ConstructMenuSctRowL(TInt aResourceId);
+
+ /**
+ * Constructs a special character row for edit menu. Uses the given resource
+ * of a dialog to construct the special character table. The recently used characters
+ * are only from the selected special character table.
+ *
+ * @since S60 3.2
+ *
+ * @param aResourceId The resource id of the special character dialog which
+ * is used with editor.
+ */
+ IMPORT_C void ConstructMenuSctRowFromDialogL(TInt aResourceId);
+
+ /**
+ * Highlight the row of recent used character according to argument.
+ * @param aHighlight the flag to indicate wheather the row is highlighted
+ * or not.
+ * @since S60 3.1
+ */
+ IMPORT_C void HighlightSctRow(TBool aHighlight);
+public:
+ void SetStatusChanged(const TInt aStatusChanged);
+ TInt StatusChanged();
+ TInt CurrentCategory();
+ TBool ChangeCategoryL(const TInt aCategory, TBool& aLayoutChanged );
+ TInt Category();
+ TBool IsSupportCategoryButtonUi() const;
+ TBool IsJapaneseSctUi() const;
+ const TDesC* TitleWithSelectingSpecialChar();
+
+private:
+ void ChangeFocusSct(TBool aFocusOn);
+ void CreateTitleWithSelectingSpecialCharL(const TDesC* aTitle);
+
+private:
+ void DoHandleResourceChangeL(TInt aType);
+ void EnableCategoryButtonsL();
+ void DisableCategoryButtonsL();
+ void EnableNavigationButtonsL();
+ void DisableNavigationButtonsL();
+ void EnableCategoryInputFieldL();
+ void DisableCategoryInputFieldL();
+
+public:
+ TAknChaMapTableCase NextTableCase() const;
+ CCoeControl* FocusedControl();
+ MAknSctFocusHandler* FocusHandler();
+ TBool EnterControl(TInt aX, TInt aY);
+ void MoveFocus(TInt aX, TInt aY);
+ TBool LeaveControl();
+ TBool ExitWithKey(TInt aKeycode);
+ void UpdateInputFieldL();
+ void RefreshNaviPageL();
+ TInt TableCount() const;
+ TInt PrevPageL();
+ TInt RowMin(TInt aRow) const;
+ TInt RowMax(TInt aRow) const;
+ TInt ColMin(TInt aCol) const;
+ TInt ColMax(TInt aCol) const;
+ TInt MaxCols() const;
+ TBool TakeFocus();
+ void ShowFocus();
+ TPoint CursorPos();
+
+private:
+ void HandleFocusStatusChanged(TBool aIsFocused=ETrue);
+ TBool EmotionsAreAllReadyToDraw(TInt aIndex, TInt aCount) const;
+ void GetFocusSctName(TChar& aChar, TDes& aName) const;
+ TBool HaveBufferToAppendFocusSct() const;
+ TBool AppendFocusSctToDestinationBufferL();
+ TBool SwitchSctAndEmotionL();
+
+private:
+ TBool iIsMirrored;
+ const CFont* iFont; // drawing text font
+
+ TInt iGridItemWidth; // grid cell width
+ TInt iGridItemHeight; // grid cell height
+
+ TPoint iOffset;
+ TPoint iGridTopLeft;
+
+ TInt iRows; // total rows of all chars
+ TInt iMaxColumns; // column count in current gird
+ TInt iFirstVisibleRow; // first row index in current page window
+
+ TPoint iCursorPos;
+ TPoint iOldCursorPos;
+ mutable TBool iDrawnBefore;
+
+ // shown table case
+ TAknChaMapTableCase iChaMapTableCase;
+ TInt iSpecialCharCase;
+
+ // des buffer
+ TDes* iFetcherCharsBuffer;
+
+ // all the data buffers
+ HBufC* iChars;
+ HBufC* iCharsBufferFull;
+ HBufC* iCharsBufferHalf;
+ HBufC* iCharsBufferLower;
+ HBufC* iCharsBufferUpper;
+ HBufC* iCharsBufferNumeric;
+ HBufC* iPictographsBuffer;
+ HBufC* iPictographsBuffer2;
+
+ CEikScrollBarFrame* iSBFrame;
+
+ CAknPictographInterface* iPictoInterface;
+ TBool iAnimated;
+
+ CFbsBitmap* iOffscreenBg;
+ CFbsBitmapDevice* iBitmapDevice;
+ CFbsBitGc* iBitmapGc;
+ TBool iHasBitmapBackground; // Keeped only for Binary Compatibility
+ mutable TBool iOffscreenBgDrawn;
+
+ // all kind of titles
+ HBufC* iTitleDefault;
+ HBufC* iTitleFull;
+ HBufC* iTitleHalf;
+ HBufC* iTitlePicto;
+ HBufC* iTitlePicto2;
+
+ TInt iCaseIndex;
+
+ // cases info
+ RArray<TInt>* iShowCasesRef;
+ RArray<TInt> iSpecialCharCases;
+ RArray<TInt> iPictographCases;
+
+ // pages info
+ RArray<TInt>* iShowPagesRef;
+ RArray<TInt> iSpecialCharPages;
+ RArray<TInt> iPictographPages;
+
+ TAknPictographHeight iCurrentPictographHeight;
+ CAknCharMapExtension* iExtension;
+ CAknCharMapHistory* iCharMapHistory;
+
+ TBool iSetRecentSct; // ETrue is set when setting recent used characters to SCT
+ TBool iSetRecentPic; // ETrue is set when setting recent used characters to Picto
+ TInt iStatusChanged;
+ };
+
+#endif // __AKNCHARMAP_H__