svgtopt/SVG/SVGImpl/src/SVGTimeContainer.cpp
author hgs
Wed, 03 Nov 2010 18:56:10 +0200
changeset 46 88edb906c587
permissions -rw-r--r--
201044
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
46
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2006 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:  Provides implementation of a time container
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
// INCLUDE FILES
hgs
parents:
diff changeset
    21
#include "SVGTimeContainer.h"
hgs
parents:
diff changeset
    22
#include "SVGTimer.h"
hgs
parents:
diff changeset
    23
#include "SVGEvent.h"
hgs
parents:
diff changeset
    24
#include "SVGDocumentImpl.h"
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
#include "SVGLockedRealTimeEntity.h"
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
// EXTERNAL DATA STRUCTURES
hgs
parents:
diff changeset
    29
//extern  ?external_data;
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
// EXTERNAL FUNCTION PROTOTYPES  
hgs
parents:
diff changeset
    32
//extern ?external_function( ?arg_type,?arg_type );
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
// CONSTANTS
hgs
parents:
diff changeset
    35
//const ?type ?constant_var = ?constant;
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
// MACROS
hgs
parents:
diff changeset
    38
//#define ?macro ?macro_def
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
// LOCAL CONSTANTS AND MACROS
hgs
parents:
diff changeset
    41
//const ?type ?constant_var = ?constant;
hgs
parents:
diff changeset
    42
//#define ?macro_name ?macro_def
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
// MODULE DATA STRUCTURES
hgs
parents:
diff changeset
    45
//enum ?declaration
hgs
parents:
diff changeset
    46
//typedef ?declaration
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
// LOCAL FUNCTION PROTOTYPES
hgs
parents:
diff changeset
    49
//?type ?function_name( ?arg_type, ?arg_type );
hgs
parents:
diff changeset
    50
hgs
parents:
diff changeset
    51
// FORWARD DECLARATIONS
hgs
parents:
diff changeset
    52
//class ?FORWARD_CLASSNAME;
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
// ============================ MEMBER FUNCTIONS ===============================
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    57
// CSvgTimeContainer::CSvgTimeContainer
hgs
parents:
diff changeset
    58
// C++ default constructor can NOT contain any code, that
hgs
parents:
diff changeset
    59
// might leave.
hgs
parents:
diff changeset
    60
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    61
//
hgs
parents:
diff changeset
    62
CSvgTimeContainer::CSvgTimeContainer( CSvgDocumentImpl* aOwnerDoc,
hgs
parents:
diff changeset
    63
    const TBool aHasParent,
hgs
parents:
diff changeset
    64
    const TSvgSyncBehaviour aSyncBehavior,
hgs
parents:
diff changeset
    65
    const TBool aIsSyncMaster,
hgs
parents:
diff changeset
    66
    const TUint32 aSyncTolerance ) : 
hgs
parents:
diff changeset
    67
          iTcSyncBehavior( aSyncBehavior ),
hgs
parents:
diff changeset
    68
          iTcSyncTolerance( aSyncTolerance ),
hgs
parents:
diff changeset
    69
          iTcSyncMasterConfig( aIsSyncMaster ),
hgs
parents:
diff changeset
    70
          iIsParentTcPresent( aHasParent ),
hgs
parents:
diff changeset
    71
          iOwnerDoc( aOwnerDoc ),
hgs
parents:
diff changeset
    72
          iMediaState( ESvgMediaReady ),
hgs
parents:
diff changeset
    73
          iUserState(ESvgUserRunning),
hgs
parents:
diff changeset
    74
          iIsSyncPaused(EFalse)
hgs
parents:
diff changeset
    75
    {
hgs
parents:
diff changeset
    76
    }
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    79
// CSvgTimeContainer::ConstructL
hgs
parents:
diff changeset
    80
// Symbian 2nd phase constructor can leave.
hgs
parents:
diff changeset
    81
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    82
//
hgs
parents:
diff changeset
    83
void CSvgTimeContainer::ConstructL()
hgs
parents:
diff changeset
    84
    {
hgs
parents:
diff changeset
    85
    //Add locked real time entity(LRTE) here
hgs
parents:
diff changeset
    86
    iLrte = CSvgLockedRealTimeEntity::NewL(iOwnerDoc);
hgs
parents:
diff changeset
    87
    // Populate the entity list item corresponding to LRTE
hgs
parents:
diff changeset
    88
    iLrteListItem.iTimedEntity = iLrte;
hgs
parents:
diff changeset
    89
    iLrteListItem.iMediaState = ESvgMediaIdle;
hgs
parents:
diff changeset
    90
    iLrteListItem.iUserState =ESvgUserRunning ;
hgs
parents:
diff changeset
    91
    iLrteListItem.iIsSyncPaused = EFalse;
hgs
parents:
diff changeset
    92
    }
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    95
// CSvgTimeContainer::NewL
hgs
parents:
diff changeset
    96
// Two-phased constructor.
hgs
parents:
diff changeset
    97
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    98
//
hgs
parents:
diff changeset
    99
CSvgTimeContainer* CSvgTimeContainer::NewL( CSvgDocumentImpl* aOwnerDoc,
hgs
parents:
diff changeset
   100
    const TBool aHasParent, 
hgs
parents:
diff changeset
   101
    const TSvgSyncBehaviour aSyncBehavior,
hgs
parents:
diff changeset
   102
    const TBool aIsSyncMaster,
hgs
parents:
diff changeset
   103
    const TUint32 aSyncTolerance )
hgs
parents:
diff changeset
   104
    {
hgs
parents:
diff changeset
   105
    CSvgTimeContainer* self = new( ELeave ) CSvgTimeContainer( aOwnerDoc,
hgs
parents:
diff changeset
   106
        aHasParent, aSyncBehavior, aIsSyncMaster, aSyncTolerance );
hgs
parents:
diff changeset
   107
    
hgs
parents:
diff changeset
   108
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
   109
    self->ConstructL();
hgs
parents:
diff changeset
   110
    CleanupStack::Pop();
hgs
parents:
diff changeset
   111
hgs
parents:
diff changeset
   112
    return self;
hgs
parents:
diff changeset
   113
    }
hgs
parents:
diff changeset
   114
hgs
parents:
diff changeset
   115
    
hgs
parents:
diff changeset
   116
// Destructor
hgs
parents:
diff changeset
   117
CSvgTimeContainer::~CSvgTimeContainer()
hgs
parents:
diff changeset
   118
    {
hgs
parents:
diff changeset
   119
    // Reset the observer
hgs
parents:
diff changeset
   120
    iObserver = NULL;
hgs
parents:
diff changeset
   121
    // Delete the locked realtime timed entity 
hgs
parents:
diff changeset
   122
    delete iLrte;
hgs
parents:
diff changeset
   123
    // Cleanup the list of timed entities
hgs
parents:
diff changeset
   124
    CleanupTimedEntities();
hgs
parents:
diff changeset
   125
    
hgs
parents:
diff changeset
   126
    // Delete the timer if present
hgs
parents:
diff changeset
   127
    if ( iTimer )
hgs
parents:
diff changeset
   128
        {
hgs
parents:
diff changeset
   129
        delete iTimer;
hgs
parents:
diff changeset
   130
        iTimer = NULL;
hgs
parents:
diff changeset
   131
        }
hgs
parents:
diff changeset
   132
    }
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   135
// CSvgTimeContainer::GetSyncMasterForTimeContainer
hgs
parents:
diff changeset
   136
// Resolves the sync master within the time container and returns the same.
hgs
parents:
diff changeset
   137
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   138
//
hgs
parents:
diff changeset
   139
MSvgTimedEntityInterface* CSvgTimeContainer::GetSyncMasterForTimeContainer()
hgs
parents:
diff changeset
   140
    {
hgs
parents:
diff changeset
   141
    // First check the number of elements in the time container
hgs
parents:
diff changeset
   142
  TInt lTimedEntityListCnt = iTcTimedEntities.Count();
hgs
parents:
diff changeset
   143
hgs
parents:
diff changeset
   144
    // if there is only one element in the list(which is the document),
hgs
parents:
diff changeset
   145
    // return NULL to avoid list traversal
hgs
parents:
diff changeset
   146
    if ( lTimedEntityListCnt <= 1 )
hgs
parents:
diff changeset
   147
        {
hgs
parents:
diff changeset
   148
        return NULL;
hgs
parents:
diff changeset
   149
        }
hgs
parents:
diff changeset
   150
        
hgs
parents:
diff changeset
   151
    TInt lFirstAudioIndex = iTcTimedEntities.Count();    // Store invalid value
hgs
parents:
diff changeset
   152
    MSvgTimedEntityInterface* lCurSyncMaster = NULL;    
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
  // Within the locked group of timed entities within the time 
hgs
parents:
diff changeset
   155
  // container, need to find out which element is acting as master. 
hgs
parents:
diff changeset
   156
hgs
parents:
diff changeset
   157
  // For All Timed Entities
hgs
parents:
diff changeset
   158
  // Get the first eligible sync master
hgs
parents:
diff changeset
   159
  for ( TInt lItemIndex = lTimedEntityListCnt - 1; lItemIndex >= 0 ; lItemIndex-- )
hgs
parents:
diff changeset
   160
      {
hgs
parents:
diff changeset
   161
    //get each element
hgs
parents:
diff changeset
   162
    MSvgTimedEntityInterface* lCurTimedEntity = 
hgs
parents:
diff changeset
   163
        (iTcTimedEntities[ lItemIndex ]).iTimedEntity ;
hgs
parents:
diff changeset
   164
    
hgs
parents:
diff changeset
   165
    // In case an audio element is found
hgs
parents:
diff changeset
   166
    //      check whether is is locked and can generate tick
hgs
parents:
diff changeset
   167
    //      If so, it is an eligible sync master
hgs
parents:
diff changeset
   168
    if( lFirstAudioIndex == lTimedEntityListCnt && 
hgs
parents:
diff changeset
   169
        lCurTimedEntity->ObjectType() == ESvgAudioElement && 
hgs
parents:
diff changeset
   170
        lCurTimedEntity->GetEntitySyncBehavior() == ESvgSyncLocked &&
hgs
parents:
diff changeset
   171
        lCurTimedEntity->CanGenerateTick() )
hgs
parents:
diff changeset
   172
        {
hgs
parents:
diff changeset
   173
        // Remember this so it can be used later if 
hgs
parents:
diff changeset
   174
        // no eligible syncmaster found
hgs
parents:
diff changeset
   175
        lFirstAudioIndex = lItemIndex;
hgs
parents:
diff changeset
   176
        }
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
      TBool lIsSyncMaster = EFalse;
hgs
parents:
diff changeset
   179
      lCurTimedEntity->GetCnfSyncMasterStatus( lIsSyncMaster );
hgs
parents:
diff changeset
   180
      // An element is an eligible sync master if:
hgs
parents:
diff changeset
   181
      //      a. It is locked wrt the TC
hgs
parents:
diff changeset
   182
      //      b. It is configured as a sync master
hgs
parents:
diff changeset
   183
      //      c. It can generate tick i.e. it is active and has implicit duration.
hgs
parents:
diff changeset
   184
        if ( lCurTimedEntity->GetEntitySyncBehavior() == ESvgSyncLocked 
hgs
parents:
diff changeset
   185
            && lIsSyncMaster 
hgs
parents:
diff changeset
   186
            && lCurTimedEntity->CanGenerateTick() )
hgs
parents:
diff changeset
   187
            {
hgs
parents:
diff changeset
   188
            lCurSyncMaster = lCurTimedEntity;
hgs
parents:
diff changeset
   189
            break;
hgs
parents:
diff changeset
   190
            }
hgs
parents:
diff changeset
   191
    }
hgs
parents:
diff changeset
   192
    
hgs
parents:
diff changeset
   193
hgs
parents:
diff changeset
   194
    if ( !lCurSyncMaster ) 
hgs
parents:
diff changeset
   195
    {
hgs
parents:
diff changeset
   196
      if( lFirstAudioIndex != lTimedEntityListCnt ) 
hgs
parents:
diff changeset
   197
        {
hgs
parents:
diff changeset
   198
        // Did not find a sync master, and audio element available
hgs
parents:
diff changeset
   199
        lCurSyncMaster = iTcTimedEntities[ lFirstAudioIndex ].iTimedEntity;
hgs
parents:
diff changeset
   200
        }   
hgs
parents:
diff changeset
   201
        //Locked real time entityas syncmaster
hgs
parents:
diff changeset
   202
      else
hgs
parents:
diff changeset
   203
        {
hgs
parents:
diff changeset
   204
            lCurSyncMaster = iLrteListItem.iTimedEntity;
hgs
parents:
diff changeset
   205
        }  
hgs
parents:
diff changeset
   206
        
hgs
parents:
diff changeset
   207
    } 
hgs
parents:
diff changeset
   208
      
hgs
parents:
diff changeset
   209
    if ( lCurSyncMaster )
hgs
parents:
diff changeset
   210
        {
hgs
parents:
diff changeset
   211
        // Sync Master found
hgs
parents:
diff changeset
   212
        // Store the syncMaster in iTcSyncMaster.
hgs
parents:
diff changeset
   213
        iTcSyncMaster = lCurSyncMaster;
hgs
parents:
diff changeset
   214
hgs
parents:
diff changeset
   215
        // Set the state in the sync master that it is the chosen one.
hgs
parents:
diff changeset
   216
        iTcSyncMaster->SetCurSyncMasterStatus( ETrue );
hgs
parents:
diff changeset
   217
hgs
parents:
diff changeset
   218
        // For All Timed Entities other than syncMaster in TC group
hgs
parents:
diff changeset
   219
        //          SetCurSyncMasterStatus = False;
hgs
parents:
diff changeset
   220
        for ( TInt lItemIndex = lTimedEntityListCnt - 1; lItemIndex >= 0 ; lItemIndex-- )
hgs
parents:
diff changeset
   221
            {
hgs
parents:
diff changeset
   222
            MSvgTimedEntityInterface* lCurTimedEntity = 
hgs
parents:
diff changeset
   223
                (iTcTimedEntities[ lItemIndex ]).iTimedEntity ;
hgs
parents:
diff changeset
   224
            if ( lCurTimedEntity != iTcSyncMaster )
hgs
parents:
diff changeset
   225
                {
hgs
parents:
diff changeset
   226
                lCurTimedEntity->SetCurSyncMasterStatus( EFalse );            
hgs
parents:
diff changeset
   227
                }
hgs
parents:
diff changeset
   228
            }
hgs
parents:
diff changeset
   229
            
hgs
parents:
diff changeset
   230
            if(iLrteListItem.iTimedEntity != lCurSyncMaster)
hgs
parents:
diff changeset
   231
            {
hgs
parents:
diff changeset
   232
                iLrteListItem.iTimedEntity->SetCurSyncMasterStatus(EFalse);
hgs
parents:
diff changeset
   233
            }    
hgs
parents:
diff changeset
   234
        }
hgs
parents:
diff changeset
   235
    
hgs
parents:
diff changeset
   236
hgs
parents:
diff changeset
   237
    return iTcSyncMaster;
hgs
parents:
diff changeset
   238
    }
