diff -r 000000000000 -r eb1f2e154e89 textinput/peninputarc/inc/pensrvcliinc/peninputclientimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputarc/inc/pensrvcliinc/peninputclientimpl.h Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,687 @@ +/* +* Copyright (c) 2008-2008 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: This file contains classes of Peninput server client side. +* +*/ + + +#ifndef R_RPENINPUTSERVER_IMPL_H +#define R_RPENINPUTSERVER_IMPL_H + +// INCLUDES +#include +#include +#include +#include "peninputcmdparam.h" +#include "peninputsrveventhandler.h" +#include +#include + +class CPeninputServerObserver; +class MPenUiActivationHandler; +class CPenUiBackgroundWnd; + +NONSHARABLE_CLASS(CPeninputServerWaiter) : public CBase + { + public: + static CPeninputServerWaiter* NewL(); + void Start(); + void Stop(TInt aFlag); + TBool IsStarted() + { + return iWaitScheduler->IsStarted(); + } + TInt Error() + { + return iError; + } + ~CPeninputServerWaiter(); + protected: + private: + //CPeninputServerWaiter(); + void ConstructL(); + TInt iError; + CActiveSchedulerWait* iWaitScheduler; + }; + +NONSHARABLE_CLASS(TUiNotificationHandler) + { + public: + TUiNotificationHandler(MPenUiActivationHandler* aHandler,TInt aType); + public: + MPenUiActivationHandler* iHandler; + TInt iType; + }; + + +class CWaitingServerAo; +/** + * Client side interface to PeninputSingletonServer. + * + * + * @lib peninputclient.lib + * @since S60 v4.0 + */ +NONSHARABLE_CLASS(RPeninputServerImpl) : public RSessionBase + { +public: + + static RPeninputServerImpl* NewL(TRequestStatus* aStatus = NULL); + // Constructors and destructor + + + /** + * Makes a connection to the server. + * + * @since S60 v4.0 + * @return KErrNone if connection was successful, otherwise one of the + * general error codes. + */ + //TInt Connect(); + + /** + * Returns the version information of the server. + * + * @since S60 v4.0 + * @return TVersion object containing the version of the server. + */ + TVersion Version() const; + + + /** + * Closes the connection to the server. + * + * @since S60 v4.0 + */ + void Close(); + + /** + * HandleCommandL, handle command from client + * + * @since S60 v4.0 + * @param aCmd The commandid + * @param aBuf Command data + * @return The command handling result code.KErrNone if operation sucessfully. + */ + TInt HandleCommand(TInt aCmd,const TDesC8& aBuf); + + /** + * HandleCommandL, handle command from client + * + * @since S60 v4.0 + * @param aCmd The commandid + * @return The command handling result code.KErrNone if operation sucessfully. + */ + TInt HandleCommand(TInt aCmd); + /** + * HandleCommandL, handle command from client + * + * @since S60 v4.0 + * @param aCmd The commandid + * @param aBuf Command data + * @param aResult The result of layout handle + * @return The command handling result code.KErrNone if operation sucessfully. + */ + TInt HandleCommand(TInt aCmd,const TDesC8& aBuf,TInt &aResult); + + /** + * Get PENINPUT UI visibility + * + * @since S60 v4.0 + * @return ETrue if PENINPUT is visible, EFalse otherwise + */ + TBool IsVisible(); + + /** + * Get PENINPUT UI dim status + * + * @since S60 v4.0 + * @return ETrue if PENINPUT is visible, EFalse otherwise + */ + TBool IsDimmed(); + + /** + * Get the all support input mode + * + * @since S60 v4.0 + * @return input mode + */ + TInt SupportInputMode(); + + /** + * Set input language Id + * + * @since S60 v4.0 + * @param aLanguage The input language Id + * @return The operation result code.KErrNone if successfully. + */ + TInt SetInputLanguage( TInt aLanguage ); + + /** + * Set UI layout id. It will create the UI by the Id + * + * @since S60 v4.0 + * @param aId The layout Id + * @return The operation result code.KErrNone if successfully. + */ + TInt SetUiLayoutId(TUid aId); + + /** + * Set UI layout id + * + * @since S60 v4.0 + * @param aId The layout Id + * @param aData The data associated with the layout creation + * @return The operation result code + */ + TInt SetUiLayoutId(TUid aId,const TDesC8& aData); + + /** + * Set UI layout position + * + * @since S60 v4.0 + * @param aPos The layout position + * @return The operation result code. KErrNone if successfully. + */ + TInt SetUiLayoutPos(const TPoint& aPos); + + /** + * get UI layout position + * + * @since S60 v4.0 + * @return The layout position + */ + TPoint UiLayoutPos(); + + /** + * get UI layout size + * + * @since S60 v4.0 + * @return The layout size + */ + TSize UiLayoutSize(); + + /** + * Called when resource changed, e.g, screen size changed. + * To inform layout that resource change event. + * + * @since S60 v4.0 + * @param aData The data associated with size change event + */ + void ResourceChanged(TInt aType); + + /** + * Activate/Deactivate the layout + * + * @since S60 V4.0 + * @param aFlag The activation flag. ETrue if activated + */ + void ActivateLayout(TBool aFlag); + + /** + * Get server event data. + * When server oberver got a event notification, it calls this to get data + * + * @since S60 V4.0 + * @param aBuf buf to save the event data on return + * @return result code. KErrNone if data got. If the length of aBuf is + * smaller than server data, data is not copied, return value is the + * required data length. KNullDesC is returned if no data in server side + */ + TInt GetServerEventData(TDes& aBuf); + + /** + * Get current pended server event number + * + * @since S60 V4.0 + * @return The current pended event number in server side + */ + TInt ServerEventDataNum(); + + /** + * Add server observer. An observer will be notified when server has event + * + * @since S60 V4.0 + * @param aObserver The server observer + */ + void AddPeninputServerObserverL( + MPeninputServerEventHandler* aObserver); + + + /** + * Remove all pen input observer + * + * @since S60 V5.0 + */ + void RemovePeninputServerObserver(); + + /** + * Remove pen input observer + * + * @since S60 V5.0 + * @param aObserver The observer to be removed + */ + void RemovePeninputServerObserver(MPeninputServerEventHandler* aObserver); + + /* + * Set display mode. This must be called before any UI layout created. + * Otherwise, no change happends. + * + * @since S60 V4.0 + * @param aMode The display mode + * @param aMaskMode The display mode for mask device + */ + void SetDisplayMode(TDisplayMode aDisplayMode, + TDisplayMode aMaskDisplayMode); + /* + * Clear server events, all pending events for current session is cleared. + * It's used when current focus changed and previous server event is out of date. + * + * @since S60 V4.0 + */ + void ClearServerEvent(); + + /** + * Return requried Ime plugin list + * + * @since S60 V4.0 + * @param aLanguage The required supporting language + * @param aPluginMode The required supporting mode + * @param aImplmentationIds A reference to a client owned array + * which will be filled with IME plugin implementation. + */ + void GetImePluginIdListL(TInt aLanguage, + TInt aPluginMode, + RArray& aImplmentationIds); + + /** + * Return all supporing touch input languages + * + * @since S60 V4.0 + * @param aLanguageLists A reference to a client owned array + * which will be filled with supporting languages. + */ + void PenSupportLanguagesL(RArray& aLanguageLists); + /** + * Asynchronous request which must be issued by every client after + * Connect(). When this request completes it is the clients responsibility + * to react to the message. Only one + * client can receive this notification. Client must call CancelMessageNotification() + * before closing the session. + * + * @since S60 v4.0 + *@param aStatus Message Id of the observing active object + */ + void RequestMessageNotification( TRequestStatus& aStatus ); + + /** + * Cancels the asynchronous request issued by RequestMessageNotification(). + * + * @since S60 v4.0 + */ + void CancelMessageNotification(); + + /** + * Set foreground application session. Only foreground app session + * can change the pen input UI attribute. Such command from other session + * will be discarded by server. + * + * @since S60 V4.0 + * @param aMustConnectFlag If ETrue, the set will always success. If EFalse, + * operation depends on whether current app is the foreground application. + */ + TBool SetForeground(TBool aMustConnectFlag); + + /** + * Indicates current client lost foregound. + * + * @since S60 V5.0 + */ + void LoseForeground(); + + /** + * Test whether this session is the forground application session + * + * @since S60 V4.0 + * @return ETrue if current session is foreground application session. + */ + TBool IsForeground(); + + /** + * Add pen input UI activation observer. Only one handler can be added. If + * need to change the handler, the old handler must be first removed. + * + * @since S60 V4.0 + * @param aHandler The callback handler when pen input UI activated/deactivated + * @param aType The pen ui type to be handled. The available type is defined in + * TPenInputUiType + * @return KErrNone if sucessfully. + */ + TInt AddPenUiActivationHandler(MPenUiActivationHandler* aHandler, + TInt aType); + + /** + * Remove all pen input UI activation observer + * + * @since S60 V4.0 + * + */ + void RemovePenUiActivationHandler(); + + /** + * Remove a pen input UI activation observer + * + * @since S60 V5.0 + */ + + void RemovePenUiActivationHandler(MPenUiActivationHandler *aHandler); + + + void ActivatePeninputInNotesL(); + void DimUiLayout(TBool aFlag); + + void BackgroudDefaultOri( TInt aOri ); + + /** + * Inform server that client has handled the UI notification event + * + * @since S60 V4.0 + */ + void Continue(); + + /* + * To disable specified layouts at a time. + * + * @since S60 V4.0 + * @param aDisableLayout The disabled layouts.Can disable serveral layouts one time. + */ + void SetDisabledLayout( TInt aLayouts ); + + /* + * To get disable specified layouts at a time. + * + * @since S60 V4.0 + * @return The disabled layouts. + */ + TInt DisabledLayout(); + + /* + * Update the application information. + * + * @since S60 V5.0 + * @param aInfo The application information. + * @param aType The information type + */ + void UpdateAppInfo(const TDesC& aInfo, TPeninputAppInfo aType); + + void HandleServerExit(); + void OnServerReady(TBool aFlag = ETrue); + TBool IsForegroundSession(); + //void SetForegroundFlag(TBool aFlag); + void FinalClose(); + /* + * Enable/disable the auto open feature. When auto open feature is on, Focus change event + * will open the pen UI automatically. The feature is on by default. When disabled, + * all editor in current app won't have the auto-open feature. + * + * @since S60 V5.0 + * @param aFlag ETrue to enable the feature, EFalse to disable the feature. + */ + void SetAutoOpen(TBool aFlag); + + /* + * Get the auto-open feature flag. + * + * @since S60 V5.0 + * @return ETrue if auto-open feature is on, otherwise EFalse. + */ + TBool AutoOpen(); + + /* + * Set the application prefferred input mode. Application can set this mode to + * override the mode selected by Fep. + * + * @since S60 V5.0 + */ + void SetPreferredUiMode(TPluginInputMode aMode); + + /* + * Get the application prefferred input mode. + * + * @since S60 V5.0 + * @return The application preferred mode. EPluginInputModeNone if app does set it. + */ + TPluginInputMode PreferredUiMode(); + + void SetGlobalNotes(TBool aFlag); + + void SetInternalPopUp(TBool aFlag); + void SetEditorPriority(TInt aFlag); + + void ClearTouchUI(); + void SetResourceChange(TBool aFlag); + + /** + * Starts the server thread + * + * @since S60 v4.0 + *@return KErrNone if server was created successfully + * KErrAlreadyExists if the server is already running + * otherwise one of the system wide error codes + */ + TInt StartThreadL(); + + //TInt ConnectAsync(TRequestStatus& status); + TInt StartThreadAsyncL(); + void AddObserver(); + TBool ServerReady(); + void OnServerStarted(TInt); + +private: + /** + * Constructor + * + * @since S60 v4.0 + */ + RPeninputServerImpl(); + + void ConstructL(const TUid& aUid,TRequestStatus* aStatus); + + TInt DoConnectL(); + TInt DoConnectL(TRequestStatus* aStatus); + + void GetUiLayoutPosAndSize(); + + void DimUiLayoutL(TBool aFlag); + +private: // New functions + + + void ReadIntArrayFromBufL(const TDesC8& aBuf, RArray& aResult); + + void DoAddPenUiActivationHandler(); +private: // Data + /** + * server observer + */ + CPeninputServerObserver* iObserver; + + /** + * Ui notification handler. + */ + //CPenUiNotificationHandler* iPenUiNotificationHandler; + RArray iPenUiNotificationHandler; + //TUiNotificationHandler* iPenUiNotificationHandler + + /** + * The type which to be monitored by the client. + */ + //TInt iRegistedType; + /** + * Indicates whether current client is the foreground application. + */ + TBool iIsForegroundSession; + /** + * server active flag + */ + TBool iServerExit; + + TBool iLaunchServer; + + //CActiveSchedulerWait* iWaitScheduler; + CPeninputServerWaiter * iWaitScheduler; + + TInt iCurPenUiType; + + CPenUiBackgroundWnd* iBackgroundCtrl; + + TBool iAutoOpenFlag; + + TPluginInputMode iAppPrefferedUiMode; + + TPoint iPosition; + TSize iSize; + TBool iGlobalNotes; + TBool iInternalPopup; + TInt iPriority; + TBool iResourceChange; + TBool iStartServerOver; + CWaitingServerAo* iWaiterAo; + TRequestStatus* iPendingRequest; + TBool iServerReady; +}; + + +class CWaitingServerAo : public CActive + { +public: + + CWaitingServerAo(RPeninputServerImpl* aClient); + + /** + * From CActive + * will be called when stroke timer ends + * + * @since S60 v4.0 + */ + void RunL(); + + /** + * From CActive + * will be called if RunL leaves + * + * @since S60 v4.0 + */ + TInt RunError(TInt aError); + + /** + * From CActive + * will be called when stroke timer has been cancelled + * + * @since S60 v4.0 + */ + void DoCancel(); + + TRequestStatus& RequestStatus(); + + RPeninputServerImpl* iClient; + }; + + +NONSHARABLE_CLASS(CPenInputSingletonClient) : public CCoeStatic + { + public: + //static CPenInputSingletonClient* NewL(RPeninputServer* aServer); + //private: + CPenInputSingletonClient(const TUid& aUid,RPeninputServerImpl* aServer); + ~CPenInputSingletonClient(); + //void ConstructL(); + RPeninputServerImpl* GetSingletonServer(); + + TInt DecreaseRef() ; + + TBool IsValid(); + void SetInvalid(); + void ReplaceServer(RPeninputServerImpl* aServer); + private: + RPeninputServerImpl* iServer; + TInt iReferrence; + TBool iIsValid; + }; + + +NONSHARABLE_CLASS(CPenUiBackgroundWnd) : public CCoeControl + { +public: // Constructors and destructor + /** + * C++ default constructor. + * @param aAppUi AppUi of Eikon server. + */ + static CPenUiBackgroundWnd* NewL(RWindowGroup& aWndGroup,TInt aBmpHandle); + +private: + /** + * C++ default constructor. + * @param aAppUi AppUi of Eikon server. + */ + CPenUiBackgroundWnd(RWindowGroup& aWndGroup); + /** + * Two-phased constructor. + */ + void ConstructL(TInt aBmpHandle); +public: + /** + * Destructor. + */ + ~CPenUiBackgroundWnd(); + +public: // New functions + /** + * Called from akncapserver appui to run fastswap. + */ + + /** + * Show pen UI with priority. + */ + void Show(const TRect& aRect, TBool aGlobalNotes, + TBool aInternal, TInt aPriority, TBool aResource); + + /** + * Called from akncapserver appui to close fastswap. + */ + void Hide(); + +public: // Functions from base classes. + + /** + * From CCoeControl + * Function where control's drawing is done. + * + * @param aRect Control's area. + */ + void Draw( const TRect &aRect ) const; +protected: + void CreateBitmapL(TInt aBmpHandle); +private: // Data + + RWindowGroup& iWndGroup; + CFbsBitmap * iBitmap; + CFbsBitmap *iBitmapCpoy; + TInt iBmpHandle; + }; + +//end of class RPeninputServerImpl +#endif //R_RPENINPUTSERVER_IMPL_H + +// End of File