diff -r a1caeb42b3a3 -r fcdfafb36fe7 uifw/AvKon/src/AknCharMap.cpp --- a/uifw/AvKon/src/AknCharMap.cpp Thu Jul 15 18:56:19 2010 +0300 +++ b/uifw/AvKon/src/AknCharMap.cpp Thu Aug 19 10:11:06 2010 +0300 @@ -396,7 +396,9 @@ void SwitchEmotionVisibilityL(); TBool NeedEmotionSwitchIcon() const; HBufC* ReadEmotionHBufCL(); - void LoadEmotionTumbnails(const TDesC& aChars); + void LoadEmotionTumbnails(const TDesC& aText); + void PlayAnimationL(const TDesC& aText); + void StopAnimation(const TDesC& aText); void SetEmotionSize(const TSize& aSize); TBool IsEmotionChar(TChar aChar); TChar SwitchToSctChar(); @@ -438,6 +440,9 @@ // Indicates whether menu sct is highlighted or not. TBool iMenuSctHighlighted; + // flag for focus status of char map dialog + TBool iCharMapFocusGained; + public: // for Emotion HBufC* iCharsSmiley; CSmileyModel* iSmileyModel; @@ -1071,8 +1076,8 @@ // start complex dynamic logic to locate title rect when emotion is unable TInt orientation = mirrored ? -1 : 1; TInt newLeft = titleRect.iTl.iX + orientation*rect.Width()/2; - TPoint titleTL( newLeft, titleRect.iTl.iY ); - titleRect.SetRect( titleTL, titleRect.Size() ); + TPoint titlePoint( newLeft, titleRect.iTl.iY ); + titleRect.SetRect( titlePoint, titleRect.Size() ); } AknLayoutUtils::LayoutLabel(iTitle, titleRect, textlayout.LayoutLine()); @@ -1496,11 +1501,24 @@ return charsSmiley; } -void CAknCharMapExtension::LoadEmotionTumbnails(const TDesC& aChars) +void CAknCharMapExtension::LoadEmotionTumbnails(const TDesC& aText) { //If emotion tumbbails can't be load, // no emotion tumbnail will be dispalyed. - TRAP_IGNORE( iSmileyModel->LoadStillImagesL(aChars) ); + TRAP_IGNORE( iSmileyModel->LoadStillImagesL(aText) ); + } + +const TInt KAnimationRepeat = 30; +const TInt KAnimationDelay = 150*1000; + +void CAknCharMapExtension::PlayAnimationL(const TDesC& aText) + { + iSmileyModel->PlayAnimationL(aText, KAnimationRepeat, KAnimationDelay); + } + +void CAknCharMapExtension::StopAnimation(const TDesC& aText) + { + iSmileyModel->StopAnimation(aText); } void CAknCharMapExtension::SetEmotionSize(const TSize& aSize) @@ -2100,10 +2118,6 @@ iShowCasesRef = &iSpecialCharCases; iShowPagesRef = &iSpecialCharPages; - // default - iSpecialCharCase = EAknSCTLowerCase; - iChars = iCharsBufferLower; - if(iExtension->iCharsSmiley && iExtension->IsShowingEmotion()) { iChars = iExtension->iCharsSmiley; @@ -2128,6 +2142,11 @@ { iChars = iExtension->iCharsQwerty; } + else + { + iSpecialCharCase = EAknSCTLowerCase; + iChars = iCharsBufferLower; + } } // calculate page count for all pages @@ -2173,9 +2192,7 @@ UpdateScrollIndicatorL(); } - iExtension->LoadEmotionTumbnails(*iChars); - - SetSmileyAnimationActivityInCurrentPageL(ETrue); + Extension()->LoadEmotionTumbnails(*iChars); } @@ -2364,7 +2381,14 @@ { iExtension->iKeyBrdEvent = ETrue; iExtension->iHighlightVisible = ETrue; - iCursorPos = TPoint( 0, 0 ); + if ( LengthOfRecentChar() == 0 && CurrentPage() == 1 ) + { + iCursorPos = TPoint( 0, 1 ); + } + else + { + iCursorPos = TPoint( 0, 0 ); + } DrawCursor(); return EKeyWasConsumed; } @@ -2764,8 +2788,6 @@ // Sets the character case because the buffer content may have changed. SetCharacterCaseL(iSpecialCharCase); - SetSmileyAnimationActivityInCurrentPageL(ETrue); - TInt cursorIndexAfterSwitch; if ( !iExtension->iKeyBrdEvent ) { @@ -2789,6 +2811,8 @@ // the new first row is the top row on the page where the new focus is. TInt pageVolume = iMaxColumns * iExtension->iMaxVisibleRows; iFirstVisibleRow = (cursorIndexAfterSwitch / pageVolume * pageVolume) / iMaxColumns; + + SetSmileyAnimationActivityInCurrentPageL(ETrue); // the cursor positions are relative to current page TInt cursorIndexAfterSwitchInPage = cursorIndexAfterSwitch - (iMaxColumns * iFirstVisibleRow); @@ -2863,11 +2887,13 @@ else if(aType == KEikMessageFadeAllWindows) // focus gained // KEikMessageWindowsFadeChange { + Extension()->iCharMapFocusGained = ETrue; SetSmileyAnimationActivityInCurrentPageL(ETrue); } else if(aType == KAknMessageFocusLost) // focus lost { + Extension()->iCharMapFocusGained = EFalse; SetSmileyAnimationActivityInCurrentPageL(EFalse); if ( iExtension->iHighlightVisible ) @@ -3444,15 +3470,17 @@ TPoint pos = iGridTopLeft; TSize size(iGridItemWidth*iMaxColumns+1, iGridItemHeight); + + // eliminate the overlap area between menu sct and the first menu item. + if ( Extension()->iMenuSct ) + { + // provide a dirty fix for Menu SCT, since Layout data is not suitable for this + size = TSize( Rect().Width()- 1, iGridItemHeight - 1 ); + } if(iIsMirrored) { pos.iX += iGridItemWidth - size.iWidth; } - // eliminate the overlap area between menu sct and the first menu item. - if ( Extension()->iMenuSct ) - { - size.iHeight--; - } AknsDrawUtils::Background(skin, cc, this, aGc, TRect(pos,size)); @@ -4851,20 +4879,29 @@ firstCellLayRect.LayoutRect(gridRect, AknLayoutScalable_Avkon::cell_graphic_popup_pane_cp2(0,0,0)); + TAknLayoutRect rightCellLayRect; + rightCellLayRect.LayoutRect(gridRect, + AknLayoutScalable_Avkon::cell_graphic_popup_pane_cp2(0,1,0)); TRect firstCellRect; + + // Cell width. + iGridItemWidth = + rightCellLayRect.Rect().iTl.iX - firstCellLayRect.Rect().iTl.iX; + if (iGridItemWidth < 0) + { + iGridItemWidth = -iGridItemWidth; + } + if ( Extension()->iMenuSct ) { firstCellRect = TRect( TPoint(0, 0), - TSize( firstCellLayRect.Rect().Width(), Rect().Height() ) ); + TSize( iGridItemWidth, Rect().Height() ) ); } else { firstCellRect = firstCellLayRect.Rect(); } - TAknLayoutRect rightCellLayRect; - rightCellLayRect.LayoutRect(gridRect, - AknLayoutScalable_Avkon::cell_graphic_popup_pane_cp2(0,1,0)); TInt firstVisibleIndex = iFirstVisibleRow * iMaxColumns; // Max columns. @@ -4874,14 +4911,6 @@ // Max visible rows. iExtension->iMaxVisibleRows = gridRect.Height() / firstCellRect.Height(); - // Cell width. - iGridItemWidth = - rightCellLayRect.Rect().iTl.iX - firstCellLayRect.Rect().iTl.iX; - if (iGridItemWidth < 0) - { - iGridItemWidth = -iGridItemWidth; - } - // Cell height. if ( Extension()->iMenuSct ) { @@ -5653,6 +5682,11 @@ { resourceId = R_AVKON_MENU_SCT_ROW_DEFAULT_CONTENTS_CHINESE; } + else if (FeatureManager::FeatureSupported(KFeatureIdKorean)) + { + // Added korea character support + resourceId = R_AVKON_MENU_SCT_ROW_DEFAULT_CONTENTS_KOREAN; + } CCoeEnv::Static()->CreateResourceReaderLC( reader, resourceId ); ConstructFromResourceL( reader ); @@ -5853,7 +5887,7 @@ } CAknCharMapHistory::THistoryFilter historyFilter; - if(iExtension->IsEmotionEnabled()) + if(Extension()->IsEmotionEnabled()) { historyFilter = CAknCharMapHistory::EHistoryFilterMixed; } @@ -5886,21 +5920,32 @@ { iShowCasesRef = &iSpecialCharCases; iShowPagesRef = &iSpecialCharPages; - iChars = iCharsBufferLower; + if (iCharsBufferUpper && iSpecialCharCase==EAknSCTUpperCase) + { iChars = iCharsBufferUpper; + } else if (iCharsBufferNumeric && iSpecialCharCase==EAknSCTNumeric) + { iChars = iCharsBufferNumeric; + } else if (iCharsBufferFull && iSpecialCharCase==EAknSCTFullCase) + { iChars = iCharsBufferFull; + } else if (iCharsBufferHalf && iSpecialCharCase==EAknSCTHalfCase) + { iChars = iCharsBufferHalf; + } else if (iExtension->iCharsQwerty && iSpecialCharCase==EAknSCTQwerty) + { iChars = iExtension->iCharsQwerty; - - if(iChars == iCharsBufferLower) + } + else { + // default iSpecialCharCase = EAknSCTLowerCase; + iChars = iCharsBufferLower; } } // mark that iChars doesn't point to HBufC @@ -5957,7 +6002,10 @@ iExtension->iFlags |= EAknCharMapCharsAllocated; // mark that iChars points to HBufC } - iExtension->LoadEmotionTumbnails(*iChars); + Extension()->LoadEmotionTumbnails(*iChars); + + // control will never get focus event while it is in EditMenu mode + Extension()->iCharMapFocusGained = ETrue; // The "PlayAnimationL" in "SetSmileyAnimationActivityInCurrentPageL" // will leave. If we ignore it, just no animation is played. @@ -6214,9 +6262,15 @@ TBool CAknCharMap::IsJapaneseSctUi() const { + //Japanese feature for SCT will not be supported since TB9.2 PS2, + //so it always return EFalse. return EFalse; } +TBool CAknCharMap::IsKoreanSctUi() const + { + return FeatureManager::FeatureSupported( KFeatureIdKorean ); + } // ----------------------------------------------------------------------------- // CAknCharMap::TitleWithSelectingSpecialChar() // Return the title string with the selecting special characters @@ -6708,37 +6762,22 @@ } } -const TInt KAnimationRepeat = 30; -const TInt KAnimationDelay = 1000*1000; - void CAknCharMap::SetSmileyAnimationActivityInCurrentPageL(TBool aIsActive) { - TInt begin = iFirstVisibleRow * iMaxColumns; - TInt end = iExtension->iMaxVisibleRows * iMaxColumns + begin; - if( end > iChars->Length() ) - { - end = iChars->Length(); - } - - for( TInt i(begin); iEmotionIcon(code); - if( !icon ) - { - continue; - } - - if( ( aIsActive ) && - ( Extension()->IsShowingEmotion() || Extension()->iMenuSctHighlighted) - ) - { - icon->PlayAnimationL( KAnimationRepeat, KAnimationDelay ); - } - else - { - icon->StopAnimation(); - } + TInt pos = iFirstVisibleRow * iMaxColumns; + TInt maxLength = iChars->Length() - pos; + TInt length = iExtension->iMaxVisibleRows * iMaxColumns; + if(length > maxLength) length = maxLength; + + const TPtrC textInCurrentPage = iChars->Mid(pos, length); + + if(Extension()->iCharMapFocusGained && aIsActive) + { + Extension()->PlayAnimationL(textInCurrentPage); + } + else + { + Extension()->StopAnimation(textInCurrentPage); } }