hgs
parents:
diff changeset
   239
        
hgs
parents:
diff changeset
   240
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   241
// CSvgTimeContainer::AddTimedEntityL
hgs
parents:
diff changeset
   242
// Add a timed entity to the time container.
hgs
parents:
diff changeset
   243
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   244
//
hgs
parents:
diff changeset
   245
void CSvgTimeContainer::AddTimedEntityL( 
hgs
parents:
diff changeset
   246
    MSvgTimedEntityInterface* aTimedEntity )
hgs
parents:
diff changeset
   247
    {
hgs
parents:
diff changeset
   248
    if ( !aTimedEntity )
hgs
parents:
diff changeset
   249
        {
hgs
parents:
diff changeset
   250
        User::Leave( KErrArgument );
hgs
parents:
diff changeset
   251
        }
hgs
parents:
diff changeset
   252
    
hgs
parents:
diff changeset
   253
    // check to see if entity is already in list and simply return
hgs
parents:
diff changeset
   254
    TInt lTimedEntityListCnt = iTcTimedEntities.Count();
hgs
parents:
diff changeset
   255
    for ( TInt lItemIndex = lTimedEntityListCnt - 1; lItemIndex >= 0 ; lItemIndex-- )
hgs
parents:
diff changeset
   256
        {
hgs
parents:
diff changeset
   257
        if ( (iTcTimedEntities[ lItemIndex ]).iTimedEntity == aTimedEntity )
hgs
parents:
diff changeset
   258
            {
hgs
parents:
diff changeset
   259
            return;
hgs
parents:
diff changeset
   260
            }
hgs
parents:
diff changeset
   261
        }
hgs
parents:
diff changeset
   262
   
hgs
parents:
diff changeset
   263
    TSvgTimedEntityListItem lListItem;
hgs
parents:
diff changeset
   264
    lListItem.iTimedEntity = aTimedEntity;
hgs
parents:
diff changeset
   265
hgs
parents:
diff changeset
   266
    //Media State initially Idle
hgs
parents:
diff changeset
   267
    lListItem.iMediaState = ESvgMediaIdle;
hgs
parents:
diff changeset
   268
    
hgs
parents:
diff changeset
   269
    //User state initially is running
hgs
parents:
diff changeset
   270
    lListItem.iUserState =ESvgUserRunning ;
hgs
parents:
diff changeset
   271
    
hgs
parents:
diff changeset
   272
    // Sync State is Playing
hgs
parents:
diff changeset
   273
    lListItem.iIsSyncPaused = EFalse;
hgs
parents:
diff changeset
   274
hgs
parents:
diff changeset
   275
    // Append to Timed Entity List
hgs
parents:
diff changeset
   276
    iTcTimedEntities.AppendL( lListItem );
hgs
parents:
diff changeset
   277
    
hgs
parents:
diff changeset
   278
    // Obtain the post order list of media elements 
hgs
parents:
diff changeset
   279
     RPointerArray<CSvgElementImpl> lMediaEleList;
hgs
parents:
diff changeset
   280
    lMediaEleList.Reset(); 
hgs
parents:
diff changeset
   281
    
hgs
parents:
diff changeset
   282
    CSvgElementImpl *handle = (CSvgElementImpl *)(iOwnerDoc->RootElement());
hgs
parents:
diff changeset
   283
    iOwnerDoc->ParsePostOrderMediaElements( handle, lMediaEleList );
hgs
parents:
diff changeset
   284
    
hgs
parents:
diff changeset
   285
    // Rearrange as per Post order
hgs
parents:
diff changeset
   286
    RearrangeTimedEntityList( lMediaEleList );
hgs
parents:
diff changeset
   287
    
hgs
parents:
diff changeset
   288
    // Done with the list
hgs
parents:
diff changeset
   289
    lMediaEleList.Close();  
hgs
parents:
diff changeset
   290
    }
hgs
parents:
diff changeset
   291
hgs
parents:
diff changeset
   292
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   293
// CSvgTimeContainer::DelTimedEntity
hgs
parents:
diff changeset
   294
// Removes the timed entity from the time container.
hgs
parents:
diff changeset
   295
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   296
//
hgs
parents:
diff changeset
   297
void CSvgTimeContainer::DelTimedEntity( 
hgs
parents:
diff changeset
   298
    MSvgTimedEntityInterface* aTimedEntity )
hgs
parents:
diff changeset
   299
    {
hgs
parents:
diff changeset
   300
    // check whether the entity exists and then remove it from the list
hgs
parents:
diff changeset
   301
    TInt lTimedEntityListCnt = iTcTimedEntities.Count();
hgs
parents:
diff changeset
   302
    
hgs
parents:
diff changeset
   303
    for ( TInt lItemIndex = lTimedEntityListCnt - 1; lItemIndex >= 0 ; lItemIndex-- )
hgs
parents:
diff changeset
   304
        {
hgs
parents:
diff changeset
   305
        if ( (iTcTimedEntities[ lItemIndex ]).iTimedEntity == aTimedEntity )
hgs
parents:
diff changeset
   306
            {
hgs
parents:
diff changeset
   307
            iTcTimedEntities.Remove( lItemIndex );
hgs
parents:
diff changeset
   308
      break;
hgs
parents:
diff changeset
   309
            }
hgs
parents:
diff changeset
   310
        }
hgs
parents:
diff changeset
   311
    
hgs
parents:
diff changeset
   312
    }
hgs
parents:
diff changeset
   313
hgs
parents:
diff changeset
   314
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   315
// CSvgTimeContainer::CleanupTimedEntities
hgs
parents:
diff changeset
   316
// Removes all the timed entities from the time container.
hgs
parents:
diff changeset
   317
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   318
//
hgs
parents:
diff changeset
   319
void CSvgTimeContainer::CleanupTimedEntities( )
hgs
parents:
diff changeset
   320
    {
hgs
parents:
diff changeset
   321
    // Delete the entries in the timed entity list; does not delete the 
hgs
parents:
diff changeset
   322
    // timed entities.
hgs
parents:
diff changeset
   323
    iTcTimedEntities.Reset();
hgs
parents:
diff changeset
   324
    }
hgs
parents:
diff changeset
   325
hgs
parents:
diff changeset
   326
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   327
// CSvgTimeContainer::SetCurrentTime
hgs
parents:
diff changeset
   328
// Set Function for the TC's current time
hgs
parents:
diff changeset
   329
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   330
void CSvgTimeContainer::SetCurrentTime( TInt32 aCurTime )
hgs
parents:
diff changeset
   331
    {
hgs
parents:
diff changeset
   332
    iCurrentTime = aCurTime;
hgs
parents:
diff changeset
   333
    }
hgs
parents:
diff changeset
   334
hgs
parents:
diff changeset
   335
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   336
// CSvgTimeContainer::CurrentTime
hgs
parents:
diff changeset
   337
// Accessor for the TC's current time
hgs
parents:
diff changeset
   338
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   339
TInt32 CSvgTimeContainer::CurrentTime()
hgs
parents:
diff changeset
   340
    {
hgs
parents:
diff changeset
   341
    return iCurrentTime;
hgs
parents:
diff changeset
   342
    }
hgs
parents:
diff changeset
   343
hgs
parents:
diff changeset
   344
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   345
// CSvgTimeContainer::SetSyncBehavior
hgs
parents:
diff changeset
   346
// Set the Synchronised behaviour for the time container
hgs
parents:
diff changeset
   347
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   348
void CSvgTimeContainer::SetSyncBehavior( const TSvgSyncBehaviour aValue )
hgs
parents:
diff changeset
   349
    {
hgs
parents:
diff changeset
   350
    iTcSyncBehavior = aValue;
hgs
parents:
diff changeset
   351
    }
hgs
parents:
diff changeset
   352
hgs
parents:
diff changeset
   353
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   354
// CSvgTimeContainer::SetSyncTolerance
hgs
parents:
diff changeset
   355
// Set the Synchronised Tolerance for the time container
hgs
parents:
diff changeset
   356
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   357
void CSvgTimeContainer::SetSyncTolerance( const TUint32 aValue )
hgs
parents:
diff changeset
   358
    {
hgs
parents:
diff changeset
   359
    iTcSyncTolerance = aValue;    
hgs
parents:
diff changeset
   360
    }
hgs
parents:
diff changeset
   361
hgs
parents:
diff changeset
   362
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   363
// CSvgTimeContainer::SetSyncMaster
hgs
parents:
diff changeset
   364
// Set the time container as Synchronised Master
hgs
parents:
diff changeset
   365
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   366
void CSvgTimeContainer::SetSyncMaster( const TBool aValue )
hgs
parents:
diff changeset
   367
    {
hgs
parents:
diff changeset
   368
    iTcSyncMasterConfig = aValue;
hgs
parents:
diff changeset
   369
    }
hgs
parents:
diff changeset
   370
hgs
parents:
diff changeset
   371
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   372
// CSvgTimeContainer::GetCurTick
hgs
parents:
diff changeset
   373
// Accessor function to get the current tick
hgs
parents:
diff changeset
   374
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   375
TSvgTick CSvgTimeContainer::GetCurTick()
hgs
parents:
diff changeset
   376
    {
hgs
parents:
diff changeset
   377
    return iCurrentTick;
hgs
parents:
diff changeset
   378
    }
hgs
parents:
diff changeset
   379
hgs
parents:
diff changeset
   380
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   381
// CSvgTimeContainer::Document
hgs
parents:
diff changeset
   382
// Accessor function to get the owner doc of the TC
hgs
parents:
diff changeset
   383
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   384
CSvgDocumentImpl* CSvgTimeContainer::Document()
hgs
parents:
diff changeset
   385
    {
hgs
parents:
diff changeset
   386
    return iOwnerDoc;
hgs
parents:
diff changeset
   387
    }
hgs
parents:
diff changeset
   388
hgs
parents:
diff changeset
   389
hgs
parents:
diff changeset
   390
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   391
// CSvgTimeContainer::TimedEntityNotReady
hgs
parents:
diff changeset
   392
