skins/AknSkins/srvsrc/aknssrvwallpapertimer.cpp
changeset 0 05e9090e2422
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/AknSkins/srvsrc/aknssrvwallpapertimer.cpp	Thu Dec 17 09:14:12 2009 +0200
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Slide set wallpaper timer.
+*
+*/
+
+
+#include "aknssrvwallpapertimer.h"
+
+// ======== MEMBER FUNCTIONS ========
+// ---------------------------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CAknsSrvWallpaperTimer* CAknsSrvWallpaperTimer::NewL(
+    MAknsSrvWallpaperListener* aListener )
+    {
+    CAknsSrvWallpaperTimer* self =
+        new (ELeave)CAknsSrvWallpaperTimer( aListener );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Handles an active object's request completion event.
+// ---------------------------------------------------------------------------
+//
+void CAknsSrvWallpaperTimer::RunL()
+    {
+    if ( iStatus.Int() == KErrAbort && !iCanceled )
+        {
+        TTime now;
+        now.HomeTime();
+        TTimeIntervalSeconds seconds;
+        now.SecondsFrom( iPreviousTime, seconds );
+        if ( seconds.Int() < iInterval )
+            {
+            IssueRequest( iInterval-seconds.Int() );
+            return;
+            }
+        }
+
+    iListener->WallpaperTimerTimeoutL();
+    if ( !iCanceled )
+        {
+        IssueRequest();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Cancels request.
+// ---------------------------------------------------------------------------
+//
+void CAknsSrvWallpaperTimer::DoCancel()
+    {
+    iCanceled = ETrue;
+    iTimer.Cancel();
+    }
+
+// ---------------------------------------------------------------------------
+// Issues a new request.
+// ---------------------------------------------------------------------------
+//
+void CAknsSrvWallpaperTimer::IssueRequest( TInt aTempInterval )
+    {
+    iCanceled = EFalse;
+    if ( !IsActive() )
+        {
+        TTime now;
+        now.HomeTime();
+        if ( aTempInterval )
+            {
+            now += TTimeIntervalSeconds( aTempInterval );
+            }
+        else
+            {
+            iPreviousTime = now;
+            now += TTimeIntervalSeconds( iInterval );
+            }
+        iTimer.At( iStatus, now );
+        SetActive();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CAknsSrvWallpaperTimer::~CAknsSrvWallpaperTimer()
+    {
+    iTimer.Close();
+    }
+
+// ---------------------------------------------------------------------------
+// Second phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CAknsSrvWallpaperTimer::ConstructL()
+    {
+    User::LeaveIfError( iTimer.CreateLocal() );
+    }
+
+// ---------------------------------------------------------------------------
+// C++ constructor.
+// ---------------------------------------------------------------------------
+//
+CAknsSrvWallpaperTimer::CAknsSrvWallpaperTimer(
+    MAknsSrvWallpaperListener* aListener ) :
+        CActive( CActive::EPriorityStandard ),
+        iListener( aListener )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the interval period of the timer.
+// ---------------------------------------------------------------------------
+//
+TInt CAknsSrvWallpaperTimer::Interval()
+    {
+    return iInterval;
+    }
+
+// ---------------------------------------------------------------------------
+// Start the timer.
+// ---------------------------------------------------------------------------
+//
+void CAknsSrvWallpaperTimer::Start( TInt aInterval )
+    {
+    Cancel();
+    iInterval = aInterval;
+    IssueRequest();
+    }
+
+// ---------------------------------------------------------------------------
+// Stop the timer.
+// ---------------------------------------------------------------------------
+//
+void CAknsSrvWallpaperTimer::Stop()
+    {
+    Cancel();
+    }
+
+// End of file