loadgen/ui/avkon/src/loadgen_editors.cpp
branchRCL_3
changeset 21 b3cee849fa46
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/loadgen/ui/avkon/src/loadgen_editors.cpp	Tue Aug 31 15:15:20 2010 +0300
@@ -0,0 +1,1437 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+// INCLUDE FILES
+#include "loadgen_editors.h"
+#include "loadgen_loadattributes.h"
+#include "loadgen.hrh"
+#include <loadgen.rsg>
+
+#include <AknForm.h> 
+#include <eikedwin.h> 
+#include <eikmfne.h>
+#include <AknPopupFieldText.h>
+#include <AknQueryValueText.h>
+#include <eikspane.h> 
+#include <akntitle.h> 
+#include <eikcapc.h>
+#include <e32hal.h> 
+
+// ===================================== MEMBER FUNCTIONS =====================================
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenLoadTypeEditorBase::CLoadGenLoadTypeEditorBase(TBool aEditingExisting):
+    iEditingExisting(aEditingExisting)
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenLoadTypeEditorBase::ConstructL(const TDesC& aTitleText)
+    {
+    CAknForm::ConstructL();
+
+    // set title text
+    CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane();
+    CAknTitlePane* tp = static_cast<CAknTitlePane*>( sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
+    tp->SetTextL( aTitleText );
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenLoadTypeEditorBase::PreLayoutDynInitL()
+    {
+    CAknForm::PreLayoutDynInitL();
+    }
+
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenLoadTypeEditorBase::OkToExitL(TInt /*aButtonId*/)
+    {
+    return ETrue;
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenLoadTypeEditorBase::HandleControlStateChangeL(TInt aControlId)
+    {
+    CAknForm::HandleControlStateChangeL(aControlId);
+    }
+    
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenLoadTypeEditorBase::RunQueryLD()
+    {
+    User::Panic(_L("Unk.form"), 222);
+    
+    return ETrue;
+    }
+               
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenLoadTypeEditorBase::DoRunQueryLD(TInt aResource)
+    {
+    return ExecuteLD(aResource);
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenLoadTypeEditorBase::InsertFieldAfterL(TInt aResourceId, TInt aControlId, TInt aPrevControlId)
+    {
+    CCoeControl* prevControl = Control(aPrevControlId);
+    __ASSERT_DEBUG(prevControl, User::Panic(_L("Form.Ctrl.Null"), 111));
+    TInt pos = FindLineIndex(*prevControl);
+    pos = pos + 1;
+    InsertLineL(pos, aResourceId);
+    Line(aControlId)->ActivateL();
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenLoadTypeEditorBase::UpdateFormL()
+    {
+    UpdatePageL(ETrue);
+    }
+               
+// --------------------------------------------------------------------------------------------
+// --------------------------------------------------------------------------------------------
+
+CLoadGenCPULoadEditor* CLoadGenCPULoadEditor::NewL(TCPULoadAttributes& aAttributes, TBool aEditingExisting)
+    {
+    CLoadGenCPULoadEditor* self = new(ELeave) CLoadGenCPULoadEditor(aAttributes, aEditingExisting);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;    
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenCPULoadEditor::~CLoadGenCPULoadEditor()
+    {
+    delete iCpuQueryValText;
+    delete iCpuTextArray;
+    delete iCPUsArray;
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenCPULoadEditor::CLoadGenCPULoadEditor(TCPULoadAttributes& aAttributes, TBool aEditingExisting) :
+    CLoadGenLoadTypeEditorBase(aEditingExisting), iAttributes(aAttributes)
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenCPULoadEditor::ConstructL()
+    {
+    CLoadGenLoadTypeEditorBase::ConstructL(_L("CPU load"));
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenCPULoadEditor::PreLayoutDynInitL()
+    {
+    CLoadGenLoadTypeEditorBase::PreLayoutDynInitL();
+
+    // load values to static editors
+    CAknPopupFieldText* edPriority = static_cast<CAknPopupFieldText*>(Control(ELoadGenCPULoadQueryPriority));
+    CAknPopupFieldText* edMode = static_cast<CAknPopupFieldText*>(Control(ELoadGenCPULoadQueryMode));
+    CAknPopupFieldText* edType = static_cast<CAknPopupFieldText*>(Control(ELoadGenCPULoadQueryType));
+    edPriority->SetCurrentValueIndex(iAttributes.iPriority);
+    edMode->SetCurrentValueIndex(iAttributes.iMode);
+    edType->SetCurrentValueIndex(iAttributes.iType);
+    
+    LoadCPUsL();
+
+    UpdateVisibilitiesOfFieldsL(ETrue);
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenCPULoadEditor::LoadCPUsL()
+    {
+    // if we are running in SMP environment
+    if (iAttributes.iCpuCount > 1)
+        {
+        // insert possibility to select which cpu the load is generated to
+        InsertFieldAfterL(R_CPULOAD_DLG_LINE_CPU, ELoadGenCPULoadQueryCpu, ELoadGenCPULoadQueryType);
+
+        iCPUsArray = new (ELeave) CDesCArrayFlat( 5 );
+        
+        // "Free scheduling" means that no specific cpu is selected. Scheduler desides
+        // which CPUu runs load thread at which time.
+        iCPUsArray->AppendL(_L("Free scheduling"));
+        
+        // add CPUs
+        for (int i = 0; i < iAttributes.iCpuCount; i++) 
+            {
+            TBuf<10> cpu;
+            _LIT(KCPU, "CPU%d");
+            cpu.Format(KCPU, i);
+            iCPUsArray->AppendL(cpu);
+            }
+        
+        // "All CPUs" means that one thread is started for each CPU.
+        iCPUsArray->AppendL(_L("All CPUs"));
+    
+        iCpuTextArray = CAknQueryValueTextArray::NewL();
+        iCpuTextArray->SetArray( *iCPUsArray );  
+        iCpuQueryValText = CAknQueryValueText::NewL();    
+        iCpuQueryValText->SetArrayL( iCpuTextArray );
+        // CPU is not defined, set "Free scheduling" as default selection in query list
+        if (iAttributes.iCpu < 0)
+            {
+            iCpuQueryValText->SetCurrentValueIndex(0);
+            }
+        // "All CPUs" selected. It is last choise in the selection list.
+        else if (iAttributes.iCpu == KCPUSelection_AllCPUs)
+            {
+            iCpuQueryValText->SetCurrentValueIndex(iCpuTextArray->MdcaCount()-1);
+            }
+        // CPU is defined, set the correct CPU as default selection in query list
+        else
+            {
+            // iCpu starts from zero (i.e. CPU0 is first CPU), but index zero
+            // in iCpuQueryValText is "Free scheduling", hence iCpu+1.
+            iCpuQueryValText->SetCurrentValueIndex(iAttributes.iCpu+1);
+            }
+
+        CAknPopupField* popup = static_cast<CAknPopupField*>(Control( ELoadGenCPULoadQueryCpu)); 
+        popup->SetQueryValueL( iCpuQueryValText );
+        }
+    }
+
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenCPULoadEditor::OkToExitL(TInt aButtonId)
+    {
+    if (aButtonId == EAknSoftkeyOk)
+        {
+        // store values from editors
+        CAknPopupFieldText* edPriority = static_cast<CAknPopupFieldText*>(Control(ELoadGenCPULoadQueryPriority));
+        CAknPopupFieldText* edMode = static_cast<CAknPopupFieldText*>(Control(ELoadGenCPULoadQueryMode));
+        CAknPopupFieldText* edType = static_cast<CAknPopupFieldText*>(Control(ELoadGenCPULoadQueryType));
+        CEikNumberEditor* edPeak = static_cast<CEikNumberEditor*>(ControlOrNull(ELoadGenCPULoadQueryLength));
+        CEikNumberEditor* edIdle = static_cast<CEikNumberEditor*>(ControlOrNull(ELoadGenCPULoadQueryIdle));
+        CEikNumberEditor* edVariance = static_cast<CEikNumberEditor*>(ControlOrNull(ELoadGenCPULoadQueryVariance));
+        
+        // we are running in SMP environment
+        if (iAttributes.iCpuCount > 1)
+            {
+            TInt currentValueIndex = iCpuQueryValText->CurrentValueIndex();
+            // user selected a specific CPU in which the load thread should be run in.
+            if (currentValueIndex == 0)
+                {
+                // User selected "Free scheduling"
+                iAttributes.iCpu = KCPUSelection_FreeScheduling;
+                }            
+            else if( currentValueIndex == iCpuTextArray->MdcaCount()-1 )
+                {
+                // User selected "All CPUs", which is the last item in the selection list
+                iAttributes.iCpu = KCPUSelection_AllCPUs;
+                }
+            else
+                {                
+                // iCpu should start from zero (CPU0 is the first cpu)
+                // but zero in currentValueIndex means "Free scheduling". CPU0 in
+                // currentValueIndex is at index 1, hence -1.
+                iAttributes.iCpu = currentValueIndex - 1;
+                }
+            }
+
+        iAttributes.iPriority = edPriority->CurrentValueIndex();
+        iAttributes.iMode = edMode->CurrentValueIndex();
+        iAttributes.iType = edType->CurrentValueIndex();
+        if (edPeak) iAttributes.iLength = edPeak->Number();
+        if (edIdle) iAttributes.iIdle = edIdle->Number();
+        if (edVariance) iAttributes.iRandomVariance = edVariance->Number();
+        }
+    
+    return ETrue;
+    }       
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenCPULoadEditor::UpdateVisibilitiesOfFieldsL(TBool aFormInit)
+    {
+    // filter based on selected cpu load type
+    CAknPopupFieldText* edType = static_cast<CAknPopupFieldText*>( Control( ELoadGenCPULoadQueryType ) );
+
+    if ( !aFormInit && edType->CurrentValueIndex() == ECpuLoadTypeContinuous )
+        {
+        // save values before deleting the items
+        CCoeControl* control = ControlOrNull( ELoadGenCPULoadQueryLength );
+        if ( control )
+            {
+            CEikNumberEditor* edPeak = static_cast<CEikNumberEditor*>( control );
+            iAttributes.iLength = edPeak->Number();
+            DeleteLine( ELoadGenCPULoadQueryLength );
+            control = NULL;
+            }
+        control = ControlOrNull( ELoadGenCPULoadQueryIdle );
+        if ( control )
+            {
+            CEikNumberEditor* edIdle = static_cast<CEikNumberEditor*>( control );
+            iAttributes.iIdle = edIdle->Number();
+            DeleteLine( ELoadGenCPULoadQueryIdle );
+            control = NULL;
+            }
+        control = ControlOrNull( ELoadGenCPULoadQueryVariance );
+        if ( control )
+            {
+            CEikNumberEditor* edVariance = static_cast<CEikNumberEditor*>( control );
+            iAttributes.iRandomVariance = edVariance->Number();
+            DeleteLine( ELoadGenCPULoadQueryVariance );
+            }
+        }
+    else if ( edType->CurrentValueIndex() == ECpuLoadTypePeriodic )
+        {
+        // insert new fields
+        InsertFieldAfterL(R_CPULOAD_DLG_LINE_PERIODIC_LENGTH, ELoadGenCPULoadQueryLength, ELoadGenCPULoadQueryType);
+        InsertFieldAfterL(R_CPULOAD_DLG_LINE_PERIODIC_IDLE, ELoadGenCPULoadQueryIdle, ELoadGenCPULoadQueryLength);
+        InsertFieldAfterL(R_CPULOAD_DLG_LINE_PERIODIC_VARIANCE, ELoadGenCPULoadQueryVariance, ELoadGenCPULoadQueryIdle);
+        
+        // load values to just created editors
+        CEikNumberEditor* edPeak = static_cast<CEikNumberEditor*>(Control(ELoadGenCPULoadQueryLength));
+        CEikNumberEditor* edIdle = static_cast<CEikNumberEditor*>(Control(ELoadGenCPULoadQueryIdle));
+        CEikNumberEditor* edVariance = static_cast<CEikNumberEditor*>(Control(ELoadGenCPULoadQueryVariance));
+        edPeak->SetNumber(iAttributes.iLength);
+        edIdle->SetNumber(iAttributes.iIdle);
+        edVariance->SetNumber(iAttributes.iRandomVariance);
+        }
+
+    UpdateFormL();
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenCPULoadEditor::HandleControlStateChangeL(TInt aControlId)
+    {
+    CLoadGenLoadTypeEditorBase::HandleControlStateChangeL(aControlId);
+
+    // update visibilities of fields    
+    if (aControlId == ELoadGenCPULoadQueryType)
+        {
+        UpdateVisibilitiesOfFieldsL();
+        }
+    }
+    
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenCPULoadEditor::RunQueryLD()
+    {
+    return CLoadGenLoadTypeEditorBase::DoRunQueryLD(R_CPULOAD_FORM_DIALOG);
+    }
+       
+// --------------------------------------------------------------------------------------------
+// --------------------------------------------------------------------------------------------
+
+CLoadGenMemoryEatEditor* CLoadGenMemoryEatEditor::NewL(TMemoryEatAttributes& aAttributes, TBool aEditingExisting)
+    {
+    CLoadGenMemoryEatEditor* self = new(ELeave) CLoadGenMemoryEatEditor(aAttributes, aEditingExisting);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;    
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenMemoryEatEditor::~CLoadGenMemoryEatEditor()
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenMemoryEatEditor::CLoadGenMemoryEatEditor(TMemoryEatAttributes& aAttributes, TBool aEditingExisting) :
+    CLoadGenLoadTypeEditorBase(aEditingExisting), iAttributes(aAttributes)
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenMemoryEatEditor::ConstructL()
+    {
+    CLoadGenLoadTypeEditorBase::ConstructL(_L("Memory eat"));
+    
+    // convert int64 vals to descs
+    iAttributes.iAmountDes.Copy(KNullDesC);
+    iAttributes.iRandomMinDes.Copy(KNullDesC);
+    iAttributes.iRandomMaxDes.Copy(KNullDesC);
+    
+    iAttributes.iAmountDes.AppendNum(iAttributes.iAmount);
+    iAttributes.iRandomMinDes.AppendNum(iAttributes.iRandomMin);
+    iAttributes.iRandomMaxDes.AppendNum(iAttributes.iRandomMax);
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenMemoryEatEditor::PreLayoutDynInitL()
+    {
+    CLoadGenLoadTypeEditorBase::PreLayoutDynInitL();
+
+    // load values to static editors
+    CAknPopupFieldText* edPriority = static_cast<CAknPopupFieldText*>(Control(ELoadGenMemoryEatQueryPriority));
+    CAknPopupFieldText* edSource = static_cast<CAknPopupFieldText*>(Control(ELoadGenMemoryEatQuerySource));
+    CAknPopupFieldText* edType = static_cast<CAknPopupFieldText*>(Control(ELoadGenMemoryEatQueryType));
+    CEikNumberEditor* edBuffer = static_cast<CEikNumberEditor*>(Control(ELoadGenMemoryEatQueryBuffer));
+    CEikNumberEditor* edIdle = static_cast<CEikNumberEditor*>(Control(ELoadGenMemoryEatQueryIdle));
+    CEikNumberEditor* edVariance = static_cast<CEikNumberEditor*>(Control(ELoadGenMemoryEatQueryVariance));
+
+    edPriority->SetCurrentValueIndex(iAttributes.iPriority);
+    edSource->SetCurrentValueIndex(iAttributes.iSource);
+    edType->SetCurrentValueIndex(iAttributes.iType);
+    edBuffer->SetNumber(iAttributes.iBuffer);
+    edIdle->SetNumber(iAttributes.iIdle);
+    edVariance->SetNumber(iAttributes.iRandomVariance);
+            
+    UpdateVisibilitiesOfFieldsL(ETrue);
+    UpdateAvailableMemoryL();
+    
+    // set source as dimmed if editing existing item
+    if (iEditingExisting)
+        {
+        SetLineDimmedNow(ELoadGenMemoryEatQuerySource, ETrue); 
+        }
+    }
+
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenMemoryEatEditor::OkToExitL(TInt aButtonId)
+    {
+    if (aButtonId == EAknSoftkeyOk)
+        {
+        // store values from editors
+        CAknPopupFieldText* edPriority = static_cast<CAknPopupFieldText*>(Control(ELoadGenMemoryEatQueryPriority));
+        CAknPopupFieldText* edSource = static_cast<CAknPopupFieldText*>(Control(ELoadGenMemoryEatQuerySource));
+        CAknPopupFieldText* edType = static_cast<CAknPopupFieldText*>(Control(ELoadGenMemoryEatQueryType));
+        CEikNumberEditor* edBuffer = static_cast<CEikNumberEditor*>(Control(ELoadGenMemoryEatQueryBuffer));
+        CEikNumberEditor* edIdle = static_cast<CEikNumberEditor*>(Control(ELoadGenMemoryEatQueryIdle));
+        CEikNumberEditor* edVariance = static_cast<CEikNumberEditor*>(Control(ELoadGenMemoryEatQueryVariance));
+
+        iAttributes.iPriority = edPriority->CurrentValueIndex();
+        iAttributes.iSource = edSource->CurrentValueIndex();
+        iAttributes.iType = edType->CurrentValueIndex();
+        iAttributes.iBuffer = edBuffer->Number();
+        iAttributes.iIdle = edIdle->Number();
+        iAttributes.iRandomVariance = edVariance->Number();
+
+
+        CEikEdwin* edAmount = static_cast<CEikEdwin*>(ControlOrNull(ELoadGenMemoryEatQueryAmount));
+        CEikEdwin* edRandomMin = static_cast<CEikEdwin*>(ControlOrNull(ELoadGenMemoryEatQueryRandomMin));
+        CEikEdwin* edRandomMax = static_cast<CEikEdwin*>(ControlOrNull(ELoadGenMemoryEatQueryRandomMax));
+
+        // get desc values and convert to int64
+        if (edAmount)
+            {
+            edAmount->GetText(iAttributes.iAmountDes);
+
+            TLex converter;
+            converter.Assign(iAttributes.iAmountDes);
+            User::LeaveIfError(converter.Val(iAttributes.iAmount));
+            }
+
+        if (edRandomMin)
+            {
+            edRandomMin->GetText(iAttributes.iRandomMinDes);
+
+            TLex converter;
+            converter.Assign(iAttributes.iRandomMinDes);
+            User::LeaveIfError(converter.Val(iAttributes.iRandomMin));
+            }
+
+        if (edRandomMax)
+            {
+            edRandomMax->GetText(iAttributes.iRandomMaxDes);
+
+            TLex converter;
+            converter.Assign(iAttributes.iRandomMaxDes);
+            User::LeaveIfError(converter.Val(iAttributes.iRandomMax));
+            
+            // swap min max values if they in wrong order
+            if (iAttributes.iRandomMin > iAttributes.iRandomMax)
+                {
+                TInt64 temp(iAttributes.iRandomMin);
+                iAttributes.iRandomMin = iAttributes.iRandomMax;
+                iAttributes.iRandomMax = temp; 
+                }
+            
+            }                        
+        }
+    
+    return ETrue;
+    }       
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenMemoryEatEditor::UpdateVisibilitiesOfFieldsL(TBool aFormInit)
+    {
+    // filter based on selected memory eat type
+    CAknPopupFieldText* edType = static_cast<CAknPopupFieldText*>(Control(ELoadGenMemoryEatQueryType));
+
+    if (!aFormInit && (edType->CurrentValueIndex() == EMemoryEatTypeMemoryToEat || edType->CurrentValueIndex() == EMemoryEatTypeMemoryToBeLeft))
+        {
+        // no need for changes if amount field is already active
+        CEikNumberEditor* edAmount = static_cast<CEikNumberEditor*>(ControlOrNull(ELoadGenMemoryEatQueryAmount));
+        if (edAmount) return;
+        
+        // save values before deleting the items
+        CEikEdwin* edRandomMin = static_cast<CEikEdwin*>(Control(ELoadGenMemoryEatQueryRandomMin));
+        CEikEdwin* edRandomMax = static_cast<CEikEdwin*>(Control(ELoadGenMemoryEatQueryRandomMax));
+        edRandomMin->GetText(iAttributes.iRandomMinDes);
+        edRandomMax->GetText(iAttributes.iRandomMaxDes);
+        
+        DeleteLine(ELoadGenMemoryEatQueryRandomMin);
+        DeleteLine(ELoadGenMemoryEatQueryRandomMax);
+        }
+    else if (!aFormInit && edType->CurrentValueIndex() == EMemoryEatTypeWavy)
+        {
+        // save values before deleting the items
+        CEikEdwin* edAmount = static_cast<CEikEdwin*>(Control(ELoadGenMemoryEatQueryAmount));
+        edAmount->GetText(iAttributes.iAmountDes);
+        
+        DeleteLine(ELoadGenMemoryEatQueryAmount);
+        }
+    
+    if (edType->CurrentValueIndex() == EMemoryEatTypeMemoryToEat || edType->CurrentValueIndex() == EMemoryEatTypeMemoryToBeLeft)
+        {
+        // insert new fields
+        InsertFieldAfterL(R_MEMORYEAT_DLG_LINE_AMOUNT, ELoadGenMemoryEatQueryAmount, ELoadGenMemoryEatQueryType);
+        
+        // load values to just created editors
+        CEikEdwin* edAmount = static_cast<CEikEdwin*>(Control(ELoadGenMemoryEatQueryAmount));
+        edAmount->SetTextL(&iAttributes.iAmountDes);
+        }
+    else if (edType->CurrentValueIndex() == EMemoryEatTypeWavy)
+        {
+        // insert new fields
+        InsertFieldAfterL(R_MEMORYEAT_DLG_LINE_RANDOM_MIN, ELoadGenMemoryEatQueryRandomMin, ELoadGenMemoryEatQueryType);
+        InsertFieldAfterL(R_MEMORYEAT_DLG_LINE_RANDOM_MAX, ELoadGenMemoryEatQueryRandomMax, ELoadGenMemoryEatQueryRandomMin);
+        
+        // load values to just created editors
+        CEikEdwin* edRandomMin = static_cast<CEikEdwin*>(Control(ELoadGenMemoryEatQueryRandomMin));
+        CEikEdwin* edRandomMax = static_cast<CEikEdwin*>(Control(ELoadGenMemoryEatQueryRandomMax));
+        edRandomMin->SetTextL(&iAttributes.iRandomMinDes);
+        edRandomMax->SetTextL(&iAttributes.iRandomMaxDes);
+        }
+    
+    UpdateFormL();
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenMemoryEatEditor::UpdateAvailableMemoryL()
+    {
+    // this feature is used only when not editing existing load
+    if (!iEditingExisting)
+        {
+        CAknPopupFieldText* edSource = static_cast<CAknPopupFieldText*>(ControlOrNull(ELoadGenMemoryEatQuerySource));
+        CEikEdwin* edAmount = static_cast<CEikEdwin*>(ControlOrNull(ELoadGenMemoryEatQueryAmount));
+        
+        if (edAmount && edSource)
+            {
+            iAttributes.iAmountDes.Copy(KNullDesC);
+
+            if (edSource->CurrentValueIndex() == EMemoryEatSourceTypeRAM)
+                {
+                // RAM
+                TMemoryInfoV1Buf ramMemory;
+                UserHal::MemoryInfo(ramMemory);
+                
+                iAttributes.iAmountDes.AppendNum(ramMemory().iFreeRamInBytes);
+                }
+            else
+                {
+                // get drive
+                TVolumeInfo volumeInfo;
+                if (CEikonEnv::Static()->FsSession().Volume(volumeInfo, edSource->CurrentValueIndex()+1) == KErrNone)
+                    {
+                    iAttributes.iAmountDes.AppendNum(volumeInfo.iFree);
+                    }
+                else
+                    {
+                    iAttributes.iAmountDes.AppendNum(0);
+                    }
+                }
+
+            edAmount->SetTextL(&iAttributes.iAmountDes);
+            }        
+        }
+    }
+        
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenMemoryEatEditor::HandleControlStateChangeL(TInt aControlId)
+    {
+    CLoadGenLoadTypeEditorBase::HandleControlStateChangeL(aControlId);
+    
+    // update visibilities of fields    
+    if (aControlId == ELoadGenMemoryEatQueryType)
+        {
+        UpdateVisibilitiesOfFieldsL();
+        }
+    
+    // update memory when source changes
+    else if (aControlId == ELoadGenMemoryEatQuerySource)
+        {
+        UpdateAvailableMemoryL();
+        }
+    }
+    
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenMemoryEatEditor::RunQueryLD()
+    {
+    return CLoadGenLoadTypeEditorBase::DoRunQueryLD(R_MEMORYEAT_FORM_DIALOG);
+    }
+
+
+// --------------------------------------------------------------------------------------------
+// --------------------------------------------------------------------------------------------
+
+CLoadGenPhoneCallEditor* CLoadGenPhoneCallEditor::NewL(TPhoneCallAttributes& aAttributes, TBool aEditingExisting)
+    {
+    CLoadGenPhoneCallEditor* self = new(ELeave) CLoadGenPhoneCallEditor(aAttributes, aEditingExisting);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;    
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenPhoneCallEditor::~CLoadGenPhoneCallEditor()
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenPhoneCallEditor::CLoadGenPhoneCallEditor(TPhoneCallAttributes& aAttributes, TBool aEditingExisting) :
+    CLoadGenLoadTypeEditorBase(aEditingExisting), iAttributes(aAttributes)
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenPhoneCallEditor::ConstructL()
+    {
+    CLoadGenLoadTypeEditorBase::ConstructL(_L("Phone calls"));
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenPhoneCallEditor::PreLayoutDynInitL()
+    {
+    CLoadGenLoadTypeEditorBase::PreLayoutDynInitL();
+    
+    // load values to static editors
+    CAknPopupFieldText* edPriority = static_cast<CAknPopupFieldText*>(Control(ELoadGenPhoneCallQueryPriority));
+    CEikEdwin* edDestination = static_cast<CEikEdwin*>(Control(ELoadGenPhoneCallQueryDestination));
+    CEikNumberEditor* edLength = static_cast<CEikNumberEditor*>(Control(ELoadGenPhoneCallQueryLength));
+    CEikNumberEditor* edIdle = static_cast<CEikNumberEditor*>(Control(ELoadGenPhoneCallQueryIdle));
+    CEikNumberEditor* edVariance = static_cast<CEikNumberEditor*>(Control(ELoadGenPhoneCallQueryVariance));
+
+    edPriority->SetCurrentValueIndex(iAttributes.iPriority);
+    edDestination->SetTextL(&iAttributes.iDestination);   
+    edLength->SetNumber(iAttributes.iLength);   
+    edIdle->SetNumber(iAttributes.iIdle);   
+    edVariance->SetNumber(iAttributes.iRandomVariance);   
+    
+    UpdateVisibilitiesOfFieldsL(ETrue);
+    }
+
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenPhoneCallEditor::OkToExitL(TInt aButtonId)
+    {
+    if (aButtonId == EAknSoftkeyOk)
+        {
+        // store values from editors
+        CAknPopupFieldText* edPriority = static_cast<CAknPopupFieldText*>(Control(ELoadGenPhoneCallQueryPriority));
+        CEikEdwin* edDestination = static_cast<CEikEdwin*>(Control(ELoadGenPhoneCallQueryDestination));
+        CEikNumberEditor* edLength = static_cast<CEikNumberEditor*>(Control(ELoadGenPhoneCallQueryLength));
+        CEikNumberEditor* edIdle = static_cast<CEikNumberEditor*>(Control(ELoadGenPhoneCallQueryIdle));
+        CEikNumberEditor* edVariance = static_cast<CEikNumberEditor*>(Control(ELoadGenPhoneCallQueryVariance));
+
+        iAttributes.iPriority = edPriority->CurrentValueIndex();
+        edDestination->GetText(iAttributes.iDestination);
+        iAttributes.iLength = edLength->Number();
+        iAttributes.iIdle = edIdle->Number();
+        iAttributes.iRandomVariance = edVariance->Number();
+        }
+    
+    return ETrue;
+    }       
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenPhoneCallEditor::UpdateVisibilitiesOfFieldsL(TBool /*aFormInit*/)
+    {
+    UpdateFormL();
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenPhoneCallEditor::HandleControlStateChangeL(TInt aControlId)
+    {
+    CLoadGenLoadTypeEditorBase::HandleControlStateChangeL(aControlId);
+    }
+    
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenPhoneCallEditor::RunQueryLD()
+    {
+    return CLoadGenLoadTypeEditorBase::DoRunQueryLD(R_PHONECALL_FORM_DIALOG);
+    }
+
+// --------------------------------------------------------------------------------------------
+// --------------------------------------------------------------------------------------------
+
+CLoadGenNetConnEditor* CLoadGenNetConnEditor::NewL(TNetConnAttributes& aAttributes, TBool aEditingExisting)
+    {
+    CLoadGenNetConnEditor* self = new(ELeave) CLoadGenNetConnEditor(aAttributes, aEditingExisting);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;    
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenNetConnEditor::~CLoadGenNetConnEditor()
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenNetConnEditor::CLoadGenNetConnEditor(TNetConnAttributes& aAttributes, TBool aEditingExisting) :
+    CLoadGenLoadTypeEditorBase(aEditingExisting), iAttributes(aAttributes)
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenNetConnEditor::ConstructL()
+    {
+    CLoadGenLoadTypeEditorBase::ConstructL(_L("Network conn."));
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenNetConnEditor::PreLayoutDynInitL()
+    {
+    CLoadGenLoadTypeEditorBase::PreLayoutDynInitL();
+    
+    // load values to static editors
+    CAknPopupFieldText* edPriority = static_cast<CAknPopupFieldText*>(Control(ELoadGenNetConnQueryPriority));
+    CEikEdwin* edDestination = static_cast<CEikEdwin*>(Control(ELoadGenNetConnQueryDestination));
+    CEikNumberEditor* edIdle = static_cast<CEikNumberEditor*>(Control(ELoadGenNetConnQueryIdle));
+    CEikNumberEditor* edVariance = static_cast<CEikNumberEditor*>(Control(ELoadGenNetConnQueryVariance));
+
+    edPriority->SetCurrentValueIndex(iAttributes.iPriority);
+    edDestination->SetTextL(&iAttributes.iDestination);   
+    edIdle->SetNumber(iAttributes.iIdle);   
+    edVariance->SetNumber(iAttributes.iRandomVariance);
+       
+    UpdateVisibilitiesOfFieldsL(ETrue);
+    }
+
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenNetConnEditor::OkToExitL(TInt aButtonId)
+    {
+    if (aButtonId == EAknSoftkeyOk)
+        {
+        // store values from editors
+        CAknPopupFieldText* edPriority = static_cast<CAknPopupFieldText*>(Control(ELoadGenNetConnQueryPriority));
+        CEikEdwin* edDestination = static_cast<CEikEdwin*>(Control(ELoadGenNetConnQueryDestination));
+        CEikNumberEditor* edIdle = static_cast<CEikNumberEditor*>(Control(ELoadGenNetConnQueryIdle));
+        CEikNumberEditor* edVariance = static_cast<CEikNumberEditor*>(Control(ELoadGenNetConnQueryVariance));
+
+        iAttributes.iPriority = edPriority->CurrentValueIndex();
+        edDestination->GetText(iAttributes.iDestination);
+        iAttributes.iIdle = edIdle->Number();
+        iAttributes.iRandomVariance = edVariance->Number();
+        }
+    
+    return ETrue;
+    }       
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenNetConnEditor::UpdateVisibilitiesOfFieldsL(TBool /*aFormInit*/)
+    {
+    UpdateFormL();
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenNetConnEditor::HandleControlStateChangeL(TInt aControlId)
+    {
+    CLoadGenLoadTypeEditorBase::HandleControlStateChangeL(aControlId);
+    }
+    
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenNetConnEditor::RunQueryLD()
+    {
+    return CLoadGenLoadTypeEditorBase::DoRunQueryLD(R_NETCONN_FORM_DIALOG);
+    }
+
+// --------------------------------------------------------------------------------------------
+       
+// --------------------------------------------------------------------------------------------
+// --------------------------------------------------------------------------------------------
+
+CLoadGenKeyPressEditor* CLoadGenKeyPressEditor::NewL(TKeyPressAttributes& aAttributes, TBool aEditingExisting)
+    {
+    CLoadGenKeyPressEditor* self = new(ELeave) CLoadGenKeyPressEditor(aAttributes, aEditingExisting);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenKeyPressEditor::~CLoadGenKeyPressEditor()
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenKeyPressEditor::CLoadGenKeyPressEditor(TKeyPressAttributes& aAttributes, TBool aEditingExisting) :
+    CLoadGenLoadTypeEditorBase(aEditingExisting), iAttributes(aAttributes)
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenKeyPressEditor::ConstructL()
+    {
+    CLoadGenLoadTypeEditorBase::ConstructL(_L("Key presses"));
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenKeyPressEditor::PreLayoutDynInitL()
+    {
+    CLoadGenLoadTypeEditorBase::PreLayoutDynInitL();
+
+    // load values to static editors
+    CAknPopupFieldText* edPriority = static_cast<CAknPopupFieldText*>(Control(ELoadGenKeyPressQueryPriority));
+    CEikNumberEditor* edHeartBeat = static_cast<CEikNumberEditor*>(Control(ELoadGenKeyPressQueryHeartBeat));
+    CEikNumberEditor* edVariance = static_cast<CEikNumberEditor*>(Control(ELoadGenKeyPressQueryVariance));
+
+    edPriority->SetCurrentValueIndex(iAttributes.iPriority);
+    edHeartBeat->SetNumber(iAttributes.iHeartBeat);
+    edVariance->SetNumber(iAttributes.iRandomVariance);
+
+    UpdateVisibilitiesOfFieldsL(ETrue);
+    }
+
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenKeyPressEditor::OkToExitL(TInt aButtonId)
+    {
+    if (aButtonId == EAknSoftkeyOk)
+        {
+        // store values from editors
+        CAknPopupFieldText* edPriority = static_cast<CAknPopupFieldText*>(Control(ELoadGenKeyPressQueryPriority));
+        CEikNumberEditor* edHeartBeat = static_cast<CEikNumberEditor*>(Control(ELoadGenKeyPressQueryHeartBeat));
+        CEikNumberEditor* edVariance = static_cast<CEikNumberEditor*>(Control(ELoadGenKeyPressQueryVariance));
+
+        iAttributes.iPriority = edPriority->CurrentValueIndex();
+        iAttributes.iHeartBeat = edHeartBeat->Number();
+        iAttributes.iRandomVariance = edVariance->Number();
+        }
+    
+    return ETrue;
+    }       
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenKeyPressEditor::UpdateVisibilitiesOfFieldsL(TBool /*aFormInit*/)
+    {
+    UpdateFormL();
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenKeyPressEditor::HandleControlStateChangeL(TInt aControlId)
+    {
+    CLoadGenLoadTypeEditorBase::HandleControlStateChangeL(aControlId);
+    }
+    
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenKeyPressEditor::RunQueryLD()
+    {
+    return CLoadGenLoadTypeEditorBase::DoRunQueryLD(R_KEYPRESS_FORM_DIALOG);
+    }
+
+// --------------------------------------------------------------------------------------------
+// --------------------------------------------------------------------------------------------
+
+CLoadGenMessagesEditor* CLoadGenMessagesEditor::NewL( TMessageAttributes& aAttributes, 
+                                                      TBool aEditingExisting )
+    {
+    CLoadGenMessagesEditor* self = new(ELeave) CLoadGenMessagesEditor( aAttributes, 
+                                                                        aEditingExisting );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;    
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenMessagesEditor::~CLoadGenMessagesEditor()
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenMessagesEditor::CLoadGenMessagesEditor( TMessageAttributes& aAttributes, 
+                                                TBool aEditingExisting ) :
+                                            CLoadGenLoadTypeEditorBase( aEditingExisting ), 
+                                            iAttributes( aAttributes )
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenMessagesEditor::ConstructL()
+    {
+    CLoadGenLoadTypeEditorBase::ConstructL( _L("Messages") );
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenMessagesEditor::PreLayoutDynInitL()
+    {
+    CLoadGenLoadTypeEditorBase::PreLayoutDynInitL();
+    
+    // load values to static editors
+    CAknPopupFieldText* edPriority = 
+                    static_cast<CAknPopupFieldText*>( Control( ELoadGenMessagesQueryPriority ) );
+    CAknPopupFieldText* edType = 
+                    static_cast<CAknPopupFieldText*>( Control( ELoadGenMessagesQueryType ) );                    
+    CEikEdwin* edDestination = 
+                    static_cast<CEikEdwin*>( Control( ELoadGenMessagesQueryDestination ) );
+    CEikNumberEditor* edAmount = 
+                    static_cast<CEikNumberEditor*>( Control( ELoadGenMessagesQueryAmount ) );                
+    CEikNumberEditor* edLength = 
+                    static_cast<CEikNumberEditor*>( Control( ELoadGenMessagesQueryLength ) );
+    CEikNumberEditor* edIdle = 
+                    static_cast<CEikNumberEditor*>( Control( ELoadGenMessagesQueryIdle ) );
+    CEikNumberEditor* edVariance = 
+                    static_cast<CEikNumberEditor*>( Control( ELoadGenMessagesQueryVariance ) );
+
+    edPriority->SetCurrentValueIndex( iAttributes.iPriority );
+    edType->SetCurrentValueIndex( iAttributes.iMessageType );
+    edDestination->SetTextL( &iAttributes.iDestination );
+    edAmount->SetNumber( iAttributes.iAmount );
+    edLength->SetNumber( iAttributes.iLength );   
+    edIdle->SetNumber( iAttributes.iIdle );   
+    edVariance->SetNumber( iAttributes.iRandomVariance );   
+       
+    UpdateVisibilitiesOfFieldsL( ETrue );
+    // set type selection as dimmed if editing existing item
+    if (iEditingExisting)
+        {
+        SetLineDimmedNow(ELoadGenMessagesQueryType, ETrue); 
+        }
+    
+    }
+
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenMessagesEditor::OkToExitL( TInt aButtonId )
+    {
+    if ( aButtonId == EAknSoftkeyOk )
+        {
+        // store values from editors
+        CAknPopupFieldText* edPriority = 
+                static_cast<CAknPopupFieldText*>( Control( ELoadGenMessagesQueryPriority ) );
+        CAknPopupFieldText* edType = 
+                static_cast<CAknPopupFieldText*>( Control( ELoadGenMessagesQueryType ) );                
+        CEikEdwin* edDestination = 
+                static_cast<CEikEdwin*>( Control( ELoadGenMessagesQueryDestination ) );
+        CEikNumberEditor* edLength = 
+                static_cast<CEikNumberEditor*>( Control( ELoadGenMessagesQueryLength ) );
+        CEikNumberEditor* edAmount = 
+                static_cast<CEikNumberEditor*>( Control( ELoadGenMessagesQueryAmount ) );                
+        CEikNumberEditor* edIdle = 
+                static_cast<CEikNumberEditor*>( Control( ELoadGenMessagesQueryIdle ) );
+        CEikNumberEditor* edVariance =
+                static_cast<CEikNumberEditor*>( Control( ELoadGenMessagesQueryVariance ) );
+
+        iAttributes.iPriority = edPriority->CurrentValueIndex();
+        iAttributes.iMessageType = edType->CurrentValueIndex();
+        edDestination->GetText( iAttributes.iDestination );
+        iAttributes.iAmount = edAmount->Number();
+        iAttributes.iLength = edLength->Number();
+        iAttributes.iIdle = edIdle->Number();
+        iAttributes.iRandomVariance = edVariance->Number();
+        }
+    
+    return ETrue;
+    }       
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenMessagesEditor::UpdateVisibilitiesOfFieldsL( TBool /*aFormInit*/ )
+    {
+    UpdateFormL();
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenMessagesEditor::HandleControlStateChangeL( TInt aControlId )
+    {
+    CLoadGenLoadTypeEditorBase::HandleControlStateChangeL( aControlId );
+    }
+    
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenMessagesEditor::RunQueryLD()
+    {
+    return CLoadGenLoadTypeEditorBase::DoRunQueryLD( R_MESSAGES_FORM_DIALOG );
+    }
+
+// --------------------------------------------------------------------------------------------
+// --------------------------------------------------------------------------------------------
+
+CLoadGenApplicationsEditor* CLoadGenApplicationsEditor::NewL( TApplicationsAttributes& aAttributes, 
+                                                      TBool aEditingExisting )
+    {
+    CLoadGenApplicationsEditor* self = new(ELeave) CLoadGenApplicationsEditor( aAttributes, 
+                                                                        aEditingExisting );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;    
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenApplicationsEditor::~CLoadGenApplicationsEditor()
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenApplicationsEditor::CLoadGenApplicationsEditor( TApplicationsAttributes& aAttributes, 
+                                                TBool aEditingExisting ) :
+                                            CLoadGenLoadTypeEditorBase( aEditingExisting ), 
+                                            iAttributes( aAttributes )
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenApplicationsEditor::ConstructL()
+    {
+    CLoadGenLoadTypeEditorBase::ConstructL( _L("Applications") );
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenApplicationsEditor::PreLayoutDynInitL()
+    {
+    CLoadGenLoadTypeEditorBase::PreLayoutDynInitL();
+
+    // load values to static editors
+    CAknPopupFieldText* edPriority = static_cast<CAknPopupFieldText*>(Control(ELoadGenApplicationsQueryPriority));
+    CEikNumberEditor* edLaunchingInterval = static_cast<CEikNumberEditor*>(Control(ELoadGenApplicationsLaunchingInterval));
+    CAknPopupFieldText* edKeyPressType = static_cast<CAknPopupFieldText*>(Control(ELoadGenApplicationsKeyPressType));
+    CEikNumberEditor* edMaxOpen = static_cast<CEikNumberEditor*>(Control(ELoadGenApplicationsMaxOpen));
+    CEikNumberEditor* edHeartBeat = static_cast<CEikNumberEditor*>(Control(ELoadGenApplicationsKeyPressQueryHeartBeat));
+    CEikNumberEditor* edVariance = static_cast<CEikNumberEditor*>(Control(ELoadGenApplicationsQueryVariance));
+
+    edPriority->SetCurrentValueIndex( iAttributes.iPriority );
+    edLaunchingInterval->SetNumber( iAttributes.iLaunchingInterval );
+    edKeyPressType->SetCurrentValueIndex( iAttributes.iKeyPressType );
+    edMaxOpen->SetNumber( iAttributes.iMaxOpen );
+    edHeartBeat->SetNumber( iAttributes.iHeartBeat );
+    edVariance->SetNumber( iAttributes.iRandomVariance );
+
+    UpdateVisibilitiesOfFieldsL(ETrue);
+    }
+
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenApplicationsEditor::OkToExitL(TInt aButtonId)
+    {
+    if (aButtonId == EAknSoftkeyOk)
+        {
+        // store values from editors
+        CAknPopupFieldText* edPriority = static_cast<CAknPopupFieldText*>(Control(ELoadGenApplicationsQueryPriority));
+        CEikNumberEditor* edLaunchingInterval = static_cast<CEikNumberEditor*>(Control(ELoadGenApplicationsLaunchingInterval));
+        CAknPopupFieldText* edKeyPressType = static_cast<CAknPopupFieldText*>(Control(ELoadGenApplicationsKeyPressType));
+        CEikNumberEditor* edMaxOpen = static_cast<CEikNumberEditor*>(Control(ELoadGenApplicationsMaxOpen));
+        CEikNumberEditor* edHeartBeat = static_cast<CEikNumberEditor*>(Control(ELoadGenApplicationsKeyPressQueryHeartBeat));
+        CEikNumberEditor* edVariance = static_cast<CEikNumberEditor*>(Control(ELoadGenApplicationsQueryVariance));
+
+        iAttributes.iPriority = edPriority->CurrentValueIndex();
+        iAttributes.iLaunchingInterval = edLaunchingInterval->Number();
+        iAttributes.iKeyPressType = edKeyPressType->CurrentValueIndex();
+        iAttributes.iMaxOpen = edMaxOpen->Number();
+        iAttributes.iHeartBeat = edHeartBeat->Number();
+        iAttributes.iRandomVariance = edVariance->Number();
+        }
+    
+    return ETrue;
+    }       
+    
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenApplicationsEditor::UpdateVisibilitiesOfFieldsL( TBool /*aFormInit*/ )
+    {
+    UpdateFormL();
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenApplicationsEditor::HandleControlStateChangeL( TInt aControlId )
+    {
+    CLoadGenLoadTypeEditorBase::HandleControlStateChangeL( aControlId );
+    }
+    
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenApplicationsEditor::RunQueryLD()
+    {
+    return CLoadGenLoadTypeEditorBase::DoRunQueryLD( R_APPLICATIONS_FORM_DIALOG );
+    }
+
+// --------------------------------------------------------------------------------------------
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenPhotoCaptureEditor* CLoadGenPhotoCaptureEditor::NewL(TPhotoCaptureAttributes& aAttributes, TBool aEditingExisting)
+    {
+    CLoadGenPhotoCaptureEditor* self = new(ELeave) CLoadGenPhotoCaptureEditor(aAttributes, aEditingExisting);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;    
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenPhotoCaptureEditor::~CLoadGenPhotoCaptureEditor()
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenPhotoCaptureEditor::CLoadGenPhotoCaptureEditor(TPhotoCaptureAttributes& aAttributes, TBool aEditingExisting) :
+    CLoadGenLoadTypeEditorBase(aEditingExisting), iAttributes(aAttributes)
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenPhotoCaptureEditor::ConstructL()
+    {
+    CLoadGenLoadTypeEditorBase::ConstructL(_L("Photo captures"));
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenPhotoCaptureEditor::PreLayoutDynInitL()
+    {
+    CLoadGenLoadTypeEditorBase::PreLayoutDynInitL();
+    
+    // load values to static editors
+    CAknPopupFieldText* edPriority = static_cast<CAknPopupFieldText*>(Control(ELoadGenPhotoCaptureQueryPriority));
+    //CAknPopupFieldText* edDevice = static_cast<CAknPopupFieldText*>(Control(ELoadGenPhotoCaptureQueryDevice));    
+    CEikNumberEditor* edIdle = static_cast<CEikNumberEditor*>(Control(ELoadGenPhotoCaptureQueryIdle));
+    CEikNumberEditor* edVariance = static_cast<CEikNumberEditor*>(Control(ELoadGenPhotoCaptureQueryVariance));
+
+    edPriority->SetCurrentValueIndex(iAttributes.iPriority);
+    //edDevice->SetCurrentValueIndex(0);
+    edIdle->SetNumber(iAttributes.iIdle);   
+    edVariance->SetNumber(iAttributes.iRandomVariance);
+    
+    LoadCamerasL();
+    
+    UpdateVisibilitiesOfFieldsL(ETrue);
+    }
+
+void CLoadGenPhotoCaptureEditor::LoadCamerasL()
+    {    
+    if (iAttributes.iCameraCount > 0)
+        {
+        // insert possibility to select which cpu the load is generated to
+        InsertFieldAfterL(R_PHOTOCAPTURE_DLG_LINE_DEVICE, ELoadGenPhotoCaptureQueryDevice, ELoadGenPhotoCaptureQueryPriority);
+        
+        iCamerasArray = new (ELeave) CDesCArrayFlat( iAttributes.iCameraCount );   
+        
+        // add Cameras
+        for (int i = 0; i < iAttributes.iCameraCount; i++) 
+            {
+            TBuf<16> cam;
+            _LIT(KCam, "Camera %d");
+            cam.Format(KCam, i);
+            iCamerasArray->AppendL(cam);
+            }    
+       
+        iCameraTextArray = CAknQueryValueTextArray::NewL();
+        iCameraTextArray->SetArray( *iCamerasArray );  
+        iCameraQueryValText = CAknQueryValueText::NewL();    
+        iCameraQueryValText->SetArrayL( iCameraTextArray );
+        if( iAttributes.iCameraCount > 0 )
+            {
+            iCameraQueryValText->SetCurrentValueIndex(iAttributes.iCamera);
+            }
+        CAknPopupField* popup = static_cast<CAknPopupField*>(Control( ELoadGenPhotoCaptureQueryDevice)); 
+        popup->SetQueryValueL( iCameraQueryValText );        
+        }    
+    }
+
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenPhotoCaptureEditor::OkToExitL(TInt aButtonId)
+    {
+    if (aButtonId == EAknSoftkeyOk)
+        {
+        // store values from editors
+        CAknPopupFieldText* edPriority = static_cast<CAknPopupFieldText*>(Control(ELoadGenPhotoCaptureQueryPriority));        
+        CEikNumberEditor* edIdle = static_cast<CEikNumberEditor*>(Control(ELoadGenPhotoCaptureQueryIdle));
+        CEikNumberEditor* edVariance = static_cast<CEikNumberEditor*>(Control(ELoadGenPhotoCaptureQueryVariance));
+
+        iAttributes.iPriority = edPriority->CurrentValueIndex();        
+        iAttributes.iIdle = edIdle->Number();
+        iAttributes.iRandomVariance = edVariance->Number();
+        
+        if (iAttributes.iCameraCount > 1)
+            {
+            iAttributes.iCamera = iCameraQueryValText->CurrentValueIndex();
+            }
+        }
+    
+    return ETrue;
+    }       
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenPhotoCaptureEditor::UpdateVisibilitiesOfFieldsL(TBool /*aFormInit*/)
+    {
+    UpdateFormL();
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenPhotoCaptureEditor::HandleControlStateChangeL(TInt aControlId)
+    {
+    CLoadGenLoadTypeEditorBase::HandleControlStateChangeL(aControlId);
+    }
+    
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenPhotoCaptureEditor::RunQueryLD()
+    {
+    return CLoadGenLoadTypeEditorBase::DoRunQueryLD(R_PHOTOCAPTURE_FORM_DIALOG);
+    }
+
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenBluetoothEditor* CLoadGenBluetoothEditor::NewL(TBluetoothAttributes& aAttributes, TBool aEditingExisting)
+    {
+    CLoadGenBluetoothEditor* self = new(ELeave) CLoadGenBluetoothEditor(aAttributes, aEditingExisting);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;    
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenBluetoothEditor::~CLoadGenBluetoothEditor()
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenBluetoothEditor::CLoadGenBluetoothEditor(TBluetoothAttributes& aAttributes, TBool aEditingExisting) :
+    CLoadGenLoadTypeEditorBase(aEditingExisting), iAttributes(aAttributes)
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenBluetoothEditor::ConstructL()
+    {
+    CLoadGenLoadTypeEditorBase::ConstructL(_L("Bluetooth"));
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenBluetoothEditor::PreLayoutDynInitL()
+    {
+    CLoadGenLoadTypeEditorBase::PreLayoutDynInitL();
+    
+    // load values to static editors
+    CAknPopupFieldText* edPriority = static_cast<CAknPopupFieldText*>(Control(ELoadGenBluetoothQueryPriority));        
+    CEikNumberEditor* edIdle = static_cast<CEikNumberEditor*>(Control(ELoadGenBluetoothQueryIdle));
+    CEikNumberEditor* edVariance = static_cast<CEikNumberEditor*>(Control(ELoadGenBluetoothQueryVariance));
+
+    edPriority->SetCurrentValueIndex(iAttributes.iPriority);    
+    edIdle->SetNumber(iAttributes.iIdle);   
+    edVariance->SetNumber(iAttributes.iRandomVariance);
+        
+    UpdateVisibilitiesOfFieldsL(ETrue);
+    }
+
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenBluetoothEditor::OkToExitL(TInt aButtonId)
+    {
+    if (aButtonId == EAknSoftkeyOk)
+        {
+        // store values from editors
+        CAknPopupFieldText* edPriority = static_cast<CAknPopupFieldText*>(Control(ELoadGenBluetoothQueryPriority));        
+        CEikNumberEditor* edIdle = static_cast<CEikNumberEditor*>(Control(ELoadGenBluetoothQueryIdle));
+        CEikNumberEditor* edVariance = static_cast<CEikNumberEditor*>(Control(ELoadGenBluetoothQueryVariance));
+
+        iAttributes.iPriority = edPriority->CurrentValueIndex();        
+        iAttributes.iIdle = edIdle->Number();
+        iAttributes.iRandomVariance = edVariance->Number();                
+        }
+    
+    return ETrue;
+    }       
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenBluetoothEditor::UpdateVisibilitiesOfFieldsL(TBool /*aFormInit*/)
+    {
+    UpdateFormL();
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenBluetoothEditor::HandleControlStateChangeL(TInt aControlId)
+    {
+    CLoadGenLoadTypeEditorBase::HandleControlStateChangeL(aControlId);
+    }
+    
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenBluetoothEditor::RunQueryLD()
+    {
+    return CLoadGenLoadTypeEditorBase::DoRunQueryLD(R_BLUETOOTH_FORM_DIALOG);
+    }
+
+// --------------------------------------------------------------------------------------------
+// --------------------------------------------------------------------------------------------
+
+CLoadGenPointerEventEditor* CLoadGenPointerEventEditor::NewL(TPointerEventAttributes& aAttributes, TBool aEditingExisting)
+    {
+    CLoadGenPointerEventEditor* self = new(ELeave) CLoadGenPointerEventEditor(aAttributes, aEditingExisting);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenPointerEventEditor::~CLoadGenPointerEventEditor()
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+CLoadGenPointerEventEditor::CLoadGenPointerEventEditor(TPointerEventAttributes& aAttributes, TBool aEditingExisting) :
+    CLoadGenLoadTypeEditorBase(aEditingExisting), iAttributes(aAttributes)
+    {
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenPointerEventEditor::ConstructL()
+    {
+    CLoadGenLoadTypeEditorBase::ConstructL(_L("Pointer events"));
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenPointerEventEditor::PreLayoutDynInitL()
+    {
+    CLoadGenLoadTypeEditorBase::PreLayoutDynInitL();
+
+    // load values to static editors
+    CAknPopupFieldText* edPriority = static_cast<CAknPopupFieldText*>(Control(ELoadGenPointerEventQueryPriority));
+    CEikNumberEditor* edHeartBeat = static_cast<CEikNumberEditor*>(Control(ELoadGenPointerEventQueryHeartBeat));
+    CEikNumberEditor* edVariance = static_cast<CEikNumberEditor*>(Control(ELoadGenPointerEventQueryVariance));
+
+    edPriority->SetCurrentValueIndex(iAttributes.iPriority);
+    edHeartBeat->SetNumber(iAttributes.iHeartBeat);
+    edVariance->SetNumber(iAttributes.iRandomVariance);
+
+    UpdateVisibilitiesOfFieldsL(ETrue);
+    }
+
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenPointerEventEditor::OkToExitL(TInt aButtonId)
+    {
+    if (aButtonId == EAknSoftkeyOk)
+        {
+        // store values from editors
+        CAknPopupFieldText* edPriority = static_cast<CAknPopupFieldText*>(Control(ELoadGenPointerEventQueryPriority));
+        CEikNumberEditor* edHeartBeat = static_cast<CEikNumberEditor*>(Control(ELoadGenPointerEventQueryHeartBeat));
+        CEikNumberEditor* edVariance = static_cast<CEikNumberEditor*>(Control(ELoadGenPointerEventQueryVariance));
+
+        iAttributes.iPriority = edPriority->CurrentValueIndex();
+        iAttributes.iHeartBeat = edHeartBeat->Number();
+        iAttributes.iRandomVariance = edVariance->Number();
+        }
+    
+    return ETrue;
+    }       
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenPointerEventEditor::UpdateVisibilitiesOfFieldsL(TBool /*aFormInit*/)
+    {
+    UpdateFormL();
+    }
+
+// --------------------------------------------------------------------------------------------
+
+void CLoadGenPointerEventEditor::HandleControlStateChangeL(TInt aControlId)
+    {
+    CLoadGenLoadTypeEditorBase::HandleControlStateChangeL(aControlId);
+    }
+    
+// --------------------------------------------------------------------------------------------
+
+TBool CLoadGenPointerEventEditor::RunQueryLD()
+    {
+    return CLoadGenLoadTypeEditorBase::DoRunQueryLD(R_POINTEREVENT_FORM_DIALOG);
+    }
+
+// End of File