// Informing the time container that timed entity is not ready
hgs
parents:
diff changeset
   393
  /*
hgs
parents:
diff changeset
   394
    If this element is locked
hgs
parents:
diff changeset
   395
    {
hgs
parents:
diff changeset
   396
      PauseLockedElements
hgs
parents:
diff changeset
   397
        {
hgs
parents:
diff changeset
   398
          (Whether ready/not ready)
hgs
parents:
diff changeset
   399
                 For all locked elements:
hgs
parents:
diff changeset
   400
          SyncPauseElement.
hgs
parents:
diff changeset
   401
        }
hgs
parents:
diff changeset
   402
        If TC Observer present
hgs
parents:
diff changeset
   403
          Give Not Ready Event 
hgs
parents:
diff changeset
   404
    }
hgs
parents:
diff changeset
   405
hgs
parents:
diff changeset
   406
    */
hgs
parents:
diff changeset
   407
 // ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   408
void CSvgTimeContainer::TimedEntityNotReady( 
hgs
parents:
diff changeset
   409
    MSvgTimedEntityInterface* aTimedEntity )
hgs
parents:
diff changeset
   410
    {
hgs
parents:
diff changeset
   411
    
hgs
parents:
diff changeset
   412
    
hgs
parents:
diff changeset
   413
    TInt lTimedEntityListCnt = iTcTimedEntities.Count();
hgs
parents:
diff changeset
   414
    for ( TInt lItemIndex = lTimedEntityListCnt - 1; lItemIndex >= 0 ; lItemIndex-- )
hgs
parents:
diff changeset
   415
        {
hgs
parents:
diff changeset
   416
      //get current element
hgs
parents:
diff changeset
   417
        if ( (iTcTimedEntities[ lItemIndex ]).iTimedEntity == aTimedEntity )
hgs
parents:
diff changeset
   418
            {
hgs
parents:
diff changeset
   419
          //set current element as not ready
hgs
parents:
diff changeset
   420
          (iTcTimedEntities[ lItemIndex ]).iMediaState = ESvgMediaNotReady;
hgs
parents:
diff changeset
   421
          
hgs
parents:
diff changeset
   422
          //if current element is locked
hgs
parents:
diff changeset
   423
          if((iTcTimedEntities[ lItemIndex ]).iTimedEntity->GetEntitySyncBehavior() == ESvgSyncLocked )
hgs
parents:
diff changeset
   424
              {
hgs
parents:
diff changeset
   425
              //Indicate the timecontainer is not ready
hgs
parents:
diff changeset
   426
            SetMediaState(ESvgMediaNotReady);
hgs
parents:
diff changeset
   427
            
hgs
parents:
diff changeset
   428
            PauseLockedEntities();
hgs
parents:
diff changeset
   429
            
hgs
parents:
diff changeset
   430
            // Inform the observer that the time container is not ready
hgs
parents:
diff changeset
   431
          if ( iObserver )
hgs
parents:
diff changeset
   432
                {
hgs
parents:
diff changeset
   433
                    iObserver->TimeContainerNotReady();
hgs
parents:
diff changeset
   434
                }
hgs
parents:
diff changeset
   435
              }
hgs
parents:
diff changeset
   436
          //Once we have got the right timed entity on which not ready was called
hgs
parents:
diff changeset
   437
      //exit the loop
hgs
parents:
diff changeset
   438
      break;
hgs
parents:
diff changeset
   439
            }
hgs
parents:
diff changeset
   440
        }
hgs
parents:
diff changeset
   441
    }
hgs
parents:
diff changeset
   442
hgs
parents:
diff changeset
   443
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   444
// CSvgTimeContainer::SyncpauseElement
hgs
parents:
diff changeset
   445
//Pauses running syncronised elements
hgs
parents:
diff changeset
   446
  /*
hgs
parents:
diff changeset
   447
      Pauses a single element
hgs
parents:
diff changeset
   448
    
hgs
parents:
diff changeset
   449
    If ( syncStatus is not paused AND ( userStatus is not paused or not stopped ) )
hgs
parents:
diff changeset
   450
      Pause Element
hgs
parents:
diff changeset
   451
      Set syncStatus = Paused // iIsSyncPaused 
hgs
parents:
diff changeset
   452
      
hgs
parents:
diff changeset
   453
      
hgs
parents:
diff changeset
   454
      If Element type = Animation
hgs
parents:
diff changeset
   455
          {
hgs
parents:
diff changeset
   456
              Get Child TC Pointer.
hgs
parents:
diff changeset
   457
              If Valid,
hgs
parents:
diff changeset
   458
                Call Child Tc->SyncPause
hgs
parents:
diff changeset
   459
          }
hgs
parents:
diff changeset
   460
hgs
parents:
diff changeset
   461
  
hgs
parents:
diff changeset
   462
  */
hgs
parents:
diff changeset
   463
  // -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   464
//
hgs
parents:
diff changeset
   465
hgs
parents:
diff changeset
   466
hgs
parents:
diff changeset
   467
void CSvgTimeContainer::SyncPauseElement(TSvgTimedEntityListItem* aTimedEntityItem)
hgs
parents:
diff changeset
   468
    {
hgs
parents:
diff changeset
   469
      if (
hgs
parents:
diff changeset
   470
         (!aTimedEntityItem->iIsSyncPaused)  
hgs
parents:
diff changeset
   471
      && (aTimedEntityItem->iUserState == ESvgUserRunning)
hgs
parents:
diff changeset
   472
         )
hgs
parents:
diff changeset
   473
        {
hgs
parents:
diff changeset
   474
        aTimedEntityItem->iTimedEntity->PauseTimedEntity();
hgs
parents:
diff changeset
   475
        }
hgs
parents:
diff changeset
   476
      aTimedEntityItem->iIsSyncPaused = ETrue;
hgs
parents:
diff changeset
   477
      
hgs
parents:
diff changeset
   478
      if(aTimedEntityItem->iTimedEntity->ObjectType() == ESvgMediaAnimationElement)  
hgs
parents:
diff changeset
   479
        {
hgs
parents:
diff changeset
   480
        CSvgTimeContainer* lAnimTimeContainer = aTimedEntityItem->iTimedEntity->GetChildTimeContainer();
hgs
parents:
diff changeset
   481
        if(lAnimTimeContainer)
hgs
parents:
diff changeset
   482
            {
hgs
parents:
diff changeset
   483
            lAnimTimeContainer->SyncPause();
hgs
parents:
diff changeset
   484
            }
hgs
parents:
diff changeset
   485
        }
hgs
parents:
diff changeset
   486
    }
hgs
parents:
diff changeset
   487
    
hgs
parents:
diff changeset
   488
hgs
parents:
diff changeset
   489
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   490
// CSvgTimeContainer::TimedEntityReady
hgs
parents:
diff changeset
   491
// Informing the time container that timed entity is ready
hgs
parents:
diff changeset
   492
    /*
hgs
parents:
diff changeset
   493
    If this element is locked
hgs
parents:
diff changeset
   494
    {
hgs
parents:
diff changeset
   495
     If all locked elements ready
hgs
parents:
diff changeset
   496
    {
hgs
parents:
diff changeset
   497
      ResumeLockedElements
hgs
parents:
diff changeset
   498
       {
hgs
parents:
diff changeset
   499
            For all locked elements:
hgs
parents:
diff changeset
   500
                 SyncResumeElement.
hgs
parents:
diff changeset
   501
hgs
parents:
diff changeset
   502
        }
hgs
parents:
diff changeset
   503
      If TC Observer present
hgs
parents:
diff changeset
   504
        Give ready of TC
hgs
parents:
diff changeset
   505
    }
hgs
parents:
diff changeset
   506
     }
hgs
parents:
diff changeset
   507
    */
hgs
parents:
diff changeset
   508
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   509
void CSvgTimeContainer::TimedEntityReady( 
hgs
parents:
diff changeset
   510
    MSvgTimedEntityInterface* aTimedEntity )
hgs
parents:
diff changeset
   511
    {
hgs
parents:
diff changeset
   512
hgs
parents:
diff changeset
   513
    TBool lIsOkToResume = ETrue;
hgs
parents:
diff changeset
   514
hgs
parents:
diff changeset
   515
    TInt lTimedEntityListCnt = iTcTimedEntities.Count();
hgs
parents:
diff changeset
   516
  for ( TInt lItemIndex = lTimedEntityListCnt - 1; lItemIndex >= 0 ; lItemIndex-- )
hgs
parents:
diff changeset
   517
      {
hgs
parents:
diff changeset
   518
    //get current element from entities list
hgs
parents:
diff changeset
   519
      if ( (iTcTimedEntities[ lItemIndex ]).iTimedEntity == aTimedEntity )
hgs
parents:
diff changeset
   520
        {
hgs
parents:
diff changeset
   521
        //set current element as not ready
hgs
parents:
diff changeset
   522
        (iTcTimedEntities[ lItemIndex ]).iMediaState = ESvgMediaReady;
hgs
parents:
diff changeset
   523
          
hgs
parents:
diff changeset
   524
        //if current element is locked
hgs
parents:
diff changeset
   525
        if((iTcTimedEntities[ lItemIndex ]).iTimedEntity->GetEntitySyncBehavior() == ESvgSyncLocked )
hgs
parents:
diff changeset
   526
            {
hgs
parents:
diff changeset
   527
        //for all timed entities
hgs
parents:
diff changeset
   528
            for ( lItemIndex = lTimedEntityListCnt - 1; lItemIndex >= 0 ; lItemIndex-- )
hgs
parents:
diff changeset
   529
              {
hgs
parents:
diff changeset
   530
              // check if any timed entities are locked and not ready
hgs
parents:
diff changeset
   531
              // Idle elements cannot be checked as they are not active
hgs
parents:
diff changeset
   532
              if(
hgs
parents:
diff changeset
   533
              ( (iTcTimedEntities[ lItemIndex ]).iTimedEntity->GetEntitySyncBehavior() == ESvgSyncLocked )
hgs
parents:
diff changeset
   534
              && ((iTcTimedEntities[lItemIndex].iMediaState == ESvgMediaNotReady))
hgs
parents:
diff changeset
   535
              )
hgs
parents:
diff changeset
   536
                {
hgs
parents:
diff changeset
   537
                //Indicate cant resume now as some locked entities are not ready
hgs
parents:
diff changeset
   538
                lIsOkToResume = EFalse;
hgs
parents:
diff changeset
   539
                //exit loop
hgs
parents:
diff changeset
   540
                break;
hgs
parents:
diff changeset
   541
                }
hgs
parents:
diff changeset
   542
              }
hgs
parents:
diff changeset
   543
            }
hgs
parents:
diff changeset
   544
            //Once we have got the right timed entity on which ready was called
hgs
parents:
diff changeset
   545
            //exit the loop
hgs
parents:
diff changeset
   546
            break;
hgs
parents:
diff changeset
   547
          }
hgs
parents:
diff changeset
   548
      }
hgs
parents:
diff changeset
   549
    
hgs
parents:
diff changeset
   550
      if ( lIsOkToResume )
hgs
parents:
diff changeset
   551
        {
hgs
parents:
diff changeset
   552
        //Indicate the timecontainer is ready as all elements are ready
hgs
parents:
diff changeset
   553
      SetMediaState(ESvgMediaReady);
hgs
parents:
diff changeset
   554
      
hgs
parents:
diff changeset
   555
      ResumeLockedEntities();
hgs
parents:
diff changeset
   556
hgs
parents:
diff changeset
   557
      // Inform the observer that the time container is ready
hgs
parents:
diff changeset
   558
         if ( iObserver )
hgs
parents:
diff changeset
   559
          {
hgs
parents:
diff changeset
   560
          iObserver->TimeContainerReady();
hgs
parents:
diff changeset
   561
          }
hgs
parents:
diff changeset
   562
        }
hgs
parents:
diff changeset
   563
    }
hgs
parents:
diff changeset
   564
    
hgs
parents:
diff changeset
   565
//-------------------------------------------------------------------------------
hgs
parents:
diff changeset
   566
//void CSvgTimeContainer::SyncResumeElement
hgs
parents:
diff changeset
   567
  /*
hgs
parents:
diff changeset
   568
    Resumes a single element
hgs
parents:
diff changeset
   569
  
hgs
parents:
diff changeset
   570
  if ( syncStatus is not running AND (userStatus is running))
hgs
parents:
diff changeset
   571
  AND (TC.syncStatus is running) AND (TC.userStatus is running))
hgs
parents:
diff changeset
   572
    {
hgs
parents:
diff changeset
   573
hgs
parents:
diff changeset
   574
    Resume Element
hgs
parents:
diff changeset
   575
  }
hgs
parents:
diff changeset
   576
    Set syncStatus = running 
hgs
parents:
diff changeset
   577
    If Element type = Animation
hgs
parents:
diff changeset
   578
  {
hgs
parents:
diff changeset
   579
          Get Child TC Pointer.
hgs
parents:
diff changeset
   580
          If Valid,
hgs
parents:
diff changeset
   581
    Call Child Tc->SyncResume
hgs
parents:
diff changeset
   582
  }
hgs
parents:
diff changeset
   583
hgs
parents:
diff changeset
   584
	*/
