textinput/peninputarc/src/peninputserverapp/peninputanimclientobj.cpp
changeset 0 eb1f2e154e89
child 6 6ceef9a83b1a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputarc/src/peninputserverapp/peninputanimclientobj.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,497 @@
+/*
+* Copyright (c) 2006-2007 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:  Implementation for peninput server
+*
+*/
+
+#include <coedef.h>
+#include "peninputanimclientobj.h"
+#include "peninputserver.h"
+#include "peninputclientserver.h"
+#include "peninputanimcommand.h"
+#include <coemain.h>
+// the animation dll name
+_LIT( KAnimDllName, "peninputanim.dll" );
+//animation window group name
+//_LIT(KPeninputServerAnimName,"peninputserveranimobj");
+class RWsSession;
+class RWindowGroup;
+
+void HideWindowGroupL(const RWsSession& aWs,const RWindowGroup& aGroup);
+
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::CPeninputAnimObj
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+CPeninputAnimObj::CPeninputAnimObj(TSpriteMember& aSpriteMember)
+                    : CActive( EPriorityStandard ),iSpriteMember(aSpriteMember)
+    {
+    iOnExiting = EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::NewL
+// factory method
+// ---------------------------------------------------------------------------
+//
+CPeninputAnimObj* CPeninputAnimObj::NewL(TSpriteMember& aSpriteMember)
+    {    
+    CPeninputAnimObj* animObj = new(ELeave) CPeninputAnimObj(aSpriteMember);        
+    CleanupStack::PushL(animObj);            
+    CActiveScheduler::Add(animObj);
+    animObj->ConstructL();
+    CleanupStack::Pop(animObj);
+    return animObj;
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::~CPeninputAnimObj
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CPeninputAnimObj::~CPeninputAnimObj()
+    {        
+    Cancel();
+    for(int i = 0 ; i < iAnimCmd.Count(); ++i)
+    	{
+    	const TAnimCmd* cmd = iAnimCmd[i];
+    	delete cmd;
+    	}
+    iAnimCmd.Close();
+    
+    // closing the window server session frees all 
+    // used resources in the ws session, including:
+    //   iSprite
+    //   iAnim
+    //   iAnimDll
+    iSprite.Close();
+    iAnim.Close();
+    iAnimDll.Close();            
+    iWindowGroup.Close();
+    iWsSession.Close();
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::RunL
+// active ao call back
+// ---------------------------------------------------------------------------
+//
+void CPeninputAnimObj::RunL()
+    {
+    ExecuteAnimCommand();
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::DoCancel
+// ---------------------------------------------------------------------------
+//
+void CPeninputAnimObj::DoCancel()
+    {
+    //do nothing
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::RunError
+// ---------------------------------------------------------------------------
+//    
+TInt CPeninputAnimObj::RunError(TInt /*aErr*/)
+    {
+    //ignore error
+    return KErrNone;
+    }
+    
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::ConstructL
+// 2nd phase constructor
+// ---------------------------------------------------------------------------
+//    
+void CPeninputAnimObj::ConstructL()
+    {
+    iAnimCmd.Reset();
+    ConstructAnimL();    
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::ExecuteAnimCommand
+// Execute animation command
+// ---------------------------------------------------------------------------
+//        
+void CPeninputAnimObj::ExecuteAnimCommand()
+    {    
+    TInt i = 0;
+    for(; i < iAnimCmd.Count(); ++i)
+        {        
+    	const TAnimCmd* cmd = iAnimCmd[i];        
+        if(!cmd->ExecuteAnimCommand())
+        	break; //execution not finished, need wait to next round. 
+        delete cmd;        	
+        }   
+     
+    //remove executed command
+    while(--i >= 0)
+    	{
+    	iAnimCmd.Remove(i);
+    	}
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::ExeOnePendingAnimCmd
+// Execute the first pending animation command
+// ---------------------------------------------------------------------------
+//        
+void CPeninputAnimObj::ExeOnePendingAnimCmd()
+    {
+    //search the first wait command
+    for(TInt i = 0 ; i < iAnimCmd.Count(); i++)
+        {
+        if(!iAnimCmd[i]->Ready())
+            {
+            iAnimCmd[i]->SetReady(ETrue);
+            //break;
+            }
+        }        
+    //CompleteRequest();
+    SetObjActive();
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::AddAnimCommand
+// Add a animation command
+// ---------------------------------------------------------------------------
+//        
+void CPeninputAnimObj::AddAnimCommand(TAnimCmd* aCmd)
+    {    
+    if(iOnExiting) // do nothing if prepare for exiting
+        {
+        delete aCmd;
+        aCmd = 0;    
+        return;
+        }
+    iAnimCmd.Append(aCmd);
+   
+    //CompleteRequest();
+    SetObjActive();
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::SetObjActive
+// Set animation object active so as to be rescheduled by AO scheduler.
+// ---------------------------------------------------------------------------
+//        
+void CPeninputAnimObj::SetObjActive()
+    {
+    if(!IsActive())
+        {
+    	iStatus=KRequestPending;
+    	SetActive();    	
+    	TRequestStatus *pS=(&iStatus);
+    	
+        User::RequestComplete(pS,0);
+    	}    
+    }
+
+
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::ConstructSpriteAnimL
+// ---------------------------------------------------------------------------
+//
+TInt CPeninputAnimObj::ConstructAnimL()
+    {                
+    User::LeaveIfError( iWsSession.Connect() );   
+    iWindowGroup = RWindowGroup( iWsSession);
+    iWindowGroup.Construct( RThread().Id(), EFalse );    
+   
+    iWindowGroup.SetOrdinalPosition( -1, -1);    
+    iWindowGroup.SetOrdinalPriorityAdjust( ECoeWinPriorityAlwaysAtFront );
+    iWindowGroup.EnableReceiptOfFocus( EFalse );
+    iWindowGroup.AutoForeground(EFalse);
+    
+	HideWindowGroupL(iWsSession,iWindowGroup);  
+    TInt id = iWindowGroup.Identifier();    
+    iSprite = RWsSprite( iWsSession);
+    User::LeaveIfError( iSprite.Construct( iWindowGroup,
+                                           TPoint( 0, 0 ),ESpriteNoChildClip | 
+                                                            ESpriteNoShadows ) );
+    // add sprite member
+    User::LeaveIfError( iSprite.AppendMember( iSpriteMember ));
+         
+    // load peninput animation dll
+    iAnimDll = RAnimDll( iWsSession );
+    User::LeaveIfError( iAnimDll.Load( KAnimDllName ) );    
+    
+    // create peninput sprite animation class
+    iAnim = RPeninputAnim( iAnimDll);
+    iAnim.ConstructL( iSprite );    
+    return KErrNone;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::AddActivationCmd
+// Add activation command
+// ---------------------------------------------------------------------------
+//
+TBool CPeninputAnimObj::AddActivationCmd(TBool aUiFlag, TBool aWaitFlag)
+	{
+	TAnimActivateUiCmd* cmd = new TAnimActivateUiCmd(iAnim,aUiFlag,!aWaitFlag);
+	if(!cmd)
+		return EFalse;
+	AddAnimCommand(cmd);
+	return ETrue;
+	}
+
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::AddChangeSizeCmd
+// Add changing size command
+// ---------------------------------------------------------------------------
+//	
+TBool CPeninputAnimObj::AddChangeSizeCmd(const TSize& aSize)
+	{
+	TAnimChangeSizeCmd* cmd = new TAnimChangeSizeCmd(iAnim,aSize);
+	if(!cmd)
+		return EFalse;
+	AddAnimCommand(cmd);
+	return ETrue;	
+	}
+	
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::AddSetPosCmd
+// Add setting position command
+// ---------------------------------------------------------------------------
+//	
+TBool CPeninputAnimObj::AddSetPosCmd(const TPoint& aPt)
+	{
+	TAnimSetPosCmd* cmd = new TAnimSetPosCmd(iAnim,aPt);
+	if(!cmd)
+		return EFalse;
+	AddAnimCommand(cmd);
+	return ETrue;
+	}
+	
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::AddChangeDispModeCmd
+// Add changing display mode command
+// ---------------------------------------------------------------------------
+//		
+TBool CPeninputAnimObj::AddChangeDispModeCmd(TSpriteMember& aMember)
+	{
+    TAnimChangeDispModeCmd* cmd = new	TAnimChangeDispModeCmd(iAnim,
+                                                             iSprite,
+                                                             aMember);
+
+	if(!cmd)
+		return EFalse;
+	AddAnimCommand(cmd);
+	return ETrue;	
+	}
+	
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::AddUpdateUiCmd
+// Add updaing UI command
+// ---------------------------------------------------------------------------
+//			
+TBool CPeninputAnimObj::AddUpdateUiCmd(const TRect& aRect, TBool aUpdateFlag)
+	{
+	TAnimUpdateUiRectCmd* cmd = new TAnimUpdateUiRectCmd(iAnim,aRect,aUpdateFlag);
+	if(!cmd)
+		return EFalse;
+	AddAnimCommand(cmd);
+	return ETrue;		
+	}
+
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::AddUpdateUiCmd
+// Add updaing UI command
+// ---------------------------------------------------------------------------
+//
+TBool CPeninputAnimObj::AddUpdateUiCmd(TUpdateArea *aArea,TInt aNum)
+    {
+	  TAnimUpdateUiRectCmd* cmd = new TAnimUpdateUiRectCmd(iAnim,aArea,aNum);
+	  if (!cmd)
+		    return EFalse;
+	  AddAnimCommand(cmd);
+	  return ETrue;		
+    }
+
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::AddCapturePointerCmd
+// Add capturing pointer command
+// ---------------------------------------------------------------------------
+//				
+TBool CPeninputAnimObj::AddCapturePointerCmd(TBool aFlag, TInt aCaptureCtrlID)
+	{
+	TAnimCapturePtCmd* cmd = new TAnimCapturePtCmd(iAnim,aFlag, aCaptureCtrlID);	
+	if(!cmd)
+		return EFalse;
+	AddAnimCommand(cmd);
+	return ETrue;		
+	}
+	
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::AddSimulatedEventCmd
+// Add ignoring similated event command
+// ---------------------------------------------------------------------------
+//					
+TBool CPeninputAnimObj::AddSimulateEventCmd(const TRawEvent& aEvent)
+	{
+    TAnimSimulateEventCmd* cmd = new TAnimSimulateEventCmd(iAnim, aEvent);
+    if (!cmd)
+        return EFalse;
+    AddAnimCommand(cmd);
+    return ETrue;	
+	}
+
+// ---------------------------------------------------------------------------
+// Execute simulate event command
+// ---------------------------------------------------------------------------
+//					
+TBool CPeninputAnimObj::ExecuteSimulateEventCmd( const TRawEvent& aEvent )
+	{
+    TAnimSimulateEventCmd* cmd = new TAnimSimulateEventCmd( iAnim, aEvent );    
+    if (!cmd)
+        return EFalse;
+    cmd->ExecuteAnimCommand();
+    delete cmd;
+    cmd = NULL;
+    return ETrue;		
+	}
+
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::AddFlushSessionCmd
+// Add flushing session command
+// ---------------------------------------------------------------------------
+//						
+TBool CPeninputAnimObj::AddFlushSessionCmd()
+	{
+	TAnimFlushWsSessionCmd* cmd = new TAnimFlushWsSessionCmd(iAnim,iWsSession);
+	if(!cmd)
+		return EFalse;
+	AddAnimCommand(cmd);
+	return ETrue;		
+	}
+
+#ifdef RD_TACTILE_FEEDBACK
+	
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::AddRegisterFeedbackAreaCmd
+// Add feedback registeration command
+// ---------------------------------------------------------------------------
+//							
+TBool CPeninputAnimObj::AddRegisterFeedbackAreaCmd(const TTactileFeedbackArea& aArea,
+                                                TBool aCmdFlag)		
+    { 
+	TAnimFeedbackAreaCmd* cmd = new TAnimFeedbackAreaCmd(iAnim,aArea,
+	                                                       TAnimFeedbackAreaCmd::TFeedbackAreaOpAdd,
+	                                                       aCmdFlag);
+	if(!cmd)
+		return EFalse;
+	AddAnimCommand(cmd);
+	return ETrue;	        
+    }
+
+
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::AddRegisterFeedbackAreaCmd
+// Add feedback registeration command
+// ---------------------------------------------------------------------------
+//							
+/*TBool CPeninputAnimObj::AddRegisterFeedbackAreaCmd(const RArray<TTactileFeedbackArea>& aAreaList)		
+    { 
+	TAnimFeedbackAreaCmd* cmd = new TAnimFeedbackAreaCmd(iAnim,aAreaList,
+	                                                       TAnimFeedbackAreaCmd::TFeedbackAreaOpAdd,
+	                                                       ETrue);
+	if(!cmd)
+		return EFalse;
+	AddAnimCommand(cmd);
+	return ETrue;	        
+    }*/
+
+
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::AddDeRegisterFeedbackAreaCmd
+// Remove feedback registeration command
+// ---------------------------------------------------------------------------
+//							
+TBool CPeninputAnimObj::AddDeRegisterFeedbackAreaCmd(const TTactileFeedbackArea& aArea,
+                                            TBool aCmdFlag)
+    { 
+	TAnimFeedbackAreaCmd* cmd = new TAnimFeedbackAreaCmd(iAnim,aArea,
+	                                                       TAnimFeedbackAreaCmd::TFeedbackAreaOpRemove,
+	                                                       aCmdFlag);
+	if(!cmd)
+		return EFalse;
+	AddAnimCommand(cmd);
+	return ETrue;	        
+    }
+    
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::AddChangeFeedbackAreaCmd
+// Add feedback registeration command
+// ---------------------------------------------------------------------------
+//							
+TBool CPeninputAnimObj::AddChangeFeedbackAreaCmd(const TTactileFeedbackArea& aArea,
+                                            TBool aCmdFlag)
+    { 
+	TAnimFeedbackAreaCmd* cmd = new TAnimFeedbackAreaCmd(iAnim,aArea,
+	                                                       TAnimFeedbackAreaCmd::TFeedbackAreaOpChange,
+	                                                       aCmdFlag);
+	if(!cmd)
+		return EFalse;
+	AddAnimCommand(cmd);
+	return ETrue;	        
+    }  
+
+// ---------------------------------------------------------------------------
+// CPeninputAnimObj::AddChangeFeedbackTypeCmd
+// Add feedback registeration command
+// ---------------------------------------------------------------------------
+//							
+TBool CPeninputAnimObj::AddChangeFeedbackTypeCmd(const TTactileFeedbackArea& aArea,
+                                            TBool aCmdFlag)
+    { 
+	TAnimFeedbackAreaCmd* cmd = new TAnimFeedbackAreaCmd(iAnim,aArea,
+	                                                       TAnimFeedbackAreaCmd::TFeedbackTypeOpChange,
+	                                                       aCmdFlag);
+	if(!cmd)
+		return EFalse;
+	AddAnimCommand(cmd);
+	return ETrue;	        
+    }  
+
+#endif // RD_TACTILE_FEEDBACK
+TBool CPeninputAnimObj::AddEnalbeSpriteCmd(TBool aFlag)
+    {
+	TAnimEnableSpriteCmd* cmd = new TAnimEnableSpriteCmd(iAnim,aFlag);
+	if(!cmd)
+		return EFalse;
+	AddAnimCommand(cmd);
+	return ETrue;	                
+    }
+
+RWindowGroup& CPeninputAnimObj::WindowGroup()
+    {
+    return iWindowGroup;
+    }
+    
+void CPeninputAnimObj::OnExiting()
+    {
+    iOnExiting = ETrue;
+    }
+    
+void CPeninputAnimObj::GetDSAState(TBool& aState)
+    {
+    iAnim.GetDSAState(aState);    
+    }
+//end of file