--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlJapanesePredictivePane.cpp Fri Jul 23 16:49:01 2010 +0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1089 +0,0 @@
-/*
-* Copyright (c) 2002-2004 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: Predictive candidate list
-*
-*/
-
-
-
-
-
-
-
-
-
-
-
-
-// INCLUDE FILES
-#include <eikdef.h>
-#include <aknViewAppUi.h>
-#include <avkon.hrh>
-#include <aknPopup.h>
-#include <aknlists.h>
-#include <aknPopupHeadingPane.h>
-#include <AknsDrawUtils.h>
-#include <AknsBasicBackgroundControlContext.h>
-#include <aknfep.rsg>
-#include <barsread.h>
-#include <eikmop.h>
-#include <AknLayout.lag>
-#include <aknlayoutscalable_avkon.cdl.h>
-
-#include "AknFepUiInterfacePanic.h"
-#include "AknFepGlobalEnums.h"
-#include "AknFepUIAvkonCtrlJapanesePredictiveListbox.h"
-#include "AknFepUIAvkonCtrlJapanesePredictivePane.h"
-#include "AknFepUIManagerJapanese.h"
-
-// CONSTANTS
-const TInt KMaxListColumns = 30;
-const TInt KLAFBaseListRows = 1;
-const TInt KLAFBelowTextBaseline = 2;
-const TInt KLAFAboveTextBaseline = 1;
-const TInt KSpaceCharCode = ' ';
-const TInt KListboxFlameMarge = 4;
-const TInt KScrollRightMarge = 5;
-const TInt KListboxMarge = 3;
-
-/**
-* CAknFepUICtrlJapanesePredictivePane class.
-*
-*/
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CAknFepUICtrlJapanesePredictivePane* CAknFepUICtrlJapanesePredictivePane::NewL(CAknFepUIManagerJapanese* aUiMng)
- {
- CAknFepUICtrlJapanesePredictivePane* self =
- new(ELeave)CAknFepUICtrlJapanesePredictivePane(aUiMng);
- CleanupStack::PushL(self);
- self->ConstructL();
- CleanupStack::Pop(self); // self
- return self;
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::~CAknFepUICtrlJapanesePredictivePane
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CAknFepUICtrlJapanesePredictivePane::~CAknFepUICtrlJapanesePredictivePane()
- {
- if (IsVisible())
- {
- HideWindow();
- }
-
- if (iListBox)
- {
- delete iListBox;
- iListBox = NULL;
- }
-
- if (iLineInfoArray)
- {
- iLineInfoArray->ResetAndDestroy();
- delete iLineInfoArray;
- iLineInfoArray = NULL;
- }
-
- if (iListTextArray)
- {
- delete iListTextArray;
- iListTextArray = NULL;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::ShowWindow
-// Show Pop-up list
-// -----------------------------------------------------------------------------
-//
-void CAknFepUICtrlJapanesePredictivePane::ShowWindow()
- {
- RWindow& window=Window();
- //Set ordinal position to top
- window.SetOrdinalPosition(0,ECoeWinPriorityFep);
- window.SetFaded(EFalse, RWindowTreeNode::EFadeIncludeChildren);
- window.SetPointerCapture(ETrue);
- TRAP_IGNORE( ActivateL());
- MakeVisible(ETrue);
- DrawNow();
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::ClosePredictiveList
-// Close Pop-up list
-// -----------------------------------------------------------------------------
-//
-void CAknFepUICtrlJapanesePredictivePane::ClosePredictiveList()
- {
- CancelPopup();
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::SetCurrentItemIndex
-// Specify the cursor position of a pop-up list.
-// -----------------------------------------------------------------------------
-//
-void CAknFepUICtrlJapanesePredictivePane::SetCurrentItemIndex(TInt aItemIndex)
- {
- CAknFepUICtrlJapanesePredictiveListBoxModel* model =
- static_cast<CAknFepUICtrlJapanesePredictiveListBoxModel*>(ListBox()->Model());
- const TInt maximumItems = model->MaximumItems();
-
- if (aItemIndex > maximumItems)
- {
- aItemIndex = maximumItems;
- }
-
- CAknFepUICtrlJapanesePredictiveListbox* listBox =
- static_cast<CAknFepUICtrlJapanesePredictiveListbox*>(ListBox());
-
- listBox->SetCurrentCandidateNo(aItemIndex, EFalse);
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::SetOffsetPosition
-// Specify the display position of a pop-up list
-// -----------------------------------------------------------------------------
-//
-void CAknFepUICtrlJapanesePredictivePane::SetOffsetPosition(TPoint aOffset)
- {
- iOffsetPosition = aOffset;
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::SetWindowPosition
-// Set position to show candidate list
-// -----------------------------------------------------------------------------
-//
-void CAknFepUICtrlJapanesePredictivePane::SetWindowPosition(
- const TPoint& aLeftSideOfBaseLine,
- TInt aHeight,
- TInt aAscent)
- {
- // getting rectangle of main pane
- TRect screen =
- TRect(0, 0, AKN_LAYOUT_WINDOW_screen.iW, AKN_LAYOUT_WINDOW_screen.iH);
- TAknLayoutRect main_pane;
- main_pane.LayoutRect(screen, AKN_LAYOUT_WINDOW_main_pane(screen, 0, 1, 1));
- iMainPaneRect = main_pane.Rect();
-
- TInt leftPos = aLeftSideOfBaseLine.iX;
- if (leftPos < 0)
- {
- leftPos = iOffsetPosition.iX;
- }
-
- TPoint windowOffset(
- leftPos,
- aLeftSideOfBaseLine.iY + aHeight - aAscent - iMainPaneRect.iTl.iY);
- SetOffsetPosition(windowOffset);
-
- iSrcTextHeight = aHeight;
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::ShowCandidateListL
-// Show Pop-up list
-// -----------------------------------------------------------------------------
-//
-void CAknFepUICtrlJapanesePredictivePane::ShowCandidateListL(
- CDesCArrayFlat* aItems, TInt aIndex, TInt aResourceID)
- {
- __ASSERT_DEBUG(aItems->Count() > 0,
- AknFepUiInterfacePanic(EAknFepUiInterfacePanicCandidatesEmpty));
-
- if (iLineInfoArray)
- {
- iLineInfoArray->ResetAndDestroy();
- }
- delete iLineInfoArray;
- delete iListTextArray;
- iLineInfoArray = NULL;
- iListTextArray = NULL;
- // getting listbox width by a pixel unit
- TAknWindowLineLayout laf =
- AKN_LAYOUT_WINDOW_popup_fep_japan_predictive_window(0, 0);
- TAknTextLineLayout textLineLayout =
- AKN_LAYOUT_TEXT_Predictive_candidate_selection_list_texts_Line_1(0,0);
- TAknWindowLineLayout scrollLineLayout = AknLayoutScalable_Avkon::scroll_pane_cp29().LayoutLine();
- TAknLayoutText text;
- text.LayoutText(laf.Rect(), textLineLayout);
- TInt allowDrawWidth = text.TextRect().Width() - scrollLineLayout.iW;
-
- iLineInfoArray = CreatePredictivePopupLineInfoArrayL(
- aItems, allowDrawWidth, textLineLayout.iFont);
- iListTextArray = CreateListTextArrayL(iLineInfoArray);
-
- // Set listitems.
- CAknFepUICtrlJapanesePredictiveListBoxModel* model =
- static_cast<CAknFepUICtrlJapanesePredictiveListBoxModel*>(ListBox()->Model());
- model->SetMaximumItems(aItems->Count());
- model->SetLineInfoArray(iLineInfoArray);
- model->SetItemTextArray(iListTextArray);
- model->SetOwnershipType(ELbmDoesNotOwnItemArray);
-
- iMaximumRows = MaximumRows(model);
-
- SetCurrentItemIndex(aIndex);
- SetMaximumHeight(iMaximumRows);
-
- // Show popup list
- TBool notShowingPopup =
- model->NumberOfItems() == 0 && iWindowType < 0x80;
- if (notShowingPopup)
- {
- const TSize screenSize=iCoeEnv->ScreenDevice()->SizeInPixels();
- iPopoutCba->SetBoundingRect(TRect(screenSize));
- }
-
- // Create a CBA for use with the popup
- if (aResourceID)
- {
- UpdateCbaL(aResourceID);
- }
-
- SetupWindowLayout(iWindowType);
-
- iListBox->SetListBoxObserver(this);
-
- if (iMarkable)
- {
- // If markable, set the popup to observe event change events.
- // Call HandleControlEvent to set the CBA appropriate to the 1st item
- iListBox->SetObserver(this);
- HandleControlEventL(iListBox, EEventStateChanged);
- }
-
- if (IsVisible())
- {
- DrawDeferred();
- }
- else
- {
- ShowWindow();
- ActivateL();
- ShowWindowCbaL();
- }
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::HideWindow
-// Hide Pop-up list
-// -----------------------------------------------------------------------------
-//
-void CAknFepUICtrlJapanesePredictivePane::HideWindow()
- {
- MakeVisible(EFalse);
- Window().SetPointerCapture(EFalse);
-
- iEikonEnv->RemoveFromStack(iPopoutCba);
-
- iPopoutCba->MakeVisible(EFalse);
-
- iCurrentResource = 0;
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::CurrentItemIndexOfCandidate
-// Return a selected candidate item number currently
-// -----------------------------------------------------------------------------
-//
-TInt CAknFepUICtrlJapanesePredictivePane::CurrentItemIndexOfCandidate()
- {
- if (IsVisible())
- {
- CAknFepUICtrlJapanesePredictiveListbox* listBox =
- static_cast<CAknFepUICtrlJapanesePredictiveListbox*>(ListBox());
- return listBox->CurrentCandidateNo();
- }
- return -1; // Disable window
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::MoveItem
-// Move a current item in an appointed direction
-// -----------------------------------------------------------------------------
-//
-TInt CAknFepUICtrlJapanesePredictivePane::MoveItem(
- TAknFepUICtrlScroll aDirection)
- {
- __ASSERT_DEBUG(iListBox->IsVisible(),
- AknFepUiInterfacePanic(EAknFepUiInterfacePanicNoCandidatePane));
-
- TInt ret = 0;
-
- switch(aDirection)
- {
- case EScrollLeft:
- ret = MovePreviousItem();
- break;
-
- case EScrollRight:
- ret = MoveNextItem();
- break;
-
- case EScrollUp:
- ret = MovePreviousLineItem();
- break;
-
- case EScrollDown:
- ret = MoveNextLineItem();
- break;
-
- default:
- //Panic
- AknFepUiInterfacePanic(EAknFepUiInterfacePanicCandidatePaneNotSupportScrollDirection);
- break;
- }
- return ret;
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::SetupWindowLayout
-// Set up a window layout type
-// -----------------------------------------------------------------------------
-//
-void CAknFepUICtrlJapanesePredictivePane::SetupWindowLayout(
- AknPopupLayouts::TAknPopupLayouts /*aType*/)
- {
- HandleSizeChanged(Layout(), NULL, ListBox(), this);
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::AttemptExitL
-// Set the title for the selection list
-// -----------------------------------------------------------------------------
-//
-void CAknFepUICtrlJapanesePredictivePane::AttemptExitL(TBool aAccept)
- {
- if (iReturn) //Always not null unless ExecuteLD leaves
- *iReturn = aAccept;
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::MopSupplyObject
-// -----------------------------------------------------------------------------
-//
-TTypeUid::Ptr CAknFepUICtrlJapanesePredictivePane::MopSupplyObject(TTypeUid aId)
- {
- SetMopParent( iEikonEnv->EikAppUi() );
- return CAknPopupList::MopSupplyObject(aId);
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::CAknFepUICtrlJapanesePredictivePane
-// Constructor
-// -----------------------------------------------------------------------------
-//
-CAknFepUICtrlJapanesePredictivePane::CAknFepUICtrlJapanesePredictivePane(CAknFepUIManagerJapanese* aUiMng)
- : iUiMng(aUiMng)
- {
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CAknFepUICtrlJapanesePredictivePane::ConstructL()
- {
- // Create listbox
- CAknFepUICtrlJapanesePredictiveListbox* list =
- new(ELeave) CAknFepUICtrlJapanesePredictiveListbox;
- // "iListBox" member variable is defined in CAknPopupList class.
- iListBox = list;
- CAknPopupList::ConstructL(
- list, R_AKNFEP_SOFTKEYS_CONVERT_OTHER_SELECT, AknPopupLayouts::EMenuWindow);
-
- list->ConstructL(this, CEikListBox::ELeftDownInViewRect);
- list->CreateScrollBarFrameL(ETrue);
- list->ScrollBarFrame()->SetScrollBarVisibilityL(
- CEikScrollBarFrame::EOff,
- CEikScrollBarFrame::EAuto);
-
- SetNonFocusing();
- MakeVisible(EFalse);
- iLineInfoArray = NULL;
- iListTextArray = NULL;
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::CreatePredictivePopupLineInfoArrayL
-// Create a array with line information in candidate list
-// -----------------------------------------------------------------------------
-CPredictivePopupLineInfoArray*
-CAknFepUICtrlJapanesePredictivePane::CreatePredictivePopupLineInfoArrayL(
- CDesCArrayFlat* aItems,
- const TInt aMaxDisplayWidthInPixel,
- const TInt aFontId)
- {
- CPredictivePopupLineInfoArray* lineArray =
- new(ELeave) CPredictivePopupLineInfoArray(1);
- CleanupStack::PushL(lineArray);
-
- // getting font object from font id
- const CFont* font = AknLayoutUtils::FontFromId(aFontId);
-
- TInt displayWidthInPixel = aMaxDisplayWidthInPixel;
- TInt elementStartXPos = 0;
-
- TBuf<KMaxListColumns*2> bufferOfLine;
- CPredictivePopupElementArray* elementArray = NULL;
-
- const TInt widthOfSpaceInPixel = font->CharWidthInPixels(KSpaceCharCode);
- const TInt numberOfItem = aItems->Count();
- TInt i;
- for (i = 0; i < numberOfItem; i++)
- {
- TPtrC itemText = aItems->MdcaPoint(i);
- TInt itemTextLength = itemText.Length();
-
- // getting a number of characters within width
- TInt count = font->TextCount(itemText, displayWidthInPixel);
-
- // If a candidate cannot occupy a line, it is
- // continued in next line
- if (count < itemTextLength && elementArray)
- {
- PredictivePopupAppendLineL(lineArray, bufferOfLine, elementArray);
- CleanupStack::Pop(elementArray); // elementArray
- elementArray = NULL;
- bufferOfLine.SetLength(0);
-
- displayWidthInPixel = aMaxDisplayWidthInPixel;
- elementStartXPos = 0;
- count = font->TextCount(itemText, displayWidthInPixel);
- }
-
- FOREVER
- {
- if (!elementArray)
- {
- elementArray = new(ELeave) CPredictivePopupElementArray(1);
- CleanupStack::PushL(elementArray);
- }
-
- TPtrC elementText = itemText.Left(count);
- TInt elementWidthInPixels = font->TextWidthInPixels(elementText);
-
- // setting a item string to line string
- bufferOfLine.Append(elementText);
- displayWidthInPixel -= elementWidthInPixels;
-
- TPredictivePopupElement& element = elementArray->ExtendL();
- element.iStartXPos = elementStartXPos;
- elementStartXPos += elementWidthInPixels;
- element.iEndXPos = elementStartXPos;
- element.iCandidateNo = i;
-
- // creating a string which removes a item string
- itemTextLength -= count;
- if (itemTextLength > 0)
- {
- // If this line is full, add this line and create a new line.
- PredictivePopupAppendLineL(lineArray, bufferOfLine, elementArray);
- CleanupStack::Pop(elementArray); // elementArray
- elementArray = NULL;
- bufferOfLine.SetLength(0);
-
- itemText.Set(itemText.Right(itemTextLength));
- displayWidthInPixel = aMaxDisplayWidthInPixel;
- elementStartXPos = 0;
-
- // Calculating a number of characters which be able to shown in the width and
- // cutting the string
- count = font->TextCount(itemText, displayWidthInPixel);
- }
- else
- {
- break;
- }
- }
-
- if (displayWidthInPixel > widthOfSpaceInPixel)
- {
- // adding space if it is possible to add space
- bufferOfLine.Append(KSpaceCharCode);
- displayWidthInPixel -= widthOfSpaceInPixel;
- elementStartXPos += widthOfSpaceInPixel;
- }
- else
- {
- // adding a line information if it isn't possible to add space
- PredictivePopupAppendLineL(lineArray, bufferOfLine, elementArray);
- CleanupStack::Pop(elementArray); // elementArray
- elementArray = NULL;
- bufferOfLine.SetLength(0);
-
- displayWidthInPixel = aMaxDisplayWidthInPixel - 1;
- elementStartXPos = 0;
- }
- }
-
- if (bufferOfLine.Length() > 0 && elementArray)
- {
- PredictivePopupAppendLineL(lineArray, bufferOfLine, elementArray);
- CleanupStack::Pop(elementArray); // elementArray
- }
-
- CleanupStack::Pop(lineArray); // lineArray
-
- return lineArray;
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::PredictivePopupAppendLineL
-// Append to array with line information
-// -----------------------------------------------------------------------------
-//
-void CAknFepUICtrlJapanesePredictivePane::PredictivePopupAppendLineL(
- CPredictivePopupLineInfoArray* aLineArray,
- const TDesC& aLineText,
- CPredictivePopupElementArray* aElementArray)
- {
- HBufC* lineTextBuf = HBufC::NewL(aLineText.Length());
- CleanupStack::PushL(lineTextBuf);
- TPtr lineTextBufPtr = lineTextBuf->Des();
- lineTextBufPtr.Copy(aLineText);
-
- CPredictivePopupLineInfo* lineInfo = new(ELeave) CPredictivePopupLineInfo;
- CleanupStack::PushL(lineInfo);
-
- aLineArray->AppendL(lineInfo);
- CleanupStack::Pop(2, lineTextBuf); // lineTextBuf, lineInfo
-
- // After that set to line information items,
- // becasue the following member variables are deleted
- // in the destractor of CPredictivePopupLineInfo if leave occurs.
- lineInfo->iLineText = lineTextBuf;
- lineInfo->iElementsOnLine = aElementArray;
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::CreateListTextArrayL
-// Create arrary with string to show in a line
-// -----------------------------------------------------------------------------
-//
-CDesCArrayFlat* CAknFepUICtrlJapanesePredictivePane::CreateListTextArrayL(
- CPredictivePopupLineInfoArray* aLineArray)
- {
- CDesCArrayFlat* textArray = new(ELeave) CDesCArrayFlat(1);
- CleanupStack::PushL(textArray);
-
- const TInt numberOfItem = aLineArray->Count();
- TInt i;
- for (i = 0; i < numberOfItem; i++)
- {
- CPredictivePopupLineInfo* lineInfo = aLineArray->At(i);
- textArray->AppendL(*lineInfo->iLineText);
- }
-
- CleanupStack::Pop(textArray); // textArray
-
- return textArray;
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::HandleSizeChanged
-// The handler function for size change
-//
-// Original function is AknPopupLayouts::HandleSizeChanged()
-// -----------------------------------------------------------------------------
-//
-void CAknFepUICtrlJapanesePredictivePane::HandleSizeChanged(
- TAknPopupWindowLayoutDef& aDef,
- CAknPopupHeadingPane* aHeading,
- CEikListBox* aListBox,
- CCoeControl* aWindowOwningControl)
- {
- TInt numofitems = aListBox->Model()->NumberOfItems();
-
- TInt minItems = KJapPredictiveVisibleListRowsMin;
- TInt maxItems = KJapPredictiveVisibleListRowsMax;
-
- if (aDef.iMaximumHeight)
- {
- maxItems = aDef.iMaximumHeight;
- }
- AknPopupLayouts::CheckRange(numofitems, minItems, maxItems);
- CalcPopupMenuWindow(aDef, iMainPaneRect, numofitems);
- SetupMenuPopupWindow(aDef, numofitems, aHeading != 0);
-
- aWindowOwningControl->SetRect(AknPopupLayouts::WindowRect(aDef));
- HandleSizeAndPositionOfComponents(aDef, aListBox, aHeading);
-
- TRect windowRect = AknPopupLayouts::WindowRect(aDef);
- MAknsControlContext *cc = AknsDrawUtils::ControlContext( aListBox );
- TBool defaultContext = EFalse;
- if (!cc)
- {
- cc = aListBox->View()->ItemDrawer()->SkinBackgroundControlContext();
- defaultContext = ETrue;
- }
-
- if (cc)
- {
- CAknsBasicBackgroundControlContext *bcc =
- (CAknsBasicBackgroundControlContext*)cc;
- TAknLayoutRect popupBgRect;
-
- popupBgRect.LayoutRect(
- windowRect,
- ELayoutEmpty,
- 0, 0, ELayoutEmpty, ELayoutEmpty,
- windowRect.Size().iWidth, windowRect.Size().iHeight);
-
- bcc->SetBitmap(KAknsIIDQsnFrPopupCenter);
-
- if (defaultContext)
- {
- bcc->SetRect(popupBgRect.Rect());
- }
-
- bcc->SetParentPos(aWindowOwningControl->PositionRelativeToScreen());
-
- if (defaultContext)
- {
- bcc->SetParentPos(TPoint(0, 0));
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::HandleDraw
-// The handler function for Draw
-//
-// Original function is AknPopupLayouts::HandleDraw()
-// -----------------------------------------------------------------------------
-//
-void CAknFepUICtrlJapanesePredictivePane::HandleDraw(CEikonEnv* /*aEikEnv*/,
- CWindowGc& aGc,
- const TAknPopupWindowLayoutDef& aDef,
- CEikListBox* aListBox,
- CAknPopupHeadingPane* /*aHeading*/)
- {
- aGc.Clear();
-
- TRect windowRect =
- AknPopupLayouts::MenuRect(const_cast<TAknPopupWindowLayoutDef&>(aDef));
- MAknsSkinInstance* skin = AknsUtils::SkinInstance();
- MAknsControlContext* cc = AknsDrawUtils::ControlContext(aListBox);
- TBool windowFrameDrawn = EFalse;
- if (!cc)
- {
- cc = aListBox->View()->ItemDrawer()->SkinBackgroundControlContext();
- }
-
- if (cc)
- {
- // drawing frame
- TAknLayoutRect topLeft;
- topLeft.LayoutRect(
- windowRect,
- ELayoutEmpty,
- 0, 0, ELayoutEmpty, ELayoutEmpty, KListboxFlameMarge, KListboxFlameMarge);
-
- TAknLayoutRect bottomRight;
- bottomRight.LayoutRect(
- windowRect,
- ELayoutEmpty,
- ELayoutEmpty, ELayoutEmpty, 0, 0, KListboxFlameMarge, KListboxFlameMarge);
-
- TRect outerRect = TRect(topLeft.Rect().iTl, bottomRight.Rect().iBr);
- TRect innerRect = TRect(topLeft.Rect().iBr, bottomRight.Rect().iTl);
- aGc.SetPenStyle(CGraphicsContext::ENullPen);
- const TAknsItemID *frameId = &KAknsIIDQsnFrPopupSub;
- const TAknsItemID *frameCenterId = &KAknsIIDQsnFrPopupCenter;
- windowFrameDrawn = AknsDrawUtils::DrawFrame(
- skin, aGc, outerRect, innerRect, *frameId, *frameCenterId);
- }
-
- if (!windowFrameDrawn)
- {
- DrawWindowShadow(
- aGc,
- aDef.iCover, aDef.iSecond, aDef.iFirst, aDef.iOutline, aDef.iInside);
- }
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::CalcPopupMenuWindow
-// Set up the information on a pop-up window
-//
-// Original function is AknPopupLayouts::CalcPopupMenuWindow()
-// -----------------------------------------------------------------------------
-//
-void CAknFepUICtrlJapanesePredictivePane::CalcPopupMenuWindow(
- TAknPopupWindowLayoutDef &aDef,const TRect& aRect, TInt /*aNum*/)
- {
- TAknLayoutRect popup_menu_window;
-
- TBool sizeDesideFlag = EFalse;
- TInt adjustOffsetX = 0;
- TInt adjustOffsetY = 0;
-
- TAknWindowLineLayout laf =
- AKN_LAYOUT_WINDOW_popup_fep_japan_predictive_window(
- 0, iMaximumRows - KJapPredictiveVisibleListRowsMin);
- laf.il = 0;
- laf.it = 0;
- TAknWindowLineLayout maxlaf =
- AKN_LAYOUT_WINDOW_popup_fep_japan_predictive_window(
- 0, KJapPredictiveVisibleListRowsMax - KJapPredictiveVisibleListRowsMin);
- laf.il = 0;
- maxlaf.it = 0;
-
- popup_menu_window.LayoutRect(aRect, laf);
-
- // checking whether list can be drawn under the position which popup window is dispalyed
- if (iMainPaneRect.iTl.iY
- + iOffsetPosition.iY + KLAFBelowTextBaseline
- + maxlaf.iH < iMainPaneRect.iBr.iY)
- {
- // deciding the position which popup window is dispalyed
- adjustOffsetY = (-1) * KLAFBelowTextBaseline;
- sizeDesideFlag = ETrue;
- }
-
- // checking whether list can be drawn top the position which popup window is dispalyed
- else if (iMainPaneRect.iTl.iY
- + iOffsetPosition.iY - KLAFAboveTextBaseline
- - iSrcTextHeight
- - popup_menu_window.Rect().Height() > iMainPaneRect.iTl.iY)
- {
- // deciding the position which popup window is dispalyed
- adjustOffsetY = iSrcTextHeight + KLAFAboveTextBaseline + popup_menu_window.Rect().Height();
- sizeDesideFlag = ETrue;
- }
-
- // display the bottom of window in case the displaying position isn't decided
- //
- if (!sizeDesideFlag)
- {
- TAknWindowLineLayout laf =
- AKN_LAYOUT_WINDOW_popup_fep_japan_predictive_window(
- 0, KJapPredictiveVisibleListRowsMax - KLAFBaseListRows);
- laf.il = 0;
- laf.it = 0;
- popup_menu_window.LayoutRect(aRect, laf);
- adjustOffsetY =
- iMainPaneRect.iTl.iY
- + iOffsetPosition.iY + KLAFBelowTextBaseline
- + popup_menu_window.Rect().Height() - iMainPaneRect.iBr.iY;
-
- iMaximumRows = KJapPredictiveVisibleListRowsMin;
- sizeDesideFlag = ETrue;
- }
-
- adjustOffsetX =
- iMainPaneRect.iTl.iX
- + iOffsetPosition.iX
- + popup_menu_window.Rect().Width() - iMainPaneRect.iBr.iX;
- adjustOffsetX = (adjustOffsetX > 0) ? adjustOffsetX : 0;
-
- TPoint adjustOffset(-adjustOffsetX, -adjustOffsetY);
-
- aDef.iWindowRect = popup_menu_window.Rect();
- aDef.iWindowRect.Move(iOffsetPosition);
- aDef.iWindowRect.Move(adjustOffset);
-
- TRect window_rect = AknPopupLayouts::MenuRect(aDef);
- aDef.iCover.LayoutRect(
- window_rect,
- AKN_LAYOUT_WINDOW_Predictive_candidate_selection_popup_window_graphics_Line_1(aDef.iWindowRect));
- aDef.iSecond.LayoutRect(
- window_rect,
- AKN_LAYOUT_WINDOW_Predictive_candidate_selection_popup_window_graphics_Line_2(aDef.iWindowRect));
- aDef.iFirst.LayoutRect(
- window_rect,
- AKN_LAYOUT_WINDOW_Predictive_candidate_selection_popup_window_graphics_Line_2(aDef.iWindowRect));
- aDef.iOutline.LayoutRect(
- window_rect,
- AKN_LAYOUT_WINDOW_Predictive_candidate_selection_popup_window_graphics_Line_3(aDef.iWindowRect));
- aDef.iInside.LayoutRect(
- window_rect,
- AKN_LAYOUT_WINDOW_Predictive_candidate_selection_popup_window_graphics_Line_4(aDef.iWindowRect));
- aDef.iPopupMenuWindowOffset = TPoint(0, 0);
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::SetupMenuPopupWindow
-// Set up the information on a pop-up window
-//
-// Original function is AknPopupLayouts::SetupMenuPopupWindow()
-// -----------------------------------------------------------------------------
-//
-void CAknFepUICtrlJapanesePredictivePane::SetupMenuPopupWindow(TAknPopupWindowLayoutDef &aDef, TInt /*num*/, TBool /*heading*/)
- {
- AknPopupLayouts::SetupDefaults(aDef);
- TRect window_rect = AknPopupLayouts::MenuRect(aDef);
-
- // setting size of listbox pane
- TAknWindowLineLayout laf =
- AKN_LAYOUT_WINDOW_popup_fep_japan_predictive_window(0, iMaximumRows - KLAFBaseListRows);
-
- laf.il = KListboxMarge;
- laf.it = KListboxMarge;
- laf.iW -= KListboxMarge*2;
- laf.iH = laf.iH - KListboxMarge*2 - (laf.iH-KListboxMarge*2)%iMaximumRows;
- aDef.iListRect.LayoutRect(window_rect, laf);
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::HandleSizeAndPositionOfComponents
-// The handler function for size and a location
-//
-// Original function is AknPopupLayouts::HandleSizeAndPositionOfComponents()
-//
-//
-// -----------------------------------------------------------------------------
-//
-void CAknFepUICtrlJapanesePredictivePane::HandleSizeAndPositionOfComponents(
- const TAknPopupWindowLayoutDef &aDef,
- CCoeControl *aContent,
- CAknPopupHeadingPane* /*aHeading*/)
- {
- TRect lbrect = aDef.iListRect.Rect();
-
- if (AknLayoutUtils::ScalableLayoutInterfaceAvailable())
- {
- // set scroll size
- CAknFepUICtrlJapanesePredictiveListbox* listBox =
- static_cast<CAknFepUICtrlJapanesePredictiveListbox*>(aContent);
- CAknFepUICtrlJapanesePredictiveListBoxModel* model =
- static_cast<CAknFepUICtrlJapanesePredictiveListBoxModel*>(listBox->Model());
- TInt maxRows = model->LineInfoArray()->Count();
- if (maxRows > KJapPredictiveVisibleListRowsMax)
- {
- TAknWindowLineLayout scrollLineLayout = AknLayoutScalable_Avkon::scroll_pane_cp29().LayoutLine();
- lbrect.iBr.iX -= (scrollLineLayout.iW + KScrollRightMarge - KListboxMarge);
- }
- }
-
- aContent->SetRect(lbrect);
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::DrawWindowShadow
-// Draw window shadow
-//
-// Original function is AknDrawWithSkins::DrawWindowShadow()
-// -----------------------------------------------------------------------------
-//
-void CAknFepUICtrlJapanesePredictivePane::DrawWindowShadow(
- CWindowGc& aGc,
- const TAknLayoutRect& aCoverRect,
- const TAknLayoutRect& /*aSecondShadowRect*/,
- const TAknLayoutRect& aFirstShadowRect,
- const TAknLayoutRect& aOutlineFrameRect,
- const TAknLayoutRect& aInsideAreaRect)
- {
- MAknsSkinInstance* skin = AknsUtils::SkinInstance();
-
- // draw rectangle
- aGc.SetBrushColor(aCoverRect.Color());
- AknsDrawUtils::Background(skin, NULL, NULL, aGc, aCoverRect.Rect());
-
- aFirstShadowRect.DrawOutLineRect(aGc);
-
- aOutlineFrameRect.DrawOutLineRect(aGc);
-
- aGc.SetBrushStyle(CGraphicsContext::ESolidBrush);
- aGc.SetBrushColor(aInsideAreaRect.Color());
- AknsDrawUtils::Background(skin, NULL, NULL, aGc, aInsideAreaRect.Rect());
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::MaximumRows
-// calculate maximum columns from items of listbox
-// -----------------------------------------------------------------------------
-//
-TInt CAknFepUICtrlJapanesePredictivePane::MaximumRows(
- CTextListBoxModel* aModel)
- {
- CAknFepUICtrlJapanesePredictiveListBoxModel* model =
- static_cast<CAknFepUICtrlJapanesePredictiveListBoxModel*>(aModel);
- TInt maxRows = model->LineInfoArray()->Count();
- TInt maxVisibleRows = Min(KJapPredictiveVisibleListRowsMax, maxRows);
- maxVisibleRows = Max(KJapPredictiveVisibleListRowsMin, maxVisibleRows);
- return maxVisibleRows;
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::Draw
-// Called by the framework to draw the control
-// -----------------------------------------------------------------------------
-//
-void CAknFepUICtrlJapanesePredictivePane::Draw(const TRect& /*aRect*/) const
- {
- CWindowGc& gc = SystemGc();
- gc.Clear();
- HandleDraw(iEikonEnv, gc, Layout(), iListBox, Heading());
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::OfferKeyEventL
-// Handle key events. When a key event occurs
-// -----------------------------------------------------------------------------
-//
-TKeyResponse CAknFepUICtrlJapanesePredictivePane::OfferKeyEventL(
- const TKeyEvent& /*aKeyEvent*/,TEventCode /*aType*/)
- {
- return EKeyWasNotConsumed;
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::MovePreviousItem
-// selecting a next candidate
-// -----------------------------------------------------------------------------
-//
-TInt CAknFepUICtrlJapanesePredictivePane::MovePreviousItem()
- {
- CAknFepUICtrlJapanesePredictiveListbox* listBox =
- static_cast<CAknFepUICtrlJapanesePredictiveListbox*>(ListBox());
-
- return listBox->MovePreviousItem();
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::MoveNextItem
-// selecting a next candidate
-// -----------------------------------------------------------------------------
-//
-TInt CAknFepUICtrlJapanesePredictivePane::MoveNextItem()
- {
- CAknFepUICtrlJapanesePredictiveListbox* listBox =
- static_cast<CAknFepUICtrlJapanesePredictiveListbox*>(ListBox());
-
- return listBox->MoveNextItem();
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::MovePreviousLineItem
-// selecting a previous line candidate
-// -----------------------------------------------------------------------------
-//
-TInt CAknFepUICtrlJapanesePredictivePane::MovePreviousLineItem()
- {
- CAknFepUICtrlJapanesePredictiveListbox* listBox =
- static_cast<CAknFepUICtrlJapanesePredictiveListbox*>(ListBox());
-
- return listBox->MovePreviousLineItem();
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::MoveNextLineItem
-// selecting a next line candidate
-// -----------------------------------------------------------------------------
-//
-TInt CAknFepUICtrlJapanesePredictivePane::MoveNextLineItem()
- {
- CAknFepUICtrlJapanesePredictiveListbox* listBox =
- static_cast<CAknFepUICtrlJapanesePredictiveListbox*>(ListBox());
-
- return listBox->MoveNextLineItem();
- }
-
-// -----------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::UpdateCbaL
-// Changing the cba
-// -----------------------------------------------------------------------------
-//
-void CAknFepUICtrlJapanesePredictivePane::UpdateCbaL(TInt aResourceID)
- {
- if (iCurrentResource == aResourceID)
- {
- return;
- }
-
- // store resource id
- iPopoutCba->SetCommandSetL( aResourceID );
- iCurrentResource = aResourceID;
- iPopoutCba->DrawDeferred();
- }
-
-/**
- * Processes events from the softkeys. Responds to EAknSoftkeyOk and EAknSoftkeyBack
- * to accept or cancel the pop-up.
- *
- * @param aCommandId Event Id from the soft-key
- */
-void CAknFepUICtrlJapanesePredictivePane::ProcessCommandL(TInt aCommandId)
- {
- // Respond to softkey events
- switch (aCommandId)
- {
- case EAknFepSoftkeyConvert:
- case EAknFepSoftkeyCloseWindow:
- case EAknFepSoftkeyCommit:
- case EAknFepSoftkeySelectCandidate:
- case EAknFepSoftkeyOtherModes:
- iUiMng->HandleCommandL(aCommandId);
- break;
- default:
- CAknPopupList::ProcessCommandL(aCommandId);
- break;
- }
- }
-
-void CAknFepUICtrlJapanesePredictivePane::ShowWindowCbaL()
- {
- RDrawableWindow* cbaWindow = iPopoutCba->ButtonGroup()->AsControl()->DrawableWindow();
- cbaWindow->SetOrdinalPosition(0,ECoeWinPriorityFep);
- cbaWindow->SetFaded(EFalse, RWindowTreeNode::EFadeWindowOnly);
- cbaWindow->SetNonFading(ETrue);
- iEikonEnv->EikAppUi()->AddToStackL(iPopoutCba,
- ECoeStackPriorityFep,
- ECoeStackFlagRefusesFocus);
-
- iPopoutCba->ActivateL();
- iPopoutCba->MakeVisible(ETrue);
- iPopoutCba->DrawDeferred(); // to update the cba
- }
-
-// ---------------------------------------------------------------------------
-// CAknFepUICtrlJapanesePredictivePane::HandleListBoxEventL
-// CallBack from ListBox
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CAknFepUICtrlJapanesePredictivePane::HandleListBoxEventL(
- CEikListBox* /*aListBox*/, TListBoxEvent aEventType)
- {
- switch (aEventType)
- {
- case EEventItemDraggingActioned: // Item Moved
- DrawNow();
- break;
- case EEventItemClicked:
- {
- TKeyEvent ccpuStart = {EKeyOK, EStdKeyDevice3, 0, 0};
- iEikonEnv->SimulateKeyEventL(ccpuStart, EEventKey);
- }
- break;
- default:
- break;
- }
- }
-
-// End of File