hgs
parents:
diff changeset
   585
//-------------------------------------------------------------------------------
hgs
parents:
diff changeset
   586
void CSvgTimeContainer::SyncResumeElement(TSvgTimedEntityListItem* aTimedEntity)
hgs
parents:
diff changeset
   587
    {
hgs
parents:
diff changeset
   588
    if(
hgs
parents:
diff changeset
   589
     (aTimedEntity->iIsSyncPaused) 
hgs
parents:
diff changeset
   590
    && (aTimedEntity->iUserState == ESvgUserRunning)
hgs
parents:
diff changeset
   591
    && (!iIsSyncPaused)
hgs
parents:
diff changeset
   592
    && (iUserState == ESvgUserRunning )
hgs
parents:
diff changeset
   593
    )
hgs
parents:
diff changeset
   594
        {
hgs
parents:
diff changeset
   595
        aTimedEntity->iTimedEntity->ResumeTimedEntity();
hgs
parents:
diff changeset
   596
        }
hgs
parents:
diff changeset
   597
    aTimedEntity->iIsSyncPaused = EFalse;
hgs
parents:
diff changeset
   598
      
hgs
parents:
diff changeset
   599
    if(aTimedEntity->iTimedEntity->ObjectType() == ESvgMediaAnimationElement)  
hgs
parents:
diff changeset
   600
        {
hgs
parents:
diff changeset
   601
        CSvgTimeContainer* AnimTimeContainer = aTimedEntity->iTimedEntity->GetChildTimeContainer();
hgs
parents:
diff changeset
   602
        if(AnimTimeContainer)
hgs
parents:
diff changeset
   603
            {
hgs
parents:
diff changeset
   604
            AnimTimeContainer->SyncResume();
hgs
parents:
diff changeset
   605
            }
hgs
parents:
diff changeset
   606
        }
hgs
parents:
diff changeset
   607
    }   
hgs
parents:
diff changeset
   608
    
hgs
parents:
diff changeset
   609
    
hgs
parents:
diff changeset
   610
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   611
// CSvgTimeContainer::PauseLockedEntities
hgs
parents:
diff changeset
   612
// Pauses the time container's locked entities
hgs
parents:
diff changeset
   613
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   614
//
hgs
parents:
diff changeset
   615
void CSvgTimeContainer::PauseLockedEntities()    
hgs
parents:
diff changeset
   616
    {
hgs
parents:
diff changeset
   617
     /*
hgs
parents:
diff changeset
   618
     (Whether ready/not ready)
hgs
parents:
diff changeset
   619
            For all locked elements:
hgs
parents:
diff changeset
   620
            SyncPauseElement.
hgs
parents:
diff changeset
   621
     */
hgs
parents:
diff changeset
   622
    TInt lTimedEntityListCnt = iTcTimedEntities.Count();
hgs
parents:
diff changeset
   623
    for ( TInt lItemIndex = lTimedEntityListCnt - 1; lItemIndex >= 0 ; lItemIndex-- )
hgs
parents:
diff changeset
   624
        {
hgs
parents:
diff changeset
   625
        if((iTcTimedEntities[ lItemIndex ]).iTimedEntity->GetEntitySyncBehavior() == ESvgSyncLocked ) 
hgs
parents:
diff changeset
   626
            {
hgs
parents:
diff changeset
   627
            SyncPauseElement(&iTcTimedEntities[ lItemIndex ]);
hgs
parents:
diff changeset
   628
            }
hgs
parents:
diff changeset
   629
        }
hgs
parents:
diff changeset
   630
    SyncPauseElement(&iLrteListItem);
hgs
parents:
diff changeset
   631
    }
hgs
parents:
diff changeset
   632
hgs
parents:
diff changeset
   633
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   634
// CSvgTimeContainer::ResumeLockedEntities
hgs
parents:
diff changeset
   635
// Resumes the time container's locked entities
hgs
parents:
diff changeset
   636
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   637
//
hgs
parents:
diff changeset
   638
void CSvgTimeContainer::ResumeLockedEntities()    
hgs
parents:
diff changeset
   639
    {
hgs
parents:
diff changeset
   640
  /*
hgs
parents:
diff changeset
   641
    For all locked elements:
hgs
parents:
diff changeset
   642
               SyncResumeElement.
hgs
parents:
diff changeset
   643
  */
hgs
parents:
diff changeset
   644
    TInt lTimedEntityListCnt = iTcTimedEntities.Count();
hgs
parents:
diff changeset
   645
    for ( TInt lItemIndex = lTimedEntityListCnt - 1; lItemIndex >= 0 ; lItemIndex-- )
hgs
parents:
diff changeset
   646
        {
hgs
parents:
diff changeset
   647
        if((iTcTimedEntities[ lItemIndex ]).iTimedEntity->GetEntitySyncBehavior() == ESvgSyncLocked ) 
hgs
parents:
diff changeset
   648
            {
hgs
parents:
diff changeset
   649
            SyncResumeElement(&iTcTimedEntities[ lItemIndex ]);
hgs
parents:
diff changeset
   650
            }
hgs
parents:
diff changeset
   651
        }
hgs
parents:
diff changeset
   652
    SyncResumeElement(&iLrteListItem) ;
hgs
parents:
diff changeset
   653
     
hgs
parents:
diff changeset
   654
          
hgs
parents:
diff changeset
   655
    }      
hgs
parents:
diff changeset
   656
hgs
parents:
diff changeset
   657
hgs
parents:
diff changeset
   658
    
hgs
parents:
diff changeset
   659
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   660
// CSvgTimeContainer::SetTcObserver
hgs
parents:
diff changeset
   661
// Set the observer for the time container
hgs
parents:
diff changeset
   662
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   663
//
hgs
parents:
diff changeset
   664
void CSvgTimeContainer::SetTcObserver( MSvgTimeContainerObserver* aTCObserver )
hgs
parents:
diff changeset
   665
    {
hgs
parents:
diff changeset
   666
    iObserver = aTCObserver;
hgs
parents:
diff changeset
   667
  // Inform the observer that the time container is ready
hgs
parents:
diff changeset
   668
     if ( iObserver )
hgs
parents:
diff changeset
   669
        {
hgs
parents:
diff changeset
   670
        if ( iMediaState == ESvgMediaReady)
hgs
parents:
diff changeset
   671
            {
hgs
parents:
diff changeset
   672
            iObserver->TimeContainerReady();
hgs
parents:
diff changeset
   673
            }
hgs
parents:
diff changeset
   674
        else
hgs
parents:
diff changeset
   675
            {
hgs
parents:
diff changeset
   676
            iObserver->TimeContainerNotReady();
hgs
parents:
diff changeset
   677
            }
hgs
parents:
diff changeset
   678
        }    
hgs
parents:
diff changeset
   679
    }
hgs
parents:
diff changeset
   680
hgs
parents:
diff changeset
   681
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   682
// CSvgTimeContainer::UserStop
hgs
parents:
diff changeset
   683
// Called to handle user/client generated stop event
hgs
parents:
diff changeset
   684
/*
hgs
parents:
diff changeset
   685
      UserStop()
hgs
parents:
diff changeset
   686
      {
hgs
parents:
diff changeset
   687
      
hgs
parents:
diff changeset
   688
                  Set the TC.UserState too 
hgs
parents:
diff changeset
   689
                  This.UserState = Paused.
hgs
parents:
diff changeset
   690
hgs
parents:
diff changeset
   691
        
hgs
parents:
diff changeset
   692
        For all timed entities
hgs
parents:
diff changeset
   693
    {
hgs
parents:
diff changeset
   694
        UserStopElement()
hgs
parents:
diff changeset
   695
      {
hgs
parents:
diff changeset
   696
        StopElement()
hgs
parents:
diff changeset
   697
        Set userStatus = Stopped
hgs
parents:
diff changeset
   698
        If Element type = Animation       
hgs
parents:
diff changeset
   699
                {
hgs
parents:
diff changeset
   700
                Get Child TC Pointer.
hgs
parents:
diff changeset
   701
                If Valid,
hgs
parents:
diff changeset
   702
              Call Child Tc->UserStop
hgs
parents:
diff changeset
   703
            }
hgs
parents:
diff changeset
   704
hgs
parents:
diff changeset
   705
      }
hgs
parents:
diff changeset
   706
        }
hgs
parents:
diff changeset
   707
       }
hgs
parents:
diff changeset
   708
    */
hgs
parents:
diff changeset
   709
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   710
//
hgs
parents:
diff changeset
   711
void CSvgTimeContainer::UserStop()
hgs
parents:
diff changeset
   712
    {
hgs
parents:
diff changeset
   713
    SetUserState(ESvgUserStopped);
hgs
parents:
diff changeset
   714
    // Cancel the timer
hgs
parents:
diff changeset
   715
    if ( iTimer )
hgs
parents:
diff changeset
   716
        {
hgs
parents:
diff changeset
   717
        iTimer->SVGStop();
hgs
parents:
diff changeset
   718
        }    
hgs
parents:
diff changeset
   719
    TInt lTimedEntityListCnt = iTcTimedEntities.Count();
hgs
parents:
diff changeset
   720
    for ( TInt lItemIndex = lTimedEntityListCnt - 1; lItemIndex >= 0 ; lItemIndex-- )
hgs
parents:
diff changeset
   721
        {
hgs
parents:
diff changeset
   722
        UserStopElement(&iTcTimedEntities[lItemIndex]);
hgs
parents:
diff changeset
   723
        }
hgs
parents:
diff changeset
   724
    UserStopElement(&iLrteListItem);
hgs
parents:
diff changeset
   725
    
hgs
parents:
diff changeset
   726
    }
hgs
parents:
diff changeset
   727
hgs
parents:
diff changeset
   728
hgs
parents:
diff changeset
   729
void CSvgTimeContainer::UserStopElement(TSvgTimedEntityListItem* aTimedEntity)
hgs
parents:
diff changeset
   730
{
hgs
parents:
diff changeset
   731
  aTimedEntity->iTimedEntity->StopTimedEntity();
hgs
parents:
diff changeset
   732
  
hgs
parents:
diff changeset
   733
  aTimedEntity->iIsSyncPaused = EFalse;
hgs
parents:
diff changeset
   734
  
hgs
parents:
diff changeset
   735
  SetUserState(ESvgUserStopped);
hgs
parents:
diff changeset
   736
  
hgs
parents:
diff changeset
   737
  if(aTimedEntity->iTimedEntity->ObjectType() == ESvgMediaAnimationElement)  
hgs
parents:
diff changeset
   738
    {
hgs
parents:
diff changeset
   739
          CSvgTimeContainer* AnimTimeContainer = aTimedEntity->iTimedEntity->GetChildTimeContainer();
hgs
parents:
diff changeset
   740
          if(AnimTimeContainer)
hgs
parents:
diff changeset
   741
          {
hgs
parents:
diff changeset
   742
              AnimTimeContainer->UserStop();
hgs
parents:
diff changeset
   743
          }
hgs
parents:
diff changeset
   744
    }
hgs
parents:
diff changeset
   745
}
hgs
parents:
diff changeset
   746
hgs
parents:
diff changeset
   747
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   748
// CSvgTimeContainer::UserResume
hgs
parents:
diff changeset
   749
// Called to handle user/client generated resume event
hgs
parents:
diff changeset
   750
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   751
//
hgs
parents:
diff changeset
   752
void CSvgTimeContainer::UserResume( TInt32 aTime )
hgs
parents:
diff changeset
   753
    {
hgs
parents:
diff changeset
   754
        
hgs
parents:
diff changeset
   755
    SetUserState(ESvgUserRunning);
hgs
parents:
diff changeset
   756
    if ( iTimer )
hgs
parents:
diff changeset
   757
        {
hgs
parents:
diff changeset
   758
        iTimer->SVGResume( aTime );
hgs
parents:
diff changeset
   759
        }
hgs
parents:
diff changeset
   760
        
hgs
parents:
diff changeset
   761
    
hgs
parents:
diff changeset
   762
    
hgs
parents:
diff changeset
   763
    /*
hgs
parents:
diff changeset
   764
    UserResume()
hgs
parents:
diff changeset
   765
    {
hgs
parents:
diff changeset
   766
      For all timed entities
hgs
parents:
diff changeset
   767
    {
hgs
parents:
diff changeset
   768
      UserResumeElement()
hgs
parents:
diff changeset
   769
         }
hgs
parents:
diff changeset
   770
    }
hgs
parents:
diff changeset
   771
  */
hgs
parents:
diff changeset
   772
  
hgs
parents:
diff changeset
   773
    TInt lTimedEntityListCnt = iTcTimedEntities.Count();
hgs
parents:
diff changeset
   774
    for ( TInt lItemIndex = lTimedEntityListCnt - 1; lItemIndex >= 0 ; lItemIndex-- )
hgs
parents:
diff changeset
   775
      {
hgs
parents:
diff changeset
   776
      UserResumeElement(&iTcTimedEntities[ lItemIndex ]);
hgs
parents:
diff changeset
   777
      }
hgs
parents:
diff changeset
   778
      
hgs
parents:
diff changeset
   779
      
hgs
parents:
diff changeset
   780
    UserResumeElement(&iLrteListItem);
hgs
parents:
diff changeset
   781
hgs
parents:
diff changeset
   782
    }
