textinput/peninputcommonctrlsjp/src/peninputlayoutwindowjp.cpp
changeset 0 eb1f2e154e89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputcommonctrlsjp/src/peninputlayoutwindowjp.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,443 @@
+/*
+* Copyright (c) 2009 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:  common layout window for UI interface of VKB and HWR : japanese
+*
+*/
+
+
+// System includes
+#include <peninputcommonlayout.h>   // many includes
+#include <peninputinputcontextfield.h>
+#include <AknFepGlobalEnums.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <peninputrepeatbutton.h>   // CAknFepCtrlEventButton,CAknFepCtrlRepeatButton
+#include <peninputdataconverter.h>
+
+// User includes
+#include "peninputeventjp.h"  // EPeninutWindowCtrlIdCandidatePopupWindow, ...
+#include "peninputlayoutwindowjp.h"
+#include "peninputjapaneseview.h"
+#include "peninputcontextfieldjp.h"
+#include "peninputjapanesecandidatewnd.h"
+#include "peninputjapanesepredictivewnd.h"
+#include "peninputjapanesecandidatelistbox.h"
+#include "peninputjapanesepredictivelistbox.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CPeninputLayoutWindowJp::~CPeninputLayoutWindowJp
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPeninputLayoutWindowJp::~CPeninputLayoutWindowJp()
+    {
+    delete iViewCandidate;
+    delete iViewPrediction;
+    delete iViewCharacterRange;
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputLayoutWindowJp::HandleControlEvent
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPeninputLayoutWindowJp::HandleControlEvent(TInt aEventType,
+                                          CFepUiBaseCtrl* aCtrl,
+                                          const TDesC& aEventData)
+    {
+    TInt* data = ( TInt* ) aEventData.Ptr();
+    switch (aEventType)
+        {
+        case EPeninputLayoutEventMovePosition:
+            {
+            TSize shadowSize = ShadowRect().Size();
+            if (iOpened && shadowSize.iWidth && shadowSize.iHeight)  // check if ready.
+                {
+                TPoint tl = UiLayout()->Position();
+                if ((tl.iX || tl.iY) &&
+                    !CPeninputDataConverter::AnyToInt(iLayoutContext->RequestData(EAkninputDataTypeSizeChanging)) )
+                    {
+                    ChangeLayoutPosition(EPeninputPositionChangeTlJustify);
+                    ICFDisableRegionUpdating();
+                    }
+                TInt style = *( ( TUint16* ) aEventData.Ptr() );
+                if (EPeninputPositionChangeDataQuery != style)
+                    {
+                    style = EPeninputPositionChangeBrJustify;
+                    }
+                ChangeLayoutPosition(style);
+                ICFDisableRegionUpdating();
+                }
+            }
+            break;
+        case EEventSetDimmedSctBtn:
+            {
+            CAknFepCtrlEventButton* sctBtn = static_cast<CAknFepCtrlEventButton*>(iCtrlPool->Control(EPeninutWindowCtrlIdSymbolBtn));
+            if (sctBtn)
+                {
+                TBool dimmFlag = (*data)? ETrue : EFalse;
+                sctBtn->SetDimmed(dimmFlag);
+                }
+            }
+            break;
+        default:
+            CPeninputLayoutWindow::HandleControlEvent(aEventType,aCtrl,aEventData);
+            break;
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPeninputLayoutWindowJp::CreateAllControls
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPeninputLayoutWindowJp::CreateAllControlsL()
+    {
+
+    AddCandidateWindowL();
+
+    // befor predictivewnd, handle pointer event
+    CAknFepCtrlEventButton* upButton = AddButtonL(
+                EPeninutWindowCtrlIdScrollUpBtn,
+                EPeninputLayoutEventScrollUp,
+                GetScrollUpBtnResId(),
+                EKeySpace, // dummy
+                ETrue);
+
+    // befor predictivewnd, handle pointer event
+    CAknFepCtrlEventButton* downButton = AddButtonL(
+                EPeninutWindowCtrlIdScrollDownBtn,
+                EPeninputLayoutEventScrollDown,
+                GetScrollDownBtnResId(),
+                EKeySpace, // dummy
+                ETrue);
+
+    AddPredictiveWindowL();
+
+    iPredictiveWnd->SetButtons(upButton, downButton);
+
+    AddCharacterRangeWindowL();  // Hwr only
+
+    }
+
+// --------------------------------------------------------------------------
+// CPeninputLayoutWindowJp::SetControlsFont
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPeninputLayoutWindowJp::SetControlsFont()
+    {
+    TAknTextLineLayout textPaneTextLayout;
+
+    if (EPluginInputModeVkb == iLayoutContext->LayoutType())
+        {
+        textPaneTextLayout = 
+            AknLayoutScalable_Avkon::fep_vkb_top_text_pane_t1().LayoutLine();
+        }
+    else
+        {
+        textPaneTextLayout = 
+            AknLayoutScalable_Avkon::fep_hwr_top_text_pane_t1().LayoutLine();
+        }
+
+    CFepInputContextField* icf = static_cast<CFepInputContextField*>
+        ( Control( EPeninutWindowCtrlIdInputContextField ) );
+
+    icf->SetFont( AknLayoutUtils::FontFromId
+        ( textPaneTextLayout.iFont, NULL ) );
+    TInt UnitHeight = *( static_cast<TInt*>( iLayoutContext->RequestData
+                    ( EPeninputDataTypeUnitHeight ) ) );
+    TInt UnitWidth = *( static_cast<TInt*>( iLayoutContext->RequestData
+                    ( EPeninputDataTypeUnitWidth ) ) );
+
+    // call listbox->SizeChanged()
+    iCandidateWnd->UpdateMaximumRows(
+                              UnitHeight
+                             ,(EPluginInputModeVkb == iLayoutContext->LayoutType())? KPENINPUT_LAYOUT_VKB_POPUP_MAX_ROW_COUNT:KPENINPUT_LAYOUT_HWR_POPUP_MAX_ROW_COUNT);
+
+    if (iCharacterRangeWnd)
+        {
+        // call listbox->SizeChanged()
+        iCharacterRangeWnd->UpdateMaximumRows(UnitHeight,KPENINPUT_LAYOUT_HWR_POPUP_MAX_ROW_COUNT);
+        }
+
+    iPredictiveWnd->SetLineCount(KPENINPUT_LAYOUT_PREDICTIONPANE_ROW_COUNT);
+
+    // call listbox->SizeChanged()
+    iPredictiveWnd->SizeChanged(Rect().Size().iWidth, UnitWidth, UnitHeight);
+    }
+
+// -----------------------------------------------------------------------------
+// CPeninputLayoutWindowJp:::ConstructFromResourceL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPeninputLayoutWindowJp::ConstructFromResourceL()
+    {
+    CPeninputLayoutWindow::ConstructFromResourceL();
+    if (iCandidateWnd && iCandidateWnd->ListBox() && iCandidateWnd->ListBox()->ScrollBarFrame())
+        {
+        CAknDoubleSpanScrollBar* scrollBar =
+            static_cast<CAknDoubleSpanScrollBar*>(iCandidateWnd->ListBox()->ScrollBarFrame()->GetScrollBarHandle(CEikScrollBar::EVertical));
+        if (scrollBar)
+            {
+            scrollBar->HandleResourceChange(KAknsMessageSkinChange);
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputLayoutWindowJp::HandlePointerDownEventL
+// Handle pointer down event
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//      
+EXPORT_C CFepUiBaseCtrl* CPeninputLayoutWindowJp::HandlePointerDownEventL(const TPoint& aPoint)
+    {
+    CFepUiBaseCtrl* ctrl = iCandidateWnd->HandlePointerDownEventL(aPoint);
+    if (!ctrl && iCharacterRangeWnd)
+        {
+        ctrl = iCharacterRangeWnd->HandlePointerDownEventL(aPoint);
+        }
+    if (!ctrl)
+        {
+        ctrl = CAknFepCtrlBaseWindow::HandlePointerDownEventL(aPoint);
+        }
+    return ctrl;
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputLayoutWindowJp::HandlePointerUpEventL
+// Handle pointer up event
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C CFepUiBaseCtrl* CPeninputLayoutWindowJp::HandlePointerUpEventL(const TPoint& aPoint)
+    {
+    CFepUiBaseCtrl* ctrl = iCandidateWnd->HandlePointerUpEventL(aPoint);
+    if (!ctrl && iCharacterRangeWnd)
+        {
+        ctrl = iCharacterRangeWnd->HandlePointerUpEventL(aPoint);
+        }
+    if (!ctrl)
+        ctrl = CPeninputLayoutWindow::HandlePointerUpEventL(aPoint);
+    return ctrl;
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputLayoutWindowJp::HandlePointerMoveEventL
+// Handle pointer move event
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFepUiBaseCtrl* CPeninputLayoutWindowJp::HandlePointerMoveEventL(const TPoint& aPoint)
+    {
+    CFepUiBaseCtrl* ctrl = iCandidateWnd->HandlePointerMoveEventL(aPoint);
+    if (!ctrl && iCharacterRangeWnd)
+        {
+        ctrl = iCharacterRangeWnd->HandlePointerMoveEventL(aPoint);
+        }
+    if (!ctrl)
+        ctrl = CPeninputLayoutWindow::HandlePointerMoveEventL(aPoint);
+    return ctrl;
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputLayoutWindowJp::CandidateWindow
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPeninputJapaneseCandidateWnd* CPeninputLayoutWindowJp::CandidateWindow()
+    {
+    return iCandidateWnd;
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputLayoutWindowJp::PredictiveWindow
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPeninputJapanesePredictiveWnd* CPeninputLayoutWindowJp::PredictiveWindow()
+    {
+    return iPredictiveWnd;
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputLayoutWindowJp::CharacterRangeWindow
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPeninputJapaneseCandidateWnd* CPeninputLayoutWindowJp::CharacterRangeWindow()
+    {
+    return iCharacterRangeWnd;
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputLayoutWindowJp::InputContextField
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFepInputContextFieldJp* CPeninputLayoutWindowJp::InputContextField()
+    {
+    return static_cast<CFepInputContextFieldJp*>(Control(EPeninutWindowCtrlIdInputContextField));
+    }
+
+// --------------------------------------------------------------------------
+// CPeninputLayoutWindowJp::Opened
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPeninputLayoutWindowJp::Opened()
+    {
+    iOpened = ETrue;
+    }
+
+// --------------------------------------------------------------------------
+// CPeninputLayoutWindowJp::Closed
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPeninputLayoutWindowJp::Closed()
+    {
+    iOpened = EFalse;
+    }
+
+// --------------------------------------------------------------------------
+// CPeninputLayoutWindowJp::ICFDisableRegionUpdating
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPeninputLayoutWindowJp::ICFDisableRegionUpdating()
+    {
+    CFepInputContextField* icf = static_cast<CFepInputContextField*>
+        ( Control( EPeninutWindowCtrlIdInputContextField ) );
+
+    icf->OnDeActivate();
+    }
+
+// --------------------------------------------------------------------------
+// CPeninputLayoutWindowJp::ICFEnableRegionUpdating
+// (other items were commented in a header)
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPeninputLayoutWindowJp::ICFEnableRegionUpdating()
+    {
+    CFepInputContextField* icf = static_cast<CFepInputContextField*>
+        ( Control( EPeninutWindowCtrlIdInputContextField ) );
+
+    icf->OnActivate();
+    }
+
+// ------------------------------------------------------------------------
+// CPeninputLayoutWindow::CPeninputLayoutWindow
+// (other items were commented in a header)
+// ------------------------------------------------------------------------
+//
+EXPORT_C CPeninputLayoutWindowJp::CPeninputLayoutWindowJp( 
+    CFepUiLayout* aUiLayout, MPeninputLayoutContext* aLayoutContext )
+    : CPeninputLayoutWindow( aUiLayout, aLayoutContext ),
+    iOpened(EFalse)
+    { 
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputLayoutWindowJp::AddButtonL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+CAknFepCtrlEventButton* CPeninputLayoutWindowJp::AddButtonL(
+    const TInt aControlId, const TInt aEventId, const TInt aResId,
+    const TInt aUnicode, const TBool aIsRepeat )
+    {
+    CAknFepCtrlEventButton* button = NULL;
+
+    if ( aIsRepeat )
+        {
+        button = CAknFepCtrlRepeatButton::NewL( UiLayout(), aControlId,
+                                                aEventId, aUnicode );
+        }
+    else
+        {
+        button = CAknFepCtrlEventButton::NewL( UiLayout(), aControlId,
+                                               aEventId, aUnicode );
+        }
+
+    if ( button )
+        {
+        CleanupStack::PushL( button );
+        // Read resource
+        TResourceReader reader;
+
+        CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId );
+        button->SetResourceId( aResId );
+        button->ConstructFromResourceL();
+        // Pop and destroy reader
+        CleanupStack::PopAndDestroy( 1 );
+
+        AddControlL(button);
+        CleanupStack::Pop( button );
+        }
+    return button;
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputLayoutWindowJp::AddCandidateWindowL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CPeninputLayoutWindowJp::AddCandidateWindowL()
+    {
+    iViewCandidate = new(ELeave) CPeninputJapaneseView;
+    iViewCandidate->ConstructL();
+    iCandidateWnd = CPeninputJapaneseCandidateWnd::NewL(UiLayout(), EPeninutWindowCtrlIdCandidatePopupWindow, iViewCandidate);
+    iCandidateWnd->AddEventObserver(UiLayout());
+    AddControlL(iCandidateWnd);
+    iCandidateWnd->SetParent(NULL);
+    iViewCandidate->SetListBox(iCandidateWnd->ListBox());
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputLayoutWindowJp::AddPredictiveWindowL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CPeninputLayoutWindowJp::AddPredictiveWindowL()
+    {
+    iViewPrediction = new(ELeave) CPeninputJapaneseView;
+    iViewPrediction->ConstructL();
+    iPredictiveWnd = CPeninputJapanesePredictiveWnd::NewL(UiLayout(), EPeninutWindowCtrlIdPredictionPane, iViewPrediction);
+    iPredictiveWnd->AddEventObserver(UiLayout());
+    AddControlL(iPredictiveWnd);
+    iViewPrediction->SetListBox(iPredictiveWnd->ListBox());
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputLayoutWindowJp::AddCandidateWindowL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CPeninputLayoutWindowJp::AddCharacterRangeWindowL()
+    {
+    if (EPluginInputModeVkb != iLayoutContext->LayoutType())
+        {
+        iViewCharacterRange = new(ELeave) CPeninputJapaneseView;
+        iViewCharacterRange->ConstructL();
+        iCharacterRangeWnd = CPeninputJapaneseCandidateWnd::NewL(UiLayout(), EPeninutWindowCtrlIdCharacterRangePopupWindow, iViewCharacterRange);
+        iCharacterRangeWnd->AddEventObserver(UiLayout());
+        AddControlL(iCharacterRangeWnd);
+        iCharacterRangeWnd->SetParent(NULL);
+        iViewCharacterRange->SetListBox(iCharacterRangeWnd->ListBox());
+        }
+    }