--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputhwrboxcn/ctrlsrc/peninputhwrboxgroup.cpp Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,661 @@
+/*
+* Copyright (c) 2002-2005 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 <AknLayoutDef.h>
+#include <AknsUtils.h>
+#include <coemain.h>
+#include <barsread.h>
+
+#include "peninputhwrboxgroup.h"
+#include "peninputhwrctrlid.h"
+#include "peninputhwrevent.h"
+
+const TUint32 KDefaultWriteBoxBgColor = 0xdddddd;
+const TUint32 KDefaultWriteBoxFrameColor = 0x000000;
+const TInt32 KInvalidResId = -1;
+
+// constant definition
+const TInt KDefaultStrokeEndMarkX = -65536;
+const TInt KDefaultStrokeEndMarkY = -65536;
+
+// Implementation of Class CAknFepHwrBoxGroup
+// The container class of HWR boxes
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::NewL
+// factory function
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CAknFepHwrBoxGroup* CAknFepHwrBoxGroup::NewL(CFepUiLayout* aUiLayout,
+ TInt aBoxGroupId,
+ TInt aBoxCount)
+ {
+ CAknFepHwrBoxGroup* self = new (ELeave) CAknFepHwrBoxGroup(aUiLayout, aBoxGroupId);
+ CleanupStack::PushL(self);
+ self->ConstructL(aBoxCount);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::NewLC
+// factory function
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CAknFepHwrBoxGroup* CAknFepHwrBoxGroup::NewLC(CFepUiLayout* aUiLayout,
+ TInt aBoxGroupId,
+ TInt aBoxCount)
+ {
+ CAknFepHwrBoxGroup* self = new (ELeave) CAknFepHwrBoxGroup(aUiLayout, aBoxGroupId);
+ CleanupStack::PushL(self);
+ self->ConstructL(aBoxCount);
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::~CAknFepHwrBoxGroup
+// Destructor
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CAknFepHwrBoxGroup::~CAknFepHwrBoxGroup()
+ {
+ // base class CControlGroup frees all controls in the list
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::ConstructFromResourceL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepHwrBoxGroup::ConstructFromResourceL( TResourceReader& aReader)
+ {
+ // get write box bg color
+ TInt32 colorMajorSkinId = aReader.ReadInt32();
+ TInt skinitemid= aReader.ReadInt16();
+ TInt coloridx = aReader.ReadInt16();
+
+ TAknsItemID colorid;
+ colorid.Set(TInt(colorMajorSkinId), skinitemid);
+
+ TRgb boxcolor;
+ MAknsSkinInstance* skininstance = AknsUtils::SkinInstance();
+ TInt error = AknsUtils::GetCachedColor(skininstance,
+ boxcolor,
+ colorid,
+ coloridx);
+
+ if (error != KErrNone)
+ {
+ boxcolor = TRgb(KDefaultWriteBoxBgColor);
+ }
+
+ SetBoxBackColor(boxcolor);
+
+ skinitemid = aReader.ReadInt16();
+ coloridx = aReader.ReadInt16();
+
+ colorid.Set(TInt(colorMajorSkinId), skinitemid);
+
+ TRgb boxframecolor;
+ error = AknsUtils::GetCachedColor(skininstance,
+ boxframecolor,
+ colorid,
+ coloridx);
+
+ if (error != KErrNone)
+ {
+ boxframecolor = TRgb(KDefaultWriteBoxFrameColor);
+ }
+
+ SetBoxFrameColor(boxframecolor);
+
+ iFirstTimeConstruct = EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::ConstructFromResourceL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepHwrBoxGroup::ConstructFromResourceL()
+ {
+ if (iResourceId == KInvalidResId)
+ {
+ User::Leave(KErrArgument);
+ }
+
+ TResourceReader reader;
+ CCoeEnv::Static()->CreateResourceReaderLC(reader, iResourceId);
+
+ // get write box bg color
+ TInt32 colorMajorSkinId = reader.ReadInt32();
+ TInt skinitemid = reader.ReadInt16();
+ TInt coloridx = reader.ReadInt16();
+
+ TAknsItemID colorid;
+ colorid.Set(TInt(colorMajorSkinId), skinitemid);
+
+ TRgb boxcolor;
+ MAknsSkinInstance* skininstance = AknsUtils::SkinInstance();
+ TInt error = AknsUtils::GetCachedColor(skininstance,
+ boxcolor,
+ colorid,
+ coloridx);
+
+ if (error != KErrNone)
+ {
+ boxcolor = TRgb(KDefaultWriteBoxBgColor);
+ }
+
+ SetBoxBackColor(boxcolor);
+
+ skinitemid = reader.ReadInt16();
+ coloridx = reader.ReadInt16();
+
+ colorid.Set(TInt(colorMajorSkinId), skinitemid);
+
+ TRgb boxframecolor;
+ error = AknsUtils::GetCachedColor(skininstance,
+ boxframecolor,
+ colorid,
+ coloridx);
+
+ if (error != KErrNone)
+ {
+ boxframecolor = TRgb(KDefaultWriteBoxFrameColor);
+ }
+
+ SetBoxFrameColor(boxframecolor);
+
+ CleanupStack::PopAndDestroy(); // reader
+
+ iFirstTimeConstruct = EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::BoxCount
+// Clear current handwriting trail if any.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CAknFepHwrBoxGroup::BoxCount()
+ {
+ return NumOfControls();
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::CancelWriting
+// Clear current handwriting trail if any.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepHwrBoxGroup::CancelWriting()
+ {
+ if( !iActiveBox )
+ {
+ //there is nothing to cancel
+ return;
+ }
+
+ iActiveBox->SetWndTransparencyFactor(iInactiveTrans);
+ iActiveBox->CancelCharWriting();
+ }
+
+const RArray<TPoint>& CAknFepHwrBoxGroup::StrokeList()
+ {
+ ASSERT( iActiveBox != NULL );
+
+ return iActiveBox->StrokeList();
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::SizeChanged
+// Hand size change event.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepHwrBoxGroup::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 )
+ {
+ At(j)->SetRect( TRect(curLeft, aRect.iTl.iY,
+ curLeft + boxWidth,
+ aRect.iBr.iY) );
+ }
+
+ RefreshUI();
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::SizeChanged
+// Hand size change event.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepHwrBoxGroup::SizeChanged()
+ {
+ //load Laf data and set all boxes size
+ //TRect aRect = somecode_load_laf_data;
+ //SizeChanged(aRect);
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::SetBoxBackColor
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepHwrBoxGroup::SetBoxBackColor(const TRgb aCol)
+ {
+ for( TInt j = 0; j < NumOfControls(); j++ )
+ {
+ At(j)->SetBkColor(aCol);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::SetBoxFrameColor
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepHwrBoxGroup::SetBoxFrameColor(const TRgb aCol)
+ {
+ for( TInt j = 0; j < NumOfControls(); j++ )
+ {
+ static_cast<CTransparentHwrWnd*>(At(j))->SetFrameCol(aCol);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::SetTransparency
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepHwrBoxGroup::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<CTransparentHwrWnd*>(At(j))->SetWndTransparencyFactor(iInactiveTrans);
+ }
+ else
+ {
+ static_cast<CTransparentHwrWnd*>(At(j))->SetWndTransparencyFactor(iActiveTrans);
+ }
+ }
+ }
+// -----------------------------------------------------------------------------
+// from base class MAknFepHwrPropertySubscriber
+// CAknFepHwrBoxGroup::SetPropertyL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepHwrBoxGroup::SetPropertyL(const TAknFepHwrProperty aPropertyName,
+ const TDesC& aPropertyValue)
+ {
+ switch( aPropertyName )
+ {
+ case EAknFepHwrPropertyWriteSpeed:
+ {
+ const TTimeIntervalMicroSeconds32 speed =
+ *(TTimeIntervalMicroSeconds32 *)(aPropertyValue.Ptr());//lint !e826
+ SetWritingSpeed( speed );
+ }
+ break;
+ case EAknFepHwrPropertyPenSize:
+ {
+ const TSize penSize = *(TSize *)(aPropertyValue.Ptr());//lint !e826
+ SetBoxPenSize( penSize );
+ }
+ break;
+ case EAknFepHwrPropertyPenColor:
+ {
+ const TRgb color = *(TRgb *)(aPropertyValue.Ptr());//lint !e826
+ SetBoxPenColor( color );
+ }
+ break;
+ case EAknFepHwrPropertyStrokeEndMark:
+ {
+ const TPoint endMark = *(TPoint*)(aPropertyValue.Ptr());
+ SetStrokeEndMark(endMark);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// from base class MEventObserver
+// CAknFepHwrBoxGroup::HandleEvent
+// Clear current handwriting trail if any.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepHwrBoxGroup::HandleControlEvent(TInt aEventType,
+ CFepUiBaseCtrl* aCtrl,
+ const TDesC& /*aEventData*/)
+ {
+ CTransparentHwrWnd* hwrWnd = static_cast<CTransparentHwrWnd*>( aCtrl );
+
+ switch( aEventType )
+ {
+ case EEventHwrStrokeStarted:
+ OnStrokeStarted(hwrWnd);
+ break;
+ case EEventHwrStrokeFinished:
+ OnStrokeFinished(hwrWnd);
+ break;
+ case EEventHwrCharacterTimerOut:
+ OnStrokeCharacterTimerOut(hwrWnd);
+ break;
+ case EEventHwrStrokeCanceled:
+ OnStrokeCanceled(hwrWnd);
+ break;
+ default:
+ //todo: any comments left here
+ break;
+ }
+ }//lint !e715
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::CAknFepHwrBoxGroup
+// C++ constructor.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CAknFepHwrBoxGroup::CAknFepHwrBoxGroup(CFepUiLayout* aUiLayout, TInt aBoxGroupId)
+: CControlGroup(aUiLayout, aBoxGroupId)
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::ConstructL
+// Symbian secode phase constructor.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepHwrBoxGroup::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);
+
+ // set default stroke end mark
+ aBox->SetStrokeEndMark(TPoint(KDefaultStrokeEndMarkX, KDefaultStrokeEndMarkY));
+
+ CleanupStack::Pop(aBox); //aBox
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::SetWritingSpeed
+// Iterate to set each HWR box writting speed.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepHwrBoxGroup::SetWritingSpeed(const TTimeIntervalMicroSeconds32& aCharDelay)
+ {
+ for( TInt j = 0; j < NumOfControls(); j++ )
+ {
+ CTransparentHwrWnd* hwrWnd = static_cast<CTransparentHwrWnd*>(At(j));
+
+ if( hwrWnd )
+ {
+ hwrWnd->SetCharacterDelay(aCharDelay);
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::SetBoxPenSize
+// Iterate to set each HWR box trail drawing pen size.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepHwrBoxGroup::SetBoxPenSize(const TSize aSize)
+ {
+ for( TInt j = 0; j < NumOfControls(); j++ )
+ {
+ At(j)->SetPenSize(aSize);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::SetBoxPenColor
+// Iterate to set each HWR box trail drawing pen color.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepHwrBoxGroup::SetBoxPenColor(const TRgb aCol)
+ {
+ for( TInt j = 0; j < NumOfControls(); j++ )
+ {
+ At(j)->SetPenColor(aCol);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::SetStrokEndMark
+// Iterate to set each HWR box stroke end mark.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepHwrBoxGroup::SetStrokeEndMark(const TPoint& aEndMard)
+ {
+ for( TInt j = 0; j < NumOfControls(); j++ )
+ {
+ static_cast<CTransparentHwrWnd*>(At(j))->SetStrokeEndMark(aEndMard);
+ }
+ }
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::OnStrokeStarted
+// Handle EEventHwrStrokeStarted event.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepHwrBoxGroup::OnStrokeStarted(CTransparentHwrWnd* aBoxFrom)
+ {
+ TBool refresh = EFalse;
+
+ if( !iActiveBox )
+ {
+ //change state from not writing to begin writing
+ iActiveBox = aBoxFrom;
+ refresh = ETrue;
+
+ ReportEvent(EHwrEventBeginWriting);
+ //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 EHwrEventNewWriting submit default candidate
+ // reset state
+ ReportEvent(EHwrEventNewWriting);
+ // clear writing of the last box
+ CancelWriting();
+
+ iActiveBox = aBoxFrom;
+ refresh = ETrue;
+
+ //set current box transparency
+ iActiveBox->SetWndTransparencyFactor(iActiveTrans);
+ }
+ else
+ {
+ ReportEvent(EHwrEventBeginWriting);
+ }
+ }
+
+ if( refresh )
+ {
+ // only active box need update
+ // inactive box is already update by CancelWriting
+ RefreshUI(iActiveBox);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::StrokeStrokeFinished
+// Handle EEventHwrStrokeFinished event.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepHwrBoxGroup::OnStrokeFinished(CTransparentHwrWnd* /* aBoxFrom */)
+ {
+ // Get stroke list is called by event handler
+ TPtrC ptr;
+ RArray<TPoint>* strokeList = const_cast<RArray<TPoint>* >(&(StrokeList()));
+ ptr.Set(reinterpret_cast<TText*>(strokeList), sizeof(strokeList));
+ ReportEvent(EHwrEventEndStroke, ptr);
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::StrokeCharacterTimerOut
+// Handle EEventHwrCharacterTimerOut event.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepHwrBoxGroup::OnStrokeCharacterTimerOut(CTransparentHwrWnd* aBoxFrom)
+ {
+ aBoxFrom->SetWndTransparencyFactor(iInactiveTrans);
+ ReportEvent(EHwrEventEndWriting);
+
+ if( iActiveBox == aBoxFrom )
+ {
+ iActiveBox = NULL;
+ }
+
+ RefreshUI(aBoxFrom);
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::OnStrokeCanceled
+// Handle EEventHwrStrokeCanceled event.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepHwrBoxGroup::OnStrokeCanceled(CTransparentHwrWnd* aBoxFrom)
+ {
+ if( iActiveBox == aBoxFrom )
+ {
+ iActiveBox = NULL;
+ }
+ }
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::RefreshUI
+// Explicit refresh HWR boxes UI.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepHwrBoxGroup::RefreshUI(CTransparentHwrWnd* aBox)
+ {
+ if( !aBox )
+ {
+ if( Hiden() )
+ {
+ return;
+ }
+
+ Draw();
+ UpdateArea(Rect(), EFalse);
+ }
+ else
+ {
+ if( !aBox->Hiden() )
+ {
+ aBox->Draw();
+ UpdateArea(aBox->Rect(), EFalse);
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::SubmitWriting
+// Submit first candidate in candidate buffer immediatelly.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepHwrBoxGroup::SubmitWriting()
+ {
+ if( !iActiveBox )
+ {
+ return;
+ }
+
+ //iActiveBox->SetTransparency(iInactiveTrans);
+ //todo call some base method to clear and submit
+ //iActiveBox->EndStrokeDirectly();
+ }
+
+// -----------------------------------------------------------------------------
+// CAknFepHwrBoxGroup::StrokeEndMark
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TPoint CAknFepHwrBoxGroup::StrokeEndMark()
+ {
+ if (NumOfControls() >= 1)
+ {
+ return static_cast<CTransparentHwrWnd*>(At(0))->StrokeEndMark();
+ }
+
+ return TPoint(KDefaultStrokeEndMarkX, KDefaultStrokeEndMarkY);
+ }
+
+//End Of File