diff -r 000000000000 -r eb1f2e154e89 textinput/peninputhwrboxjp/src/peninputhwrboxgroup.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputhwrboxjp/src/peninputhwrboxgroup.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,574 @@ +/* +* 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: The class of handwriting box container implemention. +* +*/ + + +#include +#include //command from fep or IME to plugin. for vkb/hwr : ESignalCapturePointer + +#include "peninputhwrboxgroup.h" +#include "peninputhwrevent.h" + +// Implementation of Class CPeninputHwrBoxGroup +// The container class of HWR boxes + +// ----------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::NewL +// factory function +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CPeninputHwrBoxGroup* CPeninputHwrBoxGroup::NewL(CFepUiLayout* aUiLayout, + TInt aBoxGroupId, + TInt aBoxCount) + { + CPeninputHwrBoxGroup* self = new (ELeave) CPeninputHwrBoxGroup(aUiLayout, aBoxGroupId); + CleanupStack::PushL(self); + self->ConstructL(aBoxCount); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::NewLC +// factory function +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CPeninputHwrBoxGroup* CPeninputHwrBoxGroup::NewLC(CFepUiLayout* aUiLayout, + TInt aBoxGroupId, + TInt aBoxCount) + { + CPeninputHwrBoxGroup* self = new (ELeave) CPeninputHwrBoxGroup(aUiLayout, aBoxGroupId); + CleanupStack::PushL(self); + self->ConstructL(aBoxCount); + return self; + } + +// ----------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::~CPeninputHwrBoxGroup +// Destructor +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CPeninputHwrBoxGroup::~CPeninputHwrBoxGroup() + { + // base class CControlGroup frees all controls in the list + } + +// --------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::HandlePointerDownEventL +// Handle pointer down event +// (other items were commented in a header). +// --------------------------------------------------------------------------- +CFepUiBaseCtrl* CPeninputHwrBoxGroup::HandlePointerDownEventL(const TPoint& aPoint) + { + if(iDimmed) + { + CapturePointer(); + return NULL; + } + return CControlGroup::HandlePointerDownEventL(aPoint); + } + +// --------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::HandlePointerMoveEventL +// Handle pointer move event +// (other items were commented in a header). +// --------------------------------------------------------------------------- +CFepUiBaseCtrl* CPeninputHwrBoxGroup::HandlePointerMoveEventL(const TPoint& aPoint) + { + if(iDimmed) + { + return NULL; + } + return CControlGroup::HandlePointerMoveEventL(aPoint); + } + +// --------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::HandlePointerUpEventL +// Handle pointer up event +// (other items were commented in a header). +// --------------------------------------------------------------------------- +CFepUiBaseCtrl* CPeninputHwrBoxGroup::HandlePointerUpEventL(const TPoint& aPoint) + { + if(iDimmed) + { + TBool capture = ETrue; + TPtrC captureData; + captureData.Set((const TUint16*)&capture,sizeof(TBool)/sizeof(TUint16)); + CapturePointer(EFalse); + UiLayout()->SignalOwner(ESignalCapturePointer,captureData); + return NULL; + } + return CControlGroup::HandlePointerUpEventL(aPoint); + } + +// --------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::HandlePointerLeave +// Handle pointer leave event +// (other items were commented in a header). +// --------------------------------------------------------------------------- +void CPeninputHwrBoxGroup::HandlePointerLeave(const TPoint& aPoint) + { + if(iDimmed) + { + return; + } + CControlGroup::HandlePointerLeave(aPoint); + } + +// --------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::HandlePointerEnter +// Handle pointer enter event +// (other items were commented in a header). +// --------------------------------------------------------------------------- +void CPeninputHwrBoxGroup::HandlePointerEnter(const TPoint& aPoint) + { + if(iDimmed) + { + return; + } + CControlGroup::HandlePointerEnter(aPoint); + } + +// ----------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::BoxCount +// Clear current handwriting trail if any. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CPeninputHwrBoxGroup::BoxCount() + { + return NumOfControls(); + } + +// ----------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::CancelWriting +// Clear current handwriting trail if any. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPeninputHwrBoxGroup::CancelWriting() + { + if( iActiveBox == NULL ) + { + //there is nothing to cancel + return; + } + + iActiveBox->SetWndTransparencyFactor(iInactiveTrans); + iActiveBox->CancelCharWriting(); + } + +const RArray& CPeninputHwrBoxGroup::StrokeList() + { + ASSERT( iActiveBox != NULL ); + + return iActiveBox->StrokeList(); + } + +// ----------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::SizeChanged +// Hand size change event. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPeninputHwrBoxGroup::SizeChanged(const TRect& aRect) + { + TInt boxWidth = aRect.Width() / NumOfControls(); + TInt curLeft = aRect.iTl.iX; + + SetRect(aRect); + + for( TInt j = 0; j < NumOfControls(); j++, curLeft += boxWidth ) + { + CTransparentHwrWnd* ctrl = static_cast(At(j)); + ctrl->SetRect( TRect(curLeft, aRect.iTl.iY, + curLeft + boxWidth, + aRect.iBr.iY) ); + // Set guide line information + TRect rect(TPoint(0,0), TSize(boxWidth, aRect.Height())); + TInt arc = (rect.Width() < rect.Height())? rect.Width() : rect.Height(); + TInt unit = arc / 8; + + TRect toprect( rect.Width()/2 - unit*4, unit + aRect.iTl.iY, + rect.Width()/2 + unit*4, unit + aRect.iTl.iY ); + TRect bottomrect( rect.Width()/2 - unit*4, unit*7 + aRect.iTl.iY, + rect.Width()/2 + unit*4, unit*7 + aRect.iTl.iY); + + + // default black + } + + RefreshUI(); + } + +// ----------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::SetBoxBackColor +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPeninputHwrBoxGroup::SetBoxBackColor(const TRgb& aCol) + { + for( TInt j = 0; j < NumOfControls(); j++ ) + { + At(j)->SetBkColor(aCol); + } + } + +// ----------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::SetBoxFrameColor +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPeninputHwrBoxGroup::SetBoxFrameColor(const TRgb& aCol) + { + for( TInt j = 0; j < NumOfControls(); j++ ) + { + static_cast(At(j))->SetFrameCol(aCol); + } + } + +// ----------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::SetStrokEndMark +// Iterate to set each HWR box stroke end mark. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPeninputHwrBoxGroup::SetStrokeEndMark(const TPoint& aEndMard) + { + for( TInt j = 0; j < NumOfControls(); j++ ) + { + static_cast(At(j))->SetStrokeEndMark(aEndMard); + } + } + +// ----------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::SetTransparency +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPeninputHwrBoxGroup::SetTransparency(const TUint8 aActiveTrans, const TUint8 aInactiveTrans) + { +#ifdef __ALPHA_TRANCEPARENCY__ + iActiveTrans = aActiveTrans; + iInactiveTrans = aInactiveTrans; +#else + iActiveTrans = 255 - aActiveTrans; + iInactiveTrans = 255 - aInactiveTrans; +#endif + + for( TInt j = 0; j < NumOfControls(); j++ ) + { + if( At(j) != iActiveBox) + { + static_cast(At(j))->SetWndTransparencyFactor(iInactiveTrans); + } + else + { + static_cast(At(j))->SetWndTransparencyFactor(iActiveTrans); + } + } + } + +// ----------------------------------------------------------------------------- +// from base class MEventObserver +// CPeninputHwrBoxGroup::HandleEvent +// Clear current handwriting trail if any. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPeninputHwrBoxGroup::HandleControlEvent(TInt aEventType, + CFepUiBaseCtrl* aCtrl, + const TDesC& /*aEventData*/) + { + CTransparentHwrWnd* hwrWnd = static_cast( aCtrl ); + + switch( aEventType ) + { + case EEventHwrStrokeStarted: + ReportEvent(aEventType); // for DisableCaseChange + OnStrokeStarted(hwrWnd); + break; + case EEventHwrStrokeFinished: + OnStrokeFinished(hwrWnd); + break; + case EEventHwrCharacterTimerOut: + ReportEvent(aEventType); // for EnableCaseChange + OnStrokeCharacterTimerOut(hwrWnd); + break; + case EEventHwrStrokeCanceled: + ReportEvent(aEventType); // for EnableCaseChange + OnStrokeCanceled(hwrWnd); + break; + default: + // not handle other event type + break; + } + } + +// ----------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::CPeninputHwrBoxGroup +// C++ constructor. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CPeninputHwrBoxGroup::CPeninputHwrBoxGroup(CFepUiLayout* aUiLayout, TInt aBoxGroupId) + : CControlGroup(aUiLayout, aBoxGroupId), + iDimmed(EFalse) + { + } + +// ----------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::ConstructL +// Symbian secode phase constructor. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPeninputHwrBoxGroup::ConstructL(TInt aBoxCount) + { + //leave if invalid aBoxCount + ASSERT( aBoxCount > 0 ); + + //call base construct + CControlGroup::ConstructL(); + + //create two box hwr window + for( TInt i = 0; i < aBoxCount; ++i ) + { + CTransparentHwrWnd* aBox = CTransparentHwrWnd::NewL(TRect(), + UiLayout(), + 0, + EFalse); + CleanupStack::PushL( aBox ); + aBox->AddEventObserver( this ); + aBox->EnableTraceOutsideWindow(EFalse); + AddControlL(aBox); + CleanupStack::Pop(aBox); //aBox + } + } + +// ----------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::SetWritingSpeed +// Iterate to set each HWR box writting speed. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPeninputHwrBoxGroup::SetWritingSpeed(const TTimeIntervalMicroSeconds32& aCharDelay) + { + for( TInt j = 0; j < NumOfControls(); j++ ) + { + CTransparentHwrWnd* hwrWnd = static_cast(At(j)); + + if( hwrWnd != NULL ) + { + hwrWnd->SetCharacterDelay(aCharDelay); + } + } + } + +// ----------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::SetStrokeDelay +// Iterate to set each HWR box writting speed. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPeninputHwrBoxGroup::SetStrokeDelay(const TTimeIntervalMicroSeconds32& aCharDelay) + { + for( TInt j = 0; j < NumOfControls(); j++ ) + { + CTransparentHwrWnd* hwrWnd = static_cast(At(j)); + + if( hwrWnd != NULL ) + { + hwrWnd->SetStrokeDelay(aCharDelay); + } + } + } + +// ----------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::SetBoxPenSize +// Iterate to set each HWR box trail drawing pen size. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPeninputHwrBoxGroup::SetBoxPenSize(const TSize& aSize) + { + for( TInt j = 0; j < NumOfControls(); j++ ) + { + At(j)->SetPenSize(aSize); + } + } + +// ----------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::SetBoxPenColor +// Iterate to set each HWR box trail drawing pen color. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPeninputHwrBoxGroup::SetBoxPenColor(const TRgb& aCol) + { + for( TInt j = 0; j < NumOfControls(); j++ ) + { + At(j)->SetPenColor(aCol); + } + } +// ----------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::OnStrokeStarted +// Handle EEventHwrStrokeStarted event. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPeninputHwrBoxGroup::OnStrokeStarted(CTransparentHwrWnd* aBoxFrom) + { + TBool refresh = EFalse; + + if( iActiveBox == NULL ) + { + //change state from not writing to begin writing + iActiveBox = aBoxFrom; + refresh = ETrue; + + ReportEvent(EPeninputLayoutHwrEventBeginWriting); + //set current box transparency + iActiveBox->SetWndTransparencyFactor(iActiveTrans); + } + else + { + if( iActiveBox != aBoxFrom ) + { + // current active box will turn into inactive state + iActiveBox->SetWndTransparencyFactor(iInactiveTrans); + // user switches to another box + if( iActiveBox->HasNewTrace() ) + { + OnStrokeFinished(iActiveBox); + } + // handler of EPeninputLayoutHwrEventNewWriting submit default candidate + // reset state + ReportEvent(EPeninputLayoutHwrEventNewWriting); + // clear writing of the last box + CancelWriting(); + + iActiveBox = aBoxFrom; + refresh = ETrue; + + //set current box transparency + iActiveBox->SetWndTransparencyFactor(iActiveTrans); + } + else + { + ReportEvent(EPeninputLayoutHwrEventBeginWriting); + } + } + + if( refresh ) + { + // only active box need update + // inactive box is already update by CancelWriting + RefreshUI(iActiveBox); + } + } + +// ----------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::StrokeStrokeFinished +// Handle EEventHwrStrokeFinished event. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPeninputHwrBoxGroup::OnStrokeFinished(CTransparentHwrWnd* /* aBoxFrom */) + { + // Get stroke list is called by event handler + TPtrC ptr; + RArray* strokeList = const_cast* >(&(StrokeList())); + ptr.Set(reinterpret_cast(strokeList), sizeof(strokeList)/sizeof(TUint16)); + ReportEvent(EPeninputLayoutHwrEventEndStroke, ptr); + } + +// ----------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::StrokeCharacterTimerOut +// Handle EEventHwrCharacterTimerOut event. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPeninputHwrBoxGroup::OnStrokeCharacterTimerOut(CTransparentHwrWnd* aBoxFrom) + { + aBoxFrom->SetWndTransparencyFactor(iInactiveTrans); + ReportEvent(EPeninputLayoutHwrEventEndWriting); + + if( iActiveBox == aBoxFrom ) + { + iActiveBox = NULL; + } + + RefreshUI(aBoxFrom); + } + +// ----------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::OnStrokeCanceled +// Handle EEventHwrStrokeCanceled event. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPeninputHwrBoxGroup::OnStrokeCanceled(const CTransparentHwrWnd* aBoxFrom) + { + if( iActiveBox == aBoxFrom ) + { + iActiveBox = NULL; + } + } +// ----------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::RefreshUI +// Explicit refresh HWR boxes UI. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPeninputHwrBoxGroup::RefreshUI(CTransparentHwrWnd* aBox) + { + if( aBox == NULL ) + { + if( Hiden() ) + { + return; + } + + Draw(); + UpdateArea(Rect(), EFalse); + } + else + { + if( !aBox->Hiden() ) + { + CTransparentHwrWnd* box = static_cast(aBox); + box->Draw(); + UpdateArea(box->Rect(), EFalse); + } + } + } + +// --------------------------------------------------------------------------- +// CPeninputHwrBoxGroup::SetDimmed +// Dim button +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +void CPeninputHwrBoxGroup::SetDimmed(TBool aDimFlag) + { + iDimmed = aDimFlag; + } + +//End Of File