textinput/peninputhwrboxjp/src/peninputhwrboxwindow.cpp
branchRCL_3
changeset 44 ecbabf52600f
equal deleted inserted replaced
43:ebd48d2de13c 44:ecbabf52600f
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0""
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Implementation of hwr window class
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // System includes
       
    20 #include <peninputhwrwindowjp.rsg>
       
    21 #include <peninputhwrwindowconfiginfo_32.rsg>
       
    22 #include <peninputdataconverter.h>
       
    23 #include <aknlayoutscalable_avkon.cdl.h>
       
    24 #include <peninputcommonlayoutglobalenum.h>  // EPeninputLayoutEventEnter
       
    25 #include <peninputclientlayoutinfo.h>
       
    26 #include <peninputcontextfieldjp.h>
       
    27 #include <peninputeventbutton.h>
       
    28 #include <peninputrepeatbutton.h>
       
    29 #include <peninputdropdownlist.h>
       
    30 #include <peninputjapanesepredictivewnd.h>
       
    31 #include <peninputjapanesecandidatewnd.h>
       
    32 #include <AknsUtils.h>
       
    33 #include <aknfeppeninputenums.h>    // ERangeEnglish, ...
       
    34 
       
    35 // User includes
       
    36 #include "peninputhwrboxlayout.h"
       
    37 #include "peninputhwrboxwindow.h"
       
    38 #include "peninputhwrboxgroup.h"
       
    39 #include "peninputhwrboxdatamgr.h"
       
    40 #include "peninputhwrboxjp.hrh"
       
    41 #include "peninputhwrevent.h"
       
    42 
       
    43 // Constants
       
    44 _LIT( KHwrWindowResourceFile,
       
    45       "z:\\resource\\plugins\\peninputhwrwindowjp.RSC" );
       
    46 _LIT( KConfigurationResourceFile,
       
    47       "z:\\resource\\plugins\\peninputhwrwindowconfiginfo_32.RSC" );
       
    48 const TInt KWndTransparencyFactor = 180;
       
    49 
       
    50 const TInt KBoxCount = 1;
       
    51 
       
    52 
       
    53 const TInt KWriteBoxFrameBackColorMajor = EAknsMajorSkin;
       
    54 const TInt KWriteBoxFrameBackColorGrp = EAknsMinorQsnOtherColors;
       
    55 const TInt KWriteBoxFrameBackColorIdx = EAknsCIQsnOtherColorsCG9; 
       
    56 const TUint32 KDefaultWriteBoxFrameColor = 0x000000;
       
    57 const TUint32 KDefaultWriteBoxBackColor = 0xffffff;
       
    58 // ======== MEMBER FUNCTIONS ========
       
    59 
       
    60 // --------------------------------------------------------------------------
       
    61 // CPeninputHwrBoxWindow::NewL
       
    62 // (other items were commented in a header)
       
    63 // --------------------------------------------------------------------------
       
    64 CPeninputHwrBoxWindow* CPeninputHwrBoxWindow::NewL(
       
    65     CFepUiLayout* aUiLayout, MPeninputLayoutContext* aLayoutContext )
       
    66     {
       
    67     CPeninputHwrBoxWindow* self =
       
    68         new ( ELeave ) CPeninputHwrBoxWindow( aUiLayout, aLayoutContext );
       
    69     CleanupStack::PushL( self );
       
    70     self->ConstructL();
       
    71     CleanupStack::Pop( self );
       
    72 
       
    73     return self;
       
    74     }
       
    75 
       
    76 // --------------------------------------------------------------------------
       
    77 // CPeninputHwrBoxWindow::~CPeninputHwrBoxWindow
       
    78 // (other items were commented in a header)
       
    79 // --------------------------------------------------------------------------
       
    80 CPeninputHwrBoxWindow::~CPeninputHwrBoxWindow()
       
    81     {
       
    82     }
       
    83 
       
    84 // --------------------------------------------------------------------------
       
    85 // CPeninputHwrBoxWindow::HandleControlEvent
       
    86 // (other items were commented in a header)
       
    87 // --------------------------------------------------------------------------
       
    88 void CPeninputHwrBoxWindow::HandleControlEvent( TInt aEventType,
       
    89                                                     CFepUiBaseCtrl* aCtrl,
       
    90                                                     const TDesC& aEventData )
       
    91     {
       
    92     // Call this function in base class
       
    93     CPeninputLayoutWindowJp::HandleControlEvent( aEventType,
       
    94                                                aCtrl,
       
    95                                                aEventData );
       
    96 
       
    97     TInt* data = ( TInt* ) aEventData.Ptr();
       
    98 
       
    99     switch ( aEventType )
       
   100         {
       
   101         case EPeninputLayoutHwrEventPenColorChange:
       
   102             {
       
   103             iBoxGroup->SetBoxPenColor(*((TRgb*)data));
       
   104             }
       
   105             break;
       
   106         case EPeninputLayoutHwrEventPenSizeChange:
       
   107             {
       
   108             iBoxGroup->SetBoxPenSize(*((TSize*)data));
       
   109             }
       
   110             break;
       
   111         case EPeninputLayoutHwrEventWritingSpeedChange:
       
   112             {
       
   113             iBoxGroup->SetWritingSpeed(*data);
       
   114 
       
   115 #ifdef _NOT_USING_DECUMA_MCR_
       
   116 
       
   117             // similar as S90
       
   118             iBoxGroup->SetStrokeDelay(90000);
       
   119 #endif
       
   120             }
       
   121             break;
       
   122         case EPeninputLayoutHwrEventCandidates:
       
   123             {
       
   124             const TInt candiCount = static_cast<CPeninputHwrBoxLayout*>(UiLayout())->DataMgr(0)->CandidateCount();
       
   125             RArray<TInt> secondaryList;
       
   126 
       
   127             for (TInt i = 0; i < candiCount; i++)
       
   128                 {
       
   129                 if (i > candiCount - static_cast<CPeninputHwrBoxLayout*>(UiLayout())->DataMgr(0)->PermittedRangesCount())
       
   130                     {
       
   131                     //cell index start from 1
       
   132                     secondaryList.Append(i);
       
   133                     }
       
   134                 }
       
   135             iDropdownList->SetSecondaryList(secondaryList);
       
   136 
       
   137             secondaryList.Close();
       
   138 
       
   139             RPointerArray<HBufC>* candidates = (RPointerArray<HBufC>*)aEventData.Ptr();
       
   140             if ( candiCount )
       
   141                 {
       
   142                 TRAP_IGNORE(iDropdownList->SetCandidatesL(*candidates, CFepCtrlDropdownList::EListExpandableWithoutIcon));
       
   143                 }
       
   144             else
       
   145                 {
       
   146                 TRAP_IGNORE(iDropdownList->SetCandidatesL(*candidates, CFepCtrlDropdownList::EListNoExpandable));
       
   147                 }
       
   148             }
       
   149             break;
       
   150         case EPeninputLayoutEventSwitchCharacterRange:
       
   151             if (iCharacterRangeWnd)
       
   152                 {
       
   153                 CFepUiBaseCtrl* rangeBtn = Control(EPeninutWindowCtrlIdSwitchToVkbBtn);
       
   154                 if (rangeBtn)
       
   155                     {
       
   156                     TRect rect = rangeBtn->Rect();
       
   157                     TPoint point;
       
   158                     point.iX = rect.iTl.iX-6;
       
   159                     point.iY = rect.iBr.iY-6;
       
   160                     iCharacterRangeWnd->SetPosition(point);
       
   161                     }
       
   162                 TInt index = static_cast<CPeninputHwrBoxLayout*>(UiLayout())->DataMgr(0)->CurrentCharacterRangeIndex();
       
   163                 if (0 <= index && index <static_cast<CPeninputHwrBoxLayout*>(UiLayout())->DataMgr(0)->CharacterRangeArray()->Count())
       
   164                     {
       
   165                     TRAP_IGNORE(iCharacterRangeWnd->ShowPopupL(static_cast<CPeninputHwrBoxLayout*>(UiLayout())->DataMgr(0)->CharacterRangeArray(), index));
       
   166                     }
       
   167                 }
       
   168             break;
       
   169         case EPeninputLayoutEventCloseCharacterRange:
       
   170             if (iCharacterRangeWnd)
       
   171                 {
       
   172                 iCharacterRangeWnd->HidePopup();
       
   173                 }
       
   174             break;
       
   175         case EPeninputLayoutEventSetCharacterRangeText:  // from datamgr::SetPremaryRange
       
   176             {
       
   177             TInt count = static_cast<CPeninputHwrBoxLayout*>(UiLayout())->DataMgr(0)->CharacterRangeArray()->Count();
       
   178             TBool dimmFlag = (count < 2)? ETrue : EFalse;
       
   179             TInt resourceId = R_PENINPUT_LAYOUT_HWR_SWITCH_RANGE_ALL;
       
   180             switch(static_cast<CPeninputHwrBoxLayout*>(UiLayout())->DataMgr(0)->CharacterRangeId())
       
   181                 {
       
   182                 case EPeninutCharacterRangeIdKanaKanji:
       
   183                     resourceId = R_PENINPUT_LAYOUT_HWR_SWITCH_RANGE_KANA_KANJI;  // temporary
       
   184                     break;
       
   185                 case EPeninutCharacterRangeIdLatin:
       
   186                     resourceId = R_PENINPUT_LAYOUT_HWR_SWITCH_RANGE_LATIN;
       
   187                     break;
       
   188                 case EPeninutCharacterRangeIdNumber:
       
   189                     resourceId = R_PENINPUT_LAYOUT_HWR_SWITCH_RANGE_NUMERIC;
       
   190                     break;
       
   191                 default:
       
   192                     break;
       
   193                 }
       
   194             iCharacterRangeSwitchBtn->SetResourceId(resourceId);
       
   195             TRAP_IGNORE(iCharacterRangeSwitchBtn->ConstructFromResourceL());
       
   196             iCharacterRangeSwitchBtn->SetDimmed(dimmFlag);
       
   197             }
       
   198             break;
       
   199         case EPeninputLayoutEventSetConversion:
       
   200             iConvertBtn->SetDimmed(*((TBool*)data));
       
   201             break;
       
   202         case EPeninputLayoutHwrEventStrokeEndMark:
       
   203             {
       
   204             const TPoint endMark = *(TPoint*)(aEventData.Ptr());
       
   205             iBoxGroup->SetStrokeEndMark(endMark);
       
   206             }
       
   207             break;
       
   208         case EEventHwrStrokeStarted:
       
   209             {
       
   210             iDisableCaseChange = ETrue;
       
   211             }
       
   212             break;
       
   213         case EEventHwrCharacterTimerOut:
       
   214         case EEventHwrStrokeCanceled:
       
   215             {
       
   216             if (iDisableCaseChange)
       
   217                 {
       
   218                 iDisableCaseChange = EFalse;
       
   219                 if (iCachedCase)
       
   220                     {
       
   221                     DoCaseChange(iCachedCase);
       
   222                     }
       
   223                 }
       
   224             iCachedCase = 0;
       
   225             }
       
   226             break;
       
   227         default:
       
   228             break;
       
   229         }
       
   230     }
       
   231 
       
   232 // ---------------------------------------------------------------------------
       
   233 // CPeninputHwrBoxWindow:HandlePointerDownEventL
       
   234 // Handle pointer down event
       
   235 // (other items were commented in a header).
       
   236 // ---------------------------------------------------------------------------
       
   237 CFepUiBaseCtrl* CPeninputHwrBoxWindow::HandlePointerDownEventL(const TPoint& aPoint)
       
   238     {
       
   239     if (!CandidateWindow()->Hiden()
       
   240         && iDropdownList->Rect().Contains(aPoint)
       
   241         && !CandidateWindow()->Rect().Contains(aPoint))
       
   242         {
       
   243         return this;
       
   244         }
       
   245     return CPeninputLayoutWindowJp::HandlePointerDownEventL(aPoint);
       
   246     }
       
   247 
       
   248 // --------------------------------------------------------------------------
       
   249 // CPeninputHwrBoxWindow::GetWindowConfigResId
       
   250 // (other items were commented in a header)
       
   251 // --------------------------------------------------------------------------
       
   252 TInt CPeninputHwrBoxWindow::GetWindowConfigResId()
       
   253     {
       
   254     return R_PENINPUT_LAYOUT_CONFIG_INFO;
       
   255     }
       
   256 
       
   257 // --------------------------------------------------------------------------
       
   258 // CPeninputHwrBoxWindow::GetWindowResId
       
   259 // (other items were commented in a header)
       
   260 // --------------------------------------------------------------------------
       
   261 TInt CPeninputHwrBoxWindow::GetWindowResId()
       
   262     {
       
   263     return R_PENINPUT_LAYOUT_HWR_WINDOW;
       
   264     }
       
   265 
       
   266 // --------------------------------------------------------------------------
       
   267 // CPeninputHwrBoxWindow::GetWindowConfigResFileName
       
   268 // (other items were commented in a header)
       
   269 // --------------------------------------------------------------------------
       
   270 const TDesC& CPeninputHwrBoxWindow::GetWindowConfigResFileName(
       
   271     TInt /*aLangID*/ )    // LangId : 32 fixed
       
   272     {
       
   273     return KConfigurationResourceFile();
       
   274     }
       
   275 
       
   276 // --------------------------------------------------------------------------
       
   277 // CPeninputHwrBoxWindow::GetWindowResFileName
       
   278 // (other items were commented in a header)
       
   279 // --------------------------------------------------------------------------
       
   280 const TDesC& CPeninputHwrBoxWindow::GetWindowResFileName()
       
   281     {
       
   282     return KHwrWindowResourceFile();
       
   283     }
       
   284 
       
   285 // --------------------------------------------------------------------------
       
   286 // CPeninputHwrBoxWindow::ChangeUnitSize
       
   287 // (other items were commented in a header)
       
   288 // --------------------------------------------------------------------------
       
   289 //
       
   290 const TRect CPeninputHwrBoxWindow::ChangeUnitSize()
       
   291     {
       
   292     TAknWindowLineLayout appWnd;
       
   293     TAknWindowLineLayout mainPane;
       
   294     TAknWindowLineLayout wndLayout;
       
   295     TAknWindowLineLayout unitLayout;
       
   296     TAknLayoutRect mainPaneRect;
       
   297     TAknLayoutRect wndRect;
       
   298     TAknLayoutRect unitRect;
       
   299 
       
   300     // Get hwr window layout
       
   301     appWnd = AknLayoutScalable_Avkon::application_window( 0 ).LayoutLine();
       
   302 
       
   303     if (appWnd.iW > appWnd.iH)
       
   304         {
       
   305         // landscape
       
   306         mainPane = AknLayoutScalable_Avkon::main_pane(4).LayoutLine();
       
   307         }
       
   308     else
       
   309         {
       
   310         // portrait
       
   311         mainPane = AknLayoutScalable_Avkon::main_pane(1).LayoutLine();
       
   312         }
       
   313     if (!iPredictiveWnd->Hiden())
       
   314         {
       
   315         wndLayout = AknLayoutScalable_Avkon::popup_fep_hwr_window(7).LayoutLine();
       
   316         }
       
   317     else
       
   318         {
       
   319         wndLayout = AknLayoutScalable_Avkon::popup_fep_hwr_window(6).LayoutLine();
       
   320         }
       
   321 
       
   322     mainPaneRect.LayoutRect(appWnd.Rect(), mainPane);
       
   323     wndRect.LayoutRect(mainPaneRect.Rect(), wndLayout);
       
   324 
       
   325     unitLayout = AknLayoutScalable_Avkon::fep_hwr_aid_pane().LayoutLine();
       
   326     unitRect.LayoutRect(wndRect.Rect(), unitLayout);
       
   327 
       
   328     TRect hwrWndRect = TRect(0,
       
   329                              0,
       
   330                              wndRect.Rect().Width(),
       
   331                              wndRect.Rect().Height());
       
   332 
       
   333     TInt unitWidth = unitRect.Rect().Width();
       
   334     TInt unitHeight = unitRect.Rect().Height();
       
   335 
       
   336     iLayoutContext->SetData( EPeninputDataTypeUnitWidth, &unitWidth );
       
   337     iLayoutContext->SetData( EPeninputDataTypeUnitHeight, &unitHeight );
       
   338 
       
   339     return hwrWndRect;
       
   340     }
       
   341 
       
   342 // --------------------------------------------------------------------------
       
   343 // CPeninputHwrBoxWindow::ChangeClientSize
       
   344 // (other items were commented in a header)
       
   345 // --------------------------------------------------------------------------
       
   346 void CPeninputHwrBoxWindow::ChangeClientSize()
       
   347     {
       
   348     TAknTextLineLayout languageSwitchText;
       
   349     TInt unitWidth = CPeninputDataConverter::AnyToInt
       
   350         ( iLayoutContext->RequestData( EPeninputDataTypeUnitWidth ) );
       
   351     TInt unitHeight = CPeninputDataConverter::AnyToInt
       
   352         ( iLayoutContext->RequestData( EPeninputDataTypeUnitHeight ) );
       
   353 
       
   354     TInt clientLayoutId = CPeninputDataConverter::AnyToInt
       
   355         ( iLayoutContext->RequestData( EPeninputDataTypeClientLayout ) );
       
   356     CPeninputClientLayoutInfo* clientLayout =
       
   357         ConfigInfo()->FindClientLayoutInfo( clientLayoutId );
       
   358 
       
   359     if ( clientLayout )
       
   360         {
       
   361         // Change self rect
       
   362         TInt width = clientLayout->Columns() * unitWidth;
       
   363         TInt height = clientLayout->Rows() * unitHeight;
       
   364         TRect rect = TRect( ClientPane()->Rect().iTl,
       
   365                             TSize( width, height ) );
       
   366 
       
   367         ClientPane()->SetRect( rect );
       
   368         // Change the postion and size of controls in current layout
       
   369         ReorganizeControls( clientLayout->LayoutID(), ETrue );
       
   370         }
       
   371     }
       
   372 
       
   373 // --------------------------------------------------------------------------
       
   374 // CPeninputHwrBoxWindow::CreateAllControlsL
       
   375 // (other items were commented in a header)
       
   376 // --------------------------------------------------------------------------
       
   377 void CPeninputHwrBoxWindow::CreateAllControlsL()
       
   378     {
       
   379     CPeninputLayoutWindowJp::CreateAllControlsL();
       
   380 
       
   381     if (iInputContextField)
       
   382         {
       
   383         HeaderPane()->RemoveControl(static_cast<CFepUiBaseCtrl*>(iInputContextField));
       
   384         iInputContextField = NULL;
       
   385         }
       
   386     AddContextFieldJpL();
       
   387 
       
   388     // DropDown List
       
   389     AddDropdownListL();
       
   390 
       
   391     // Hwr box
       
   392     AddBoxGroupL();
       
   393 
       
   394     // convert button : use EventSpace
       
   395     iConvertBtn = AddButtonL( EPeninutWindowCtrlIdConvertToKanjiBtn,
       
   396                 EPeninputLayoutEventSpace,
       
   397                 R_PENINPUT_LAYOUT_HWR_CONVERT);
       
   398     iConvertBtn->SetDimmed(ETrue);
       
   399 
       
   400     // Backspace button
       
   401     AddButtonL( EPeninutWindowCtrlIdClear2Btn,
       
   402                 EPeninputLayoutEventBack,
       
   403                 R_PENINPUT_LAYOUT_HWR_BACKSPACE,
       
   404                 EKeyBackspace,
       
   405                 ETrue );
       
   406 
       
   407     // Enter button
       
   408     AddButtonL( EPeninutWindowCtrlIdEnterBtn,
       
   409                 EPeninputLayoutEventEnter,
       
   410                 R_PENINPUT_LAYOUT_HWR_ENTER,
       
   411                 EKeyEnter );
       
   412 
       
   413     // character range switch button
       
   414     iCharacterRangeSwitchBtn = AddButtonL( EPeninutWindowCtrlIdInputLangSwitcherBtn,
       
   415                                  EPeninputLayoutEventSwitchCharacterRange,
       
   416                                  R_PENINPUT_LAYOUT_HWR_SWITCH_RANGE_ALL );
       
   417 
       
   418     // SCT button
       
   419     AddButtonL( EPeninutWindowCtrlIdSymbolBtn,
       
   420                 EPeninputLayoutEventSct,
       
   421                 R_PENINPUT_LAYOUT_HWR_SCT );
       
   422 
       
   423     // Switch to vkb button
       
   424     AddButtonL( EPeninutWindowCtrlIdSwitchToVkbBtn,
       
   425                 EPeninputLayoutEventToVkb,
       
   426                 R_PENINPUT_LAYOUT_HWR_VKB );
       
   427     
       
   428     if( iCtrlPool != NULL )
       
   429         {
       
   430         for ( TInt i = 0; i < iCtrlPool->ControlCount(); i++ )
       
   431             {
       
   432             iCtrlPool->ControlByIndex( i )->AddEventObserver( UiLayout() );
       
   433             }
       
   434         }
       
   435     }
       
   436 
       
   437 // --------------------------------------------------------------------------
       
   438 // CPeninputHwrBoxWindow::SetControlsFont
       
   439 // (other items were commented in a header)
       
   440 // --------------------------------------------------------------------------
       
   441 void CPeninputHwrBoxWindow::SetControlsFont()
       
   442     {
       
   443     CPeninputLayoutWindowJp::SetControlsFont();
       
   444 
       
   445     TAknTextLineLayout candTextLayout = AknLayoutScalable_Avkon::cell_hwr_candidate_pane_t1().LayoutLine();
       
   446     iDropdownList->SetFont(AknLayoutUtils::FontFromId(candTextLayout.iFont, NULL));
       
   447     }
       
   448 
       
   449 // --------------------------------------------------------------------------
       
   450 // CPeninputHwrBoxWindow::PopupChoiceList
       
   451 // (other items were commented in a header)
       
   452 // --------------------------------------------------------------------------
       
   453 void CPeninputHwrBoxWindow::PopupChoiceList()
       
   454     {
       
   455     }
       
   456 
       
   457 // --------------------------------------------------------------------------
       
   458 // CPeninputHwrBoxWindow::ReorganizeControls
       
   459 // (other items were commented in a header)
       
   460 // --------------------------------------------------------------------------
       
   461 void CPeninputHwrBoxWindow::ReorganizeControls( TInt aClientLayoutId, TBool /*aNeedReset*/ )
       
   462     {
       
   463     TInt unitWidth = CPeninputDataConverter::AnyToInt
       
   464         ( iLayoutContext->RequestData( EPeninputDataTypeUnitWidth ) );
       
   465     TInt unitHeight = CPeninputDataConverter::AnyToInt
       
   466         ( iLayoutContext->RequestData( EPeninputDataTypeUnitHeight ) );
       
   467 
       
   468     // First remove all controls in the client pane, but don't delete them
       
   469     ( const_cast<RPointerArray<CFepUiBaseCtrl>&>
       
   470         ( ClientPane()->ControlList() ) ).Reset();
       
   471 
       
   472     // Clear rect
       
   473     ClearRect( ClientPane()->Rect() );
       
   474     UpdateArea( ClientPane()->Rect(), EFalse );
       
   475 
       
   476     // Then add controls according to the configuration of clientlayout
       
   477     CPeninputClientLayoutInfo* clientLayout =
       
   478         ConfigInfo()->FindClientLayoutInfo( aClientLayoutId );
       
   479 
       
   480     // Get control list from client layout
       
   481     RPointerArray<CPeninputControlInfo>& controlList =
       
   482         clientLayout->ControlInfoList();
       
   483     const TInt count = controlList.Count();
       
   484     TInt controlID = 0;
       
   485     TInt cols = 0;
       
   486     TInt rows = 0;
       
   487     CFepUiBaseCtrl* ctrl = NULL;
       
   488     TRect rect = ClientPane()->Rect();
       
   489 
       
   490     // Set rect for client area
       
   491     rect.SetSize( TSize( clientLayout->Columns() * unitWidth,
       
   492                          clientLayout->Rows() * unitHeight ) );
       
   493     ClientPane()->SetRect( rect );
       
   494 
       
   495     // Set owner rect
       
   496     SetWholeWindowRect( ClientPane()->Rect() );
       
   497 
       
   498     TPoint point = rect.iTl;
       
   499 
       
   500     for ( TInt i = 0; i < count; i++ )
       
   501         {
       
   502         controlID = controlList[i]->ControlID();
       
   503         ctrl = iCtrlPool->Control( controlID );
       
   504 
       
   505         if ( ctrl )
       
   506             {
       
   507             rect.iTl = point
       
   508                 + TPoint( controlList[i]->BeginColumn() * unitWidth,
       
   509                           controlList[i]->BeginRow() * unitHeight );
       
   510             cols = controlList[i]->EndColumn()
       
   511                 - controlList[i]->BeginColumn();
       
   512             rows = controlList[i]->EndRow()
       
   513                 - controlList[i]->BeginRow();
       
   514             rect.SetSize( TSize( cols * unitWidth, rows * unitHeight ) );
       
   515 
       
   516             if ( ( ctrl->ControlType() | ECtrlButton ) == ECtrlButton )
       
   517                 {
       
   518                 ( static_cast<CAknFepCtrlButton*> ( ctrl ) )->SizeChanged
       
   519                     ( rect, ETrue );
       
   520                 }
       
   521             else if ( ctrl->ControlId() == EPeninutWindowCtrlIdHwrBox )
       
   522                 {
       
   523                 iBoxGroup->SizeChanged( rect );
       
   524                 static_cast<CPeninputHwrBoxLayout*>(UiLayout())->DataMgr(0)->SetInputAreaSize(rect.Size());
       
   525                 }
       
   526             else if ( ctrl->ControlId() == EPeninutWindowCtrlIdDropDownList )   // DropDownList
       
   527                 {
       
   528                 iDropdownList->SizeChanged(unitWidth, unitHeight, unitWidth, rect.iTl, cols-1, rows);
       
   529                 }
       
   530             AddNotOwnedControl( ctrl );
       
   531             }
       
   532         }
       
   533     }
       
   534 
       
   535 // --------------------------------------------------------------------------
       
   536 // CPeninputHwrBoxWindow::GetScrollUpBtnResId
       
   537 // (other items were commented in a header)
       
   538 // --------------------------------------------------------------------------
       
   539 TInt CPeninputHwrBoxWindow::GetScrollUpBtnResId()
       
   540     {
       
   541     return R_PENINPUT_LAYOUT_HWR_SCROLL_UP;
       
   542     }
       
   543 
       
   544 // --------------------------------------------------------------------------
       
   545 // CPeninputHwrBoxWindow::GetScrollDownBtnResId
       
   546 // (other items were commented in a header)
       
   547 // --------------------------------------------------------------------------
       
   548 //
       
   549 TInt CPeninputHwrBoxWindow::GetScrollDownBtnResId()
       
   550     {
       
   551     return R_PENINPUT_LAYOUT_HWR_SCROLL_DOWN;
       
   552     }
       
   553 
       
   554 // --------------------------------------------------------------------------
       
   555 // CPeninputHwrBoxWindow::DoCaseChange
       
   556 // (other items were commented in a header)
       
   557 // --------------------------------------------------------------------------
       
   558 //
       
   559 void CPeninputHwrBoxWindow::DoCaseChange( TInt aNewCase )
       
   560     {
       
   561     if( iDisableCaseChange )
       
   562         {
       
   563         iCachedCase = aNewCase;
       
   564         return;
       
   565         }
       
   566     TInt* val = static_cast<TInt*>(iLayoutContext->RequestData(EPeninputDataTypePermittedRange));
       
   567     if ( *val & (ERangeEnglish | ERangeFullWidthEnglish))
       
   568         {
       
   569         iLayoutContext->SetData( EPeninputDataTypeCase, &aNewCase );
       
   570         }
       
   571     }
       
   572 
       
   573 // ---------------------------------------------------------
       
   574 // Highlight a dropdownlist cell
       
   575 // ---------------------------------------------------------
       
   576 //
       
   577 void CPeninputHwrBoxWindow::HighlightCell(TInt aIndex)
       
   578     {
       
   579     iDropdownList->SetHighlightCell(aIndex);
       
   580     }
       
   581 
       
   582 // ---------------------------------------------------------
       
   583 // redraw dropdownlist
       
   584 // ---------------------------------------------------------
       
   585 //
       
   586 void CPeninputHwrBoxWindow::DropdownListDraw()
       
   587     {
       
   588     iDropdownList->Draw();
       
   589     }
       
   590 
       
   591 // ---------------------------------------------------------
       
   592 // Cancel writing
       
   593 // ---------------------------------------------------------
       
   594 //
       
   595 void CPeninputHwrBoxWindow::CancelWriting()
       
   596     {
       
   597     if (iBoxGroup)
       
   598         {
       
   599         iBoxGroup->CancelWriting();
       
   600         }
       
   601     }
       
   602 
       
   603 // ---------------------------------------------------------
       
   604 // Draw window and shadow
       
   605 // ---------------------------------------------------------
       
   606 //
       
   607 void CPeninputHwrBoxWindow::DimInputContextField( TBool aFlag )
       
   608     {
       
   609     if ( iInputContextField )
       
   610         {
       
   611         iInputContextField->SetDimmed( aFlag );
       
   612         }
       
   613     }
       
   614 
       
   615 // ---------------------------------------------------------------------------
       
   616 // CPeninputHwrBoxWindow::SetDimmed
       
   617 // Dim hwrbox
       
   618 // (other items were commented in a header).
       
   619 // ---------------------------------------------------------------------------
       
   620 //
       
   621 void CPeninputHwrBoxWindow::SetDimmed(TBool aDimFlag)
       
   622     {
       
   623     if (iBoxGroup)
       
   624         {
       
   625         iBoxGroup->SetDimmed(aDimFlag);
       
   626         }
       
   627     }
       
   628 
       
   629 // ---------------------------------------------------------------------------
       
   630 // CPeninputHwrBoxWindow::BoxGroup()
       
   631 // hwrbox control
       
   632 // (other items were commented in a header).
       
   633 // ---------------------------------------------------------------------------
       
   634 //
       
   635 CPeninputHwrBoxGroup* CPeninputHwrBoxWindow::BoxGroup()
       
   636     {
       
   637     return iBoxGroup;
       
   638     }
       
   639 
       
   640 // -----------------------------------------------------------------------------
       
   641 // CPeninputHwrBoxWindow::ConstructFromResourceL
       
   642 // (other items were commented in a header).
       
   643 // -----------------------------------------------------------------------------
       
   644 //
       
   645 void CPeninputHwrBoxWindow::ConstructFromResourceL()
       
   646     {
       
   647     CPeninputLayoutWindowJp::ConstructFromResourceL();
       
   648     SetHwBoxFrameBackColor();
       
   649     }
       
   650 
       
   651 // ---------------------------------------------------------------------------
       
   652 // CPeninputHwrBoxWindow::SetEnableSettingBtnJp
       
   653 // (other items were commented in a header)
       
   654 // ---------------------------------------------------------------------------
       
   655 //     
       
   656 void CPeninputHwrBoxWindow::SetEnableSettingBtnJp(TBool aEnable)
       
   657     {
       
   658     if ( aEnable )
       
   659         {
       
   660         iTouchInputOptionButton->SetDimmed(EFalse);
       
   661         }
       
   662     else
       
   663         {
       
   664         iTouchInputOptionButton->SetDimmed(ETrue);
       
   665         iTouchInputOptionButton->SetActive(EFalse);
       
   666         } 
       
   667     }
       
   668 
       
   669 // --------------------------------------------------------------------------
       
   670 // CPeninputHwrBoxWindow::CPeninputHwrBoxWindow
       
   671 // (other items were commented in a header)
       
   672 // --------------------------------------------------------------------------
       
   673 //
       
   674 CPeninputHwrBoxWindow::CPeninputHwrBoxWindow(
       
   675     CFepUiLayout* aUiLayout, MPeninputLayoutContext* aLayoutContext )
       
   676     : CPeninputLayoutWindowJp( aUiLayout, aLayoutContext ),
       
   677     iDisableCaseChange(EFalse)
       
   678     {
       
   679     }
       
   680 
       
   681 // --------------------------------------------------------------------------
       
   682 // CPeninputHwrBoxWindow::AddButtonL
       
   683 // (other items were commented in a header)
       
   684 // --------------------------------------------------------------------------
       
   685 //
       
   686 CAknFepCtrlEventButton* CPeninputHwrBoxWindow::AddButtonL(
       
   687     const TInt aControlId, const TInt aEventId, const TInt aResId,
       
   688     const TInt aUnicode, const TBool aIsRepeat )
       
   689     {
       
   690     CAknFepCtrlEventButton* button = NULL;
       
   691 
       
   692     if ( aIsRepeat )
       
   693         {
       
   694         button = CAknFepCtrlRepeatButton::NewL( UiLayout(), aControlId,
       
   695                                                 aEventId, aUnicode );
       
   696         }
       
   697     else
       
   698         {
       
   699         button = CAknFepCtrlEventButton::NewL( UiLayout(), aControlId,
       
   700                                                aEventId, aUnicode );
       
   701         }
       
   702 
       
   703     CleanupStack::PushL( button );
       
   704     if ( button )
       
   705         {
       
   706         // Read resource
       
   707         TResourceReader reader;
       
   708 
       
   709         CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId );
       
   710         button->SetResourceId( aResId );
       
   711         button->ConstructFromResourceL();
       
   712         // Pop and destroy reader
       
   713         CleanupStack::PopAndDestroy( 1 );
       
   714 
       
   715         // Add into the control pool
       
   716         if ( iCtrlPool )
       
   717             {
       
   718             iCtrlPool->AddControl( button );
       
   719             }
       
   720         }
       
   721     CleanupStack::Pop( button );
       
   722 
       
   723     return button;
       
   724     }
       
   725 
       
   726 // --------------------------------------------------------------------------
       
   727 // CPeninputHwrBoxWindow::AddBoxGroupL
       
   728 // (other items were commented in a header)
       
   729 // --------------------------------------------------------------------------
       
   730 //
       
   731 void CPeninputHwrBoxWindow::AddBoxGroupL()
       
   732     {
       
   733     iBoxGroup = CPeninputHwrBoxGroup::NewL(UiLayout(), EPeninutWindowCtrlIdHwrBox, KBoxCount);
       
   734     iBoxGroup->SetTransparency(KWndTransparencyFactor, 100);
       
   735 
       
   736     if ( iCtrlPool )
       
   737         {
       
   738         iCtrlPool->AddControl( iBoxGroup );
       
   739         }
       
   740     SetHwBoxFrameBackColor();
       
   741     }
       
   742 
       
   743 // --------------------------------------------------------------------------
       
   744 // CPeninputHwrBoxWindow::SetHwBoxFrameBackColor
       
   745 // (other items were commented in a header)
       
   746 // --------------------------------------------------------------------------
       
   747 //
       
   748 void CPeninputHwrBoxWindow::SetHwBoxFrameBackColor()
       
   749     {
       
   750     TRgb frameColor;
       
   751     TRgb backColor;
       
   752     TAknsItemID id;
       
   753     
       
   754     id.Set(KWriteBoxFrameBackColorMajor, KWriteBoxFrameBackColorGrp);
       
   755 
       
   756     TInt error = AknsUtils::GetCachedColor(AknsUtils::SkinInstance(),
       
   757                                            frameColor,
       
   758                                            id,
       
   759                                            KWriteBoxFrameBackColorIdx);
       
   760 
       
   761     if (error != KErrNone)
       
   762         {
       
   763         frameColor = TRgb(KDefaultWriteBoxFrameColor);
       
   764         backColor = TRgb(KDefaultWriteBoxBackColor);
       
   765         }
       
   766     else
       
   767         {
       
   768         backColor = frameColor;	
       
   769         }
       
   770 
       
   771     if (iBoxGroup)
       
   772         {
       
   773         iBoxGroup->SetBoxFrameColor(frameColor);
       
   774         iBoxGroup->SetBoxBackColor(backColor);
       
   775         }
       
   776     }
       
   777 
       
   778 // ---------------------------------------------------------
       
   779 // Add dropdown list to window
       
   780 // ---------------------------------------------------------
       
   781 //
       
   782 void CPeninputHwrBoxWindow::AddDropdownListL()
       
   783     {
       
   784     ChangeUnitSize();
       
   785     TInt unitWidth = CPeninputDataConverter::AnyToInt
       
   786         ( iLayoutContext->RequestData( EPeninputDataTypeUnitWidth ) );
       
   787     TInt unitHeight = CPeninputDataConverter::AnyToInt
       
   788         ( iLayoutContext->RequestData( EPeninputDataTypeUnitHeight ) );
       
   789 
       
   790     TResourceReader reader;
       
   791     CCoeEnv::Static()->CreateResourceReaderLC(reader,R_PENINPUT_LAYOUT_HWR_DROP_DOWN_LIST);
       
   792 
       
   793     TAknTextLineLayout candTextLayout = AknLayoutScalable_Avkon::cell_hwr_candidate_pane_t1().LayoutLine();
       
   794 
       
   795     TInt textMargin = (unitHeight -
       
   796                       AknLayoutUtils::FontFromId(candTextLayout.iFont, NULL)->HeightInPixels())/2;
       
   797 
       
   798     iDropdownList = CFepCtrlDropdownList::NewL(TPoint(Rect().iTl.iX, Rect().iTl.iY + unitHeight),
       
   799                                                UiLayout(),
       
   800                                                EPeninutWindowCtrlIdDropDownList,
       
   801                                                reader,
       
   802                                                unitWidth,
       
   803                                                unitHeight,
       
   804                                                unitWidth,
       
   805                                                PENINPUT_LAYOUT_HWR_COL_COUNT-1,
       
   806                                                PENINPUT_LAYOUT_HWR_ROW_COUNT,
       
   807                                                AknLayoutUtils::FontFromId(candTextLayout.iFont, NULL),
       
   808                                                NULL,
       
   809                                                CGraphicsContext::ECenter,
       
   810                                                textMargin,
       
   811                                                KRgbBlack,       // border color
       
   812                                                TRgb(0xeeeeee),  // content bg color
       
   813                                                KRgbWhite,       // navi bg color
       
   814                                                AKN_LAF_COLOR_STATIC(candTextLayout.iC),
       
   815                                                KRgbRed);
       
   816 
       
   817     if ( iCtrlPool )
       
   818         {
       
   819         iCtrlPool->AddControl( iDropdownList );
       
   820         }
       
   821     iDropdownList->SetResourceId(R_PENINPUT_LAYOUT_HWR_DROP_DOWN_LIST);
       
   822     iDropdownList->SetEventIdForCandidateSelected(EPeninputLayoutHwrEventCandidateSelected);
       
   823     CleanupStack::PopAndDestroy(); // reader
       
   824     }
       
   825 
       
   826 // ---------------------------------------------------------------------------
       
   827 // CPeninputHwrBoxWindow::SetWholeWindowRect
       
   828 // [Ref]CPeninputLayoutWindow::SetWindowRect
       
   829 // (other items were commented in a header).
       
   830 // ---------------------------------------------------------------------------
       
   831 //
       
   832 void CPeninputHwrBoxWindow::SetWholeWindowRect(const TRect& aRect)
       
   833     {
       
   834     TRect rect = aRect;
       
   835 
       
   836     TInt unitHeight = CPeninputDataConverter::AnyToInt
       
   837         ( iLayoutContext->RequestData( EPeninputDataTypeUnitHeight ) );
       
   838     rect.iTl.iY = rect.iTl.iY - unitHeight;
       
   839 
       
   840     if (!iPredictiveWnd->Hiden())
       
   841         {
       
   842         TRect predictiveRect = aRect;
       
   843         predictiveRect.iTl.iY = predictiveRect.iBr.iY;
       
   844         predictiveRect.iBr.iY += iPredictiveWnd->Rect().Size().iHeight;
       
   845         iPredictiveWnd->SetRect(predictiveRect);
       
   846         rect.iBr.iY += iPredictiveWnd->Rect().Size().iHeight;
       
   847         }
       
   848 
       
   849     SetRect(rect);
       
   850 
       
   851 
       
   852     TRect shadowRect = TRect(TPoint(rect.iTl.iX - iShadowTlWidth,
       
   853                                     rect.iTl.iY - iShadowTlHeight),
       
   854                              TPoint(rect.iBr.iX + iShadowBrWidth,
       
   855                                     rect.iBr.iY + iShadowBrHeight));
       
   856 
       
   857     SetShadowRect(shadowRect);
       
   858     ICFDisableRegionUpdating();  // ICF::OnDeActivate()
       
   859     UiLayout()->SetShadowRect(shadowRect);
       
   860     ICFDisableRegionUpdating();  // ICF::OnDeActivate()
       
   861 
       
   862     HandleControlEvent(EPeninputLayoutEventMovePosition, NULL, KNullDesC);
       
   863     }
       
   864 
       
   865 // ---------------------------------------------------------------------------
       
   866 // CPeninputHwrBoxWindow::AddContextFieldJpL
       
   867 // [ref]CPeninputLayoutWindow::AddContextFieldL( aResID )
       
   868 // (other items were commented in a header)
       
   869 // ---------------------------------------------------------------------------
       
   870 //
       
   871 void CPeninputHwrBoxWindow::AddContextFieldJpL()
       
   872     {
       
   873     // Get reference CControlGroup of headerPane
       
   874     CControlGroup* headerPane = HeaderPane();
       
   875 
       
   876     User::LeaveIfNull( headerPane );
       
   877 
       
   878     // Input context field
       
   879     iInputContextField = CFepInputContextFieldJp::NewL( TRect(),
       
   880         UiLayout(), EPeninutWindowCtrlIdInputContextField );
       
   881 
       
   882     // Read resource
       
   883     TResourceReader resReader;
       
   884     CCoeEnv::Static()->CreateResourceReaderLC( resReader, R_PENINPUT_LAYOUT_ICF );
       
   885     ReadIcfInfo( resReader );
       
   886     CleanupStack::PopAndDestroy( 1 );
       
   887     // Transfer to headerPane
       
   888     headerPane->AddControlL( iInputContextField );
       
   889 
       
   890     iInputContextField->SetFocus(ETrue);
       
   891 
       
   892     // Add layout as event observer
       
   893     iInputContextField->AddEventObserver( UiLayout() );
       
   894     }
       
   895