hwrmhaptics/examples/hapticstestapp/src/hapticstesteffectdatahandler.cpp
changeset 76 cb32bcc88bad
equal deleted inserted replaced
73:d38941471f1c 76:cb32bcc88bad
       
     1 /*
       
     2 * Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Symbian Foundation License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Active object listening waiting for async haptics completion.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include <eikmenup.h> 
       
    20 #include <eikon.hrh>
       
    21 
       
    22 #include "hapticstest.hrh"
       
    23 #include "hapticstesteffectdatahandler.h"
       
    24 
       
    25 
       
    26 _LIT( KManualEffectName, "manual" );
       
    27 
       
    28 const TInt KEffectModificationInterval = 50000; // microseconds
       
    29 const TInt KMaxEffectHistorySize = 25;
       
    30 const TInt KDefaultNonInfiniteDuration = 1000; // milliseconds
       
    31 
       
    32 // default values for manual effects
       
    33 const TInt KDefaultEffectMagnitude = KHWRMHapticsMaxMagnitude;
       
    34 const TInt KDefaultEffectAttackLevel = KHWRMHapticsMaxMagnitude * 0.5;
       
    35 const TInt KDefaultEffectFadeLevel = KHWRMHapticsMaxMagnitude * 0.5;
       
    36 const TInt KDefaultEffectAttackTime = 200; // milliseconds
       
    37 const TInt KDefaultEffectFadeTime = 200; // milliseconds
       
    38 const TInt KDefaultEffectPeriod = 300; // milliseconds
       
    39 const CHWRMHaptics::THWRMHapticsEffectStyles KDefaultEffectStyle = CHWRMHaptics::EHWRMHapticsStyleStrong;
       
    40 
       
    41 
       
    42 // ---------------------------------------------------------------------------
       
    43 // Symbian two-phased constructor.
       
    44 // ---------------------------------------------------------------------------
       
    45 //
       
    46 CHapticsTestEffectDataHandler* CHapticsTestEffectDataHandler::NewL()
       
    47     {
       
    48     CHapticsTestEffectDataHandler* self = 
       
    49         CHapticsTestEffectDataHandler::NewLC();
       
    50 
       
    51     CleanupStack::Pop( self );
       
    52 
       
    53     return self;
       
    54     }
       
    55 
       
    56 // ---------------------------------------------------------------------------
       
    57 // Symbian two-phased constructor.
       
    58 // ---------------------------------------------------------------------------
       
    59 //
       
    60 CHapticsTestEffectDataHandler* CHapticsTestEffectDataHandler::NewLC()
       
    61     {
       
    62     CHapticsTestEffectDataHandler* self =
       
    63          new ( ELeave ) CHapticsTestEffectDataHandler();
       
    64     CleanupStack::PushL( self );
       
    65     
       
    66     self->ConstructL();
       
    67     
       
    68     return self;
       
    69     }
       
    70 
       
    71 // ---------------------------------------------------------------------------
       
    72 // Destructor.
       
    73 // ---------------------------------------------------------------------------
       
    74 //
       
    75 CHapticsTestEffectDataHandler::~CHapticsTestEffectDataHandler()
       
    76     {
       
    77     ResetModifiableEffectTimer();
       
    78 
       
    79     if ( iModifyEffect )
       
    80         {
       
    81         delete iModifyEffect;
       
    82         iModifyEffect = NULL;
       
    83         }
       
    84 
       
    85     iPlayedEffectArray.Close();
       
    86     }
       
    87 
       
    88 // ---------------------------------------------------------------------------
       
    89 // Adds effect data to effect history array.
       
    90 // ---------------------------------------------------------------------------
       
    91 //
       
    92 void CHapticsTestEffectDataHandler::AddEffectInfo( TInt aEffectHandle, 
       
    93                                                    TInt aFileHandle,
       
    94                                                    TInt aIndex )
       
    95     {
       
    96     TPlayedEffect newEffect;
       
    97     newEffect.iEffectHandle = aEffectHandle;
       
    98     newEffect.iFileHandle = aFileHandle;
       
    99     newEffect.iEffectIndex = aIndex;
       
   100 
       
   101     // add item to the beginning of the array, ignore possible error
       
   102     iPlayedEffectArray.Insert( newEffect, 0 );
       
   103     
       
   104     // if there are too many items, remove the last one
       
   105     TInt count = iPlayedEffectArray.Count();
       
   106     if ( count > KMaxEffectHistorySize )
       
   107         {
       
   108         iPlayedEffectArray.Remove( count - 1 );
       
   109         }
       
   110     }
       
   111 
       
   112 // ---------------------------------------------------------------------------
       
   113 // Deletest all effect info items from the list that have
       
   114 // the given filehandle in their data.
       
   115 // ---------------------------------------------------------------------------
       
   116 //
       
   117 void CHapticsTestEffectDataHandler::DeleteEffectInfo( TInt aFileHandle )
       
   118     {
       
   119     for ( TInt i = iPlayedEffectArray.Count() - 1; i >= 0 ; --i )
       
   120         {
       
   121         if ( iPlayedEffectArray[i].iFileHandle == aFileHandle )
       
   122             {
       
   123             iPlayedEffectArray.Remove( i );
       
   124             }
       
   125         }
       
   126     }
       
   127 
       
   128 // ---------------------------------------------------------------------------
       
   129 // Returns the amount of effect data stored in the history data array.
       
   130 // ---------------------------------------------------------------------------
       
   131 //
       
   132 TInt CHapticsTestEffectDataHandler::Count() const
       
   133     {
       
   134     return iPlayedEffectArray.Count();
       
   135     }
       
   136 
       
   137 // ---------------------------------------------------------------------------
       
   138 // Returns the effect handle of the given effect data item.
       
   139 // ---------------------------------------------------------------------------
       
   140 //
       
   141 TInt CHapticsTestEffectDataHandler::EffectHandle( TInt aIndex ) const
       
   142     {
       
   143     return iPlayedEffectArray[aIndex].iEffectHandle;
       
   144     }
       
   145 
       
   146 // ---------------------------------------------------------------------------
       
   147 // Returns the file handle of the given effect data item.
       
   148 // ---------------------------------------------------------------------------
       
   149 //
       
   150 TInt CHapticsTestEffectDataHandler::FileHandle( TInt aIndex ) const
       
   151     {
       
   152     return iPlayedEffectArray[aIndex].iFileHandle;
       
   153     }
       
   154 
       
   155 // ---------------------------------------------------------------------------
       
   156 // Returns the effect index of the given effect data item.
       
   157 // ---------------------------------------------------------------------------
       
   158 //
       
   159 TInt CHapticsTestEffectDataHandler::EffectIndex( TInt aIndex ) const
       
   160     {
       
   161     return iPlayedEffectArray[aIndex].iEffectIndex;
       
   162     }
       
   163 
       
   164 // ---------------------------------------------------------------------------
       
   165 // Resets the modifiable effect data with the data received in the
       
   166 // given magsweep effect.
       
   167 // ---------------------------------------------------------------------------
       
   168 //
       
   169 void CHapticsTestEffectDataHandler::ResetModifiableMagSweepEffectL( 
       
   170                 const CHWRMHaptics::THWRMHapticsMagSweepEffect& aMagSweep,
       
   171                 TInt aEffectHandle, CHWRMHaptics* aHaptics )
       
   172     {
       
   173     // reset effect data
       
   174     if ( iModifyEffect )
       
   175         {
       
   176         delete iModifyEffect;
       
   177         iModifyEffect = NULL;
       
   178         }
       
   179 
       
   180     // create new effect data
       
   181     iModifyEffect = new (ELeave) TModifyEffect();
       
   182     iModifyEffect->iHaptics = aHaptics;
       
   183     iModifyEffect->iEffectType = CHWRMHaptics::EHWRMHapticsTypeMagSweep;
       
   184     iModifyEffect->iEffectHandle = aEffectHandle;
       
   185     iModifyEffect->iModifyCount = 0;
       
   186 
       
   187     // store default effect values
       
   188     iModifyEffect->iDuration = aMagSweep.iDuration;
       
   189     iModifyEffect->iMagnitude = aMagSweep.iMagnitude;
       
   190     iModifyEffect->iStyle = aMagSweep.iStyle;
       
   191     iModifyEffect->iAttackLevel = aMagSweep.iAttackLevel;
       
   192     iModifyEffect->iFadeLevel = aMagSweep.iFadeLevel;
       
   193     iModifyEffect->iAttackTime = aMagSweep.iAttackTime;
       
   194     iModifyEffect->iFadeTime = aMagSweep.iFadeTime;
       
   195     
       
   196     // no period for magsweep, use default value
       
   197     iModifyEffect->iPeriod = KDefaultEffectPeriod;
       
   198     }
       
   199 
       
   200 // ---------------------------------------------------------------------------
       
   201 // Resets the modifiable effect data with the data received in the
       
   202 // given periodic effect.
       
   203 // ---------------------------------------------------------------------------
       
   204 //
       
   205 void CHapticsTestEffectDataHandler::ResetModifiablePeriodicEffectL( 
       
   206                 const CHWRMHaptics::THWRMHapticsPeriodicEffect& aPeriodic,
       
   207                 TInt aEffectHandle, CHWRMHaptics* aHaptics )
       
   208     {
       
   209     // reset effect data
       
   210     if ( iModifyEffect )
       
   211         {
       
   212         delete iModifyEffect;
       
   213         iModifyEffect = NULL;
       
   214         }
       
   215 
       
   216     // create new effect data
       
   217     iModifyEffect = new (ELeave) TModifyEffect();
       
   218     iModifyEffect->iHaptics = aHaptics;
       
   219     iModifyEffect->iEffectType = CHWRMHaptics::EHWRMHapticsTypePeriodic;
       
   220     iModifyEffect->iEffectHandle = aEffectHandle;
       
   221     iModifyEffect->iModifyCount = 0;
       
   222 
       
   223     // store default effect values
       
   224     iModifyEffect->iDuration = aPeriodic.iDuration;
       
   225     iModifyEffect->iMagnitude = aPeriodic.iMagnitude;
       
   226     iModifyEffect->iStyle = aPeriodic.iStyle;
       
   227     iModifyEffect->iAttackLevel = aPeriodic.iAttackLevel;
       
   228     iModifyEffect->iFadeLevel = aPeriodic.iFadeLevel;
       
   229     iModifyEffect->iAttackTime = aPeriodic.iAttackTime;
       
   230     iModifyEffect->iFadeTime = aPeriodic.iFadeTime;
       
   231     iModifyEffect->iPeriod = aPeriodic.iPeriod;
       
   232     }
       
   233 
       
   234 // ---------------------------------------------------------------------------
       
   235 // Starts the timer for constantly modifying an effect.
       
   236 // ---------------------------------------------------------------------------
       
   237 //
       
   238 void CHapticsTestEffectDataHandler::StartModifiableEffectTimerL( TInt (*aFunction)(TAny* aPtr) )
       
   239     {
       
   240     ResetModifiableEffectTimer();
       
   241 
       
   242     // create and start periodic timer
       
   243     iModifyTimer = CPeriodic::NewL( CActive::EPriorityStandard );
       
   244     iModifyTimer->Start( KEffectModificationInterval,
       
   245                          KEffectModificationInterval,
       
   246                          TCallBack( aFunction, this ) );
       
   247     }
       
   248 
       
   249 // ---------------------------------------------------------------------------
       
   250 // Cancels and deletes the timer.
       
   251 // ---------------------------------------------------------------------------
       
   252 //
       
   253 void CHapticsTestEffectDataHandler::ResetModifiableEffectTimer()
       
   254     {
       
   255     // reset timer
       
   256     if ( iModifyTimer )
       
   257         {
       
   258         iModifyTimer->Cancel();
       
   259         delete iModifyTimer;
       
   260         iModifyTimer = NULL;
       
   261         }
       
   262     }
       
   263 
       
   264 // ---------------------------------------------------------------------------
       
   265 // Returns whether or not a modifiable effect exists.
       
   266 // ---------------------------------------------------------------------------
       
   267 //
       
   268 TBool CHapticsTestEffectDataHandler::ModifiableEffectExists() const
       
   269     {
       
   270     return iModifyEffect ? ETrue : EFalse;
       
   271     }
       
   272 
       
   273 // ---------------------------------------------------------------------------
       
   274 // Returns whether or not the currently stored effect is a magsweep effect.
       
   275 // ---------------------------------------------------------------------------
       
   276 //
       
   277 TBool CHapticsTestEffectDataHandler::ModifiableEffectIsMagSweep() const
       
   278     {
       
   279     return ( iModifyEffect->iEffectType == CHWRMHaptics::EHWRMHapticsTypeMagSweep );
       
   280     }
       
   281 
       
   282 // ---------------------------------------------------------------------------
       
   283 // Returns whether or not the currently stored effect is a periodic effect.
       
   284 // ---------------------------------------------------------------------------
       
   285 //
       
   286 TBool CHapticsTestEffectDataHandler::ModifiableEffectIsPeriodic() const
       
   287     {
       
   288     return ( iModifyEffect->iEffectType == CHWRMHaptics::EHWRMHapticsTypePeriodic );
       
   289     }
       
   290 
       
   291 // ---------------------------------------------------------------------------
       
   292 // Returns the effect handle of the modifiable effect.
       
   293 // ---------------------------------------------------------------------------
       
   294 //
       
   295 TInt CHapticsTestEffectDataHandler::ModifiableEffectHandle() const
       
   296     {
       
   297     return iModifyEffect->iEffectHandle;
       
   298     }
       
   299 
       
   300 // ---------------------------------------------------------------------------
       
   301 // Returns the amount of times the current modifiable effect
       
   302 // has been modified already.
       
   303 // ---------------------------------------------------------------------------
       
   304 //
       
   305 TInt CHapticsTestEffectDataHandler::ModifyCount() const
       
   306     {
       
   307     return iModifyEffect->iModifyCount;
       
   308     }
       
   309 
       
   310 // ---------------------------------------------------------------------------
       
   311 // Returns the pointer to the haptics client instance, which
       
   312 // has been set to the effect modification data.
       
   313 // ---------------------------------------------------------------------------
       
   314 //
       
   315 CHWRMHaptics* CHapticsTestEffectDataHandler::Haptics() const
       
   316     {
       
   317     return iModifyEffect->iHaptics;
       
   318     }
       
   319 
       
   320 // ---------------------------------------------------------------------------
       
   321 // Fills in default magsweep effect data into the given structure.
       
   322 // ---------------------------------------------------------------------------
       
   323 //
       
   324 void CHapticsTestEffectDataHandler::FillDefaultMagSweepData( 
       
   325                     CHWRMHaptics::THWRMHapticsMagSweepEffect& aMagSweep,
       
   326                     TBool aInfinite, TBool aAutoModifiable,
       
   327                     CHWRMHaptics* aHaptics ) const
       
   328     {
       
   329     if ( aInfinite )
       
   330         {
       
   331         aMagSweep.iDuration = aHaptics->InfiniteDuration();
       
   332         }
       
   333     else
       
   334         {
       
   335         aMagSweep.iDuration = KDefaultNonInfiniteDuration;
       
   336         }
       
   337     
       
   338     if ( aAutoModifiable )
       
   339         {
       
   340         // start modifiable effect from minimum magnitude
       
   341         aMagSweep.iMagnitude = KHWRMHapticsMinMagnitude;
       
   342         aMagSweep.iAttackLevel = KHWRMHapticsMinMagnitude;
       
   343         aMagSweep.iFadeLevel = KHWRMHapticsMinMagnitude;
       
   344         }
       
   345     else
       
   346         {
       
   347         // non-modifiable effect
       
   348         aMagSweep.iMagnitude = KDefaultEffectMagnitude;
       
   349         aMagSweep.iAttackLevel = KDefaultEffectAttackLevel;
       
   350         aMagSweep.iFadeLevel = KDefaultEffectFadeLevel;
       
   351         }
       
   352 
       
   353     aMagSweep.iStyle = KDefaultEffectStyle;
       
   354     aMagSweep.iAttackTime = KDefaultEffectAttackTime;
       
   355     aMagSweep.iFadeTime = KDefaultEffectFadeTime;
       
   356     }
       
   357 
       
   358 // ---------------------------------------------------------------------------
       
   359 // Fills in default periodic effect data into the given structure.
       
   360 // ---------------------------------------------------------------------------
       
   361 //
       
   362 void CHapticsTestEffectDataHandler::FillDefaultPeriodicData( 
       
   363                     CHWRMHaptics::THWRMHapticsPeriodicEffect& aPeriodic,
       
   364                     TBool aInfinite, TBool /*aAutoModifiable*/,
       
   365                     CHWRMHaptics* aHaptics ) const
       
   366     {
       
   367     if ( aInfinite )
       
   368         {
       
   369         aPeriodic.iDuration = aHaptics->InfiniteDuration();
       
   370         }
       
   371     else
       
   372         {
       
   373         aPeriodic.iDuration = KDefaultNonInfiniteDuration;
       
   374         }
       
   375     
       
   376     aPeriodic.iMagnitude = KDefaultEffectMagnitude;
       
   377     aPeriodic.iAttackLevel = KDefaultEffectAttackLevel;
       
   378     aPeriodic.iFadeLevel = KDefaultEffectFadeLevel;
       
   379 
       
   380     aPeriodic.iPeriod = KDefaultEffectPeriod;
       
   381     aPeriodic.iStyle = KDefaultEffectStyle;
       
   382     aPeriodic.iAttackTime = KDefaultEffectAttackTime;
       
   383     aPeriodic.iFadeTime = KDefaultEffectFadeTime;
       
   384     }
       
   385 
       
   386 // ---------------------------------------------------------------------------
       
   387 // Fills in the modifiable effect data into the given magsweep structure.
       
   388 // ---------------------------------------------------------------------------
       
   389 //
       
   390 void CHapticsTestEffectDataHandler::FillModifiableMagSweepData(
       
   391             CHWRMHaptics::THWRMHapticsMagSweepEffect& aMagSweep ) const
       
   392     {
       
   393     aMagSweep.iDuration = iModifyEffect->iDuration;
       
   394     aMagSweep.iStyle = iModifyEffect->iStyle;
       
   395     aMagSweep.iAttackTime = iModifyEffect->iAttackTime;
       
   396     aMagSweep.iFadeTime = iModifyEffect->iFadeTime;
       
   397     aMagSweep.iMagnitude = iModifyEffect->iMagnitude;
       
   398     aMagSweep.iAttackLevel = iModifyEffect->iAttackLevel;
       
   399     aMagSweep.iFadeLevel = iModifyEffect->iFadeLevel;
       
   400     }
       
   401 
       
   402 // ---------------------------------------------------------------------------
       
   403 // Fills in the modifiable effect data into the given periodic structure.
       
   404 // ---------------------------------------------------------------------------
       
   405 //
       
   406 void CHapticsTestEffectDataHandler::FillModifiablePeriodicData( 
       
   407             CHWRMHaptics::THWRMHapticsPeriodicEffect& aPeriodic ) const
       
   408     {
       
   409     aPeriodic.iDuration = iModifyEffect->iDuration;
       
   410     aPeriodic.iStyle = iModifyEffect->iStyle;
       
   411     aPeriodic.iAttackTime = iModifyEffect->iAttackTime;
       
   412     aPeriodic.iFadeTime = iModifyEffect->iFadeTime;
       
   413     aPeriodic.iMagnitude = iModifyEffect->iMagnitude;
       
   414     aPeriodic.iAttackLevel = iModifyEffect->iAttackLevel;
       
   415     aPeriodic.iFadeLevel = iModifyEffect->iFadeLevel;
       
   416     aPeriodic.iPeriod = iModifyEffect->iPeriod;
       
   417     }
       
   418 
       
   419 // ---------------------------------------------------------------------------
       
   420 // Sets the modifiable effect's modify count.
       
   421 // ---------------------------------------------------------------------------
       
   422 //
       
   423 void CHapticsTestEffectDataHandler::SetModifyCount( TInt aModifyCount )
       
   424     {
       
   425     iModifyEffect->iModifyCount = aModifyCount;
       
   426     }
       
   427 
       
   428 // ---------------------------------------------------------------------------
       
   429 // Sets the modifiable effect's duration value.
       
   430 // ---------------------------------------------------------------------------
       
   431 //
       
   432 void CHapticsTestEffectDataHandler::SetDuration( TInt aDuration )
       
   433     {
       
   434     iModifyEffect->iDuration = aDuration;
       
   435     }
       
   436 
       
   437 // ---------------------------------------------------------------------------
       
   438 // Sets the modifiable effect's magnitude value.
       
   439 // ---------------------------------------------------------------------------
       
   440 //
       
   441 void CHapticsTestEffectDataHandler::SetMagnitude( TInt aMagnitude )
       
   442     {
       
   443     iModifyEffect->iMagnitude = aMagnitude;
       
   444     }
       
   445 
       
   446 // ---------------------------------------------------------------------------
       
   447 // Sets the modifiable effect's style value.
       
   448 // ---------------------------------------------------------------------------
       
   449 //
       
   450 void CHapticsTestEffectDataHandler::SetStyle( 
       
   451                         CHWRMHaptics::THWRMHapticsEffectStyles aStyle )
       
   452     {
       
   453     iModifyEffect->iStyle = aStyle;
       
   454     }
       
   455 
       
   456 // ---------------------------------------------------------------------------
       
   457 // Sets the modifiable effect's attack level value.
       
   458 // ---------------------------------------------------------------------------
       
   459 //
       
   460 void CHapticsTestEffectDataHandler::SetAttackLevel( TInt aAttackLevel )
       
   461     {
       
   462     iModifyEffect->iAttackLevel = aAttackLevel;
       
   463     }
       
   464 
       
   465 // ---------------------------------------------------------------------------
       
   466 // Sets the modifiable effect's fade level value.
       
   467 // ---------------------------------------------------------------------------
       
   468 //
       
   469 void CHapticsTestEffectDataHandler::SetFadeLevel( TInt aFadeLevel )
       
   470     {
       
   471     iModifyEffect->iFadeLevel = aFadeLevel;
       
   472     }
       
   473 
       
   474 // ---------------------------------------------------------------------------
       
   475 // Sets the modifiable effect's attack time value.
       
   476 // ---------------------------------------------------------------------------
       
   477 //
       
   478 void CHapticsTestEffectDataHandler::SetAttackTime( TInt aAttackTime )
       
   479     {
       
   480     iModifyEffect->iAttackTime = aAttackTime;
       
   481     }
       
   482 
       
   483 // ---------------------------------------------------------------------------
       
   484 // Sets the modifiable effect's fade time value.
       
   485 // ---------------------------------------------------------------------------
       
   486 //
       
   487 void CHapticsTestEffectDataHandler::SetFadeTime( TInt aFadeTime )
       
   488     {
       
   489     iModifyEffect->iFadeTime = aFadeTime;
       
   490     }
       
   491 
       
   492 // ---------------------------------------------------------------------------
       
   493 // Sets the modifiable effect's period value.
       
   494 // ---------------------------------------------------------------------------
       
   495 //
       
   496 void CHapticsTestEffectDataHandler::SetPeriod( TInt aPeriod )
       
   497     {
       
   498     iModifyEffect->iPeriod = aPeriod;
       
   499     }
       
   500 
       
   501 // ---------------------------------------------------------------------------
       
   502 // Creates all submenu items for a change effect state submenu.
       
   503 // ---------------------------------------------------------------------------
       
   504 //
       
   505 void CHapticsTestEffectDataHandler::DynInitChangeEffectStateSubmenuL( 
       
   506                                                 CEikMenuPane* aMenuPane, 
       
   507                                                 TInt aCommandId,
       
   508                                                 CHWRMHaptics* aHaptics )
       
   509     {
       
   510     // get effect count
       
   511     TInt effectCount = iPlayedEffectArray.Count();
       
   512     
       
   513     // fill effect history data to submenu, if any data available
       
   514     if ( effectCount )
       
   515         {
       
   516         // there is data, hide "none found"
       
   517         aMenuPane->SetItemDimmed( EHapticsTestChangeStateNoneFound, ETrue );
       
   518         
       
   519         // make played effects visible in the submenu
       
   520         CEikMenuPaneItem::SData data;
       
   521         for ( TInt i = 0; i < effectCount; ++i )
       
   522             {
       
   523             // buffer for effect name
       
   524             HBufC8* effectName = HBufC8::NewL( aHaptics->MaxEffectNameLength() );
       
   525             TPtr8 namePtr = effectName->Des();
       
   526             
       
   527             // effect name
       
   528             if ( iPlayedEffectArray[i].iFileHandle > 0 &&
       
   529                  iPlayedEffectArray[i].iEffectIndex > 0 )
       
   530                 {
       
   531                 aHaptics->GetEffectName( iPlayedEffectArray[i].iFileHandle,
       
   532                                          iPlayedEffectArray[i].iEffectIndex,
       
   533                                          namePtr );
       
   534                 }
       
   535             else
       
   536                 {
       
   537                 namePtr.Append( KManualEffectName );
       
   538                 }
       
   539 
       
   540             // insert data to submenu item
       
   541             data.iText.Copy( *effectName );
       
   542             data.iCommandId = aCommandId;
       
   543             data.iCascadeId = 0;
       
   544             data.iFlags = 0;
       
   545             data.iExtraText = KNullDesC;
       
   546             
       
   547             delete effectName;
       
   548             
       
   549             aMenuPane->AddMenuItemL( data );
       
   550             }
       
   551         }
       
   552     }
       
   553 
       
   554 // ---------------------------------------------------------------------------
       
   555 // Creates the checkmark to the duration, which is currently in use
       
   556 // in the duration modification submenu.
       
   557 // ---------------------------------------------------------------------------
       
   558 //
       
   559 void CHapticsTestEffectDataHandler::DynInitDurationSubmenu( 
       
   560                                         CEikMenuPane* aMenuPane ) const
       
   561     {
       
   562     // set check mark to correct duration value
       
   563     if ( iModifyEffect->iDuration == KEffectDuration1 )
       
   564         {
       
   565         aMenuPane->SetItemButtonState( 
       
   566                    EHapticsTestModifyEffectDuration1,
       
   567                    EEikMenuItemSymbolOn );
       
   568         }
       
   569     else if ( iModifyEffect->iDuration == KEffectDuration5 )
       
   570         {
       
   571         aMenuPane->SetItemButtonState( 
       
   572                    EHapticsTestModifyEffectDuration5,
       
   573                    EEikMenuItemSymbolOn );
       
   574         }
       
   575     else if ( iModifyEffect->iDuration == KEffectDuration10 )
       
   576         {
       
   577         aMenuPane->SetItemButtonState( 
       
   578                    EHapticsTestModifyEffectDuration10,
       
   579                    EEikMenuItemSymbolOn );
       
   580         }
       
   581     else if ( iModifyEffect->iDuration == KEffectDuration30 )
       
   582         {
       
   583         aMenuPane->SetItemButtonState( 
       
   584                    EHapticsTestModifyEffectDuration30,
       
   585                    EEikMenuItemSymbolOn );
       
   586         }
       
   587     else if ( iModifyEffect->iDuration == KEffectDuration60 )
       
   588         {
       
   589         aMenuPane->SetItemButtonState( 
       
   590                    EHapticsTestModifyEffectDuration60,
       
   591                    EEikMenuItemSymbolOn );
       
   592         }
       
   593     }
       
   594 
       
   595 // ---------------------------------------------------------------------------
       
   596 // Creates the checkmark to the magnitude, which is currently in use
       
   597 // in the magnitude modification submenu.
       
   598 // ---------------------------------------------------------------------------
       
   599 //
       
   600 void CHapticsTestEffectDataHandler::DynInitMagnitudeSubmenu( 
       
   601                                             CEikMenuPane* aMenuPane ) const
       
   602     {
       
   603     // set check mark to correct magnitude value
       
   604     if ( iModifyEffect->iMagnitude == KHWRMHapticsMinMagnitude )
       
   605         {
       
   606         aMenuPane->SetItemButtonState( 
       
   607                    EHapticsTestModifyEffectMagnitudeMin,
       
   608                    EEikMenuItemSymbolOn );
       
   609         }
       
   610     else if ( iModifyEffect->iMagnitude == KEffectMagnitude25 )
       
   611         {
       
   612         aMenuPane->SetItemButtonState( 
       
   613                    EHapticsTestModifyEffectMagnitude25,
       
   614                    EEikMenuItemSymbolOn );
       
   615         }
       
   616     else if ( iModifyEffect->iMagnitude == KEffectMagnitude50 )
       
   617         {
       
   618         aMenuPane->SetItemButtonState( 
       
   619                    EHapticsTestModifyEffectMagnitude50,
       
   620                    EEikMenuItemSymbolOn );
       
   621         }
       
   622     else if ( iModifyEffect->iMagnitude == KEffectMagnitude75 )
       
   623         {
       
   624         aMenuPane->SetItemButtonState( 
       
   625                    EHapticsTestModifyEffectMagnitude75,
       
   626                    EEikMenuItemSymbolOn );
       
   627         }
       
   628     else if ( iModifyEffect->iMagnitude == KHWRMHapticsMaxMagnitude )
       
   629         {
       
   630         aMenuPane->SetItemButtonState( 
       
   631                    EHapticsTestModifyEffectMagnitudeMax,
       
   632                    EEikMenuItemSymbolOn );
       
   633         }
       
   634     }
       
   635 
       
   636 // ---------------------------------------------------------------------------
       
   637 // Creates the checkmark to the style, which is currently in use
       
   638 // in the style modification submenu.
       
   639 // ---------------------------------------------------------------------------
       
   640 //
       
   641 void CHapticsTestEffectDataHandler::DynInitStyleSubmenu( 
       
   642                                             CEikMenuPane* aMenuPane ) const
       
   643     {
       
   644     // set check mark to correct style value
       
   645     if ( iModifyEffect->iStyle == CHWRMHaptics::EHWRMHapticsStyleSmooth )
       
   646         {
       
   647         aMenuPane->SetItemButtonState( 
       
   648                    EHapticsTestModifyEffectStyleSmooth,
       
   649                    EEikMenuItemSymbolOn );
       
   650         }
       
   651     else if ( iModifyEffect->iStyle == CHWRMHaptics::EHWRMHapticsStyleStrong )
       
   652         {
       
   653         aMenuPane->SetItemButtonState( 
       
   654                    EHapticsTestModifyEffectStyleStrong,
       
   655                    EEikMenuItemSymbolOn );
       
   656         }
       
   657     else if ( iModifyEffect->iStyle == CHWRMHaptics::EHWRMHapticsStyleSharp )
       
   658         {
       
   659         aMenuPane->SetItemButtonState( 
       
   660                    EHapticsTestModifyEffectStyleSharp,
       
   661                    EEikMenuItemSymbolOn );
       
   662         }
       
   663     }
       
   664 
       
   665 // ---------------------------------------------------------------------------
       
   666 // Creates the checkmark to the attack level, which is currently in use
       
   667 // in the attack level modification submenu.
       
   668 // ---------------------------------------------------------------------------
       
   669 //
       
   670 void CHapticsTestEffectDataHandler::DynInitAttackLevelSubmenu( 
       
   671                                         CEikMenuPane* aMenuPane ) const
       
   672     {
       
   673     // set check mark to correct attack level value
       
   674     if ( iModifyEffect->iAttackLevel == KHWRMHapticsMinMagnitude )
       
   675         {
       
   676         aMenuPane->SetItemButtonState( 
       
   677                    EHapticsTestModifyEffectAttackMin,
       
   678                    EEikMenuItemSymbolOn );
       
   679         }
       
   680     else if ( iModifyEffect->iAttackLevel == KEffectMagnitude25 )
       
   681         {
       
   682         aMenuPane->SetItemButtonState( 
       
   683                    EHapticsTestModifyEffectAttack25,
       
   684                    EEikMenuItemSymbolOn );
       
   685         }
       
   686     else if ( iModifyEffect->iAttackLevel == KEffectMagnitude50 )
       
   687         {
       
   688         aMenuPane->SetItemButtonState( 
       
   689                    EHapticsTestModifyEffectAttack50,
       
   690                    EEikMenuItemSymbolOn );
       
   691         }
       
   692     else if ( iModifyEffect->iAttackLevel == KEffectMagnitude75 )
       
   693         {
       
   694         aMenuPane->SetItemButtonState( 
       
   695                    EHapticsTestModifyEffectAttack75,
       
   696                    EEikMenuItemSymbolOn );
       
   697         }
       
   698     else if ( iModifyEffect->iAttackLevel == KHWRMHapticsMaxMagnitude )
       
   699         {
       
   700         aMenuPane->SetItemButtonState( 
       
   701                    EHapticsTestModifyEffectAttackMax,
       
   702                    EEikMenuItemSymbolOn );
       
   703         }
       
   704     }
       
   705 
       
   706 // ---------------------------------------------------------------------------
       
   707 // Creates the checkmark to the fade level, which is currently in use
       
   708 // in the fade level modification submenu.
       
   709 // ---------------------------------------------------------------------------
       
   710 //
       
   711 void CHapticsTestEffectDataHandler::DynInitFadeLevelSubmenu( 
       
   712                                         CEikMenuPane* aMenuPane ) const
       
   713     {
       
   714     // set check mark to correct fade level value
       
   715     if ( iModifyEffect->iFadeLevel == KHWRMHapticsMinMagnitude )
       
   716         {
       
   717         aMenuPane->SetItemButtonState( 
       
   718                    EHapticsTestModifyEffectFadeMin,
       
   719                    EEikMenuItemSymbolOn );
       
   720         }
       
   721     else if ( iModifyEffect->iFadeLevel == KEffectMagnitude25 )
       
   722         {
       
   723         aMenuPane->SetItemButtonState( 
       
   724                    EHapticsTestModifyEffectFade25,
       
   725                    EEikMenuItemSymbolOn );
       
   726         }
       
   727     else if ( iModifyEffect->iFadeLevel == KEffectMagnitude50 )
       
   728         {
       
   729         aMenuPane->SetItemButtonState( 
       
   730                    EHapticsTestModifyEffectFade50,
       
   731                    EEikMenuItemSymbolOn );
       
   732         }
       
   733     else if ( iModifyEffect->iFadeLevel == KEffectMagnitude75 )
       
   734         {
       
   735         aMenuPane->SetItemButtonState( 
       
   736                    EHapticsTestModifyEffectFade75,
       
   737                    EEikMenuItemSymbolOn );
       
   738         }
       
   739     else if ( iModifyEffect->iFadeLevel == KHWRMHapticsMaxMagnitude )
       
   740         {
       
   741         aMenuPane->SetItemButtonState( 
       
   742                    EHapticsTestModifyEffectFadeMax,
       
   743                    EEikMenuItemSymbolOn );
       
   744         }
       
   745     }
       
   746 
       
   747 // ---------------------------------------------------------------------------
       
   748 // Creates the checkmark to the attack time, which is currently in use
       
   749 // in the attack time modification submenu.
       
   750 // ---------------------------------------------------------------------------
       
   751 //
       
   752 void CHapticsTestEffectDataHandler::DynInitAttackTimeSubmenu( 
       
   753                                             CEikMenuPane* aMenuPane ) const
       
   754     {
       
   755     // set check mark to correct attack time value
       
   756     if ( iModifyEffect->iAttackTime == KEffectAttackTime02 )
       
   757         {
       
   758         aMenuPane->SetItemButtonState( 
       
   759                    EHapticsTestModifyEffectAttackTime02,
       
   760                    EEikMenuItemSymbolOn );
       
   761         }
       
   762     else if ( iModifyEffect->iAttackTime == KEffectAttackTime1 )
       
   763         {
       
   764         aMenuPane->SetItemButtonState( 
       
   765                    EHapticsTestModifyEffectAttackTime1,
       
   766                    EEikMenuItemSymbolOn );
       
   767         }
       
   768     else if ( iModifyEffect->iAttackTime == KEffectAttackTime5 )
       
   769         {
       
   770         aMenuPane->SetItemButtonState( 
       
   771                    EHapticsTestModifyEffectAttackTime5,
       
   772                    EEikMenuItemSymbolOn );
       
   773         }
       
   774     else if ( iModifyEffect->iAttackTime == KEffectAttackTime10 )
       
   775         {
       
   776         aMenuPane->SetItemButtonState( 
       
   777                    EHapticsTestModifyEffectAttackTime10,
       
   778                    EEikMenuItemSymbolOn );
       
   779         }
       
   780     else if ( iModifyEffect->iAttackTime == KEffectAttackTime30 )
       
   781         {
       
   782         aMenuPane->SetItemButtonState( 
       
   783                    EHapticsTestModifyEffectAttackTime30,
       
   784                    EEikMenuItemSymbolOn );
       
   785         }
       
   786     else if ( iModifyEffect->iAttackTime == KEffectAttackTime60 )
       
   787         {
       
   788         aMenuPane->SetItemButtonState( 
       
   789                    EHapticsTestModifyEffectAttackTime60,
       
   790                    EEikMenuItemSymbolOn );
       
   791         }
       
   792     }
       
   793 
       
   794 // ---------------------------------------------------------------------------
       
   795 // Creates the checkmark to the fade time, which is currently in use
       
   796 // in the fade time modification submenu.
       
   797 // ---------------------------------------------------------------------------
       
   798 //
       
   799 void CHapticsTestEffectDataHandler::DynInitFadeTimeSubmenu( 
       
   800                                             CEikMenuPane* aMenuPane ) const
       
   801     {
       
   802     // set check mark to correct fade time value
       
   803     if ( iModifyEffect->iFadeTime == KEffectFadeTime02 )
       
   804         {
       
   805         aMenuPane->SetItemButtonState( 
       
   806                    EHapticsTestModifyEffectFadeTime02,
       
   807                    EEikMenuItemSymbolOn );
       
   808         }
       
   809     else if ( iModifyEffect->iFadeTime == KEffectFadeTime1 )
       
   810         {
       
   811         aMenuPane->SetItemButtonState( 
       
   812                    EHapticsTestModifyEffectFadeTime1,
       
   813                    EEikMenuItemSymbolOn );
       
   814         }
       
   815     else if ( iModifyEffect->iFadeTime == KEffectFadeTime5 )
       
   816         {
       
   817         aMenuPane->SetItemButtonState( 
       
   818                    EHapticsTestModifyEffectFadeTime5,
       
   819                    EEikMenuItemSymbolOn );
       
   820         }
       
   821     else if ( iModifyEffect->iFadeTime == KEffectFadeTime10 )
       
   822         {
       
   823         aMenuPane->SetItemButtonState( 
       
   824                    EHapticsTestModifyEffectFadeTime10,
       
   825                    EEikMenuItemSymbolOn );
       
   826         }
       
   827     else if ( iModifyEffect->iFadeTime == KEffectFadeTime30 )
       
   828         {
       
   829         aMenuPane->SetItemButtonState( 
       
   830                    EHapticsTestModifyEffectFadeTime30,
       
   831                    EEikMenuItemSymbolOn );
       
   832         }
       
   833     else if ( iModifyEffect->iFadeTime == KEffectFadeTime60 )
       
   834         {
       
   835         aMenuPane->SetItemButtonState( 
       
   836                    EHapticsTestModifyEffectFadeTime60,
       
   837                    EEikMenuItemSymbolOn );
       
   838         }
       
   839     }
       
   840 
       
   841 // ---------------------------------------------------------------------------
       
   842 // Creates the checkmark to the period, which is currently in use
       
   843 // in the period modification submenu.
       
   844 // ---------------------------------------------------------------------------
       
   845 //
       
   846 void CHapticsTestEffectDataHandler::DynInitPeriodSubmenu( 
       
   847                                             CEikMenuPane* aMenuPane ) const
       
   848     {
       
   849     // set check mark to correct period value
       
   850     if ( iModifyEffect->iPeriod == KEffectPeriod50 )
       
   851         {
       
   852         aMenuPane->SetItemButtonState( 
       
   853                    EHapticsTestModifyEffectPeriod50,
       
   854                    EEikMenuItemSymbolOn );
       
   855         }
       
   856     else if ( iModifyEffect->iPeriod == KEffectPeriod100 )
       
   857         {
       
   858         aMenuPane->SetItemButtonState( 
       
   859                    EHapticsTestModifyEffectPeriod100,
       
   860                    EEikMenuItemSymbolOn );
       
   861         }
       
   862     else if ( iModifyEffect->iPeriod == KEffectPeriod300 )
       
   863         {
       
   864         aMenuPane->SetItemButtonState( 
       
   865                    EHapticsTestModifyEffectPeriod300,
       
   866                    EEikMenuItemSymbolOn );
       
   867         }
       
   868     else if ( iModifyEffect->iPeriod == KEffectPeriod600 )
       
   869         {
       
   870         aMenuPane->SetItemButtonState( 
       
   871                    EHapticsTestModifyEffectPeriod600,
       
   872                    EEikMenuItemSymbolOn );
       
   873         }
       
   874     else if ( iModifyEffect->iPeriod == KEffectPeriod1000 )
       
   875         {
       
   876         aMenuPane->SetItemButtonState( 
       
   877                    EHapticsTestModifyEffectPeriod1000,
       
   878                    EEikMenuItemSymbolOn );
       
   879         }
       
   880     else if ( iModifyEffect->iPeriod == KEffectPeriod3000 )
       
   881         {
       
   882         aMenuPane->SetItemButtonState( 
       
   883                    EHapticsTestModifyEffectPeriod3000,
       
   884                    EEikMenuItemSymbolOn );
       
   885         }
       
   886     }
       
   887 
       
   888 // ---------------------------------------------------------------------------
       
   889 // C++ constructor
       
   890 // ---------------------------------------------------------------------------
       
   891 //
       
   892 CHapticsTestEffectDataHandler::CHapticsTestEffectDataHandler() 
       
   893     {
       
   894     }
       
   895     
       
   896 // ---------------------------------------------------------------------------
       
   897 // Second phase construction.
       
   898 // ---------------------------------------------------------------------------
       
   899 //
       
   900 void CHapticsTestEffectDataHandler::ConstructL()
       
   901     {
       
   902     }
       
   903 
       
   904 // End of file