tsrc/consoleplayer/common/testappbase.h
author hgs
Fri, 03 Sep 2010 19:37:02 -0500
changeset 33 e1b6d78dfe6a
permissions -rw-r--r--
201035
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
 * All rights reserved.
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
 *
hgs
parents:
diff changeset
     9
 * Initial Contributors:
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
 *
hgs
parents:
diff changeset
    12
 * Contributors:
hgs
parents:
diff changeset
    13
 *
hgs
parents:
diff changeset
    14
 * Description:
hgs
parents:
diff changeset
    15
 * Header specifying the common test functionality.
hgs
parents:
diff changeset
    16
 * 
hgs
parents:
diff changeset
    17
 */
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#ifndef __TEST_APP_BASE_H__
hgs
parents:
diff changeset
    20
#define __TEST_APP_BASE_H__
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include <e32base.h>
hgs
parents:
diff changeset
    23
#include <w32std.h>
hgs
parents:
diff changeset
    24
#include <remconcoreapitargetobserver.h>  // for volume key handling
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
class CRemConCoreApiTarget;
hgs
parents:
diff changeset
    27
class CRemConInterfaceSelector;
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
#define STR(a) (TText*)L##a
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
// 17 keys are supported.  The keys are in this order:
hgs
parents:
diff changeset
    32
//    Enter, Up, Down, Left, Right, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, *, #
hgs
parents:
diff changeset
    33
const TInt KSupportedKeysCount = 17;
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
struct TOperationEntry
hgs
parents:
diff changeset
    36
    {
hgs
parents:
diff changeset
    37
    const TText* text;
hgs
parents:
diff changeset
    38
    TInt         operation;
hgs
parents:
diff changeset
    39
    };
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
struct TOperationsPage
hgs
parents:
diff changeset
    42
    {
hgs
parents:
diff changeset
    43
    const TText*    pageName;    
hgs
parents:
diff changeset
    44
    TInt            defaultSoftkeyIndex;
hgs
parents:
diff changeset
    45
    TOperationEntry mapping[KSupportedKeysCount];
hgs
parents:
diff changeset
    46
    };
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
// Predefined standard operations
hgs
parents:
diff changeset
    49
const TInt KOperation_None = 0;
hgs
parents:
diff changeset
    50
const TInt KOperation_Exit = 1;
hgs
parents:
diff changeset
    51
const TInt KOperation_PreviousOptionPage = 2;
hgs
parents:
diff changeset
    52
const TInt KOperation_NextOptionPage = 3;
hgs
parents:
diff changeset
    53
const TInt KOperation_NextOption = 4;
hgs
parents:
diff changeset
    54
const TInt KOperation_PreviousOption = 5;
hgs
parents:
diff changeset
    55
const TInt KOperation_ExecuteOption = 6;
hgs
parents:
diff changeset
    56
const TInt KOperation_ToggleHelpVisibility = 7;
hgs
parents:
diff changeset
    57
const TInt KOperation_ToggleHelpTransparency = 8;
hgs
parents:
diff changeset
    58
