scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowModel.cpp
changeset 14 8a173132b0aa
parent 2 058b1fc1663a
--- a/scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowModel.cpp	Mon Jan 18 20:19:52 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,441 +0,0 @@
-/*
-* Copyright (c) 2006 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:  Takes care of storing and serving the slides
-*               to Slideshow plugin
-*
-*/
-
-
-#include <e32math.h>
-#include <eikenv.h>
-#include <bautils.h>
-
-#include "SlideshowModel.h"
-#include "SlideshowPluginUtils.h"
-
-//------------------------------------------------------------------------------
-// CSlideshowModel::NewL
-//------------------------------------------------------------------------------
-//
-CSlideshowModel* CSlideshowModel::NewL()
-    {
-    CSlideshowModel* self = new (ELeave) CSlideshowModel();
-    
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-    
-    return self;
-    }
-
-
-//------------------------------------------------------------------------------
-// CSlideshowModel::~CSlideshowModel
-//------------------------------------------------------------------------------
-//
-CSlideshowModel::~CSlideshowModel()
-    {
-    // Delete slide array
-    if (iSlides)
-        {
-        iSlides->ResetAndDestroy();
-        }
-    delete iSlides;
-    }
-
-
-//------------------------------------------------------------------------------
-// CSlideshowModel::CSlideshowModel
-//------------------------------------------------------------------------------
-//
-CSlideshowModel::CSlideshowModel()
-    : iNextSlide(-1)
-    {
-    }
-
-    
-//------------------------------------------------------------------------------
-// CSlideshowModel::ConstructL
-//------------------------------------------------------------------------------
-//
-void CSlideshowModel::ConstructL()
-    {
-    // Create slide array
-    iSlides = new(ELeave) CArrayPtrFlat<CSlideshowSlide>(
-        KSlideshowSlideArrayGranularity);
-
-    //Get random seed
-    TTime time;
-    time.HomeTime();
-    iRandSeed = time.Int64();
-    }
-
-
-//------------------------------------------------------------------------------
-// CSlideshowModel::NumberOfSlides
-//------------------------------------------------------------------------------
-//
-TInt CSlideshowModel::NumberOfSlides() const
-    {
-    //if the slide array is not NULL, return it's size
-    return iSlides ? iSlides->Count() : 0;
-    }
-    
-  
-//------------------------------------------------------------------------------
-// CSlideshowModel::AppendSlideL
-//------------------------------------------------------------------------------
-//
-void CSlideshowModel::AppendSlideL(CSlideshowSlide* aSlide)
-    {
-    // Sanity check
-    if (!iSlides)
-        {
-        ASSERT(EFalse);
-        return;
-        }
-
-    // Stash it in
-    iSlides->AppendL(aSlide);
-    }
-
-    
-//------------------------------------------------------------------------------
-// CSlideshowModel::InsertSlideL
-//------------------------------------------------------------------------------
-//
-void CSlideshowModel::InsertSlideL(TInt aIndex, CSlideshowSlide* aSlide)
-    {
-    if ((iSlides) && (aIndex >= 0) && (aIndex <= NumberOfSlides()))
-        {
-        // Squeeze it in
-        iSlides->InsertL(aIndex, aSlide);
-        }
-    else
-        {
-        ASSERT(EFalse);
-        }
-    }
-    
-
-//------------------------------------------------------------------------------
-// CSlideshowModel::DeleteSlide
-//------------------------------------------------------------------------------
-//
-void CSlideshowModel::DeleteSlide(TInt aIndex)
-    {
-    //Sanity check
-    if ((iSlides) && (aIndex >= 0) && (aIndex <= NumberOfSlides()))
-        {
-        // Grab hold of the slide for deletion, remove from array
-        // and compress the array
-        CSlideshowSlide* ptr = iSlides->At(aIndex);
-        
-        iSlides->Delete(aIndex);
-        delete ptr;
-        iSlides->Compress();
-        
-        }
-    else
-        {
-        ASSERT(EFalse);
-        }
-    }
-
-
-//------------------------------------------------------------------------------
-// CSlideshowModel::DeleteAll
-//------------------------------------------------------------------------------
-//
-void CSlideshowModel::DeleteAll()
-    {
-    //Sanity check
-    if (iSlides)
-        {
-        iSlides->ResetAndDestroy();
-        }
-    
-    iCurrentSlide = 0;
-    iNextSlide = -1;
-    }
-
-    
-//------------------------------------------------------------------------------
-// CSlideshowModel::SlideAt
-//------------------------------------------------------------------------------
-//
-CSlideshowSlide* CSlideshowModel::SlideAt(TInt aIndex) const
-    {
-    if ((iSlides) && (aIndex >= 0) && (aIndex < NumberOfSlides()))
-        {
-        //return the postion object
-        return iSlides->At(aIndex);
-        }
-    else
-        {
-        return NULL;
-        }
-    }
-
-
-//------------------------------------------------------------------------------
-// CSlideshowModel::NextSlide
-//------------------------------------------------------------------------------
-//
-CSlideshowSlide* CSlideshowModel::NextSlide(TBool /*aRandom */)
-    {
-    if (iNextSlide < 0)
-        {
-        // Next slide could not be prepared, or preparenextslide not called
-        return NULL;
-        }
-    
-    CSlideshowSlide* pSlide = SlideAt(iNextSlide);
-
-    if (!pSlide)
-        {
-        // Apparently there are no more slides - wrap around
-        iCurrentSlide = -1;
-        iNextSlide = 0;
-        pSlide = SlideAt(iNextSlide);
-        }
-
-    iCurrentSlide = iNextSlide;
-    return pSlide;
-    }
-
-    
-//------------------------------------------------------------------------------
-// CSlideshowModel::PrepareNextSlide
-//------------------------------------------------------------------------------
-//
-void CSlideshowModel::PrepareNextSlide(TBool aRandom, const TSize& aTargetSize)
-    {
-    SSPLOGGER_WRITE("Model::PrepareNextSlide(), model busy");
-    
-    SSPLOGGER_WRITEF(_L("SPP: iCurrentSlide %d, iNextSlide %d"),
-                     iCurrentSlide, iNextSlide);
-    
-    TBool slideOK = EFalse;
-    while (!slideOK)
-        {
-        TInt nSlides = NumberOfSlides();
-        // Any point in continuing?
-        if (nSlides == 0)
-            {
-            iNextSlide = -1;
-            break;
-            }
-
-        // Special cases, 1 or 2 slides only
-        if (nSlides == 1)
-            {
-            iNextSlide = 0;
-            SSPLOGGER_WRITEF(_L("SPP: One slide, next slide %d"), iNextSlide);
-            }
-        else if (nSlides == 2)
-            {
-            // Switch between slides even if random
-            iNextSlide = (iNextSlide == 0 ? 1 : 0);
-            SSPLOGGER_WRITEF(_L("SPP: 2 slides, next slide %d"), iNextSlide);            
-            }
-        else
-            {
-            // We got at least 3 slides, and can also do random
-            if (aRandom)
-                {
-                // Make sure we won't pick the same slide  
-                do
-                    {
-                    iNextSlide = Random(nSlides - 1);                    
-                    }
-                while (iNextSlide == iCurrentSlide);
-
-                SSPLOGGER_WRITEF(_L("SPP: Random, next slide %d"), iNextSlide);
-                }
-            else
-                {
-                iNextSlide++;
-
-                // Wrap?
-                if (iNextSlide >= nSlides)
-                    {
-                    SSPLOGGER_WRITE("Wrapping...");
-                    iNextSlide = 0;
-                    }
-                SSPLOGGER_WRITEF(_L("SPP: Continuous, next slide %d"),
-                                 iNextSlide);
-                }
-            }
-
-        // Get the slide
-        CSlideshowSlide* pSlide = SlideAt(iNextSlide);
-
-        if (!pSlide)
-            {
-            // Should not have happened - start from beginning
-            iNextSlide = 0;
-            SSPLOGGER_WRITEF(_L("SPP: Wrapping, next slide %d"),
-                    	iNextSlide);
-            pSlide = SlideAt(iNextSlide);
-            }
-
-        if (pSlide)
-            {
-            // Try loading the image, if image does not already exist
-            if (!pSlide->IsSlideDecoded())
-                {
-                SSPLOGGER_WRITE("Preparing next slide");
-               	if(iCurrentSlide != iNextSlide)
-                	{
-                	// relese currently deleted image from RAM.( We dont have caching)
-                	ReleaseCurrentSlide();
-               	    }
-               	if ((TInt)ETrue == pSlide->CouldNotDecodeFile())
-               		{
-               		// could not decode this file last time. so delete this slide from the 
-               		// list of slide and go to the next one.
-               		DeleteSlide(iNextSlide);
-                    iNextSlide--;
-                    continue;
-               		}
-                TRAPD(err, pSlide->PrepareSlideL(aTargetSize));
-                if (err == KErrNone)
-                	{
-                    //wait for slide to load.
-                	iCurrentSlide = iNextSlide;
-                    SSPLOGGER_WRITE("Started Decoding Wait");                    
-                    break;
-                    }
-                else
-                    {
-                    // Apparently the file was not a loadable image -
-                    // remove from slideset and try again
-                    SSPLOGGER_WRITEF(_L("SSP: Deleting slide %d"), iNextSlide);                    
-                    DeleteSlide(iNextSlide);
-                    iNextSlide--;
-                    continue; // can not load this image, go to the next one.
-                    }
-                }
-             else
-                {
-                // Slide is already decoded. This is cool, if the file is
-                // still there. Otherwise lose image and go on.
-                // should not come here as we dont any caching 
-                SSPLOGGER_WRITEF(_L("Slide %d already has image"), iNextSlide);
-
-                if (!BaflUtils::FileExists(CEikonEnv::Static()->FsSession(), 
-                    *(pSlide->FileName())))
-                    {
-                    SSPLOGGER_WRITE("Slide image file gone, dropping image");
-                    pSlide->ReleaseImage();
-                    continue; // continue with next image
-                    }
-                else
-                	{
-                	if(iCurrentSlide != iNextSlide)
-                		{
-                		ReleaseCurrentSlide();
-               	     	}
-                     break;
-                	}
-               }
-           }
-        }
-    SSPLOGGER_WRITE("Model::PrepareNextSlide() end, model no longer busy");    
-    }
-
-
-//------------------------------------------------------------------------------
-// CSlideshowModel::ReleaseCurrentSlide
-//------------------------------------------------------------------------------
-//
-void CSlideshowModel::ReleaseCurrentSlide()
-	{
-	CSlideshowSlide* pSlide = SlideAt(iCurrentSlide);
-	if(pSlide)
-		{
-		pSlide->ReleaseImage();
-		}
-	}
-
-
-//------------------------------------------------------------------------------
-// CSlideshowModel::ReleaseNextSlide
-//------------------------------------------------------------------------------
-//
-void CSlideshowModel::ReleaseNextSlide()
-    {
-    CSlideshowSlide* pSlide = SlideAt(iNextSlide);
-    if(pSlide)
-		{
-		pSlide->ReleaseImage();
-		}
-    iNextSlide --;
-    }
-
-
-//------------------------------------------------------------------------------
-// CSlideshowModel::SetReserveL
-//------------------------------------------------------------------------------
-//
-void CSlideshowModel::SetReserveL(TInt aCount)
-    {
-    if ((iSlides) && (aCount >= NumberOfSlides()))
-        {
-        iSlides->SetReserveL(aCount);
-        }
-    }
-
-//------------------------------------------------------------------------------
-// CSlideshowModel::SlideStatus
-//------------------------------------------------------------------------------
-//
-TInt CSlideshowModel::SlideStatus(CSlideshowSlide* aSlide)
-	{
-	 if(!aSlide)
-		 {
-		 return KStatusNoSlide;
-		 }
-	 else if(aSlide->IsSlideDecoded())
-		 {
-		 return KStatusSlideDecoded;
-		 }
-	 else if(aSlide->IsDecodingInProgress())
-		 {
-		 return KStatusDecodingInProgress;
-		 }
-	 else if (aSlide->CouldNotDecodeFile())
-		 {
-		 return KStatusSlideDecodeingFailed;
-		 }
-		 
-	 return KStatusSlideNotDecoding;
-	}
-    
-
-
-//------------------------------------------------------------------------------
-// CSlideshowModel::Random
-//------------------------------------------------------------------------------
-//
-TInt CSlideshowModel::Random(TInt aMax, TInt aMin /* = 0 */)
-    {
-    TInt range = aMax - aMin;
-    TInt rand = Math::Rand(iRandSeed);  
-    return (rand % range);
-    }
-
-
-//  End of File