/*
* Copyright (c) 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:  
*
*/


#ifndef LOADGEN_MODEL_H
#define LOADGEN_MODEL_H

// INCLUDES
#include <e32std.h>
#include <e32base.h>
#include <apgcli.h>

#include "loadgen_loadattributes.h"

// FORWARD DECLARATIONS
class CLoadGenMainContainer;
class CLoadGenGraphsContainer;
class CEikonEnv;
class CLoadBase;


typedef CArrayFixSeg<CLoadBase*> CLoadItemList;

const TUint KMaxCPUs = 4;
const TUint KHalFunction_EKernelHalNumLogicalCpus = 16; //EKernelHalNumLogicalCpus
const TUint KHalFunction_EKernelHalLockThreadToCpu = 19; //EKernelHalLockThreadToCpu

// CLASS DECLARATIONS

class TLoadGenSettings
    {
public:
    };

class CLoadGenModel : public CActive
    {
private:
    enum TContainerDrawState
        {
        EDrawStateInvalid = -1,
        EDrawStateMain
        };

public:
    static CLoadGenModel* NewL();
    ~CLoadGenModel();
    void ActivateModelL();
    void DeActivateModelL();

private:
    void RunL();
    void DoCancel();
        
private:
    CLoadGenModel();
    void ConstructL();
    void LoadSettingsL();
    void EditLoadL(CLoadBase* aItem);
    void DoStartNewLoadL(TInt aCommand);
    void AppendToLoadItemListL(CLoadBase* aItem);
    void DeleteFromLoadItemListL(TInt aIndex);
    void SuspendOrResumeFromLoadItemListL(TInt aIndex);
    void DeleteAllLoadItems();
    void RefreshViewL(TBool aClearSelection=ETrue);
    CDesCArray* ListOfAllAppsL();    
    
public:
    void StopAllLoadItemsL();
    void SuspendAllLoadItemsL();
    void ResumeAllLoadItemsL();
            
    TInt LoadItemCount() const;
    void ShowItemActionMenuL();
    void StopSelectedOrHighlightedItemsL();
    void SuspendOrResumeSelectedOrHighlightedItemsL();

    CDesCArray* GenerateListBoxItemTextArrayL();
    void StartNewLoadL(TInt aCommand);
    void SaveSettingsL();
    void SetMainContainer(CLoadGenMainContainer* aContainer);
    TInt LaunchSettingsDialogL();
    inline TLoadGenSettings& Settings() { return iSettings; }
    inline CEikonEnv* EikonEnv() { return iEnv; }
    inline RApaLsSession& LsSession() { return iLs; }
    inline CLoadGenMainContainer* MainContainer() { return iMainContainer; }
    inline TBool LoadItemsExists() { return iLoadItemList->Count() > 0; } 


public:
    static TThreadPriority SettingItemToThreadPriority(TInt aIndex);
    static void SettingItemToThreadDescription(TInt aIndex, TDes& aBuf);
    static void SettingItemToSourceDescription(TInt aIndex, TDes& aBuf);
    static TInt MilliSecondsToMicroSeconds(TInt aMilliSeconds, TInt aRandomVariance=0);
    static TInt RandomNumber(TInt aMin, TInt aMax);
    static TSize ScreenSize();

private:
    RTimer                          iTimer;
    CLoadGenMainContainer*          iMainContainer;
    CEikonEnv*                      iEnv;
    TLoadGenSettings                iSettings;
    RApaLsSession                   iLs;
    TInt                            iDrawState;
    CLoadItemList*                  iLoadItemList;
    TInt                            iReferenceNumber;
    TCPULoadAttributes              iCpuLoadAttributes;
    TMemoryEatAttributes            iMemoryEatAttributes;
    TPhoneCallAttributes            iPhoneCallAttributes;
    TNetConnAttributes              iNetConnAttributes;
    TKeyPressAttributes             iKeyPressAttributes;
    TMessageAttributes              iMessageAttributes;
    TApplicationsAttributes			iApplicationsAttributes;
    TPhotoCaptureAttributes         iPhotoCaptureAttributes;
    TBluetoothAttributes            iBluetoothAttributes;
    TPointerEventAttributes         iPointerEventAttributes;
    static TInt64                   iRandomNumberSeed;
    };
 

#endif
