--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/libraries/qr3/inc/KernLbxModel.h Wed Jun 23 15:52:26 2010 +0100
@@ -0,0 +1,285 @@
+// KernLbxModel.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 KERNLBXMODEL_H
+#define KERNLBXMODEL_H
+
+#include <e32hashtab.h>
+
+#include <W32STD.H>
+
+class CKernListBoxData;
+class TObjectKernelInfo;
+class TThreadKernelInfo;
+class CUndertaker;
+class CDlgProcessInfo;
+class RMemoryAccess;
+class CApaWindowGroupName;
+class RClogger;
+class MKernListBoxDataDelegate;
+class RWsSession;
+
+NONSHARABLE_CLASS(CKernListBoxModel) : public CBase, public TSwap, public TKey
+ {
+public: // External interface
+ CKernListBoxModel(RMemoryAccess& aMemAccess);
+ ~CKernListBoxModel();
+ void ConstructL();
+ void SetCurrentListL(TInt aCurrentList);
+ TInt GetCurrentList() const;
+ void RefreshDataL(TInt aIndex=-1); // -1 means refresh all
+
+ void DumpToCloggerL(RClogger& aClogger);
+ void CloseAllThreadHandles();
+ void SummaryInfoL(TDes& aBuf);
+ void Sort(TLinearOrder<CKernListBoxData> aOrder);
+ void SetInfoChangedCallback(TInt aIndex, const TCallBack& aCallback);
+
+public:
+ TInt Count() const;
+ TInt ItemIdIndex(TInt aItemId) const;
+ CKernListBoxData* RetrieveDataL(TInt aItemIndex);
+ CKernListBoxData* RetrieveDataLC(TInt aItemIndex);
+ virtual void ModelBeginUpdateLC();
+ virtual void ModelEndUpdateL();
+ virtual void RemoveAllDataL();
+ virtual void DataUpdatedL(TInt aIndex);
+ virtual void RemoveDataL(TInt aItemIndex);
+ virtual void Sort();
+
+
+protected: // From TSwap,TKey
+ void Swap(TInt aLeft,TInt aRight) const;
+ void WtfSwap(TInt aLeft,TInt aRight); // How on earth can Swap be const??
+ TInt Compare(TInt aLeft,TInt aRight) const;
+
+public: // For helpers to use, not for public use by client
+ void ThreadDiedL(TInt aHandle);
+ virtual void NewKernDataL(TInt aType, TObjectKernelInfo* aInfo); // aInfo ownership transferred at END of function
+ RMemoryAccess& MemAccess() { return iMemAccess; }
+
+protected:
+ void DoNewKernDataL(TInt aType, TObjectKernelInfo* aInfo, MKernListBoxDataDelegate* aDelegate);
+
+protected:
+ RPointerArray<CKernListBoxData> iItemData;
+
+private:
+ TInt iCurrentList;
+ RArray<TInt> iThreadHandleArray;
+ CUndertaker* iUnd;
+ TLinearOrder<CKernListBoxData> iSort;
+ RWsSession* iWsSession; // Needed to keep the window group data objects valid
+ RBuf iTempBuf1, iTempBuf2; // So that calls to FormatL don't need to allocate so much
+ TCallBack iInfoChangedCallback;
+ CKernListBoxData* iCallbackData;
+ RMemoryAccess& iMemAccess;
+ friend class CKernListBoxData;
+ };
+
+class MKernListBoxDataDelegate
+ {
+public:
+ virtual void DataObjectAboutToDestruct(CKernListBoxData* aData) =0;
+ virtual void FormatChangedL(CKernListBoxData* aData, const TDesC& aTitle, const TDesC& aInfo) =0;
+ virtual TPtrC NameForSortPurposes() const =0;
+ };
+
+
+NONSHARABLE_CLASS(CKernListBoxData) : public CBase
+ {
+public:
+ CKernListBoxData(CKernListBoxModel* aModel);
+ ~CKernListBoxData();
+ void FormatL(TObjectKernelInfo* aInfo, RBuf& aTempBuf1, RBuf& aTempBuf2);
+ virtual void DumpToCloggerL(RClogger& aClogger, TInt i, TInt count);
+
+ TInt ExeNameForSid(TUint aSid, RBuf& aName);
+
+public:
+ void Open();
+ void Close();
+ //TInt RefCount() const;
+ TInt ItemId() const;
+ void SetItemId(TInt aItemId);
+ void ConstructL();
+ void SetDelegate(MKernListBoxDataDelegate* aOwner);
+ MKernListBoxDataDelegate* Delegate();
+ const MKernListBoxDataDelegate* Delegate() const;
+ CKernListBoxModel& Model();
+
+public: // Things for the dialog to use
+ virtual TBool SupportsCommand(TInt aCommand);
+ void KillL();
+ void InfoForDialogL(RBuf& aTitle, RBuf& aText, TBool aRefresh); // Pass in false to use cached values if available
+ TAny* GetHandleL();
+
+protected:
+ virtual void DoInfoForDialogL(RBuf& aTitle, RBuf& aText, TDes* aTemp);
+ virtual void DoFormatL(TObjectKernelInfo* aInfo, RBuf& name, RBuf& more, TInt& itemId);
+
+public:
+ TInt iType;
+ TObjectKernelInfo* iInfo; // Either a TObjectKernelInfo* or a SOpenFile* etc
+private:
+ TInt iItemId;
+ MKernListBoxDataDelegate* iDelegate;
+ TInt iRefCount;
+ CKernListBoxModel* iModel; // This is necessary so we can figure out who the parent of a process is, but it does mean a particualar instance can only be used by one model at once (which is not an issue for us)
+ };
+
+NONSHARABLE_CLASS(COpenFilesListBoxData) : public CKernListBoxData
+ {
+public:
+ COpenFilesListBoxData(CKernListBoxModel* aModel);
+ virtual void DoFormatL(TObjectKernelInfo* aInfo, RBuf& name, RBuf& more, TInt& itemId);
+ virtual void DumpToCloggerL(RClogger& aClogger, TInt i, TInt count);
+ virtual void DoInfoForDialogL(RBuf& aTitle, RBuf& aText, TDes* aTemp);
+ };
+
+NONSHARABLE_CLASS(CThreadsListBoxData) : public CKernListBoxData
+ {
+public:
+ CThreadsListBoxData(CKernListBoxModel* aModel);
+ virtual void DoFormatL(TObjectKernelInfo* aInfo, RBuf& name, RBuf& more, TInt& itemId);
+ virtual void DumpToCloggerL(RClogger& aClogger, TInt i, TInt count);
+ virtual void DoInfoForDialogL(RBuf& aTitle, RBuf& aText, TDes* aTemp);
+ virtual TBool SupportsCommand(TInt aCommand);
+ };
+
+NONSHARABLE_CLASS(CFeatRegListBoxData) : public CKernListBoxData
+ {
+public:
+ CFeatRegListBoxData(CKernListBoxModel* aModel);
+ virtual void DoFormatL(TObjectKernelInfo* aInfo, RBuf& name, RBuf& more, TInt& itemId);
+ virtual void DumpToCloggerL(RClogger& aClogger, TInt i, TInt count);
+ virtual void DoInfoForDialogL(RBuf& aTitle, RBuf& aText, TDes* aTemp);
+ };
+
+NONSHARABLE_CLASS(CServerListBoxData) : public CKernListBoxData
+ {
+public:
+ CServerListBoxData(CKernListBoxModel* aModel);
+ virtual void DoFormatL(TObjectKernelInfo* aInfo, RBuf& name, RBuf& more, TInt& itemId);
+ virtual void DumpToCloggerL(RClogger& aClogger, TInt i, TInt count);
+ virtual void DoInfoForDialogL(RBuf& aTitle, RBuf& aText, TDes* aTemp);
+ virtual TBool SupportsCommand(TInt aCommand);
+ };
+
+NONSHARABLE_CLASS(CHalListBoxData) : public CKernListBoxData
+ {
+public:
+ CHalListBoxData(CKernListBoxModel* aModel);
+ virtual void DoFormatL(TObjectKernelInfo* aInfo, RBuf& name, RBuf& more, TInt& itemId);
+ virtual void DumpToCloggerL(RClogger& aClogger, TInt i, TInt count);
+ virtual void DoInfoForDialogL(RBuf& aTitle, RBuf& aText, TDes* aTemp);
+ };
+
+NONSHARABLE_CLASS(CWindowGroupListBoxData) : public CKernListBoxData
+ {
+public:
+ CWindowGroupListBoxData(CKernListBoxModel* aModel);
+ ~CWindowGroupListBoxData();
+ virtual void DoFormatL(TObjectKernelInfo* aInfo, RBuf& name, RBuf& more, TInt& itemId);
+ virtual void DumpToCloggerL(RClogger& aClogger, TInt i, TInt count);
+ virtual void DoInfoForDialogL(RBuf& aTitle, RBuf& aText, TDes* aTemp);
+ };
+
+NONSHARABLE_CLASS(CMsgQueListBoxData) : public CKernListBoxData
+ {
+public:
+ CMsgQueListBoxData(CKernListBoxModel* aModel);
+ virtual void DoFormatL(TObjectKernelInfo* aInfo, RBuf& name, RBuf& more, TInt& itemId);
+ virtual void DumpToCloggerL(RClogger& aClogger, TInt i, TInt count);
+ virtual void DoInfoForDialogL(RBuf& aTitle, RBuf& aText, TDes* aTemp);
+ };
+
+NONSHARABLE_CLASS(CMutexListBoxData) : public CKernListBoxData
+ {
+public:
+ CMutexListBoxData(CKernListBoxModel* aModel);
+ virtual void DoFormatL(TObjectKernelInfo* aInfo, RBuf& name, RBuf& more, TInt& itemId);
+ virtual void DumpToCloggerL(RClogger& aClogger, TInt i, TInt count);
+ virtual void DoInfoForDialogL(RBuf& aTitle, RBuf& aText, TDes* aTemp);
+ };
+
+NONSHARABLE_CLASS(CSemaphoreListBoxData) : public CKernListBoxData
+ {
+public:
+ CSemaphoreListBoxData(CKernListBoxModel* aModel);
+ virtual void DoFormatL(TObjectKernelInfo* aInfo, RBuf& name, RBuf& more, TInt& itemId);
+ virtual void DumpToCloggerL(RClogger& aClogger, TInt i, TInt count);
+ virtual void DoInfoForDialogL(RBuf& aTitle, RBuf& aText, TDes* aTemp);
+ };
+
+NONSHARABLE_CLASS(CTimerListBoxData) : public CKernListBoxData
+ {
+public:
+ CTimerListBoxData(CKernListBoxModel* aModel);
+ virtual void DoFormatL(TObjectKernelInfo* aInfo, RBuf& name, RBuf& more, TInt& itemId);
+ virtual void DumpToCloggerL(RClogger& aClogger, TInt i, TInt count);
+ virtual void DoInfoForDialogL(RBuf& aTitle, RBuf& aText, TDes* aTemp);
+ };
+
+NONSHARABLE_CLASS(CUndertaker) : public CActive
+ {
+public:
+ CUndertaker(CKernListBoxModel& aModel);
+ ~CUndertaker();
+ void RunL();
+ void DoCancel();
+ void Register();
+
+ CKernListBoxModel& iModel;
+ RUndertaker iUnd;
+ TInt iHandle;
+ };
+
+struct SHalInfo
+ {
+ TInt iProperties;
+ TInt iValue;
+ TInt iAttribute;
+ };
+
+struct SWgInfo
+ {
+ TInt iHandle;
+ CApaWindowGroupName* iName;
+ RWsSession* iSession; // Doesn't really belong here (as it will be the same for all objects) but it means the data objects don't have to have a handle to it
+ };
+
+struct SDataType
+ {
+ TBuf<256> iMime; // 256 is KMaxDataTypeLength
+ TFileName iRecog;
+ TFileName iApp;
+ TUid iAppUid;
+ };
+
+struct SOpenFile
+ {
+ TFileName iName;
+ TInt iNumThreads;
+ TFixedArray<TThreadId, 10> iThreadIds;
+ };
+
+struct SFeature
+ {
+ TInt iFeature;
+ TInt iErr;
+ TUint32 iInfo;
+ };
+
+_LIT(Klf, "\n");
+_LIT(Klflf, "\n\n");
+
+#endif