hgs
parents:
diff changeset
   783
hgs
parents:
diff changeset
   784
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   785
// CSvgTimeContainer::UserResumeElement
hgs
parents:
diff changeset
   786
/*
hgs
parents:
diff changeset
   787
UserResumeElement()
hgs
parents:
diff changeset
   788
       {
hgs
parents:
diff changeset
   789
          If(Element is locked)
hgs
parents:
diff changeset
   790
              {
hgs
parents:
diff changeset
   791
                If ( syncStatus is running AND TC.syncStatus is running)
hgs
parents:
diff changeset
   792
                    Resume Element
hgs
parents:
diff changeset
   793
              }
hgs
parents:
diff changeset
   794
              Else
hgs
parents:
diff changeset
   795
              {
hgs
parents:
diff changeset
   796
                ResumeElement()
hgs
parents:
diff changeset
   797
              }
hgs
parents:
diff changeset
   798
  
hgs
parents:
diff changeset
   799
              Set userStatus = running
hgs
parents:
diff changeset
   800
                If Element type = Animation
hgs
parents:
diff changeset
   801
            {
hgs
parents:
diff changeset
   802
                Get Child TC Pointer.
hgs
parents:
diff changeset
   803
                If Valid,
hgs
parents:
diff changeset
   804
                  Call Child Tc->UserResume
hgs
parents:
diff changeset
   805
            }
hgs
parents:
diff changeset
   806
hgs
parents:
diff changeset
   807
      }
hgs
parents:
diff changeset
   808
*/
hgs
parents:
diff changeset
   809
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   810
//
hgs
parents:
diff changeset
   811
hgs
parents:
diff changeset
   812
void CSvgTimeContainer::UserResumeElement(TSvgTimedEntityListItem* aTimedEntity)
hgs
parents:
diff changeset
   813
  {
hgs
parents:
diff changeset
   814
  aTimedEntity->iUserState = ESvgUserRunning ;
hgs
parents:
diff changeset
   815
      
hgs
parents:
diff changeset
   816
  if(//Element is locked
hgs
parents:
diff changeset
   817
    (aTimedEntity->iTimedEntity->GetEntitySyncBehavior() == ESvgSyncLocked)
hgs
parents:
diff changeset
   818
    &&((aTimedEntity->iIsSyncPaused) || (iIsSyncPaused))
hgs
parents:
diff changeset
   819
     //element or timecontainer is syncpaused
hgs
parents:
diff changeset
   820
  )
hgs
parents:
diff changeset
   821
    {
hgs
parents:
diff changeset
   822
    //Do not resume
hgs
parents:
diff changeset
   823
    }
hgs
parents:
diff changeset
   824
  else
hgs
parents:
diff changeset
   825
    {
hgs
parents:
diff changeset
   826
    aTimedEntity->iTimedEntity->ResumeTimedEntity();
hgs
parents:
diff changeset
   827
    }
hgs
parents:
diff changeset
   828
hgs
parents:
diff changeset
   829
  
hgs
parents:
diff changeset
   830
  if(aTimedEntity->iTimedEntity->ObjectType() == ESvgMediaAnimationElement)  
hgs
parents:
diff changeset
   831
    {
hgs
parents:
diff changeset
   832
    CSvgTimeContainer* AnimTimeContainer = aTimedEntity->iTimedEntity->GetChildTimeContainer();
hgs
parents:
diff changeset
   833
    if(AnimTimeContainer)
hgs
parents:
diff changeset
   834
        {
hgs
parents:
diff changeset
   835
        AnimTimeContainer->UserResume();
hgs
parents:
diff changeset
   836
        }
hgs
parents:
diff changeset
   837
    }
hgs
parents:
diff changeset
   838
  }
hgs
parents:
diff changeset
   839
hgs
parents:
diff changeset
   840
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   841
// CSvgTimeContainer::UserPlay
hgs
parents:
diff changeset
   842
// Called to handle user/client generated play event
hgs
parents:
diff changeset
   843
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   844
//
hgs
parents:
diff changeset
   845
void CSvgTimeContainer::UserPlay()
hgs
parents:
diff changeset
   846
    {
hgs
parents:
diff changeset
   847
hgs
parents:
diff changeset
   848
    
hgs
parents:
diff changeset
   849
    if ( !iTimer )
hgs
parents:
diff changeset
   850
        {
hgs
parents:
diff changeset
   851
        // Check whether this time container has a parent
hgs
parents:
diff changeset
   852
        // then we do not have to create the timer
hgs
parents:
diff changeset
   853
        if ( !iIsParentTcPresent )
hgs
parents:
diff changeset
   854
            {
hgs
parents:
diff changeset
   855
            // Obtain the post order list of media elements 
hgs
parents:
diff changeset
   856
             RPointerArray<CSvgElementImpl> lMediaEleList;
hgs
parents:
diff changeset
   857
            lMediaEleList.Reset(); 
hgs
parents:
diff changeset
   858
            
hgs
parents:
diff changeset
   859
            CSvgElementImpl *handle = (CSvgElementImpl *)(iOwnerDoc->RootElement());
hgs
parents:
diff changeset
   860
            
hgs
parents:
diff changeset
   861
            //Parse postorderr only if there are media elements
hgs
parents:
diff changeset
   862
            if(iTcTimedEntities.Count() > 1 )
hgs
parents:
diff changeset
   863
            {
hgs
parents:
diff changeset
   864
              iOwnerDoc->ParsePostOrderMediaElements( handle, lMediaEleList );    
hgs
parents:
diff changeset
   865
            }
hgs
parents:
diff changeset
   866
            
hgs
parents:
diff changeset
   867
            
hgs
parents:
diff changeset
   868
            // Rearrange as per Post order
hgs
parents:
diff changeset
   869
            RearrangeTimedEntityList( lMediaEleList );
hgs
parents:
diff changeset
   870
            
hgs
parents:
diff changeset
   871
            // Done with the list
hgs
parents:
diff changeset
   872
            lMediaEleList.Close();  
hgs
parents:
diff changeset
   873
            
hgs
parents:
diff changeset
   874
            TRAPD( lTimerCreateErr, iTimer = CSvgTimer::NewL( this ) );
hgs
parents:
diff changeset
   875
            
hgs
parents:
diff changeset
   876
            if ( lTimerCreateErr != KErrNone )
hgs
parents:
diff changeset
   877
                {
hgs
parents:
diff changeset
   878
                // Error Processing
hgs
parents:
diff changeset
   879
                return;
hgs
parents:
diff changeset
   880
                }
hgs
parents:
diff changeset
   881
            
hgs
parents:
diff changeset
   882
            iTimer->SetStartTime();
hgs
parents:
diff changeset
   883
            
hgs
parents:
diff changeset
   884
            // the current home time needs to be updated.
hgs
parents:
diff changeset
   885
            if ( iOwnerDoc && iCurrentTime != 0 )
hgs
parents:
diff changeset
   886
                {
hgs
parents:
diff changeset
   887
                iCurrentTime = 0;
hgs
parents:
diff changeset
   888
                iCurrentTick.iParentTcTick = 0;
hgs
parents:
diff changeset
   889
                iCurrentTick.iRealTimeTick = 0;
hgs
parents:
diff changeset
   890
                TSvgTimerEvent timeEvent( iCurrentTime );
hgs
parents:
diff changeset
   891
                iOwnerDoc->Reset( &timeEvent );
hgs
parents:
diff changeset
   892
                }            
hgs
parents:
diff changeset
   893
hgs
parents:
diff changeset
   894
            if ( !iTimer->IsActive() )
hgs
parents:
diff changeset
   895
                {
hgs
parents:
diff changeset
   896
                iTimer->After( 1000 );
hgs
parents:
diff changeset
   897
                }           
hgs
parents:
diff changeset
   898
            }
hgs
parents:
diff changeset
   899
        }
hgs
parents:
diff changeset
   900
    }
hgs
parents:
diff changeset
   901
hgs
parents:
diff changeset
   902
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   903
// CSvgTimeContainer::UserPause
hgs
parents:
diff changeset
   904
hgs
parents:
diff changeset
   905
 /*
hgs
parents:
diff changeset
   906
 
hgs
parents:
diff changeset
   907
                   Set the TC.UserState too 
hgs
parents:
diff changeset
   908
                  This.UserState = Paused.
hgs
parents:
diff changeset
   909
hgs
parents:
diff changeset
   910
    UserPause()
hgs
parents:
diff changeset
   911
    {
hgs
parents:
diff changeset
   912
      For all timed entities
hgs
parents:
diff changeset
   913
    {
hgs
parents:
diff changeset
   914
         UserPauseElement()     iIsSyncPaused is syncStatus 
hgs
parents:
diff changeset
   915
      
hgs
parents:
diff changeset
   916
    }
hgs
parents:
diff changeset
   917
    }
hgs
parents:
diff changeset
   918
    */
hgs
parents:
diff changeset
   919
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   920
//
hgs
parents:
diff changeset
   921
void CSvgTimeContainer::UserPause()
hgs
parents:
diff changeset
   922
{
hgs
parents:
diff changeset
   923
  SetUserState(ESvgUserPaused);
hgs
parents:
diff changeset
   924
  if ( iTimer )
hgs
parents:
diff changeset
   925
    {
hgs
parents:
diff changeset
   926
  	iTimer->SVGStop();
hgs
parents:
diff changeset
   927
    }
hgs
parents:
diff changeset
   928
 
hgs
parents:
diff changeset
   929
  TInt lTimedEntityListCnt = iTcTimedEntities.Count();
hgs
parents:
diff changeset
   930
  for ( TInt lItemIndex = lTimedEntityListCnt - 1; lItemIndex >= 0 ; lItemIndex-- )
hgs
parents:
diff changeset
   931
    {
hgs
parents:
diff changeset
   932
    UserPauseElement(&iTcTimedEntities[ lItemIndex ]);
hgs
parents:
diff changeset
   933
    }
hgs
parents:
diff changeset
   934
    
hgs
parents:
diff changeset
   935
    UserPauseElement(&iLrteListItem);
hgs
parents:
diff changeset
   936
hgs
parents:
diff changeset
   937
}
hgs
parents:
diff changeset
   938
    
hgs
parents:
diff changeset
   939
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   940
// CSvgTimeContainer::UserPauseElement
hgs
parents:
diff changeset
   941
// Called to handle user/client generated pause event
hgs
parents:
diff changeset
   942
// 
hgs
parents:
diff changeset
   943
/*
hgs
parents:
diff changeset
   944
    UserPauseElement()     iIsSyncPaused is syncStatus 
hgs
parents:
diff changeset
   945
      {
hgs
parents:
diff changeset
   946
          If ( syncStatus is not Paused AND userStatus is not paused or stopped )
hgs
parents:
diff changeset
   947
          Pause Element
hgs
parents:
diff changeset
   948
           Set userStatus = Paused
hgs
parents:
diff changeset
   949
           
hgs
parents:
diff changeset
   950
               If Element type = Animation
hgs
parents:
diff changeset
   951
                {
hgs
parents:
diff changeset
   952
                    Get Child TC Pointer.
hgs
parents:
diff changeset
   953
                    If Valid,
hgs
parents:
diff changeset
   954
                      Call Child Tc->UserPause
hgs
parents:
diff changeset
   955
                }
hgs
parents:
diff changeset
   956
hgs
parents:
diff changeset
   957
      }
hgs
parents:
diff changeset
   958
*/
hgs
parents:
diff changeset
   959
hgs
parents:
diff changeset
   960
//-----------------------------------------------------------------------------
hgs
parents:
diff changeset
   961
//
hgs
parents:
diff changeset
   962
   
hgs
parents:
diff changeset
   963
 void CSvgTimeContainer::UserPauseElement(TSvgTimedEntityListItem* aTimedEntity)
