diff -r 000000000000 -r 7f656887cf89 libraries/qr3/inc/KernLbxModel.h --- /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 + +#include + +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 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 iItemData; + +private: + TInt iCurrentList; + RArray iThreadHandleArray; + CUndertaker* iUnd; + TLinearOrder 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 iThreadIds; + }; + +struct SFeature + { + TInt iFeature; + TInt iErr; + TUint32 iInfo; + }; + +_LIT(Klf, "\n"); +_LIT(Klflf, "\n\n"); + +#endif