const TInt KOperation_FirstCustomIndex = 10;  // app-specific operations can start here
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
const TUint32 KNullWsHandle = 0xFFFFFFFF;
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
class ITestAppPrompts
hgs
parents:
diff changeset
    63
    {
hgs
parents:
diff changeset
    64
public:
hgs
parents:
diff changeset
    65
    
hgs
parents:
diff changeset
    66
    // Presents a selection list to the user and returns the index of the selected entry.
hgs
parents:
diff changeset
    67
    // Synchronous call.
hgs
parents:
diff changeset
    68
    // returns -1 if the selection was backed out without making a selection
hgs
parents:
diff changeset
    69
    virtual TInt SelectFromListL( TPoint aTopLeft,
hgs
parents:
diff changeset
    70
                                  TSize aSize,
hgs
parents:
diff changeset
    71
                                  const TDesC& aHeaderText, 
hgs
parents:
diff changeset
    72
                                  RPointerArray<TDesC>& aSelectionList, 
hgs
parents:
diff changeset
    73
                                  TInt aInitialSelectionIndex = 0 ) = 0;
hgs
parents:
diff changeset
    74
hgs
parents:
diff changeset
    75
    // overload with HBufC instead of TDesC
hgs
parents:
diff changeset
    76
    virtual TInt SelectFromListL( TPoint aTopLeft,
hgs
parents:
diff changeset
    77
                                  TSize aSize,
hgs
parents:
diff changeset
    78
                                  const TDesC& aHeaderText, 
hgs
parents:
diff changeset
    79
                                  RPointerArray<HBufC>& aSelectionList, 
hgs
parents:
diff changeset
    80
                                  TInt aInitialSelectionIndex = 0 ) = 0;
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
    // Synchronous call.
hgs
parents:
diff changeset
    83
    // returns false if the selection was backed out without making a selection
hgs
parents:
diff changeset
    84
    virtual bool SelectDriveL( TPoint aTopLeft,
hgs
parents:
diff changeset
    85
                               TSize aSize,
hgs
parents:
diff changeset
    86
                               const TDesC& aHeaderText, 
hgs
parents:
diff changeset
    87
                               TDes& aDrive ) = 0;
hgs
parents:
diff changeset
    88
    
hgs
parents:
diff changeset
    89
    // Synchronous call.
hgs
parents:
diff changeset
    90
    // returns false if the selection was backed out without making a selection
hgs
parents:
diff changeset
    91
    virtual bool SelectFileL( TPoint aTopLeft,
hgs
parents:
diff changeset
    92
                              TSize aSize,
hgs
parents:
diff changeset
    93
                              const TDesC& aHeaderText, 
hgs
parents:
diff changeset
    94
                              const TDesC& aDrive, 
hgs
parents:
diff changeset
    95
                              TDes& aFullFilename ) = 0;
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
    // Synchronous call.
hgs
parents:
diff changeset
    98
    // returns false if the selection was backed out without making a selection
hgs
parents:
diff changeset
    99
    virtual bool SelectFileWithHistoryL( TPoint aTopLeft,
hgs
parents:
diff changeset
   100
                                         TSize aSize,
hgs
parents:
diff changeset
   101
                                         TDes& aFullFilename,
hgs
parents:
diff changeset
   102
                                         const TDesC& aHistoryFilename,
hgs
parents:
diff changeset
   103
                                         TInt aMaxHistoryEntries,
hgs
parents:
diff changeset
   104
                                         const TDesC& aPrompt = _L("Select drive or recent file:") ) = 0;    
hgs
parents:
diff changeset
   105
    
hgs
parents:
diff changeset
   106
    // Synchronous call.
hgs
parents:
diff changeset
   107
    // returns false if the selection was backed out without making a selection
hgs
parents:
diff changeset
   108
    virtual bool SelectIntegerL( TPoint aTopLeft,
hgs
parents:
diff changeset
   109
                                 TSize aSize,
hgs
parents:
diff changeset
   110
                                 const TDesC& aHeaderText,
hgs
parents:
diff changeset
   111
                                 TInt aMin,
hgs
parents:
diff changeset
   112
                                 TInt aMax,
hgs
parents:
diff changeset
   113
                                 TInt& aSelection ) = 0;  // set aSelection to default value
hgs
parents:
diff changeset
   114
    
hgs
parents:
diff changeset
   115
    // Synchronous call.  Returns the scan code of the pressed key.
hgs
parents:
diff changeset
   116
    virtual TInt WaitForAnyKey() = 0;    
hgs
parents:
diff changeset
   117
    
hgs
parents:
diff changeset
   118
    virtual TSize DisplaySize() = 0;
hgs
parents:
diff changeset
   119
    };
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
class CTestAppBase : public CActive,
hgs
parents:
diff changeset
   122
                     protected ITestAppPrompts,
hgs
parents:
diff changeset
   123
                     private MRemConCoreApiTargetObserver