hgs
parents:
diff changeset
   964
{
hgs
parents:
diff changeset
   965
  if(
hgs
parents:
diff changeset
   966
      !(aTimedEntity->iIsSyncPaused )
hgs
parents:
diff changeset
   967
    &&  (aTimedEntity->iUserState == ESvgUserRunning)
hgs
parents:
diff changeset
   968
      )
hgs
parents:
diff changeset
   969
    {
hgs
parents:
diff changeset
   970
      aTimedEntity->iTimedEntity->PauseTimedEntity();
hgs
parents:
diff changeset
   971
          
hgs
parents:
diff changeset
   972
    } 
hgs
parents:
diff changeset
   973
    aTimedEntity->iUserState = ESvgUserPaused;
hgs
parents:
diff changeset
   974
    
hgs
parents:
diff changeset
   975
    if(aTimedEntity->iTimedEntity->ObjectType() == ESvgMediaAnimationElement)  
hgs
parents:
diff changeset
   976
    {
hgs
parents:
diff changeset
   977
        CSvgTimeContainer* AnimTimeContainer = aTimedEntity->iTimedEntity->GetChildTimeContainer();
hgs
parents:
diff changeset
   978
        if(AnimTimeContainer)
hgs
parents:
diff changeset
   979
        {
hgs
parents:
diff changeset
   980
            AnimTimeContainer->UserPause();
hgs
parents:
diff changeset
   981
      }
hgs
parents:
diff changeset
   982
    }
hgs
parents:
diff changeset
   983
    
hgs
parents:
diff changeset
   984
}
hgs
parents:
diff changeset
   985
hgs
parents:
diff changeset
   986
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   987
// CSvgTimeContainer::UserSeek
hgs
parents:
diff changeset
   988
// Called to handle user/client generated seek event
hgs
parents:
diff changeset
   989
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   990
//
hgs
parents:
diff changeset
   991
void CSvgTimeContainer::UserSeek( 
hgs
parents:
diff changeset
   992
    TInt aTime ) // Time in msecs to seek
hgs
parents:
diff changeset
   993
    {
hgs
parents:
diff changeset
   994
    if ( iTimer )
hgs
parents:
diff changeset
   995
        {
hgs
parents:
diff changeset
   996
        //if ( iOwnerDoc && iCurrentTime != aTime )
hgs
parents:
diff changeset
   997
        if ( iOwnerDoc)
hgs
parents:
diff changeset
   998
            {
hgs
parents:
diff changeset
   999
            iCurrentTime = aTime;
hgs
parents:
diff changeset
  1000
            iCurrentTick.iParentTcTick = aTime;
hgs
parents:
diff changeset
  1001
            iCurrentTick.iRealTimeTick = aTime;
hgs
parents:
diff changeset
  1002
            TSvgTimerEvent timeEvent( iCurrentTime );
hgs
parents:
diff changeset
  1003
            iOwnerDoc->Reset( &timeEvent );
hgs
parents:
diff changeset
  1004
            }            
hgs
parents:
diff changeset
  1005
hgs
parents:
diff changeset
  1006
        iTimer->SetSeekTime( aTime );
hgs
parents:
diff changeset
  1007
        }
hgs
parents:
diff changeset
  1008
    // Need to send user resume events to timed entities
hgs
parents:
diff changeset
  1009
    SetUserState(ESvgUserRunning);
hgs
parents:
diff changeset
  1010
    TInt lTimedEntityListCnt = iTcTimedEntities.Count();
hgs
parents:
diff changeset
  1011
    for ( TInt lItemIndex = lTimedEntityListCnt - 1; lItemIndex >= 0 ; lItemIndex-- )
hgs
parents:
diff changeset
  1012
    	{
hgs
parents:
diff changeset
  1013
		UserResumeElement( &iTcTimedEntities[ lItemIndex ] );
hgs
parents:
diff changeset
  1014
    	}
hgs
parents:
diff changeset
  1015
    
hgs
parents:
diff changeset
  1016
    UserResumeElement(&iLrteListItem);
hgs
parents:
diff changeset
  1017
    }
hgs
parents:
diff changeset
  1018
hgs
parents:
diff changeset
  1019
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1020
// CSvgTimeContainer::UserResetTime
hgs
parents:
diff changeset
  1021
// Resets the time variables
hgs
parents:
diff changeset
  1022
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1023
void CSvgTimeContainer::UserResetTime()
hgs
parents:
diff changeset
  1024
    {
hgs
parents:
diff changeset
  1025
    if ( iTimer )
hgs
parents:
diff changeset
  1026
        {
hgs
parents:
diff changeset
  1027
        iTimer->ResetTime();
hgs
parents:
diff changeset
  1028
        }
hgs
parents:
diff changeset
  1029
    }
hgs
parents:
diff changeset
  1030
hgs
parents:
diff changeset
  1031
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1032
// CSvgTimeContainer::UserChangeFrameDuration
hgs
parents:
diff changeset
  1033
// Changes the frame duration in the timer
hgs
parents:
diff changeset
  1034
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1035
void CSvgTimeContainer::UserChangeFrameDuration( TUint32 aTimerDuration )
hgs
parents:
diff changeset
  1036
    {
hgs
parents:
diff changeset
  1037
    if ( iTimer )
hgs
parents:
diff changeset
  1038
        {
hgs
parents:
diff changeset
  1039
        iTimer->ChangeFrameDuration( aTimerDuration );
hgs
parents:
diff changeset
  1040
        }    
hgs
parents:
diff changeset
  1041
    }
hgs
parents:
diff changeset
  1042
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1043
// CSvgTimeContainer::UserFps
hgs
parents:
diff changeset
  1044
// Returns number of frames per sec(debug api)
hgs
parents:
diff changeset
  1045
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1046
TUint CSvgTimeContainer::UserFps()
hgs
parents:
diff changeset
  1047
    {
hgs
parents:
diff changeset
  1048
    if ( iTimer )
hgs
parents:
diff changeset
  1049
        {
hgs
parents:
diff changeset
  1050
        return iTimer->Fps();
hgs
parents:
diff changeset
  1051
        }
hgs
parents:
diff changeset
  1052
    return 0;        
hgs
parents:
diff changeset
  1053
    }
hgs
parents:
diff changeset
  1054
    
hgs
parents:
diff changeset
  1055
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1056
// CSvgTimeContainer::ParentTimeContainerTick
hgs
parents:
diff changeset
  1057
// From MSvgTimedEntityInterface
hgs
parents:
diff changeset
  1058
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1059
//
hgs
parents:
diff changeset
  1060
void CSvgTimeContainer::ParentTimeContainerTick( 
hgs
parents:
diff changeset
  1061
    TSvgTick aTick ) // Current tick information 
hgs
parents:
diff changeset
  1062
    {
hgs
parents:
diff changeset
  1063
    // Update the member variable keeping track of current tick
hgs
parents:
diff changeset
  1064
    iCurrentTick.iRealTimeTick = aTick.iRealTimeTick;
hgs
parents:
diff changeset
  1065
    
hgs
parents:
diff changeset
  1066
    // If the TC is locked wrt to its parent and parent is present
hgs
parents:
diff changeset
  1067
    if ( ( iTcSyncBehavior == ESvgSyncLocked ) && iIsParentTcPresent )
hgs
parents:
diff changeset
  1068
        {
hgs
parents:
diff changeset
  1069
        iCurrentTick.iParentTcTick = aTick.iParentTcTick;
hgs
parents:
diff changeset
  1070
        // Propogate the tick to all timed elements in the container
hgs
parents:
diff changeset
  1071
        PropogateTickToContainerElements( iCurrentTick );
hgs
parents:
diff changeset
  1072
        }
hgs
parents:
diff changeset
  1073
    else
hgs
parents:
diff changeset
  1074
        {
hgs
parents:
diff changeset
  1075
        // Container not locked with respect to parent.
hgs
parents:
diff changeset
  1076
        // Get Sync Master Entity in the group and use its clock as timing
hgs
parents:
diff changeset
  1077
        // reference for the Time container. 
hgs
parents:
diff changeset
  1078
        MSvgTimedEntityInterface* lSyncMaster = GetSyncMasterForTimeContainer();
hgs
parents:
diff changeset
  1079
hgs
parents:
diff changeset
  1080
        if ( !lSyncMaster )
hgs
parents:
diff changeset
  1081
            {
hgs
parents:
diff changeset
  1082
            // No Sync Master
hgs
parents:
diff changeset
  1083
            iCurrentTick.iParentTcTick = aTick.iRealTimeTick;
hgs
parents:
diff changeset
  1084
            // Propogate the tick to all timed elements in the container
hgs
parents:
diff changeset
  1085
            PropogateTickToContainerElements( iCurrentTick );
hgs
parents:
diff changeset
  1086
            }
hgs
parents:
diff changeset
  1087
        else
hgs
parents:
diff changeset
  1088
            {
hgs
parents:
diff changeset
  1089
            // Sync Master Present, check whether it can generate tick
hgs
parents:
diff changeset
  1090
            if ( lSyncMaster->CanGenerateTick() )
hgs
parents:
diff changeset
  1091
                {
hgs
parents:
diff changeset
  1092
                TUint32 lMasterCurTime = 0;
hgs
parents:
diff changeset
  1093
                lSyncMaster->GetEntityCurrentTime( lMasterCurTime );
hgs
parents:
diff changeset
  1094
                iCurrentTick.iParentTcTick = lMasterCurTime;
hgs
parents:
diff changeset
  1095
                // Propogate the tick to all timed elements in the container
hgs
parents:
diff changeset
  1096
                PropogateTickToContainerElements( iCurrentTick );
hgs
parents:
diff changeset
  1097
                }
hgs
parents:
diff changeset
  1098
            else
hgs
parents:
diff changeset
  1099
                {
hgs
parents:
diff changeset
  1100
                // Sync Master present but cannot generate tick, so use
hgs
parents:
diff changeset
  1101
                // real time tick
hgs
parents:
diff changeset
  1102
                iCurrentTick.iParentTcTick = aTick.iRealTimeTick;
hgs
parents:
diff changeset
  1103
                // Propogate the tick to all timed elements in the container
hgs
parents:
diff changeset
  1104
                PropogateTickToContainerElements( iCurrentTick );
hgs
parents:
diff changeset
  1105
                }
hgs
parents:
diff changeset
  1106
            }
hgs
parents:
diff changeset
  1107
        }
hgs
parents:
diff changeset
  1108
    }
hgs
parents:
diff changeset
  1109
hgs
parents:
diff changeset
  1110
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1111
// CSvgTimeContainer::GetEntitySyncBehavior
hgs
parents:
diff changeset
  1112
// From MSvgTimedEntityInterface
hgs
parents:
diff changeset
  1113
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1114
//        
hgs
parents:
diff changeset
  1115
TSvgSyncBehaviour CSvgTimeContainer::GetEntitySyncBehavior()
hgs
parents:
diff changeset
  1116
    {
hgs
parents:
diff changeset
  1117
    return iTcSyncBehavior; 
hgs
parents:
diff changeset
  1118
    }
hgs
parents:
diff changeset
  1119
        
hgs
parents:
diff changeset
  1120
hgs
parents:
diff changeset
  1121
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1122
// CSvgTimeContainer::GetEntityCurrentTime
hgs
parents:
diff changeset
  1123
// From MSvgTimedEntityInterface
hgs
parents:
diff changeset
  1124
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1125
//        
hgs
parents:
diff changeset
  1126
void CSvgTimeContainer::GetEntityCurrentTime( TUint32& 
hgs
parents:
diff changeset
  1127
            aEntityCurTime ) // Current Entity Time in msecs. 
hgs
parents:
diff changeset
  1128
    {
hgs
parents:
diff changeset
  1129
    // IF GetCurSyncMasterStatus == FALSE, Error. // Shouldn't be happening.
hgs
parents:
diff changeset
  1130
    TBool lCurSyncMasterStatus = EFalse;
hgs
parents:
diff changeset
  1131
    GetCurSyncMasterStatus( lCurSyncMasterStatus );
hgs
parents:
diff changeset
  1132
hgs
parents:
diff changeset
  1133
    if ( lCurSyncMasterStatus )
hgs
parents:
diff changeset
  1134
        {
hgs
parents:
diff changeset
  1135
        // Resolve the sync Master for the container.  (Should have happened?)
hgs
parents:
diff changeset
  1136
        MSvgTimedEntityInterface* lSyncMaster = GetSyncMasterForTimeContainer();
hgs
parents:
diff changeset
  1137
        // IF no syncMaster, Error (Shouldn't be happening.)
hgs
parents:
diff changeset
  1138
        if ( !lSyncMaster )
hgs
parents:
diff changeset
  1139
            {
hgs
parents:
diff changeset
  1140
            return;
hgs
parents:
diff changeset
  1141
            }
hgs
parents:
diff changeset
  1142
        lSyncMaster->GetEntityCurrentTime( aEntityCurTime );
hgs
parents:
diff changeset
  1143
        }
hgs
parents:
diff changeset
  1144
    }
