libraries/qr3/inc/Utils.h
author Tom Sutcliffe <thomas.sutcliffe@accenture.com>
Thu, 26 Aug 2010 00:49:35 +0100
changeset 37 534b01198c2d
parent 0 7f656887cf89
permissions -rw-r--r--
Added ENotifyKeypresses and ECaptureCtrlC flags to CCommandBase. Commands can now get keypresses and handle ctrl-C via callbacks instead of having to implement custom active objects. As part of this extended the CCommandBase extension interface to MCommandExtensionsV2 for the new virtual functions KeyPressed(TUint aKeyCode, TUint aModifiers) and CtrlCPressed(). sudo now cleans up correctly by using ECaptureCtrlC.

// Utils.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 UTILS_H
#define UTILS_H

#include <fshell/QR3ProductPlugin.h>
#include <fshell/qr3dll.h>

void HR(TDes& aDes, TInt64 aSize); // Human readable formatting of aSize as a memory size (eg 1500 -> "1.46 KB")
void HR(TDes8& aDes, TInt64 aSize); 

TPtrC ToString(TProcessPriority aPriority);
TPtrC ToString(TThreadPriority aPriority);
TPtrC ToString(TExitType aType);
HBufC* ToStringL(SCapabilitySet& aCaps);
TPtrC ToString(User::TCritical aCritical);
TPtrC ToStringHal(TInt aHalAttribute);
void ToStringHalVal(TDes& aDes, TInt aHalAttribute, TInt aHalValue);

void PrettyName(TInt aType, TDes& aName); // aType is a TKernelObjectType

//extern const char*const* KKTraceFlags[];
TPtrC8 TraceFlagName(TInt aWord, TInt aBit);

extern char const* const* const KCloggerTags[];

//extern const char* KFileServerTraceFlags[];

class CEcomWatcher;

NONSHARABLE_CLASS(CDefaultProductPlugin) : public CBase, public MProductPlugin
	{
public:
	static void LoadProductPluginL();
	~CDefaultProductPlugin();

	// From MProductPluginV1
	TPtrC8 TraceFlagName(TInt aWord, TInt aBit);
	void FormatValue(TDes& aDes, TValueType aType, TInt aAttrib, TInt aVal);
	TUint32 GetDeviceType();
	TBool HandleErrorL(TError aType, TInt aErr);
	TKeyResponse OfferKeyEventL(TKeyEvent& aEvent, TEventCode aType);
	void RefreshTabL(TInt aTab);
	TBool DoDynInitOrDeleteCommandL(CQikCommand*& aCommand, const CCoeControl& aControlAddingCommands);
	void DoViewConstructL(CQikMultiPageViewBase* aParentView);
	void DoHandleControlEventL(CCoeControl *aControl, MCoeControlObserver::TCoeEvent aEventType);
	TBool ConsumeMemoryKeys(TBool aDisk, TDes& aCheckboxName, TInt& aUpKeyCode, TInt& aDownKeyCode, TInt& aLogKeyCode);
	void Release(TBool aAppIsShuttingDown);

	// From MProductPluginV2
	void EnablePanicChecking(TBool aEnable);
	TBool PanicCheckingIsEnabled();

	// From MProductPluginV3
	void GetFeatureUidsL(RArray<TUid>& aUids);

	// From MProductPluginV4
	TBool ConsumeMemoryKeys(TBool aDisk, TDes& aCheckboxName, TInt& aUpKeyCode, TInt& aUpScanCode, TInt& aDownKeyCode, TInt& aDownScanCode, TInt& aLogKeyCode, TInt& aLogScanCode);
	
	// Internal
	void EcomChangedL();
	void ConstructL();
	void DestroyPlugins();
	void RescanPluginsL();
	void LoadPluginL(TUid aImplUid, TInt aVersion);
	void DisablePanicCheckPushL(); // Disables panic checks, pushes an item onto the cleanupstack that restores them
	static void EnablePanicCheck(TAny* aSelf);

private:
	REComSession iEcom;
	RImplInfoPtrArray iEcomPluginList;
	RPointerArray<MProductPlugin> iPlugins;
	MProductPluginV1* iPluginForThisDevice; // Not owned, may be NULL. Is explicitly typed to be MProductPluginV1 to remind people they have to check the version before calling any non-V1 functions
	TInt iPluginForThisDeviceVersion; // Will be 0 if iPluginForThisDevice == NULL
	RArray<TUid> iPluginDestructors;	
	TCallBack iPluginsChangedCallback;
	CEcomWatcher* iEcomChangeWatcher;
	CQikMultiPageViewBase* iParentView;
	TBool iShuttingDown;
	};

#ifdef __DLL__
#define gPlugin ((CDefaultProductPlugin*)Dll::Tls())
#else
extern CDefaultProductPlugin* gPlugin;
#endif

void StartProfilerL();
TBool IsProfilerRunning();
void StopProfiler();

TUint CriticalToFlags(User::TCritical aCrit);
User::TCritical FlagsToCritical(TUint aFlags);


#endif