hgs
parents:
diff changeset
   124
    {
hgs
parents:
diff changeset
   125
public:
hgs
parents:
diff changeset
   126
    
hgs
parents:
diff changeset
   127
    CTestAppBase( TInt aFontSize );
hgs
parents:
diff changeset
   128
    
hgs
parents:
diff changeset
   129
    ~CTestAppBase();
hgs
parents:
diff changeset
   130
    
hgs
parents:
diff changeset
   131
    // inherited from CActive
hgs
parents:
diff changeset
   132
    void RunL();
hgs
parents:
diff changeset
   133
    void DoCancel();
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
protected:
hgs
parents:
diff changeset
   136
    
hgs
parents:
diff changeset
   137
    enum TTestAppPointerEvent
hgs
parents:
diff changeset
   138
        {
hgs
parents:
diff changeset
   139
        EPointerEvent_None,
hgs
parents:
diff changeset
   140
        EPointerEvent_Up,
hgs
parents:
diff changeset
   141
        EPointerEvent_Down,
hgs
parents:
diff changeset
   142
        EPointerEvent_Left,
hgs
parents:
diff changeset
   143
        EPointerEvent_Right,
hgs
parents:
diff changeset
   144
        EPointerEvent_Select
hgs
parents:
diff changeset
   145
        };
hgs
parents:
diff changeset
   146
    
hgs
parents:
diff changeset
   147
    virtual void ExecuteOperation( TInt aOperation, const TDesC& aOperationText ) = 0;
hgs
parents:
diff changeset
   148
hgs
parents:
diff changeset
   149
    // Subclasses can override this function to take action when the current softkey function has been changed.
hgs
parents:
diff changeset
   150
    virtual void SoftkeyFunctionUpdated() {};
hgs
parents:
diff changeset
   151
    
hgs
parents:
diff changeset
   152
    // Subclasses can override this function to override the default key event handling.
hgs
parents:
diff changeset
   153
    virtual bool ConsumeKeyEvent( TInt /*aKeyCode*/ ) { return false; };
hgs
parents:
diff changeset
   154
    
hgs
parents:
diff changeset
   155
    void BaseConstructL( const TOperationsPage* aKeyMap, TInt aPageCount );
hgs
parents:
diff changeset
   156
    
hgs
parents:
diff changeset
   157
    void SetupVolumeKeysL();
hgs
parents:
diff changeset
   158
hgs
parents:
diff changeset
   159
    void StartMonitoringWindowEvents();
hgs
parents:
diff changeset
   160
hgs
parents:
diff changeset
   161
    TInt CurrentPageNumber();
hgs
parents:
diff changeset
   162
    
hgs
parents:
diff changeset
   163
    TPtrC CurrentPageName();
hgs
parents:
diff changeset
   164
    
hgs
parents:
diff changeset
   165
    TPtrC CurrentSoftkeyName();    
hgs
parents:
diff changeset
   166
    
hgs
parents:
diff changeset
   167
    // Each line in the file will be an entry in the aContents array
hgs
parents:
diff changeset
   168
    TInt ReadFile( const TDesC& aFilename, RPointerArray<HBufC>& aContents );    
hgs
parents:
diff changeset
   169
    
hgs
parents:
diff changeset
   170
    void BuildDriveListL( RPointerArray<HBufC>& aDrives );
hgs
parents:
diff changeset
   171
        
hgs
parents:
diff changeset
   172
    void StartReceivingPointerEvents();
hgs
parents:
diff changeset
   173
    void StopReceivingPointerEvents();
hgs
parents:
diff changeset
   174
hgs
parents:
diff changeset
   175
    TTestAppPointerEvent CharacterizePointerEvent( const TAdvancedPointerEvent& event );    
hgs
parents:
diff changeset
   176
        
hgs
parents:
diff changeset
   177
    virtual void HandlePointerEvent( const TAdvancedPointerEvent& /*aEvent*/ ) {}
hgs
parents:
diff changeset
   178
    
hgs
parents:
diff changeset
   179
    // inherited from ITestAppPrompts
hgs
parents:
diff changeset
   180
    TInt SelectFromListL( TPoint aTopLeft,
hgs
parents:
diff changeset
   181
                          TSize aSize,
hgs
parents:
diff changeset
   182
                          const TDesC& aHeaderText, 
hgs
parents:
diff changeset
   183
                          RPointerArray<TDesC>& aSelectionList, 
hgs
parents:
diff changeset
   184
                          TInt aInitialSelectionIndex = 0 );
hgs
parents:
diff changeset
   185
    TInt SelectFromListL( TPoint aTopLeft,
hgs
parents:
diff changeset
   186
                          TSize aSize,
hgs
parents:
diff changeset
   187
                          const TDesC& aHeaderText, 
hgs
parents:
diff changeset
   188
                          RPointerArray<HBufC>& aSelectionList, 
hgs
parents:
diff changeset
   189
                          TInt aInitialSelectionIndex = 0 );
hgs
parents:
diff changeset
   190
    bool SelectDriveL( TPoint aTopLeft,
hgs
parents:
diff changeset
   191
                       TSize aSize,
hgs
parents:
diff changeset
   192
                       const TDesC& aHeaderText, 
hgs
parents:
diff changeset
   193
                       TDes& aDrive );
hgs
parents:
diff changeset
   194
    bool SelectFileL( TPoint aTopLeft,
hgs
parents:
diff changeset
   195
                      TSize aSize,
hgs
parents:
diff changeset
   196
                      const TDesC& aHeaderText, 
hgs
parents:
diff changeset
   197
                      const TDesC& aDrive, 
hgs
parents:
diff changeset
   198
                      TDes& aFullFilename );
hgs
parents:
diff changeset
   199
    bool SelectFileWithHistoryL( TPoint aTopLeft,
hgs
parents:
diff changeset
   200
                                 TSize aSize,
hgs
parents:
diff changeset
   201
                                 TDes& aFullFilename,
hgs
parents:
diff changeset
   202
                                 const TDesC& aHistoryFilename,
hgs
parents:
diff changeset
   203
                                 TInt aMaxHistoryEntries,
hgs
parents:
diff changeset
   204
                                 const TDesC& aPrompt = _L("Select drive or recent file:") );    
hgs
parents:
diff changeset
   205
    bool SelectIntegerL( TPoint aTopLeft,
hgs
parents:
diff changeset
   206
                         TSize aSize,
hgs
parents:
diff changeset
   207
                         const TDesC& aHeaderText,
hgs
parents:
diff changeset
   208
                         TInt aMin,
hgs
parents:
diff changeset
   209
                         TInt aMax,
hgs
parents:
diff changeset
   210
                         TInt& aSelection );  // set aSelection to default value
hgs
parents:
diff changeset
   211
    TInt WaitForAnyKey();    
hgs
parents:
diff changeset
   212
    TSize DisplaySize() {return iDisplaySize;}
hgs
parents:
diff changeset
   213
    
hgs
parents:
diff changeset
   214
    const TInt            iFontSize;
hgs
parents:
diff changeset
   215
    
hgs
parents:
diff changeset
   216
    RFs                   iFs;
hgs
parents:
diff changeset
   217
    RWsSession            iWs;
hgs
parents:
diff changeset
   218
    CWsScreenDevice*      iScreenDevice; 
hgs
parents:
diff changeset
   219
    RWindowGroup*         iWindowGroup;
hgs
parents:
diff changeset
   220
    CWindowGc*            iGc;
hgs
parents:
diff changeset
   221
    CFont*                iFont;
hgs
parents:
diff changeset
   222
    CFbsTypefaceStore*    iTypefaceStore;
hgs
parents:
diff changeset
   223
    TSize                 iDisplaySize;
hgs
parents:
diff changeset
   224
    RWindow*              iSelectionWindow;    
hgs
parents:
diff changeset
   225
    RWindow*              iHelpWindow;
hgs
parents:
diff changeset
   226
hgs
parents:
diff changeset
   227
private:
hgs
parents:
diff changeset
   228
    
hgs
parents:
diff changeset
   229
    // inherited from MRemConCoreApiTargetObserver
hgs
parents:
diff changeset
   230
    void MrccatoCommand(TRemConCoreApiOperationId aOperationId,
hgs
parents:
diff changeset
   231
                        TRemConCoreApiButtonAction aButtonAct);
hgs
parents:
diff changeset
   232
hgs
parents:
diff changeset
   233
    TInt KeyMapOperation(TInt aIndex, TInt aPage );
hgs
parents:
diff changeset
   234
    
hgs
parents:
diff changeset
   235
    TPtrC KeyMapText( TInt aIndex, TInt aPage );
hgs
parents:
diff changeset
   236
hgs
parents:
diff changeset
   237
    void IncrementKeymapIndex( TInt& aIndex, TInt aPage );
hgs
parents:
diff changeset
   238
    
hgs
parents:
diff changeset
   239
    void DecrementKeymapIndex( TInt& aIndex, TInt aPage );
hgs
parents:
diff changeset
   240
    
hgs
parents:
diff changeset
   241
    void CalculateHelpWindowSize();
hgs
parents:
diff changeset
   242
hgs
parents:
diff changeset
   243
    void DrawHelpText();
hgs
parents:
diff changeset
   244
    
hgs
parents:
diff changeset
   245
    void DoSelectFileL( TPoint aTopRight,
hgs
parents:
diff changeset
   246
                        TSize aWindowSize,
hgs
parents:
diff changeset
   247
                        const TDesC& aHeaderText, 
hgs
parents:
diff changeset
   248
                        const TFileName& aDirectory, 
hgs
parents:
diff changeset
   249
                        TInt aDirectoryLevel, 
hgs
parents:
diff changeset
   250
                        TDes& aSelectedDirectory, 
hgs
parents:
diff changeset
   251
                        TDes& aSelectedFilename );     
hgs
parents:
diff changeset
   252
    
hgs
parents:
diff changeset
   253
    void ReadDirectoryEntriesL( const TFileName& aDirectoryName, RPointerArray<TDesC>& aFileNames );
hgs
parents:
diff changeset
   254
    
hgs
parents:
diff changeset
   255
    void ReadFileHistory( const TDesC& aHistoryFilename );
hgs
parents:
diff changeset
   256
    
hgs
parents:
diff changeset
   257
    void AddToFileHistory( const TDesC& aFilename, const TDesC& aHistoryFilename, TInt aMaxHistoryEntries );
hgs
parents:
diff changeset
   258
hgs
parents:
diff changeset
   259
    const TOperationsPage* iKeyMap;
hgs
parents:
diff changeset
   260
    TInt                   iPageCount;
hgs
parents:
diff changeset
   261
    TInt                   iCurrentPage;
hgs
parents:
diff changeset
   262
    TInt                   iSoftkeyIndices[30];
hgs
parents:
diff changeset
   263
    RPointerArray<HBufC>   iFileHistory;
hgs
parents:
diff changeset
   264
    
hgs
parents:
diff changeset
   265
    CActiveSchedulerWait  iWait;
hgs
parents:
diff changeset
   266
    
hgs
parents:
diff changeset
   267
    TPoint                iHelpWindowTopRight;
hgs
parents:
diff changeset
   268
    TSize                 iHelpWindowSize;
hgs
parents:
diff changeset
   269
    TInt                  iHelpWindowColumn1Width;
hgs
parents:
diff changeset
   270
    TInt                  iHelpWindowColumn2Width;
hgs
parents:
diff changeset
   271
    bool                  iHelpActive;
hgs
parents:
diff changeset
   272
    bool                  iHelpSemitransparentBackgroundActive;    
hgs
parents:
diff changeset
   273
    
hgs
parents:
diff changeset
   274
    bool                  iRoutePointerEventsToApp;
hgs
parents:
diff changeset
   275
    TPoint                iPointerDownPosition;
hgs
parents:
diff changeset
   276
    
hgs
parents:
diff changeset
   277
    // For volume key support
hgs
parents:
diff changeset
   278
    CRemConCoreApiTarget*     iCoreTarget;
hgs
parents:
diff changeset
   279
    CRemConInterfaceSelector* iInterfaceSelector;    
hgs
parents:
diff changeset
   280
    };
hgs
parents:
diff changeset
   281
hgs
parents:
diff changeset
   282
#endif