hgs
parents:
diff changeset
  1145
hgs
parents:
diff changeset
  1146
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1147
// CSvgTimeContainer::GetCnfSyncMasterStatus
hgs
parents:
diff changeset
  1148
// From MSvgTimedEntityInterface
hgs
parents:
diff changeset
  1149
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1150
//        
hgs
parents:
diff changeset
  1151
void CSvgTimeContainer::GetCnfSyncMasterStatus( 
hgs
parents:
diff changeset
  1152
            TBool& aIsSyncMaster ) // Indicates whether the element is configured as 
hgs
parents:
diff changeset
  1153
                                   // Sync Master. 
hgs
parents:
diff changeset
  1154
    {
hgs
parents:
diff changeset
  1155
    iTcSyncMasterConfig = aIsSyncMaster;
hgs
parents:
diff changeset
  1156
    }                                   
hgs
parents:
diff changeset
  1157
hgs
parents:
diff changeset
  1158
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1159
// CSvgTimeContainer::GetCurSyncMasterStatus
hgs
parents:
diff changeset
  1160
// From MSvgTimedEntityInterface
hgs
parents:
diff changeset
  1161
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1162
void CSvgTimeContainer::GetCurSyncMasterStatus( 
hgs
parents:
diff changeset
  1163
            TBool& aIsSyncMaster ) // Indicates whether the element is currrently 
hgs
parents:
diff changeset
  1164
                                  // Sync Master. 
hgs
parents:
diff changeset
  1165
    {
hgs
parents:
diff changeset
  1166
    aIsSyncMaster = iTcSyncMasterCurrent;
hgs
parents:
diff changeset
  1167
    }        
hgs
parents:
diff changeset
  1168
hgs
parents:
diff changeset
  1169
hgs
parents:
diff changeset
  1170
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1171
// CSvgTimeContainer::SetCurSyncMasterStatus
hgs
parents:
diff changeset
  1172
// From MSvgTimedEntityInterface
hgs
parents:
diff changeset
  1173
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1174
void CSvgTimeContainer::SetCurSyncMasterStatus( 
hgs
parents:
diff changeset
  1175
    TBool aSyncMasterStatus ) //  Indicates whether the element is currrently 
hgs
parents:
diff changeset
  1176
                              // Sync Master.
hgs
parents:
diff changeset
  1177
    {
hgs
parents:
diff changeset
  1178
    iTcSyncMasterCurrent = aSyncMasterStatus;
hgs
parents:
diff changeset
  1179
    // Update the state of current sync master if there is one
hgs
parents:
diff changeset
  1180
    if ( iTcSyncMaster )
hgs
parents:
diff changeset
  1181
        {
hgs
parents:
diff changeset
  1182
        iTcSyncMaster->SetCurSyncMasterStatus( aSyncMasterStatus );
hgs
parents:
diff changeset
  1183
        }
hgs
parents:
diff changeset
  1184
    }
hgs
parents:
diff changeset
  1185
hgs
parents:
diff changeset
  1186
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1187
// CSvgTimeContainer::CanGenerateTick
hgs
parents:
diff changeset
  1188
// From MSvgTimedEntityInterface
hgs
parents:
diff changeset
  1189
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1190
TBool CSvgTimeContainer::CanGenerateTick()
hgs
parents:
diff changeset
  1191
    {
hgs
parents:
diff changeset
  1192
    MSvgTimedEntityInterface* lSyncMaster = GetSyncMasterForTimeContainer();
hgs
parents:
diff changeset
  1193
    if(lSyncMaster == iLrteListItem.iTimedEntity)
hgs
parents:
diff changeset
  1194
        {
hgs
parents:
diff changeset
  1195
        return EFalse;
hgs
parents:
diff changeset
  1196
        }
hgs
parents:
diff changeset
  1197
    return ( lSyncMaster ? ETrue:EFalse );
hgs
parents:
diff changeset
  1198
    }
hgs
parents:
diff changeset
  1199
hgs
parents:
diff changeset
  1200
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1201
// CSvgTimeContainer::CanUseParentTick
hgs
parents:
diff changeset
  1202
// From MSvgTimedEntityInterface
hgs
parents:
diff changeset
  1203
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1204
TBool CSvgTimeContainer::CanUseParentTick()
hgs
parents:
diff changeset
  1205
    {
hgs
parents:
diff changeset
  1206
    // This function returns true if it does not have a parent time container
hgs
parents:
diff changeset
  1207
    // Hence the root time container creates the timer and hence can use
hgs
parents:
diff changeset
  1208
    // parent tick
hgs
parents:
diff changeset
  1209
    return ( !iIsParentTcPresent );
hgs
parents:
diff changeset
  1210
    }
hgs
parents:
diff changeset
  1211
    
hgs
parents:
diff changeset
  1212
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1213
// CSvgTimeContainer::ResyncTimedEntity
hgs
parents:
diff changeset
  1214
// From MSvgTimedEntityInterface
hgs
parents:
diff changeset
  1215
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1216
void CSvgTimeContainer::ResyncTimedEntity( 
hgs
parents:
diff changeset
  1217
            TUint32 /*aSynctime */) // Time for resync in msecs.
hgs
parents:
diff changeset
  1218
    {
hgs
parents:
diff changeset
  1219
    // TODO: Resync Logic
hgs
parents:
diff changeset
  1220
    }
hgs
parents:
diff changeset
  1221
    
hgs
parents:
diff changeset
  1222
hgs
parents:
diff changeset
  1223
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1224
// CSvgTimeContainer::PauseTimedEntity
hgs
parents:
diff changeset
  1225
// From MSvgTimedEntityInterface
hgs
parents:
diff changeset
  1226
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1227
void CSvgTimeContainer::PauseTimedEntity()
hgs
parents:
diff changeset
  1228
    {
hgs
parents:
diff changeset
  1229
hgs
parents:
diff changeset
  1230
    }
hgs
parents:
diff changeset
  1231
hgs
parents:
diff changeset
  1232
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1233
// CSvgTimeContainer::ResumeTimedEntity
hgs
parents:
diff changeset
  1234
// From MSvgTimedEntityInterface
hgs
parents:
diff changeset
  1235
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1236
void CSvgTimeContainer::ResumeTimedEntity()
hgs
parents:
diff changeset
  1237
    {
hgs
parents:
diff changeset
  1238
 
hgs
parents:
diff changeset
  1239
    }
hgs
parents:
diff changeset
  1240
hgs
parents:
diff changeset
  1241
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1242
// CSvgTimeContainer::StopTimedEntity
hgs
parents:
diff changeset
  1243
// From MSvgTimedEntityInterface
hgs
parents:
diff changeset
  1244
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1245
void CSvgTimeContainer::StopTimedEntity()
hgs
parents:
diff changeset
  1246
    {
hgs
parents:
diff changeset
  1247
hgs
parents:
diff changeset
  1248
    }
hgs
parents:
diff changeset
  1249
hgs
parents:
diff changeset
  1250
hgs
parents:
diff changeset
  1251
//From MSvgTimedEntityInterface
hgs
parents:
diff changeset
  1252
TSvgObjectType CSvgTimeContainer::ObjectType()
hgs
parents:
diff changeset
  1253
{
hgs
parents:
diff changeset
  1254
  return ESvgInvalidReference;  
hgs
parents:
diff changeset
  1255
}
hgs
parents:
diff changeset
  1256
hgs
parents:
diff changeset
  1257
//returns the child time container of the element 
hgs
parents:
diff changeset
  1258
//used in timecontainer
hgs
parents:
diff changeset
  1259
CSvgTimeContainer* CSvgTimeContainer::GetChildTimeContainer()
hgs
parents:
diff changeset
  1260
{
hgs
parents:
diff changeset
  1261
    return NULL;
hgs
parents:
diff changeset
  1262
}
hgs
parents:
diff changeset
  1263
hgs
parents:
diff changeset
  1264
//-------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1265
/*
hgs
parents:
diff changeset
  1266
TC::SyncPause()
hgs
parents:
diff changeset
  1267
{
hgs
parents:
diff changeset
  1268
     tc.SyncStatus = Paused;
hgs
parents:
diff changeset
  1269
hgs
parents:
diff changeset
  1270
     For All Locked Elements
hgs
parents:
diff changeset
  1271
  {
hgs
parents:
diff changeset
  1272
      Pause Element; 
hgs
parents:
diff changeset
  1273
       Note: No element level state change, as element level syncStatus reflects only
hgs
parents:
diff changeset
  1274
       syncStatus evaluated in TC group level. ,e.g. syncStatus could be running in this
hgs
parents:
diff changeset
  1275
                             case 
hgs
parents:
diff changeset
  1276
        If element = animation 
hgs
parents:
diff changeset
  1277
    {
hgs
parents:
diff changeset
  1278
        Get Child TC pointer
hgs
parents:
diff changeset
  1279
        If Child TC
hgs
parents:
diff changeset
  1280
            childTc->SyncPause;
hgs
parents:
diff changeset
  1281
    }
hgs
parents:
diff changeset
  1282
hgs
parents:
diff changeset
  1283
  }
hgs
parents:
diff changeset
  1284
}
hgs
parents:
diff changeset
  1285
hgs
parents:
diff changeset
  1286
hgs
parents:
diff changeset
  1287
*/
hgs
parents:
diff changeset
  1288
//-------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1289
void CSvgTimeContainer::SyncPause()
hgs
parents:
diff changeset
  1290
    {
hgs
parents:
diff changeset
  1291
    //iIsSyncPaused = ETrue;
hgs
parents:
diff changeset
  1292
    SetSyncState(ETrue);
hgs
parents:
diff changeset
  1293
    
hgs
parents:
diff changeset
  1294
    TInt lTimedEntityListCnt = iTcTimedEntities.Count();
hgs
parents:
diff changeset
  1295
    for ( TInt lItemIndex = lTimedEntityListCnt - 1; lItemIndex >= 0 ; lItemIndex-- )
hgs
parents:
diff changeset
  1296
        {
hgs
parents:
diff changeset
  1297
        if((iTcTimedEntities[ lItemIndex ]).iTimedEntity->GetEntitySyncBehavior() == ESvgSyncLocked )
hgs
parents:
diff changeset
  1298
            {
hgs
parents:
diff changeset
  1299
            iTcTimedEntities[lItemIndex].iTimedEntity->PauseTimedEntity();
hgs
parents:
diff changeset
  1300
            }
hgs
parents:
diff changeset
  1301
        
hgs
parents:
diff changeset
  1302
        if(iTcTimedEntities[lItemIndex].iTimedEntity->ObjectType() == ESvgMediaAnimationElement)  
hgs
parents:
diff changeset
  1303
            {
hgs
parents:
diff changeset
  1304
            CSvgTimeContainer* AnimTimeContainer = iTcTimedEntities[lItemIndex].iTimedEntity->GetChildTimeContainer();
hgs
parents:
diff changeset
  1305
            if(AnimTimeContainer)
hgs
parents:
diff changeset
  1306
                {
hgs
parents:
diff changeset
  1307
                AnimTimeContainer->SyncPause();
hgs
parents:
diff changeset
  1308
                }
hgs
parents:
diff changeset
  1309
            }    
hgs
parents:
diff changeset
  1310
        }
hgs
parents:
diff changeset
  1311
    iLrteListItem.iTimedEntity->PauseTimedEntity()  ;
hgs
parents:
diff changeset
  1312
    
hgs
parents:
diff changeset
  1313
    }
hgs
parents:
diff changeset
  1314
hgs
parents:
diff changeset
  1315
//----------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1316
//
hgs
parents:
diff changeset
  1317
/*
hgs
parents:
diff changeset
  1318
TC::SyncResume()
hgs
parents:
diff changeset
  1319
{
hgs
parents:
diff changeset
  1320
     tc.SyncStatus = Running;
hgs
parents:
diff changeset
  1321
     For all locked elements
hgs
parents:
diff changeset
  1322
     {
hgs
parents:
diff changeset
  1323
        If (syncStatus == running AND userStatus == running AND TC.userStatus == running)
hgs
parents:
diff changeset
  1324
        {
hgs
parents:
diff changeset
  1325
          Resume Element
hgs
parents:
diff changeset
  1326
      }
hgs
parents:
diff changeset
  1327
  
hgs
parents:
diff changeset
  1328
        If element = animation 
hgs
parents:
diff changeset
  1329
      {
hgs
parents:
diff changeset
  1330
        Get Child TC pointer
hgs
parents:
diff changeset
  1331
        If Child TC
hgs
parents:
diff changeset
  1332
            childTc->SyncResume;
hgs
parents:
diff changeset
  1333
      }
hgs
parents:
diff changeset
  1334
     }
hgs
parents:
diff changeset
  1335
}
hgs
parents:
diff changeset
  1336
hgs
parents:
diff changeset
  1337
hgs
parents:
diff changeset
  1338
*/
hgs
parents:
diff changeset
  1339
