mmserv/sts/tsrc/ststester/src/testappbase.h
changeset 14 80975da52420
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/sts/tsrc/ststester/src/testappbase.h	Mon May 03 12:59:52 2010 +0300
@@ -0,0 +1,212 @@
+/*
+ * 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:
+ * Header specifying the common test functionality.
+ */
+
+#ifndef TESTAPPBASE_H_
+#define TESTAPPBASE_H_
+
+#include <e32base.h>
+#include <w32std.h>
+#include <remconcoreapitargetobserver.h>  // for volume key handling
+class CRemConCoreApiTarget;
+class CRemConInterfaceSelector;
+
+#define STR(a) (TText*)L##a
+
+// 15 keys are supported.  The keys are in this order:
+//    Enter, Up, Down, Left, Right, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
+const TInt KSupportedKeysCount = 15;
+
+struct TOperationEntry
+    {
+    const TText* text;
+    TInt operation;
+    };
+
+struct TOperationsPage
+    {
+    const TText* pageName;
+    TInt defaultSoftkeyIndex;
+    TOperationEntry mapping[KSupportedKeysCount];
+    };
+
+// Predefined standard operations
+const TInt KOperation_None = 0;
+const TInt KOperation_Exit = 1;
+const TInt KOperation_PreviousOptionPage = 2;
+const TInt KOperation_NextOptionPage = 3;
+const TInt KOperation_NextOption = 4;
+const TInt KOperation_PreviousOption = 5;
+const TInt KOperation_ExecuteOption = 6;
+const TInt KOperation_ToggleHelpVisibility = 7;
+const TInt KOperation_ToggleHelpTransparency = 8;
+const TInt KOperation_FirstCustomIndex = 10; // app-specific operations can start here
+
+const TUint32 KNullWsHandle = 0xFFFFFFFF;
+
+class CTestAppBase : public CActive, private MRemConCoreApiTargetObserver
+    {
+public:
+
+    CTestAppBase(TInt aFontSize);
+
+    ~CTestAppBase();
+
+    // inherited from CActive
+    void RunL();
+    void DoCancel();
+
+protected:
+
+    virtual void ExecuteOperation(TInt aOperation,
+            const TDesC& aOperationText) = 0;
+
+    // Subclasses can override this function to take action when the current softkey function has been changed.
+    virtual void SoftkeyFunctionUpdated()
+        {
+        }
+    ;
+
+    // Subclasses can override this function to override the default key event handling.
+    virtual bool ConsumeKeyEvent(TInt /*aScanCode*/)
+        {
+        return false;
+        }
+    ;
+
+    void BaseConstructL(const TOperationsPage* aKeyMap, TInt aPageCount);
+
+    void SetupVolumeKeysL();
+
+    void StartMonitoringWindowEvents();
+
+    TInt CurrentPageNumber();
+
+    TPtrC CurrentPageName();
+
+    TPtrC CurrentSoftkeyName();
+
+    // Presents a selection list to the user and returns the index of the selected entry.
+    // Synchronous call.
+    // returns -1 if the selection was backed out without making a selection
+    TInt SelectFromListL(TPoint aTopLeft, TSize aSize,
+            const TDesC& aHeaderText, RPointerArray<TDesC>& aSelectionList,
+            TInt aInitialSelectionIndex = 0);
+
+    // Synchronous call.
+    // returns false if the selection was backed out without making a selection
+    bool SelectDriveL(TPoint aTopLeft, TSize aSize, const TDesC& aHeaderText,
+            TDes& aDrive);
+
+    // Synchronous call.
+    // returns false if the selection was backed out without making a selection
+    bool SelectFileL(TPoint aTopLeft, TSize aSize, const TDesC& aHeaderText,
+            const TDesC& aDrive, TDes& aFullFilename);
+
+    // Synchronous call.
+    // returns false if the selection was backed out without making a selection
+    bool SelectFileWithHistoryL(TPoint aTopLeft, TSize aSize,
+            TDes& aFullFilename, const TDesC& aHistoryFilename,
+            TInt aMaxHistoryEntries);
+
+    // Synchronous call.
+    // returns false if the selection was backed out without making a selection
+    bool SelectIntegerL(TPoint aTopLeft, TSize aSize,
+            const TDesC& aHeaderText, TInt aMin, TInt aMax, TInt& aSelection); // set aSelection to default value
+
+    // Synchronous call.  Returns the scan code of the pressed key.
+    TInt WaitForAnyKey();
+
+    const TInt iFontSize;
+
+    RFs iFs;
+    RWsSession iWs;
+    CWsScreenDevice* iScreenDevice;
+    RWindowGroup* iWindowGroup;
+    CWindowGc* iGc;
+    CFont* iFont;
+    CFbsTypefaceStore* iTypefaceStore;
+    TSize iDisplaySize;
+    RWindow* iSelectionWindow;
+    RWindow* iHelpWindow;
+
+private:
+
+    enum TTestAppPointerEvent
+        {
+        EPointerEvent_None,
+        EPointerEvent_Up,
+        EPointerEvent_Down,
+        EPointerEvent_Left,
+        EPointerEvent_Right,
+        EPointerEvent_Select
+        };
+
+    // inherited from MRemConCoreApiTargetObserver
+    void MrccatoCommand(TRemConCoreApiOperationId aOperationId,
+            TRemConCoreApiButtonAction aButtonAct);
+
+    TInt KeyMapOperation(TInt aIndex, TInt aPage);
+
+    TPtrC KeyMapText(TInt aIndex, TInt aPage);
+
+    void IncrementKeymapIndex(TInt& aIndex, TInt aPage);
+
+    void DecrementKeymapIndex(TInt& aIndex, TInt aPage);
+
+    void CalculateHelpWindowSize();
+
+    void DrawHelpText();
+
+    void DoSelectFileL(TPoint aTopRight, TSize aWindowSize,
+            const TDesC& aHeaderText, const TFileName& aDirectory,
+            TInt aDirectoryLevel, TDes& aSelectedDirectory,
+            TDes& aSelectedFilename);
+
+    void ReadDirectoryEntriesL(const TFileName& aDirectoryName,
+            RPointerArray<TDesC>& aFileNames);
+
+    void ReadFileHistory(const TDesC& aHistoryFilename);
+
+    void AddToFileHistory(const TDesC& aFilename,
+            const TDesC& aHistoryFilename, TInt aMaxHistoryEntries);
+
+    TTestAppPointerEvent CharacterizePointerEvent(
+            TAdvancedPointerEvent& event);
+
+    const TOperationsPage* iKeyMap;
+    TInt iPageCount;
+    TInt iCurrentPage;
+    TInt iSoftkeyIndex;
+    RPointerArray<HBufC> iFileHistory;
+
+    CActiveSchedulerWait iWait;
+
+    TPoint iHelpWindowTopRight;
+    TSize iHelpWindowSize;
+    TInt iHelpWindowColumn1Width;
+    TInt iHelpWindowColumn2Width;
+    bool iHelpActive;
+    bool iHelpSemitransparentBackgroundActive;
+
+    TPoint iPointerDownPosition;
+
+    // For volume key support
+    CRemConCoreApiTarget* iCoreTarget;
+    CRemConInterfaceSelector* iInterfaceSelector;
+    };
+
+#endif // TESTAPPBASE_H_