/*
* Copyright (c) 2002-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: CSysApKeyManagement class definition.
*
*/
#ifndef SYSAPKEYMANAGEMENT_H
#define SYSAPKEYMANAGEMENT_H
// INCLUDES
#include <sysapkeyhandlerplugininterface.h>
// FORWARD DECLARATIONS
class RWindowGroup;
class MSysapCallback;
// DATA TYPES
/**
* KeyManagement class for Sysap Key Event Framework
* Handles Virtual KeyEvents with Plugins
*
* @since S60 3.0
*/
class CSysApKeyManagement: public CBase
{
private: // data types
class CSysApPluginInfo : public CBase
{
public: // construction
/**
* Constructor.
*
* @param aPluginUid UID of the plugin that this object represents
*/
CSysApPluginInfo( TUid aPluginUid );
/**
* Destructor
*/
virtual ~CSysApPluginInfo();
private:
/**
* C++ default constructor. Prohibitten
*/
CSysApPluginInfo();
public: // data
/**
* UID of the plug-in, used with non-resident plugins.
*/
TUid iPluginUid;
/**
* Instantiated plugin, used only with resident plug-ins.
* If NULL, the plug-in is interpreted to be non-resident.
* Own.
*/
CSysapKeyHandlerPlugin* iPtrPlugin;
/**
* The keys handled by this plugin.
*/
RArray<TKeyEvent> iKeys;
/**
* Handles of the captured keys.
*/
RArray<TInt32> iKeyHandles; //Handles of keys when capturing them
/**
* Handles of the captured up and down events.
*/
RArray<TInt32> iUpAndDownKeyHandles; //Handles of keys when capturing them
/**
* Tells if the plugin is a key provider plugin (plugin version 2)
*/
TBool iIsKeyProvider;
};
typedef RPointerArray<CSysApPluginInfo> RSysApPluginsArray;
public: // Constructors and destructor
/**
* Default constructor
*
* @param aRootWindowGroup reference of the root window group
* @param aSysApCallback reference to callback object
* @return pointer to the constructed object
*/
static CSysApKeyManagement* NewL(RWindowGroup& aRootWindowGroup, MSysapCallback& aSysApCallback);
/**
* Destructor
*/
virtual ~CSysApKeyManagement();
public: // New functions
/**
* Handles key events
*
* @param aKeyEvent contains information about the key event
* @param aType contains information about the type of the key event
* @return response
*/
TKeyResponse HandleKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType );
private: // New functions
/**
* C++ default constructor.
*
* @param aRWindowGroup the root window group
* @param aSysApCallback reference to callback object
* @return void
*/
CSysApKeyManagement(RWindowGroup& aRWindowGroup, MSysapCallback& aSysApCallback);
/**
* 2nd phase constructor.
*
* @return void
*/
void ConstructL( );
/**
* Registers in windows server for keys to capture.
*
* @return void
*/
void CaptureKeys();
/**
* Unregisters in windows server for keys to capture.
*
* @return void
*/
void CancelCaptureKeys();
/**
* Gets information of all suitable plugins
*
* @return void
*/
void GetPluginsL();
/**
* Finds a key in plugins. Helper function.
*
* @param aKeycode key to find
* @return index of key in array
*/
TInt FindKeyCode( TUint aKeycode );
/**
* Finds a key scancode in plugins. Helper function.
*
* @param aScanCode key scancode to find
* @return index of key in array
*/
TInt FindScanCode( TInt aScanCode );
/**
* Get keys from text
*
* @param aLex reference to the object to be used,
* @param aKeys reference to the array to be filled.
* @return error code
*/
TInt GetKeys( TLex8& aLex, RArray<TKeyEvent>& aKeys );
/**
* Check keys for duplicates and array emptiness
*
* @param aKeys reference to the array to be checked.
* @return error code
*/
TInt CheckKeys( RArray<TKeyEvent>& aKeys );
private: // Data
// Our window group from SysappUi
RWindowGroup& iRootWindowGroup;
// Reference to SysAp application callback
MSysapCallback& iSysApCallback;
/**
* Key handler plugins managed by SysAp.
*/
RSysApPluginsArray iSysApPlugins;
};
#endif //SYSAPKEYMANAGEMENT_H