--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputgenerichwr/src/peninputhwrarabiclayout.cpp Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,398 @@
+/*
+* 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: generic HWR layout
+*
+*/
+
+
+// System includes
+#include <aknfeppeninputenums.h> // Command from fep or IME to plugin
+#include <AknFepGlobalEnums.h> // Define EPluginInputModeHwr
+#include <peninputcmd.h> // Use global signal
+#include <peninputpluginutils.h> // Use resource utils and laf env
+#include <peninputlayoutchoicelist.h>
+#include <peninputlayoutbutton.h>
+#include <peninputdragbutton.h>
+#include <peninputcommonlayoutglobalenum.h>
+#include <peninputdataconverter.h>
+
+// User includes
+#include "peninputhwrarabic.hrh"
+//#include "peninputhwrevent.h"
+#include "peninputuistatemgrinterface.h"
+#include "peninputhwrarabiclayout.h"
+#include "peninputhwrarabicwindow.h"
+#include "peninputhwrarabicdatamgr.h"
+#include "peninputhwrarabicstate.h"
+#include "peninputhwrarabicstatestandby.h"
+#include "peninputhwrarabicstatebeginwriting.h"
+#include "peninputhwrarabicstateendwriting.h"
+#include "peninputhwrboxarabicstatecandidateselecting.h"
+#include "peninputuistatemgr.h"
+#include "peninputlayouthwrwnd.h"
+
+// constant definition
+//const TInt KMaxPredictiveLen = 128;
+const TInt KMaxCandidateLen = 128;
+//const TUint16 KBackRep = 0x2408;
+// convert displayable backspace
+const TUint16 KBackRep = 0x2190;
+const TUint16 KEnterRep = 0xF801;
+const TUint16 KSpaceRep = 0xF800;
+//const TUint16 KEnterCode = 0x2029;
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CPeninputHwrBxAbLayoutImp::NewL
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+CPeninputHwrBxAbLayoutImp* CPeninputHwrBxAbLayoutImp::NewL(
+ TAny* /*aInitParams*/ )
+ {
+ CPeninputHwrBxAbLayoutImp* self =
+ new ( ELeave ) CPeninputHwrBxAbLayoutImp();
+ CleanupStack::PushL( self );
+ self->Construct();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CPeninputHwrBxAbLayoutImp::~CPeninputHwrBxAbLayoutImp
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+CPeninputHwrBxAbLayoutImp::~CPeninputHwrBxAbLayoutImp()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CPeninputHwrBxAbLayoutImp::CPeninputHwrBxAbLayoutImp
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+CPeninputHwrBxAbLayoutImp::CPeninputHwrBxAbLayoutImp()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CPeninputHwrBxAbLayoutImp::ConstructL
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+void CPeninputHwrBxAbLayoutImp::Construct()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CPeninputHwrBxAbLayoutImp::CreateFepUiLayoutL
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+CFepUiLayout* CPeninputHwrBxAbLayoutImp::CreateFepUiLayoutL(
+ MLayoutOwner* aLayoutOwner, const TAny* aData )
+ {
+ CPeninputHwrBxAbLayout* uiLayout =
+ CPeninputHwrBxAbLayout::NewL( aLayoutOwner, aData );
+
+ return uiLayout;
+ }
+
+// ---------------------------------------------------------------------------
+// CPeninputHwrBxAbLayout::NewL
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+CPeninputHwrBxAbLayout* CPeninputHwrBxAbLayout::NewL(
+ MLayoutOwner* aLayoutOwner,
+ const TAny* aInitData )
+ {
+ CPeninputHwrBxAbLayout* self =
+ new ( ELeave ) CPeninputHwrBxAbLayout( aLayoutOwner );
+ CleanupStack::PushL( self );
+ self->ConstructL( aInitData );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CPeninputHwrBxAbLayout::CPeninputHwrBxAbLayout
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+CPeninputHwrBxAbLayout::CPeninputHwrBxAbLayout(
+ MLayoutOwner* aLayoutOwner )
+ : CPeninputCommonLayout( aLayoutOwner )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CPeninputHwrBxAbLayout::~CPeninputHwrBxAbLayout
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+CPeninputHwrBxAbLayout::~CPeninputHwrBxAbLayout()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CPeninputHwrBxAbLayout::ConstructL
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+void CPeninputHwrBxAbLayout::ConstructL( const TAny *aInitData )
+ {
+ CPeninputCommonLayout::ConstructL( aInitData );
+
+
+ CPeninputHwrBxAbStateBase* initState = CPeninputHwrBxAbStateBase::NewL( UiStateMgr(), this );
+ CPeninputHwrBxAbStateStandby* standbyState = CPeninputHwrBxAbStateStandby::NewL( UiStateMgr(), this );
+ CPeninputHwrBxAbStateBeginWriting* beginWritingState = CPeninputHwrBxAbStateBeginWriting::NewL( UiStateMgr(), this );
+ CPeninputHwrBxAbStateEndWriting* endWritingState = CPeninputHwrBxAbStateEndWriting::NewL( UiStateMgr(), this );
+ CPeninputHwrBxAbStateCandidateSelecting* candSelectingState = CPeninputHwrBxAbStateCandidateSelecting::NewL( UiStateMgr(), this );
+
+ UiStateMgr()->AddUiState( initState, EPeninputHwrBxAbStateInit );
+ UiStateMgr()->AddUiState( standbyState, EPeninputHwrBxAbStateStandby );
+ UiStateMgr()->AddUiState( beginWritingState, EPeninputHwrBxAbStateBeginWriting );
+ UiStateMgr()->AddUiState( endWritingState, EPeninputHwrBxAbStateEndWriting );
+ UiStateMgr()->AddUiState( candSelectingState, EPeninputHwrBxAbStateCandidateSelecting );
+ UiStateMgr()->SetCurrentUiState( initState );
+ }
+
+// ---------------------------------------------------------------------------
+// CPeninputHwrBxAbLayout::HandleCommand
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+TInt CPeninputHwrBxAbLayout::HandleCommand( TInt aCmd, TUint8* aData )
+ {
+ CPeninputCommonLayout::HandleCommand( aCmd, aData );
+
+ if ( aCmd == ECmdPenInputWindowOpen )
+ {
+ TInt curRange = CPeninputDataConverter::AnyToInt( RequestData( EPeninputDataTypeCurrentRange ) );
+ UiStateMgr()->SetCurrentUiState( EPeninputHwrBxAbStateStandby );
+ if (curRange == ERangeNative)
+ {
+ static_cast<CPeninputHwrBxAbWnd *>(LayoutWindow())->ResetAndShowDropdownList();
+ }
+ else
+ {
+ static_cast<CPeninputHwrBxAbWnd *>(LayoutWindow())->ClearAndCloseDropdownList();
+ }
+ }
+ else if ( aCmd == ECmdPenInputWindowClose )
+ {
+ UiStateMgr()->SetCurrentUiState( EPeninputHwrBxAbStateInit );
+ }
+ else if( aCmd == ECmdPenInputLanguage )
+ {
+ ((CPeninputHwrBxAbWnd*)iLayoutWindow)->OnLanguageChange();
+ }
+ else if(aCmd == ECmdPenInputRange)
+ {
+ UiStateMgr()->SetCurrentUiState( EPeninputHwrBxAbStateStandby );
+ iLayoutWindow->SizeChanged(ETrue);
+ }
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+// CPeninputHwrBxAbLayout::HandleControlEvent
+// Handle event from control
+// ---------------------------------------------------------
+//
+void CPeninputHwrBxAbLayout::HandleControlEvent(TInt aEventType, CFepUiBaseCtrl* aCtrl,
+ const TDesC& aEventData)
+ {
+ MPeninputUiStateMgr * UIStateMgr = UiStateMgr();
+ if (UIStateMgr)
+ {
+ CPeninputHwrBxAbStateBase* current =
+ static_cast<CPeninputHwrBxAbStateBase*>(UIStateMgr->CurrentUiState());
+ if (current)
+ {
+ TBuf<KMaxCandidateLen> charCode;
+ TBool handled = EFalse;
+ TRAPD(err, current->HandleControlEventPenL(aEventType, aEventData, *this,
+ charCode, handled));
+ if (KErrNone != err)
+ { // close peninput
+ CPeninputCommonLayout::HandleControlEvent(
+ EPeninputLayoutEventClose, NULL, KNullDesC);
+ handled = ETrue;
+ }
+ if (handled)
+ {
+ return;
+ }
+ }
+ }
+ CPeninputCommonLayout::HandleControlEvent(aEventType, aCtrl, aEventData);
+
+ return;
+ }
+// ---------------------------------------------------------------------------
+// CPeninputHwrBxAbLayout::CreateLayoutWindowL
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+void CPeninputHwrBxAbLayout::CreateLayoutWindowL()
+ {
+ iLayoutWindow = CPeninputHwrBxAbWnd::NewL( this, this );
+ }
+
+// ---------------------------------------------------------------------------
+// CPeninputHwrBxAbLayout::CreateDataMgrL
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+void CPeninputHwrBxAbLayout::CreateDataMgrL( const TAny* aInitData )
+ {
+ TPeninputLayoutData* layoutData = (TPeninputLayoutData*)aInitData;
+
+ iDataMgr = CPeninputHwrBxAbDataMgr::NewL( this, (*layoutData).iPtiEngine );
+ }
+
+// ---------------------------------------------------------------------------
+// CPeninputHwrBxAbLayout::LayoutType
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+TInt CPeninputHwrBxAbLayout::LayoutType()
+ {
+ return EPluginInputModeHwr;
+ }
+
+// ---------------------------------------------------------------------------
+// CPeninputHwrBxAbLayout::SemiTransparencyRequired
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+TBool CPeninputHwrBxAbLayout::SemiTransparencyRequired()
+ {
+ return ETrue;
+ }
+
+// ---------------------------------------------------------------------------
+// CPeninputHwrBxAbLayout::LayoutWindow
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+CPeninputLayoutWindow* CPeninputHwrBxAbLayout::LayoutWindow() const
+ {
+ return iLayoutWindow;
+ }
+
+// ---------------------------------------------------------------------------
+// CPeninputHwrBxAbLayout::TranslateCharCode
+// Translate the char code.
+// ---------------------------------------------------------
+//
+void CPeninputHwrBxAbLayout::TranslateCharCode( TDes& aCharCode )
+ {
+ TPtrC16 ptr;
+ ptr.Set(&KBackRep, sizeof(KBackRep)/2);
+
+ if (aCharCode.CompareC(ptr) == 0)
+ {
+ aCharCode.Zero();
+ aCharCode.Append((TChar)EKeyBackspace);
+ }
+ else
+ {
+ ptr.Set(&KSpaceRep, sizeof(KSpaceRep)/2);
+ if (aCharCode.CompareC(ptr) == 0)
+ {
+ aCharCode.Zero();
+ aCharCode.Append((TChar)EKeySpace);
+ }
+ else
+ {
+ ptr.Set(&KEnterRep, sizeof(KEnterRep)/2);
+ if (aCharCode.CompareC(ptr) == 0)
+ {
+ aCharCode.Zero();
+ aCharCode.Append((TChar)EKeyEnter);
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CPeninputHwrBxAbLayout::ReplaceL
+// Delete the previous charcode and submit the new one
+// ---------------------------------------------------------
+//
+void CPeninputHwrBxAbLayout::ReplaceL(const TDesC& aOldCharCode, const TDesC& aNewCharCode)
+ {
+ // user tries to correct the previous selection
+ // Delete the previous character and append the new one
+ _LIT(KSpaceChar, " ");
+ TBuf<1> buf;
+ buf.Zero();
+ buf.Append(KSpaceChar);
+ HBufC* p = NULL;
+ HBufC* oldCharCode = aOldCharCode.AllocLC();
+ HBufC* newCharCode = aNewCharCode.AllocLC();
+
+ if (static_cast<CPeninputHwrBxAbWnd *>(LayoutWindow())->IsAddingSpace(newCharCode))
+ {
+ p = HBufC::New(aNewCharCode.Length() + 2 + buf.Length());
+ }
+ else
+ {
+ p = HBufC::New(aNewCharCode.Length() + 2);
+ }
+ if( p )
+ {
+ TInt len = aOldCharCode.Length();
+ if (static_cast<CPeninputHwrBxAbWnd *>(LayoutWindow())->IsAddingSpace(oldCharCode))
+ {
+ len += buf.Length();
+ }
+ p->Des().Append((TUint16*)&len, 2);
+ p->Des().Append(aNewCharCode);
+ if (static_cast<CPeninputHwrBxAbWnd *>(LayoutWindow())->IsAddingSpace(newCharCode))
+ {
+ p->Des().Append(buf);
+ }
+ SignalOwner( ESignalReplaceText, *p );
+ delete p;
+ }
+ CleanupStack::PopAndDestroy(newCharCode);
+ CleanupStack::PopAndDestroy(oldCharCode);
+ }
+
+// ---------------------------------------------------------------------------
+// CPeninputHwrBxAbLayout::SubmitL
+// Submit the char code.
+// ---------------------------------------------------------
+//
+void CPeninputHwrBxAbLayout::SubmitL(const TDesC& aCharCode)
+ {
+ HBufC* buf = HBufC::NewLC(aCharCode.Length());
+ TPtr charcode(buf->Des());
+ charcode = aCharCode;
+ TranslateCharCode( charcode );
+ SignalOwner(ESignalKeyEvent, charcode);
+
+ CleanupStack::PopAndDestroy(buf);
+ }
+
+//End Of File