diff -r 000000000000 -r 7f656887cf89 libraries/qr3/inc/QR3ProductPlugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libraries/qr3/inc/QR3ProductPlugin.h Wed Jun 23 15:52:26 2010 +0100 @@ -0,0 +1,116 @@ +// QR3ProductPlugin.h +// +// Copyright (c) 2010 Accenture. All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the "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: +// Accenture - Initial contribution +// +#ifndef QR3PRODUCTPLUGIN_H +#define QR3PRODUCTPLUGIN_H + +enum TPluginEnumValues + { + // More types will be added to this as we support more plugins. + // Anyone writing a plugin will be assigned a set of EPluginx values that they should use. + // This is to avoid conflicts + + EPlugin1CommandsOrControls = 0x3000, + EPlugin1Tabs = 0x3490, + EPlugin1Max = 0x3499, + + EPlugin2CommandsOrControls = 0x3500, + EPlugin2Tabs = 0x3990, + EPlugin2Max = 0x3999, + + EPluginMax = 0x9999 + }; + +#define KQr3ProductPluginEcomUid 0x102831C5 + +#ifdef __cplusplus +// We reuse this file as an HRH as well, so we have to escape everything for when we're being run by rcomp + +#include +#include // TCoeEvent +#include // For key handling stuff +#include // Ditto + +class CQikMultiPageViewBase; +class CQikCommand; +class CCoeControl; + +class MProductPluginV1 // This corresponds to version 1 in your ECOM rss file + { + // Do not add any virtual functions to this class! If you need to do that, create a new class MProductPluginV2 + // that derives from MProductPluginV1 and add them there. This ensures BC between plugin versions. If you do, be + // sure to update CDefaultProductPlugin to not call through to plugins too old to support the new methods. + // Or better yet talk to me first! -Tom +public: + enum TError + { + ECouldntSetDebugPort, + }; + + enum TValueType + { + EHal, + EKey, + EFeature, + }; + + // Non-UI device attributes + virtual TPtrC8 TraceFlagName(TInt aWord, TInt aBit)=0; + virtual void FormatValue(TDes& aDes, TValueType aType, TInt aAttrib, TInt aVal)=0; + virtual TUint32 GetDeviceType()=0; + virtual TBool HandleErrorL(TError aType, TInt aErr)=0; // Return ETrue to handle. + virtual TBool ConsumeMemoryKeys(TBool aDisk, TDes& aCheckboxName, TInt& aUpKeyCode, TInt& aDownKeyCode, TInt& aLogKeyCode)=0; + virtual void Release(TBool aAppIsShuttingDown)=0; // aAppIsShuttingDown may be useful for things with complex interactions with CEikonEnv + + // View related functions + virtual TKeyResponse OfferKeyEventL(TKeyEvent& aEvent, TEventCode aCode)=0; + virtual void DoViewConstructL(CQikMultiPageViewBase* aParentView)=0; + virtual TBool DoDynInitOrDeleteCommandL(CQikCommand*& aCommand, const CCoeControl& aControlAddingCommands)=0; + virtual void DoHandleControlEventL(CCoeControl *aControl, MCoeControlObserver::TCoeEvent aEventType)=0; + + virtual void RefreshTabL(TInt aTab)=0; + }; + +class MProductPluginV2 : public MProductPluginV1 + { +public: + virtual void EnablePanicChecking(TBool aEnable)=0; // This function should disable any device-specific crash capture behaviour that may be invoked as a result of calls to User::Panic. This is because QResources is about to call code that might panic, but it should continue regardless and not (eg) cause the phone to reboot on debug builds. + virtual TBool PanicCheckingIsEnabled()=0; + }; + +class MProductPluginV3 : public MProductPluginV2 + { +public: + virtual void GetFeatureUidsL(RArray& aUids)=0; // Populates aUids with any device-specific entries in feature registry + }; + +class MProductPluginV4 : public MProductPluginV3 + { +public: + virtual TBool ConsumeMemoryKeys(TBool aDisk, TDes& aCheckboxName, TInt& aUpKeyCode, TInt& aUpScanCode, TInt& aDownKeyCode, TInt& aDownScanCode, TInt& aLogKeyCode, TInt& aLogScanCode)=0; + }; + +/* + * MProductPlugin is always typedef'd to the latest plugin version + * This means that plugin writers can always derive from MProductPlugin, + * and not usually have to worry about it, but you get the BC advantages of + * versioning. If there is a new version which you don't want to implement when + * you rebuild your plugin, then just change the declaration to explicitly derive + * from the old version (eg change "class Cx : public CBase, public MProductPlugin" to + * "class Cx : public CBase, public MProductPluginV1" + * + * Remember that what you derive from must match the version number in your ecom rss + * file! (Strictly speaking, the rss version num must be <= the class derived) + */ +typedef MProductPluginV4 MProductPlugin; + +#endif +#endif