//----------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1340
void CSvgTimeContainer::SyncResume()
hgs
parents:
diff changeset
  1341
    {
hgs
parents:
diff changeset
  1342
    SetSyncState(EFalse);
hgs
parents:
diff changeset
  1343
    TInt lTimedEntityListCnt = iTcTimedEntities.Count();
hgs
parents:
diff changeset
  1344
    for ( TInt lItemIndex = lTimedEntityListCnt - 1; lItemIndex >= 0 ; lItemIndex-- )
hgs
parents:
diff changeset
  1345
        {
hgs
parents:
diff changeset
  1346
        if((iTcTimedEntities[ lItemIndex ]).iTimedEntity->GetEntitySyncBehavior() == ESvgSyncLocked )
hgs
parents:
diff changeset
  1347
            {
hgs
parents:
diff changeset
  1348
            if(
hgs
parents:
diff changeset
  1349
            !(iTcTimedEntities[lItemIndex].iIsSyncPaused)
hgs
parents:
diff changeset
  1350
            &&(iTcTimedEntities[lItemIndex].iUserState == ESvgUserRunning)
hgs
parents:
diff changeset
  1351
            &&(iUserState == ESvgUserRunning)
hgs
parents:
diff changeset
  1352
            )
hgs
parents:
diff changeset
  1353
                {
hgs
parents:
diff changeset
  1354
                iTcTimedEntities[lItemIndex].iTimedEntity->ResumeTimedEntity();    
hgs
parents:
diff changeset
  1355
                }
hgs
parents:
diff changeset
  1356
            
hgs
parents:
diff changeset
  1357
            }
hgs
parents:
diff changeset
  1358
        
hgs
parents:
diff changeset
  1359
        if(iTcTimedEntities[lItemIndex].iTimedEntity->ObjectType() == ESvgMediaAnimationElement)  
hgs
parents:
diff changeset
  1360
            {
hgs
parents:
diff changeset
  1361
            CSvgTimeContainer* AnimTimeContainer = iTcTimedEntities[lItemIndex].iTimedEntity->GetChildTimeContainer();
hgs
parents:
diff changeset
  1362
            if(AnimTimeContainer)
hgs
parents:
diff changeset
  1363
                {
hgs
parents:
diff changeset
  1364
                AnimTimeContainer->SyncResume();
hgs
parents:
diff changeset
  1365
                }
hgs
parents:
diff changeset
  1366
            }    
hgs
parents:
diff changeset
  1367
        }
hgs
parents:
diff changeset
  1368
        
hgs
parents:
diff changeset
  1369
        iLrteListItem.iTimedEntity->ResumeTimedEntity();
hgs
parents:
diff changeset
  1370
    
hgs
parents:
diff changeset
  1371
}
hgs
parents:
diff changeset
  1372
//---------------------------------------------------------------
hgs
parents:
diff changeset
  1373
//Sets the time container User state
hgs
parents:
diff changeset
  1374
//void CSvgTimeContainer::SetUserState(TSvgEntityUserState state)
hgs
parents:
diff changeset
  1375
//---------------------------------------------------------------
hgs
parents:
diff changeset
  1376
void CSvgTimeContainer::SetUserState(TSvgEntityUserState state)
hgs
parents:
diff changeset
  1377
{
hgs
parents:
diff changeset
  1378
    iUserState = state;
hgs
parents:
diff changeset
  1379
  /*  #ifdef _DEBUG
hgs
parents:
diff changeset
  1380
    RDebug::Print(_L("CSvgTimeContainer User State changed to %d"),state);
hgs
parents:
diff changeset
  1381
    RDebug::Print(_L("\n0.ESvgUserRunning 1.ESvgUserPaused 2.ESvgUserStopped\n\n"));
hgs
parents:
diff changeset
  1382
    #endif
hgs
parents:
diff changeset
  1383
  */  
hgs
parents:
diff changeset
  1384
}
hgs
parents:
diff changeset
  1385
 
hgs
parents:
diff changeset
  1386
hgs
parents:
diff changeset
  1387
//---------------------------------------------------------------
hgs
parents:
diff changeset
  1388
//Sets the time container Media state
hgs
parents:
diff changeset
  1389
//void CSvgTimeContainer::SetMediaState(TSvgEntityMediaState state)
hgs
parents:
diff changeset
  1390
//---------------------------------------------------------------
hgs
parents:
diff changeset
  1391
void CSvgTimeContainer::SetMediaState(TSvgEntityMediaState state)
hgs
parents:
diff changeset
  1392
{
hgs
parents:
diff changeset
  1393
    iMediaState = state;
hgs
parents:
diff changeset
  1394
    /*
hgs
parents:
diff changeset
  1395
    #ifdef _DEBUG
hgs
parents:
diff changeset
  1396
    RDebug::Print(_L("CSvgTimeContainer Media State changed to %d"),state);
hgs
parents:
diff changeset
  1397
    RDebug::Print(_L("\n0.ESvgMediaIdle 1.ESvgMediaNotReady 2.ESvgMediaReady\n\n"));
hgs
parents:
diff changeset
  1398
    #endif
hgs
parents:
diff changeset
  1399
    */
hgs
parents:
diff changeset
  1400
}
hgs
parents:
diff changeset
  1401
        
hgs
parents:
diff changeset
  1402
//---------------------------------------------------------------
hgs
parents:
diff changeset
  1403
//Sets the time container sync state state
hgs
parents:
diff changeset
  1404
//void CSvgTimeContainer::SetSyncState(TBool state)
hgs
parents:
diff changeset
  1405
//---------------------------------------------------------------
hgs
parents:
diff changeset
  1406
void CSvgTimeContainer::SetSyncState(TBool state)
hgs
parents:
diff changeset
  1407
{
hgs
parents:
diff changeset
  1408
    iIsSyncPaused = state;
hgs
parents:
diff changeset
  1409
/*    #ifdef _DEBUG
hgs
parents:
diff changeset
  1410
    RDebug::Print(_L("CSvgTimeContainer iIsyncPaused  changed to %d"),state);
hgs
parents:
diff changeset
  1411
    RDebug::Print(_L("\n0 False 1 True\n\n"));
hgs
parents:
diff changeset
  1412
    #endif
hgs
parents:
diff changeset
  1413
 */   
hgs
parents:
diff changeset
  1414
}
hgs
parents:
diff changeset
  1415
        
hgs
parents:
diff changeset
  1416
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1417
// CSvgTimeContainer::PropogateTickToContainerElements
hgs
parents:
diff changeset
  1418
// Propogate tick to all elements in time container
hgs
parents:
diff changeset
  1419
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1420
void CSvgTimeContainer::PropogateTickToContainerElements( TSvgTick& aTick )
hgs
parents:
diff changeset
  1421
    {
hgs
parents:
diff changeset
  1422
    // Propogate the tick to all container elements
hgs
parents:
diff changeset
  1423
    TInt lTimedEntityListCnt = iTcTimedEntities.Count();
hgs
parents:
diff changeset
  1424
    for ( TInt lItemIndex = lTimedEntityListCnt - 1; lItemIndex >= 0 ; lItemIndex-- )
hgs
parents:
diff changeset
  1425
        {
hgs
parents:
diff changeset
  1426
        (iTcTimedEntities[ lItemIndex ]).iTimedEntity->ParentTimeContainerTick( aTick );
hgs
parents:
diff changeset
  1427
        }
hgs
parents:
diff changeset
  1428
    }
hgs
parents:
diff changeset
  1429
hgs
parents:
diff changeset
  1430
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1431
// CSvgTimeContainer::RearrangeTimedEntityList
hgs
parents:
diff changeset
  1432
// Rearrange the timed entities as per post order
hgs
parents:
diff changeset
  1433
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1434
void CSvgTimeContainer::RearrangeTimedEntityList( RPointerArray<CSvgElementImpl>& 
hgs
parents:
diff changeset
  1435
            aPostOrderList )
hgs
parents:
diff changeset
  1436
    {
hgs
parents:
diff changeset
  1437
    TUint lCurElement = 0;
hgs
parents:
diff changeset
  1438
    TUint lCurTimedEntity = 0;
hgs
parents:
diff changeset
  1439
    for ( ;lCurElement < aPostOrderList.Count(); lCurElement++, lCurTimedEntity++ )
hgs
parents:
diff changeset
  1440
        {
hgs
parents:
diff changeset
  1441
        CSvgMediaElementBase* lCurMediaEle = ( CSvgMediaElementBase* )
hgs
parents:
diff changeset
  1442
            aPostOrderList[ lCurElement ];
hgs
parents:
diff changeset
  1443
        
hgs
parents:
diff changeset
  1444
        // Start looking in the timed entity list from lCurTimedEntity
hgs
parents:
diff changeset
  1445
        TUint lListIndex = lCurTimedEntity; 
hgs
parents:
diff changeset
  1446
        
hgs
parents:
diff changeset
  1447
        // Find the element in the current timed entity list
hgs
parents:
diff changeset
  1448
        /*for ( ; ( ( iTcTimedEntities[ lListIndex ].iTimedEntity != 
hgs
parents:
diff changeset
  1449
                ( MSvgTimedEntityInterface* ) lCurMediaEle ) && 
hgs
parents:
diff changeset
  1450
                    ( lListIndex < iTcTimedEntities.Count() ) ); 
hgs
parents:
diff changeset
  1451
            lListIndex++ )
hgs
parents:
diff changeset
  1452
            {
hgs
parents:
diff changeset
  1453
            }
hgs
parents:
diff changeset
  1454
        */
hgs
parents:
diff changeset
  1455
        do
hgs
parents:
diff changeset
  1456
				{
hgs
parents:
diff changeset
  1457
					if( iTcTimedEntities[ lListIndex ].iTimedEntity == ( MSvgTimedEntityInterface* ) lCurMediaEle ) 
hgs
parents:
diff changeset
  1458
						break;
hgs
parents:
diff changeset
  1459
					lListIndex++; 
hgs
parents:
diff changeset
  1460
				}while(lListIndex < iTcTimedEntities.Count() ) ;
hgs
parents:
diff changeset
  1461
hgs
parents:
diff changeset
  1462
        
hgs
parents:
diff changeset
  1463
        if ( lListIndex != iTcTimedEntities.Count() )    
hgs
parents:
diff changeset
  1464
            {
hgs
parents:
diff changeset
  1465
            if ( lListIndex != lCurTimedEntity )
hgs
parents:
diff changeset
  1466
                {
hgs
parents:
diff changeset
  1467
                // Not in same position, need to swap 
hgs
parents:
diff changeset
  1468
                TSvgTimedEntityListItem lTempItem = iTcTimedEntities[ lCurTimedEntity ];
hgs
parents:
diff changeset
  1469
                iTcTimedEntities[ lCurTimedEntity ] = iTcTimedEntities[ lListIndex ];
hgs
parents:
diff changeset
  1470
                iTcTimedEntities[ lListIndex ] = lTempItem;
hgs
parents:
diff changeset
  1471
                }
hgs
parents:
diff changeset
  1472
            }
hgs
parents:
diff changeset
  1473
        else
hgs
parents:
diff changeset
  1474
            {
hgs
parents:
diff changeset
  1475
            // Can occur in case of Delete Timed Entity -> ignore
hgs
parents:
diff changeset
  1476
            }
hgs
parents:
diff changeset
  1477
        }
hgs
parents:
diff changeset
  1478
    }
hgs
parents:
diff changeset
  1479
hgs
parents:
diff changeset
  1480
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1481
// CSvgTimeContainer::?member_function
hgs
parents:
diff changeset
  1482
// ?implementation_description
hgs
parents:
diff changeset
  1483
// (other items were commented in a header).
hgs
parents:
diff changeset
  1484
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1485
//
hgs
parents:
diff changeset
  1486
// ========================== OTHER EXPORTED FUNCTIONS =========================
hgs
parents:
diff changeset
  1487
hgs
parents:
diff changeset
  1488
hgs
parents:
diff changeset
  1489
hgs
parents:
diff changeset
  1490
//  End of File