javauis/mmapi_qt/animated_gif_notUsed/src/cmmaanimationplayerfactory.cpp
branchRCL_3
changeset 24 0fd27995241b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/mmapi_qt/animated_gif_notUsed/src/cmmaanimationplayerfactory.cpp	Tue May 11 16:07:20 2010 +0300
@@ -0,0 +1,196 @@
+/*
+* Copyright (c) 2002 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:  This class is used for creating animation player.
+*
+*/
+
+
+//  INCLUDE FILES
+#include <logger.h>
+
+#include "cmmavideocontrol.h"
+#include "cmmaanimationratecontrol.h"
+#include "cmmaanimationstoptimecontrol.h"
+#include "cmmaanimationframepositioningcontrol.h"
+#include "cmmaanimationplayer.h"
+#include "cmmaanimationplayerfactory.h"
+
+// Animation type info
+_LIT(KMMAAnimationMimeTypeGIF, "image/gif");
+_LIT(KMMAAnimationSuffixGIF, "gif");
+
+// header data and length
+_LIT8(KMMAAnimationGIFVersion, "GIF89a");
+const TUint8 KMMAGifVersionLength = 6;
+
+CMMAAnimationPlayerFactory* CMMAAnimationPlayerFactory::NewLC()
+{
+    CMMAAnimationPlayerFactory* pFactory =
+        new(ELeave) CMMAAnimationPlayerFactory();
+    CleanupStack::PushL(pFactory);
+    return pFactory;
+}
+
+CMMAAnimationPlayerFactory::CMMAAnimationPlayerFactory()
+{
+}
+
+
+CMMAAnimationPlayerFactory::~CMMAAnimationPlayerFactory()
+{
+}
+
+// Creates new player according to a content type.
+CMMAPlayer* CMMAAnimationPlayerFactory::CreatePlayerL(
+    const TDesC& aContentType)
+{
+    CMMAPlayer* player = NULL;
+    if (aContentType == KMMAAnimationMimeTypeGIF)
+    {
+        player = CreateAnimationPlayerL();
+    }
+    return player;
+}
+
+// Creates new player according to a locator
+CMMAPlayer* CMMAAnimationPlayerFactory::CreatePlayerL(
+    const TDesC& aProtocol,
+    const TDesC& aMiddlePart,
+    const TDesC& /*aParameters*/)
+{
+    CMMAPlayer* player = NULL;
+    if (aProtocol == KMMAFileProtocol)
+    {
+        // filename ends to gif suffix
+        if (aMiddlePart.Right(KMMAAnimationSuffixGIF().Length()) ==
+                KMMAAnimationSuffixGIF())
+        {
+            player = CreateAnimationPlayerL(aMiddlePart);
+        }
+        else
+        {
+            // try to recognize from headerdata
+            RFs fs;
+            CleanupClose< RFs >::PushL(fs);
+            User::LeaveIfError(fs.Connect());
+
+            RFile file;
+            CleanupClose< RFile >::PushL(file);
+
+            User::LeaveIfError(file.Open(fs, aMiddlePart, EFileRead));
+
+            TBuf8< KMMAGifVersionLength > header;
+            User::LeaveIfError(file.Read(header));
+
+            CleanupStack::PopAndDestroy(2);   // fs, file
+
+            if (header == KMMAAnimationGIFVersion())
+            {
+                player = CreateAnimationPlayerL(aMiddlePart);
+            }
+        }
+    }
+
+    return (CMMAPlayer*) player;
+}
+
+// Creates new player according to a header data
+CMMAPlayer* CMMAAnimationPlayerFactory::CreatePlayerL(
+    const TDesC8& aHeaderData)
+{
+    CMMAPlayer* player = NULL;
+    TPtrC8 header = aHeaderData.Left(KMMAAnimationGIFVersion().Length());
+    if (header == KMMAAnimationGIFVersion())
+    {
+        player = CreateAnimationPlayerL();
+    }
+    return player;
+}
+
+// Gets player's supported content types.
+void CMMAAnimationPlayerFactory::GetSupportedContentTypesL(
+    const TDesC& aProtocol,
+    CDesC16Array& aMimeTypeArray)
+{
+    if (aProtocol == KNullDesC ||
+            aProtocol == KMMAHttpProtocol ||
+            aProtocol == KMMAHttpsProtocol ||
+            aProtocol == KMMAFileProtocol)
+    {
+        aMimeTypeArray.AppendL(KMMAAnimationMimeTypeGIF);
+    }
+}
+
+// Gets player's supported protocols for the content type.
+void CMMAAnimationPlayerFactory::GetSupportedProtocolsL(
+    const TDesC& aContentType,
+    CDesC16Array& aProtocolArray)
+{
+    if (aContentType == KNullDesC ||
+            aContentType == KMMAAnimationMimeTypeGIF)
+    {
+        aProtocolArray.AppendL(KMMAHttpProtocol);
+        aProtocolArray.AppendL(KMMAHttpsProtocol);
+        aProtocolArray.AppendL(KMMAFileProtocol);
+    }
+}
+
+CMMAAnimationPlayer* CMMAAnimationPlayerFactory::CreateAnimationPlayerL(const TDesC& aFileName)
+{
+    CMMAAnimationPlayer* player = CMMAAnimationPlayer::NewLC(aFileName);
+    AddControlsL(player);
+    CleanupStack::Pop(); // player
+    return player;
+}
+
+CMMAAnimationPlayer* CMMAAnimationPlayerFactory::CreateAnimationPlayerL()
+{
+    CMMAAnimationPlayer* player = CMMAAnimationPlayer::NewLC();
+    AddControlsL(player);
+    CleanupStack::Pop(); // player
+    return player;
+}
+
+void CMMAAnimationPlayerFactory::AddControlsL(CMMAAnimationPlayer* aPlayer)
+{
+    CMMAVideoControl* videoControl = new(ELeave) CMMAVideoControl(aPlayer);
+    CleanupStack::PushL(videoControl);
+    aPlayer->AddControlL(videoControl);
+    CleanupStack::Pop(videoControl);
+
+    CMMAAnimationStopTimeControl* stopTimeControl =
+        CMMAAnimationStopTimeControl::NewL(aPlayer);
+    CleanupStack::PushL(stopTimeControl);
+    aPlayer->AddControlL(stopTimeControl);
+    CleanupStack::Pop(stopTimeControl);
+
+    // Own RateControl
+    CMMAAnimationRateControl* rateControl =
+        CMMAAnimationRateControl::NewL(aPlayer);
+    CleanupStack::PushL(rateControl);
+    aPlayer->AddControlL(rateControl);
+    CleanupStack::Pop(rateControl);
+
+    // FramePositioningControl is only supported for file locator
+    if (aPlayer->IsFilePlayer())
+    {
+        CMMAAnimationFramePositioningControl* animationFramePositioningControl =
+            CMMAAnimationFramePositioningControl::NewL(aPlayer);
+        CleanupStack::PushL(animationFramePositioningControl);
+        aPlayer->AddControlL(animationFramePositioningControl);
+        CleanupStack::Pop(animationFramePositioningControl);
+    }
+
+}
+//  END OF FILE