diff -r aaeeca1f15af -r e8d784ac1a4b scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowSlide.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowSlide.cpp Wed Sep 01 12:30:40 2010 +0100 @@ -0,0 +1,123 @@ +/* +* 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: Stores a single slide +* +*/ + + + + + +// INCLUDES +#include "SlideshowSlide.h" +#include "SlideshowSlideLoader.h" +#include "SlideshowPluginUtils.h" + +// Creator +CSlideshowSlide* CSlideshowSlide::NewL(TDesC& aFileName, TBool aIsOnMC) + { + CSlideshowSlide* self = new (ELeave) CSlideshowSlide(aIsOnMC); + CleanupStack::PushL(self); + self->ConstructL(aFileName); + CleanupStack::Pop(self); + return self; + } + +// Destructor +CSlideshowSlide::~CSlideshowSlide() + { + ReleaseImage(); + delete iSlideLoader; + delete iFileName; + } + + +// Default C'tor +CSlideshowSlide::CSlideshowSlide(TBool aIsOnMC) + : iFlags(SSS_NONE) + { + if (aIsOnMC) + { + iFlags |= SSS_ISONMC; + } + } + +// is decoding in progress +TBool CSlideshowSlide::IsDecodingInProgress() + { + if(iSlideLoader->IsActive()) + { + return ETrue; + } + return EFalse; + } +// Could not decode the file +TBool CSlideshowSlide::CouldNotDecodeFile() + { + if (iFlags & SSS_DECODEFAILED) + { + return ETrue; + } + return EFalse; + } +// Two-phase constructor +void CSlideshowSlide::ConstructL(TDesC& aFileName) + { + // Allocate space for the filename and save it + iFileName = HBufC::NewL(aFileName.Length()); + *iFileName = aFileName; + iSlideLoader = CSlideshowSlideLoader::NewL(this); + } +// Prepares the slide (loads image) +void CSlideshowSlide::PrepareSlideL(const TSize& aTargetSize) + { + if (iFlags & SSS_IMAGELOADED) + { + return; + } + if( iSlideLoader->IsActive()) + { + // slide is being decoded ... should wait .. dont call LoadSlideL here + // should not come here.. + return; + } + iSlideLoader->LoadSlideL(*iFileName, aTargetSize); + } + +// Is slide decoded completely +TBool CSlideshowSlide::IsSlideDecoded() + { + if (iFlags & SSS_IMAGELOADED) + { + return ETrue; + } + return EFalse; + } +// Releases the slide's image +void CSlideshowSlide::ReleaseImage() + { + // if decoding is in progress... at any cost dont delete the image before Canceling the decoding + if(IsDecodingInProgress()) + { + iSlideLoader->Cancel(); + } + else if(iImage ) + { + delete iImage; + iImage = NULL; + } + //image deleted, revert back to not decoded state + iFlags &= ~(SSS_IMAGELOADED); + } +// End of File