mmserv/sts/tsrc/ststester/src/testappbase.cpp
branchRCL_3
changeset 20 0ac9a5310753
parent 19 095bea5f582e
child 21 999b2818a0eb
--- a/mmserv/sts/tsrc/ststester/src/testappbase.cpp	Tue Aug 31 15:43:02 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1236 +0,0 @@
-/*
- * 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:
- * Source file containing common test app functionality.
- */
-
-#include <f32file.h>
-#include <remconcoreapitarget.h>
-#include <remconinterfaceselector.h>
-
-#include "testappbase.h"
-
-const TInt KLeftSoftKeyScanCode = EStdKeyDevice0;
-const TInt KRightSoftKeyScanCode = EStdKeyDevice1;
-
-const TInt KHelpWindowBorderPixels = 20;
-const TInt KHelpWindowSpaceBetweenColumns = 25;
-const TInt KHelpWindowSpaceBetweenRows = 2;
-
-// TODO: WOULD BE BETTER TO DYNAMICALLY DETECT THE AVAILABLE DRIVES
-_LIT( KDriveC, "C:" );
-_LIT( KDriveE, "E:" );
-_LIT( KDriveF, "F:" );
-_LIT( KDriveZ, "Z:" );
-
-struct TKeyListEntry
-    {
-    TInt scanCode;
-    TInt scanCode2;
-    const TText* keyName;
-    };
-
-// Some emulators return '1' when key 1 is pressed and others returned EStdKeyNkp1.
-// Convert both case into '1'.
-const TKeyListEntry KSupportedKeys[KSupportedKeysCount] =
-    {
-        {EStdKeyEnter,      EStdKeyNull, STR("Enter")},
-        {EStdKeyUpArrow,    EStdKeyNull, STR("Up")},
-        {EStdKeyDownArrow,  EStdKeyNull, STR("Down")},
-        {EStdKeyLeftArrow,  EStdKeyNull, STR("Left")},
-        {EStdKeyRightArrow, EStdKeyNull, STR("Right")},
-        {'0',               EStdKeyNkp0, STR("0")},
-        {'1',               EStdKeyNkp1, STR("1")},
-        {'2',               EStdKeyNkp2, STR("2")},
-        {'3',               EStdKeyNkp3, STR("3")},
-        {'4',               EStdKeyNkp4, STR("4")},
-        {'5',               EStdKeyNkp5, STR("5")},
-        {'6',               EStdKeyNkp6, STR("6")},
-        {'7',               EStdKeyNkp7, STR("7")},
-        {'8',               EStdKeyNkp8, STR("8")},
-        {'9',               EStdKeyNkp9, STR("9")}
-    };
-
-static TPtrC KeyName(TInt aIndex)
-    {
-    //TODO: Check aIndex range
-    return TPtrC(KSupportedKeys[aIndex].keyName);
-    }
-
-// Portable app implementation
-
-CTestAppBase::CTestAppBase(TInt aFontSize) :
-    CActive(EPriorityStandard), iFontSize(aFontSize),
-            iHelpSemitransparentBackgroundActive(true)
-    {
-    CActiveScheduler::Add(this);
-    }
-
-CTestAppBase::~CTestAppBase()
-    {
-    delete iInterfaceSelector;
-    delete iHelpWindow;
-    delete iSelectionWindow;
-    delete iGc;
-    delete iWindowGroup;
-    delete iScreenDevice;
-    delete iTypefaceStore;
-    iWs.Close();
-    iFs.Close();
-    iFileHistory.ResetAndDestroy();
-    }
-
-void CTestAppBase::BaseConstructL(const TOperationsPage* aKeyMap,
-        TInt aPageCount)
-    {
-    iKeyMap = aKeyMap;
-    iPageCount = aPageCount;
-
-    User::LeaveIfError(iFs.Connect());
-
-    User::LeaveIfError(iWs.Connect());
-
-    iScreenDevice = new (ELeave) CWsScreenDevice(iWs);
-    User::LeaveIfError(iScreenDevice->Construct());
-    iDisplaySize = iScreenDevice->SizeInPixels();
-
-    User::LeaveIfError(iScreenDevice->CreateContext(iGc));
-
-    iWindowGroup = new (ELeave) RWindowGroup(iWs);
-    User::LeaveIfError(iWindowGroup->Construct(KNullWsHandle));
-
-    iSelectionWindow = new (ELeave) RWindow(iWs);
-    User::LeaveIfError(iSelectionWindow->Construct(*iWindowGroup,
-            KNullWsHandle));
-    iSelectionWindow->SetVisible(false);
-    iSelectionWindow->Activate();
-
-    // Load the font to be used for all text operations.
-    TFontSpec fontSpec;
-    fontSpec.iHeight = iFontSize;
-    iTypefaceStore = CFbsTypefaceStore::NewL(NULL);
-
-    User::LeaveIfError(iTypefaceStore->GetNearestFontToDesignHeightInPixels(
-            iFont, fontSpec));
-
-    CalculateHelpWindowSize();
-
-    iHelpWindowTopRight = TPoint(iDisplaySize.iWidth / 2
-            - iHelpWindowSize.iWidth / 2, iDisplaySize.iHeight / 2
-            - iHelpWindowSize.iHeight / 2);
-
-    iHelpWindow = new (ELeave) RWindow(iWs);
-    User::LeaveIfError(iHelpWindow->Construct(*iWindowGroup, KNullWsHandle));
-    iHelpWindow->SetExtent(iHelpWindowTopRight, iHelpWindowSize);
-    iHelpWindow->SetTransparencyAlphaChannel();
-    iHelpWindow->SetBackgroundColor(KRgbTransparent);
-    iHelpWindow->SetVisible(false);
-    iHelpWindow->Activate();
-
-    iSoftkeyIndex = iKeyMap[iCurrentPage].defaultSoftkeyIndex;
-
-    // Only need to draw the help text when the options page is changed.  Window is displayed later by
-    // toggling the visibility of the window.
-    DrawHelpText();
-
-    // THE FOLLOWING CODE IS COMMENTED OUT BECAUSE IT CAUSES A CRASH IN NCP BUILDS.
-    // THIS CAN BE ENABLED IN DFS BUILDS, TO ALLOW FOR TWO BUTTON OPERATION USING THE VOLUME KEYS.
-    //
-    // Since some phone have no keyboard or soft keys, treat the volume keys like the soft keys.
-    // SetupVolumeKeysL();    
-    }
-
-void CTestAppBase::SetupVolumeKeysL()
-    {
-    iInterfaceSelector = CRemConInterfaceSelector::NewL();
-    iCoreTarget = CRemConCoreApiTarget::NewL(*iInterfaceSelector, *this);
-    iInterfaceSelector->OpenTargetL();
-    }
-
-void CTestAppBase::StartMonitoringWindowEvents()
-    {
-    // Request notification for windows server events, to detect key presses.    
-    SetActive();
-    iWs.EventReady(&iStatus);
-    }
-
-TInt CTestAppBase::CurrentPageNumber()
-    {
-    return iCurrentPage + 1;
-    }
-
-TPtrC CTestAppBase::CurrentPageName()
-    {
-    return TPtrC(iKeyMap[iCurrentPage].pageName);
-    }
-
-TPtrC CTestAppBase::CurrentSoftkeyName()
-    {
-    return TPtrC(iKeyMap[iCurrentPage].mapping[iSoftkeyIndex].text);
-    }
-
-TPtrC CTestAppBase::KeyMapText(TInt aIndex, TInt aPage)
-    {
-    return TPtrC(iKeyMap[aPage].mapping[aIndex].text);
-    }
-
-TInt CTestAppBase::KeyMapOperation(TInt aIndex, TInt aPage)
-    {
-    return iKeyMap[aPage].mapping[aIndex].operation;
-    }
-
-void CTestAppBase::IncrementKeymapIndex(TInt& aIndex, TInt aPage)
-    {
-    aIndex = (aIndex + 1) % KSupportedKeysCount;
-    while (iKeyMap[aPage].mapping[aIndex].operation == KOperation_None)
-        {
-        aIndex = (aIndex + 1) % KSupportedKeysCount;
-        }
-    }
-
-void CTestAppBase::DecrementKeymapIndex(TInt& aIndex, TInt aPage)
-    {
-    aIndex = (aIndex + KSupportedKeysCount - 1) % KSupportedKeysCount;
-    while (iKeyMap[aPage].mapping[aIndex].operation == KOperation_None)
-        {
-        aIndex = (aIndex + KSupportedKeysCount - 1) % KSupportedKeysCount;
-        }
-    }
-
-void CTestAppBase::CalculateHelpWindowSize()
-    {
-    iHelpWindowColumn1Width = 0;
-    iHelpWindowColumn2Width = 0;
-
-    // Find the widest strings for each column to determine the width of the window.
-    for (TInt index = 0; index < KSupportedKeysCount; index++)
-        {
-        TInt width = iFont->TextWidthInPixels(KeyName(index));
-        if (width > iHelpWindowColumn1Width)
-            {
-            iHelpWindowColumn1Width = width;
-            }
-
-        for (TInt index2 = 0; index2 < iPageCount; index2++)
-            {
-            width = iFont->TextWidthInPixels(KeyMapText(index, index2));
-            if (width > iHelpWindowColumn2Width)
-                {
-                iHelpWindowColumn2Width = width;
-                }
-            }
-        }
-
-    iHelpWindowSize.iWidth = 2 * KHelpWindowBorderPixels
-            + iHelpWindowColumn1Width + KHelpWindowSpaceBetweenColumns
-            + iHelpWindowColumn2Width;
-
-    iHelpWindowSize.iHeight = 2 * KHelpWindowBorderPixels + iFontSize
-            * KSupportedKeysCount + KHelpWindowSpaceBetweenRows
-            * (KSupportedKeysCount - 1);
-    }
-
-CTestAppBase::TTestAppPointerEvent CTestAppBase::CharacterizePointerEvent(
-        TAdvancedPointerEvent& event)
-    {
-    TTestAppPointerEvent returnValue = EPointerEvent_None;
-
-    RDebug::Printf("POINTER EVENT:");
-    RDebug::Printf("iType=%i", event.iType);
-    RDebug::Printf("iModifiers=%x", event.iModifiers);
-    RDebug::Printf("iPosition=%i,%i", event.iPosition.iX, event.iPosition.iY);
-    RDebug::Printf("iParentPosition=%i,%i", event.iParentPosition.iX,
-            event.iParentPosition.iY);
-    RDebug::Printf("PointerNumber=%i", event.PointerNumber());
-    RDebug::Printf("Proximity=%i", event.Proximity());
-    RDebug::Printf("Pressure=%i", event.Pressure());
-    RDebug::Printf("ProximityAndPressure=%i", event.ProximityAndPressure());
-    RDebug::Printf("Position3D=%i,%i,%i", event.Position3D().iX,
-            event.Position3D().iY, event.Position3D().iZ);
-    RDebug::Printf("Pressure3D=%i,%i,%i", event.Pressure3D().iX,
-            event.Pressure3D().iY, event.Pressure3D().iZ);
-    RDebug::Printf("PositionAndPressure3D=%i,%i,%i",
-            event.PositionAndPressure3D().iX,
-            event.PositionAndPressure3D().iY,
-            event.PositionAndPressure3D().iZ);
-
-    switch (event.iType)
-        {
-        case TPointerEvent::EButton1Down:
-            {
-            iPointerDownPosition = event.iPosition;
-            break;
-            }
-        case TPointerEvent::EButton1Up:
-            {
-            TInt xDelta = event.iPosition.iX - iPointerDownPosition.iX;
-            TInt yDelta = event.iPosition.iY - iPointerDownPosition.iY;
-
-            TInt xMagnitude = xDelta;
-            if (xMagnitude < 0)
-                {
-                xMagnitude = -xMagnitude;
-                }
-
-            TInt yMagnitude = yDelta;
-            if (yMagnitude < 0)
-                {
-                yMagnitude = -yMagnitude;
-                }
-
-            const TInt KTapThreshold = 30;
-
-            if (yMagnitude > xMagnitude)
-                {
-                if (yMagnitude < KTapThreshold)
-                    {
-                    RDebug::Printf("POINTER EVENT ENTER x=%i y=%i", xDelta,
-                            yDelta);
-                    returnValue = EPointerEvent_Select;
-                    }
-                else if (yDelta < 0)
-                    {
-                    RDebug::Printf("POINTER EVENT UP x=%i y=%i", xDelta,
-                            yDelta);
-                    returnValue = EPointerEvent_Up;
-                    }
-                else
-                    {
-                    RDebug::Printf("POINTER EVENT DOWN x=%i y=%i", xDelta,
-                            yDelta);
-                    returnValue = EPointerEvent_Down;
-                    }
-                }
-            else
-                {
-                if (xMagnitude < KTapThreshold)
-                    {
-                    RDebug::Printf("POINTER EVENT ENTER x=%i y=%i", xDelta,
-                            yDelta);
-                    returnValue = EPointerEvent_Select;
-                    }
-                else if (xDelta < 0)
-                    {
-                    RDebug::Printf("POINTER EVENT LEFT x=%i y=%i", xDelta,
-                            yDelta);
-                    returnValue = EPointerEvent_Left;
-                    }
-                else
-                    {
-                    RDebug::Printf("POINTER EVENT RIGHT x=%i y=%i", xDelta,
-                            yDelta);
-                    returnValue = EPointerEvent_Right;
-                    }
-                }
-            break;
-            }
-        }
-
-    return returnValue;
-    }
-
-void CTestAppBase::RunL()
-    {
-    if (iWait.IsStarted())
-        {
-        // This is an event during synchronous list selection.  Stop the nested scheduler.
-        iWait.AsyncStop();
-        return;
-        }
-
-    TWsEvent event;
-    iWs.GetEvent(event);
-
-    TInt operationIndex = -1;
-
-    TInt scanCode = 0;
-    bool processScanCode = false;
-
-    TInt operation = KOperation_None;
-
-    // Other potentially useful events are EEventKeyUp and EEventKeyDown.
-
-    if (event.Type() == EEventKey)
-        {
-        scanCode = event.Key()->iScanCode;
-
-        RDebug::Printf("key event %x %c", scanCode, scanCode);
-
-        // Allow subclasses a chance to consume the key event directly.  If that happens, then
-        // do not handle the key as normal.
-        if (!ConsumeKeyEvent(scanCode))
-            {
-            processScanCode = true;
-            }
-        }
-    else if (event.Type() == EEventPointer)
-        {
-        TAdvancedPointerEvent* p = event.Pointer();
-
-        TTestAppPointerEvent pointerEvent = CharacterizePointerEvent(*p);
-
-        switch (pointerEvent)
-            {
-            case EPointerEvent_None:
-                // Do nothing.
-                break;
-            case EPointerEvent_Up:
-                operation = KOperation_PreviousOption;
-                break;
-            case EPointerEvent_Down:
-                operation = KOperation_NextOption;
-                break;
-            case EPointerEvent_Left:
-                operation = KOperation_PreviousOptionPage;
-                break;
-            case EPointerEvent_Right:
-                operation = KOperation_NextOptionPage;
-                break;
-            case EPointerEvent_Select:
-                operation = KOperation_ExecuteOption;
-                break;
-            }
-        }
-
-    if (processScanCode)
-        {
-        // If one of the softkeys were pressed then take the appropriate action.
-        // This is to support a two button touch device with no numeric keypad.
-        // Support 'A' and 'B' also, for the NCP emulator where a keyboard  is
-        // not displayed.
-        switch (scanCode)
-            {
-            case KLeftSoftKeyScanCode:
-            case 'a':
-            case 'A':
-                {
-                operation = KOperation_NextOption;
-                break;
-                }
-            case KRightSoftKeyScanCode:
-            case 'b':
-            case 'B':
-                {
-                // Execute softkey function.
-                operation = KOperation_ExecuteOption;
-                break;
-                }
-            default:
-                {
-                // Search for scancode in keymap.  If not found then the key was not a valid
-                // key, so ignore.                
-                TInt index = 0;
-                while ((index < KSupportedKeysCount)
-                        && (operationIndex == -1))
-                    {
-                    if (KSupportedKeys[index].scanCode == scanCode
-                            || KSupportedKeys[index].scanCode2 == scanCode)
-                        {
-                        // Found!
-                        operationIndex = index;
-                        }
-                    else
-                        {
-                        index++;
-                        }
-                    }
-                break;
-                }
-            }
-        }
-
-    if (operation == KOperation_ExecuteOption)
-        {
-        operationIndex = iSoftkeyIndex;
-        }
-
-    if (operationIndex >= 0)
-        {
-        operation = KeyMapOperation(operationIndex, iCurrentPage);
-        }
-
-    if (operation != KOperation_None)
-        {
-        // Valid operation.
-
-        switch (operation)
-            {
-            case KOperation_Exit:
-                {
-                CActiveScheduler::Stop();
-                break;
-                }
-            case KOperation_PreviousOption:
-                {
-                // Change softkey function.
-                DecrementKeymapIndex(iSoftkeyIndex, iCurrentPage);
-
-                // Redraw help text, since a new function should now be underlined.
-                DrawHelpText();
-
-                // Notify subclass that softkey function has been updated.
-                SoftkeyFunctionUpdated();
-                break;
-                }
-            case KOperation_NextOption:
-                {
-                // Change softkey function.
-                IncrementKeymapIndex(iSoftkeyIndex, iCurrentPage);
-
-                // Redraw help text, since a new function should now be underlined.
-                DrawHelpText();
-
-                // Notify subclass that softkey function has been updated.
-                SoftkeyFunctionUpdated();
-                break;
-                }
-            case KOperation_PreviousOptionPage:
-                {
-                iCurrentPage = (iCurrentPage + iPageCount - 1) % iPageCount;
-                iSoftkeyIndex = iKeyMap[iCurrentPage].defaultSoftkeyIndex;
-                DrawHelpText();
-                SoftkeyFunctionUpdated();
-                break;
-                }
-            case KOperation_NextOptionPage:
-                {
-                iCurrentPage = (iCurrentPage + 1) % iPageCount;
-                iSoftkeyIndex = iKeyMap[iCurrentPage].defaultSoftkeyIndex;
-                DrawHelpText();
-                SoftkeyFunctionUpdated();
-                break;
-                }
-            case KOperation_ToggleHelpVisibility:
-                {
-                // Toggle help text on/off.
-                iHelpActive = !iHelpActive;
-                iHelpWindow->SetVisible(iHelpActive);
-                break;
-                }
-            case KOperation_ToggleHelpTransparency:
-                {
-                iHelpSemitransparentBackgroundActive
-                        = !iHelpSemitransparentBackgroundActive;
-                if (iHelpSemitransparentBackgroundActive)
-                    {
-                    // Turn on help if it is currently off.
-                    iHelpActive = true;
-                    iHelpWindow->SetVisible(true);
-                    }
-                DrawHelpText();
-                break;
-                }
-            default:
-                {
-                // Pass operation to subclass.
-                TPtrC operatioName(KeyMapText(operationIndex, iCurrentPage));
-                ExecuteOperation(operation, operatioName);
-                break;
-                }
-            }
-        }
-
-    SetActive();
-    iWs.EventReady(&iStatus);
-    }
-
-void CTestAppBase::DoCancel()
-    {
-    iWs.EventReadyCancel();
-    }
-
-// TODO: ALLOW SUBCLASS TO SPECIFY COLOR SELECTIONS
-
-TInt CTestAppBase::SelectFromListL(TPoint aTopLeft, TSize aSize,
-        const TDesC& aHeaderText, RPointerArray<TDesC>& aSelectionList,
-        TInt aInitialSelectionIndex)
-    {
-    iSelectionWindow->SetExtent(aTopLeft, aSize);
-    iSelectionWindow->SetVisible(true);
-
-    const TInt KRowIncrement = iFontSize + 2;
-
-    TInt entriesPerPage = aSize.iHeight / KRowIncrement - 4;
-
-    TInt returnValue = -2;
-    TInt startIndex = 0;
-    TInt selected = aInitialSelectionIndex;
-
-    while (returnValue == -2)
-        {
-        iGc->Activate(*iSelectionWindow);
-
-        iSelectionWindow->Invalidate();
-        iSelectionWindow->BeginRedraw();
-
-        iGc->Reset();
-
-        iGc->UseFont(iFont);
-        iGc->SetBrushColor(KRgbDarkBlue);
-
-        iGc->Clear();
-
-        // KRgbWhite seems to be having problems (0xffffff) in some emulators,
-        // but 0xfefefe is working, so use that instead of white.        
-        iGc->SetPenColor(0xfefefe);
-
-        const TInt KHeaderColumn = 5;
-        const TInt KEntryColumn = 15;
-
-        TInt row = KRowIncrement;
-
-        iGc->SetUnderlineStyle(EUnderlineOff);
-
-        iGc->DrawText(aHeaderText, TPoint(KHeaderColumn, row));
-        row += (KRowIncrement + 5);
-
-        TBool again = true;
-        TInt backIndex = -1;
-        TInt forwardIndex = -1;
-        TInt offset = 0;
-
-        while (again)
-            {
-            if (selected == offset)
-                {
-                iGc->SetUnderlineStyle(EUnderlineOn);
-                }
-            else
-                {
-                iGc->SetUnderlineStyle(EUnderlineOff);
-                }
-
-            if ((offset < entriesPerPage) && (startIndex + offset
-                    < aSelectionList.Count()))
-                {
-                iGc->DrawText(*aSelectionList[startIndex + offset], TPoint(
-                        KEntryColumn, row));
-                row += KRowIncrement;
-
-                offset++;
-                }
-            else
-                {
-                again = false;
-                if (startIndex + offset < aSelectionList.Count())
-                    {
-                    iGc->DrawText(_L("<page down>"),
-                            TPoint(KEntryColumn, row));
-                    row += KRowIncrement;
-
-                    forwardIndex = offset;
-                    offset++;
-                    }
-                if (startIndex > 0)
-                    {
-                    iGc->DrawText(_L("<page up>"), TPoint(KEntryColumn, row));
-                    row += KRowIncrement;
-
-                    backIndex = offset;
-                    offset++;
-                    }
-                }
-            }
-
-        iSelectionWindow->EndRedraw();
-
-        iGc->Deactivate();
-
-        TInt scanCode = WaitForAnyKey();
-
-        switch (scanCode)
-            {
-            case EStdKeyUpArrow:
-                if (selected == 0)
-                    {
-                    selected = offset - 1;
-                    }
-                else
-                    {
-                    selected -= 1;
-                    }
-                break;
-
-            case EStdKeyDownArrow:
-            case KLeftSoftKeyScanCode:
-            case 'a':
-            case 'A':
-                selected += 1;
-                if (selected == offset)
-                    {
-                    selected = 0;
-                    }
-                break;
-
-            case EStdKeyLeftArrow:
-                if (backIndex >= 0)
-                    {
-                    startIndex -= entriesPerPage;
-                    selected = 0;
-                    }
-                else
-                    {
-                    returnValue = -1;
-                    again = false;
-                    }
-                break;
-
-            case EStdKeyRightArrow:
-                if (forwardIndex >= 0)
-                    {
-                    startIndex += entriesPerPage;
-                    selected = 0;
-                    }
-                break;
-
-            case EStdKeyEnter:
-            case KRightSoftKeyScanCode:
-            case 'b':
-            case 'B':
-                if (selected == forwardIndex)
-                    {
-                    startIndex += entriesPerPage;
-                    selected = 0;
-                    }
-                else if (selected == backIndex)
-                    {
-                    startIndex -= entriesPerPage;
-                    selected = 0;
-                    }
-                else
-                    {
-                    returnValue = startIndex + selected;
-                    }
-                break;
-            }
-        }
-
-    iSelectionWindow->SetVisible(false);
-
-    return returnValue;
-    }
-
-bool CTestAppBase::SelectDriveL(TPoint aTopLeft, TSize aWindowSize,
-        const TDesC& aHeaderText, TDes& aDrive)
-    {
-    RPointerArray<TDesC> drives;
-
-    // Select drive letter.
-    drives.Append(&KDriveC);
-    drives.Append(&KDriveE);
-    drives.Append(&KDriveF);
-    drives.Append(&KDriveZ);
-
-    TInt index = SelectFromListL(aTopLeft, aWindowSize, aHeaderText, drives);
-
-    bool returnValue = false;
-
-    if (index >= 0)
-        {
-        returnValue = true;
-        aDrive.Copy(*(drives[index]));
-        aDrive.Append(_L("\\"));
-        }
-
-    drives.Reset();
-
-    return returnValue;
-    }
-
-bool CTestAppBase::SelectFileL(TPoint aTopLeft, TSize aWindowSize,
-        const TDesC& aHeaderText, const TDesC& aDrive, TDes& aFullFilename)
-    {
-    TFileName directory;
-
-    DoSelectFileL(aTopLeft, aWindowSize, aHeaderText, aDrive, 0, directory,
-            aFullFilename);
-
-    aFullFilename.Insert(0, directory);
-
-    return aFullFilename.Length() > 0;
-    }
-
-bool CTestAppBase::SelectFileWithHistoryL(TPoint aTopLeft, TSize aSize,
-        TDes& aFullFilename, const TDesC& aHistoryFilename,
-        TInt aMaxHistoryEntries)
-    {
-    RPointerArray<TDesC> selections;
-
-    selections.Append(&KDriveC);
-    selections.Append(&KDriveE);
-    selections.Append(&KDriveF);
-    selections.Append(&KDriveZ);
-
-    // Add file history to the end of the drive list.  Newest files are last, so add in reverse order.
-    ReadFileHistory(aHistoryFilename);
-    for (TInt index = iFileHistory.Count() - 1; index >= 0; index--)
-        {
-        selections.Append(iFileHistory[index]);
-        }
-
-    bool done = false;
-    bool selected = true;
-
-    while (!done)
-        {
-        TInt index = SelectFromListL(aTopLeft, aSize,
-                _L("Select drive or recent file:"), selections);
-
-        if (index < 0)
-            {
-            selected = false;
-            done = true;
-            }
-        else if (index < 4)
-            {
-            TBuf<10> drive;
-            drive.Copy(*(selections[index]));
-            drive.Append(_L("\\"));
-
-            done = SelectFileL(aTopLeft, aSize, _L("Select file:"), drive,
-                    aFullFilename);
-            }
-        else
-            {
-            // Remove the selected file from the history, so that it will pop up to the top of the list
-            // as the most recently selected file.
-            TInt historyIndex = iFileHistory.Count() - index + 3;
-            iFileHistory.Remove(historyIndex);
-            aFullFilename.Copy(*(selections[index]));
-
-            done = true;
-            }
-        }
-
-    if (selected)
-        {
-        AddToFileHistory(aFullFilename, aHistoryFilename, aMaxHistoryEntries);
-        }
-
-    selections.Reset();
-
-    return selected;
-    }
-
-bool CTestAppBase::SelectIntegerL(TPoint aTopLeft, TSize aSize,
-        const TDesC& aHeaderText, TInt aMin, TInt aMax, TInt& aSelection)
-    {
-    // currently no way to exit out of this selection
-
-    iSelectionWindow->SetExtent(aTopLeft, aSize);
-    iSelectionWindow->SetVisible(true);
-
-    bool done = false;
-
-    while (!done)
-        {
-        iGc->Activate(*iSelectionWindow);
-
-        iSelectionWindow->Invalidate();
-        iSelectionWindow->BeginRedraw();
-
-        iGc->Reset();
-
-        iGc->UseFont(iFont);
-        iGc->SetBrushColor(KRgbDarkBlue);
-
-        iGc->Clear();
-
-        // KRgbWhite seems to be having problems (0xffffff) in some emulators,
-        // but 0xfefefe is working, so use that instead of white.        
-        iGc->SetPenColor(0xfefefe);
-
-        TBuf<120> buffer;
-        buffer.Copy(aHeaderText);
-        buffer.AppendFormat(_L(" %i"), aSelection);
-
-        iGc->DrawText(buffer, TPoint(5, iFontSize + 2));
-
-        iSelectionWindow->EndRedraw();
-
-        iGc->Deactivate();
-
-        TInt scanCode = WaitForAnyKey();
-
-        switch (scanCode)
-            {
-            case EStdKeyUpArrow:
-                aSelection -= 10;
-                break;
-
-            case EStdKeyDownArrow:
-            case KLeftSoftKeyScanCode:
-            case 'a':
-            case 'A':
-                aSelection += 10;
-                break;
-
-            case EStdKeyLeftArrow:
-                aSelection--;
-                break;
-
-            case EStdKeyRightArrow:
-                aSelection++;
-                break;
-
-            case EStdKeyEnter:
-            case KRightSoftKeyScanCode:
-            case 'b':
-            case 'B':
-                done = true;
-                break;
-            }
-
-        if (aSelection > aMax)
-            {
-            aSelection = aMin;
-            }
-        else if (aSelection < aMin)
-            {
-            aSelection = aMax;
-            }
-        }
-
-    iSelectionWindow->SetVisible(false);
-
-    return true;
-    }
-
-TInt CTestAppBase::WaitForAnyKey()
-    {
-    TInt returnValue = 0;
-
-    bool done = false;
-
-    while (!done)
-        {
-        // Have to use this tricky nested active scheduler technique to allow the active object
-        // used to remap volume keys to run.
-        SetActive();
-        iWs.EventReady(&iStatus);
-        iWait.Start();
-
-        TWsEvent event;
-        iWs.GetEvent(event);
-
-        // Other potentially useful events are EEventKeyUp and EEventKeyDown.
-
-        if (event.Type() == EEventKey)
-            {
-            done = true;
-            returnValue = event.Key()->iScanCode;
-            }
-        else if (event.Type() == EEventPointer)
-            {
-            TAdvancedPointerEvent* p = event.Pointer();
-
-            TTestAppPointerEvent pointerEvent = CharacterizePointerEvent(*p);
-
-            switch (pointerEvent)
-                {
-                case EPointerEvent_None:
-                    // Do nothing.
-                    break;
-                case EPointerEvent_Up:
-                    returnValue = EStdKeyUpArrow;
-                    done = true;
-                    break;
-                case EPointerEvent_Down:
-                    returnValue = EStdKeyDownArrow;
-                    done = true;
-                    break;
-                case EPointerEvent_Left:
-                    returnValue = EStdKeyLeftArrow;
-                    done = true;
-                    break;
-                case EPointerEvent_Right:
-                    returnValue = EStdKeyRightArrow;
-                    done = true;
-                    break;
-                case EPointerEvent_Select:
-                    returnValue = EStdKeyEnter;
-                    done = true;
-                    break;
-                }
-            }
-        }
-
-    return returnValue;
-    }
-
-void CTestAppBase::ReadFileHistory(const TDesC& aHistoryFilename)
-    {
-    iFileHistory.Reset();
-
-    RFile historyFile;
-    TInt err = historyFile.Open(iFs, aHistoryFilename, EFileShareReadersOnly
-            | EFileStream | EFileRead);
-
-    if (err == KErrNone)
-        {
-        TInt historyFileSize;
-        historyFile.Size(historyFileSize);
-
-        RBuf8 contents;
-        contents.Create(historyFileSize);
-
-        historyFile.Read(contents, historyFileSize);
-
-        historyFile.Close();
-
-        TPtrC8 remaining(contents);
-
-        while (remaining.Length() > 0)
-            {
-            TInt separatorIndex = remaining.Locate('\n');
-
-            if (separatorIndex < 0)
-                {
-                separatorIndex = remaining.Length();
-                }
-
-            HBufC* filename = HBufC::NewL(separatorIndex);
-            TPtrC8 filename8 = remaining.Left(separatorIndex);
-            filename->Des().Copy(filename8);
-
-            iFileHistory.Append(filename);
-
-            TInt remainingLength = remaining.Length() - separatorIndex - 1;
-
-            if (remainingLength > 0)
-                {
-                remaining.Set(remaining.Right(remaining.Length()
-                        - separatorIndex - 1));
-                }
-            else
-                {
-                break;
-                }
-            }
-
-        contents.Close();
-        }
-    }
-
-void CTestAppBase::AddToFileHistory(const TDesC& aFilename,
-        const TDesC& aHistoryFilename, TInt aMaxHistoryEntries)
-    {
-    HBufC* filename = HBufC::NewL(aFilename.Length());
-    filename->Des().Copy(aFilename);
-    iFileHistory.Append(filename);
-
-    while (iFileHistory.Count() > aMaxHistoryEntries)
-        {
-        delete iFileHistory[0];
-        iFileHistory.Remove(0);
-        }
-
-    RFile historyFile;
-    TInt err = historyFile.Create(iFs, aHistoryFilename, EFileStream
-            | EFileWrite);
-    if (err == KErrAlreadyExists)
-        {
-        err = historyFile.Open(iFs, aHistoryFilename, EFileStream
-                | EFileWrite);
-        historyFile.SetSize(0);
-        }
-
-    if (err == KErrNone)
-        {
-        for (TInt index = 0; index < iFileHistory.Count(); index++)
-            {
-            TBuf8<KMaxFileName> filename8;
-            filename8.Copy(iFileHistory[index]->Des());
-            historyFile.Write(filename8);
-            historyFile.Write(_L8("\n"));
-            }
-        }
-
-    historyFile.Close();
-    }
-
-void CTestAppBase::DoSelectFileL(TPoint aTopRight, TSize aWindowSize,
-        const TDesC& aHeaderText, const TFileName& aDirectory,
-        TInt aDirectoryLevel, TDes& aSelectedDirectory,
-        TDes& aSelectedFilename)
-    {
-    RPointerArray<TDesC> fileNames;
-
-    ReadDirectoryEntriesL(aDirectory, fileNames);
-
-    TInt initialSelectionIndex = 0;
-    _LIT( KUp, ".." );
-    if (aDirectoryLevel > 0)
-        {
-        TFileName* newEntry = new (ELeave) TFileName;
-        newEntry->Copy(KUp);
-        fileNames.Insert(newEntry, 0);
-        initialSelectionIndex++;
-        }
-
-    bool done = false;
-
-    while (!done && (aSelectedFilename.Length() == 0))
-        {
-        TInt index = SelectFromListL(aTopRight, aWindowSize, aHeaderText,
-                fileNames, initialSelectionIndex);
-
-        if (index == -1)
-            {
-            done = true;
-            }
-        else if (fileNames[index]->Compare(KUp) == 0)
-            {
-            // Go up one directory.  Return to caller without setting aFilename
-            break;
-            }
-        else if ((*fileNames[index])[fileNames[index]->Length() - 1] == '\\')
-            {
-            // Directory selected.
-            TFileName directory;
-            directory.Copy(aDirectory);
-            directory.Append(*fileNames[index]);
-            DoSelectFileL(aTopRight, aWindowSize, aHeaderText, directory,
-                    aDirectoryLevel + 1, aSelectedDirectory,
-                    aSelectedFilename);
-            }
-        else
-            {
-            // File selected.                            
-            aSelectedDirectory.Copy(aDirectory);
-            aSelectedFilename.Copy(*fileNames[index]);
-            done = true;
-            }
-
-        }
-
-    fileNames.ResetAndDestroy();
-    }
-
-void CTestAppBase::ReadDirectoryEntriesL(const TFileName& aDirectoryName,
-        RPointerArray<TDesC>& aFileNames)
-    {
-    aFileNames.ResetAndDestroy();
-
-    RDir dir;
-    User::LeaveIfError(dir.Open(iFs, aDirectoryName, KEntryAttNormal
-            | KEntryAttDir));
-
-    TEntryArray entries;
-    TInt err = KErrNone;
-    while (err == KErrNone)
-        {
-        err = dir.Read(entries);
-
-        for (TInt index = 0; index < entries.Count(); index++)
-            {
-            TFileName* newTail = new (ELeave) TFileName;
-            newTail->Copy(entries[index].iName);
-            if (entries[index].IsDir())
-                {
-                newTail->Append(_L("\\"));
-                }
-            aFileNames.Append(newTail);
-            }
-        }
-
-    dir.Close();
-    }
-
-void CTestAppBase::DrawHelpText()
-    {
-    iGc->Activate(*iHelpWindow);
-
-    iHelpWindow->Invalidate();
-    iHelpWindow->BeginRedraw();
-
-    iGc->Reset();
-
-    iGc->UseFont(iFont);
-    iGc->SetBrushColor(KRgbTransparent);
-
-    iGc->Clear();
-
-    if (iHelpSemitransparentBackgroundActive)
-        {
-        iGc->SetPenColor(KRgbTransparent);
-        iGc->SetBrushStyle(CWindowGc::ESolidBrush);
-        iGc->SetBrushColor(TRgb(0x7f7f7faf));
-        iGc->DrawRect(TRect(iHelpWindowSize));
-        }
-
-    // KRgbWhite seems to be having problems (0xffffff) in some emulators,
-    // but 0xfefefe is working, so use that instead of white.        
-    iGc->SetPenColor(0xfefefe);
-
-    const TInt KColumn1 = KHelpWindowBorderPixels;
-    const TInt KColumn2 = KColumn1 + iHelpWindowColumn1Width
-            + KHelpWindowSpaceBetweenColumns;
-    const TInt KRowIncrement = iFontSize + KHelpWindowSpaceBetweenRows;
-
-    TInt row = iFontSize + KHelpWindowBorderPixels;
-
-    for (TInt index = 0; index < KSupportedKeysCount; index++)
-        {
-        iGc->SetUnderlineStyle(EUnderlineOff);
-
-        TPtrC text = KeyMapText(index, iCurrentPage);
-
-        iGc->DrawText(KeyName(index), TPoint(KColumn1, row));
-
-        if (index == iSoftkeyIndex)
-            {
-            iGc->SetUnderlineStyle(EUnderlineOn);
-            }
-        else
-            {
-            iGc->SetUnderlineStyle(EUnderlineOff);
-            }
-
-        iGc->DrawText(text, TPoint(KColumn2, row));
-
-        row += KRowIncrement;
-        }
-
-    iHelpWindow->EndRedraw();
-
-    iGc->Deactivate();
-    }
-
-void CTestAppBase::MrccatoCommand(TRemConCoreApiOperationId aOperationId,
-        TRemConCoreApiButtonAction /*aButtonAct*/)
-    {
-    // Treat volume up like the right soft key, and volume down like the left soft key.
-    TKeyEvent keyEvent;
-    keyEvent.iCode = 0;
-    keyEvent.iScanCode = 0;
-    keyEvent.iModifiers = 0;
-    keyEvent.iRepeats = 0;
-
-    switch (aOperationId)
-        {
-        case ERemConCoreApiVolumeUp:
-            keyEvent.iScanCode = KRightSoftKeyScanCode;
-            iWs.SimulateKeyEvent(keyEvent);
-            iWs.Flush();
-            break;
-        case ERemConCoreApiVolumeDown:
-            keyEvent.iScanCode = KLeftSoftKeyScanCode;
-            iWs.SimulateKeyEvent(keyEvent);
-            iWs.Flush();
-            break;
-        default:
-            break;
-        }
-    }