scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/CBmpAnimSettings.cpp
branchRCL_3
changeset 26 e8d784ac1a4b
parent 0 040fcad49f44
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/CBmpAnimSettings.cpp	Wed Sep 01 12:30:40 2010 +0100
@@ -0,0 +1,320 @@
+/*
+* Copyright (c) 2003 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:     Loads and stores the bitmap animator settings
+*
+*/
+
+
+
+
+
+#include <e32std.h>
+
+#include "CBmpAnimSettings.h"
+
+#include "BmpAnimUtils.h"
+#include <f32file.h>
+
+// Defaults
+const TInt KRunningTime = 1000000 * 60;  // 60 secs
+const TInt KTiming = 200000;  // 5 fps 
+const TInt KSuspendTime = -1; // Max = KMaxTInt, -1 = indefinitely
+const TInt KUndefined = -1;
+
+// Configuration file name
+_LIT(KIniFile, "BmpAnimScrPlugin.ini");
+
+// Default bitmap file name
+_LIT(KMbmFileName, "BmpAnimScrPlugin.mbm");
+
+// Default bitmap file name - lansdscape
+_LIT(KMbmFileNameL, "BmpAnimScrPluginL.mbm");
+
+// Basic info section name
+_LIT8(KIniSectionInfo, "info");
+
+// Info section keys
+_LIT8(KIniKeyName, "name");  // plugin name
+_LIT8(KIniKeyNumImages, "numimages");  // number of images
+_LIT8(KIniKeyMbmFile, "mbmfile");  // name of imagefile
+_LIT8(KIniKeyMbmFileL, "mbmfilelandscape");  // name of landscape imagefile
+_LIT8(KIniKeyRunningTime, "runningtime");  // time to run animation (in millis)
+_LIT8(KIniKeyLoopCount, "loopcount");  // loop count (if time is not defined)
+_LIT8(KIniKeySuspendTime, "suspendtime");  // time to suspend (in millis)
+_LIT8(KIniKeyTiming, "timing");  // time to display each image (RE-USED BELOW)
+_LIT8(KIniKeyLights, "lights");  // lights on for 5 secs. Over 5 = number of secs
+_LIT8(KIniKeyUseLandscape, "uselandscape");  // 1 = landscape image file used
+_LIT8(KIniKeyScaleBmps, "scalebmps");  // 1 = bitmaps scaled to screen size
+
+// Image section base name
+_LIT8(KIniSectionImageBase, "image");  // image information section name
+
+// Image section keys
+_LIT8(KIniKeyType, "type");  // 0 = background, 1 = bitmap, 2 = icon
+_LIT8(KIniKeyIndex, "index");  // index of image in mbm
+_LIT8(KIniKeyMaskIndex, "maskindex");  // index of icon mask in mbm
+_LIT8(KIniKeyFile, "file");  // name of image file (not yet supported)
+_LIT8(KIniKeyPosX, "posx");  // display position X
+_LIT8(KIniKeyPosY, "posy");  // display position Y
+// _LIT8(KIniKeyTiming, "timing");  // time to display this image (NOTE RE-USE!)
+
+
+// User constructor
+CBmpAnimSettings* CBmpAnimSettings::NewL()
+    {
+    CBmpAnimSettings* self = new(ELeave) CBmpAnimSettings();
+    
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    
+    return self;
+    }
+
+    
+// C'tor, sets defaults
+CBmpAnimSettings::CBmpAnimSettings()
+    : iRunningTime(KRunningTime),
+      iLoopCount(KUndefined),
+      iSuspendTime(KSuspendTime),
+      iTiming(KTiming),
+      iPluginName(KPluginName),
+      iMbmFileName(KMbmFileName),
+      iMbmFileNameL(KMbmFileNameL),
+      iLights(KUndefined),
+      iUseLandscape(0),
+      iScaleBmps(0)
+    {
+    }
+
+
+// Two-phase constructor
+void CBmpAnimSettings::ConstructL()
+    {
+    // Try to open the settings file
+    if (OpenSettings() == KErrNone)
+        {
+        LoadSettingsL();
+        }
+    }
+
+    
+// D'tor
+CBmpAnimSettings::~CBmpAnimSettings()
+    {
+    delete iIniData;
+    }
+
+
+// --- Access functions ---
+    
+    
+// Loads (common) settings from the settings file
+TBool CBmpAnimSettings::LoadSettingsL()
+    {
+    // Sanity check
+    if (!iIniData)
+        {
+        return EFalse;
+        }
+
+    // Running time (never mind the section)
+    if (!(iIniData->FindVar(KIniKeyRunningTime, iRunningTime)))
+        {
+        // Running time not found - try loop count
+        if (!(iIniData->FindVar(KIniKeyLoopCount, iLoopCount)))
+            {
+            // That's not there either - use default running time
+            iRunningTime = KRunningTime;
+            }
+        else
+            {
+            // Loop count found - running time is undefined
+            iRunningTime = KUndefined;
+            }
+        }
+
+    // Suspend time
+    if (!(iIniData->FindVar(KIniKeySuspendTime, iSuspendTime)))
+        {
+        iSuspendTime = KSuspendTime;  // TODO: KUndefined
+        }
+
+    // Default timing (need to use section as well)
+    if (!(iIniData->FindVar(
+              KIniSectionInfo,
+              KIniKeyTiming,
+              iTiming)))
+        {
+        iTiming = KTiming;
+        }
+
+    // Lights time
+    if (!(iIniData->FindVar(KIniKeyLights, iLights)))
+        {
+        iLights = KUndefined;
+        }
+
+    // Use landscape
+    if (!(iIniData->FindVar(KIniKeyUseLandscape, iUseLandscape)))
+        {
+        iUseLandscape = 0;
+        }
+
+    // Scale bmps
+    if (!(iIniData->FindVar(KIniKeyScaleBmps, iScaleBmps)))
+        {
+        iScaleBmps = 0;
+        }
+
+    // Plugin name
+    iPluginName = KNullDesC;
+    if ((!(iIniData->FindVar(KIniKeyName, iPluginName))) ||
+        (iPluginName.Length() <= 0))
+        {
+        // Not found, or empty setting - use default
+        iPluginName = KPluginName;
+        }
+
+    // Load BMP file names
+    LoadBitmapFileName();
+    LoadBitmapFileName(ETrue);
+    
+    BMALOGGER_WRITEF(_L("BMA: Detected settings:"));
+    BMALOGGER_WRITEF(_L(" Name: %S"), &iPluginName);
+    BMALOGGER_WRITEF(_L(" Run for: %d"), RunningTime());
+    BMALOGGER_WRITEF(_L(" Loops: %d"), LoopCount());
+    BMALOGGER_WRITEF(_L(" Suspend: %d"), SuspendTime());
+    BMALOGGER_WRITEF(_L(" Timing: %d"), Timing());
+    BMALOGGER_WRITEF(_L(" Lights: %d"), Lights());
+    BMALOGGER_WRITEF(_L(" Bitmap file: %S"), &iMbmFileName);
+    BMALOGGER_WRITEF(_L(" Lanscape bitmap file: %S"), &iMbmFileNameL);
+    BMALOGGER_WRITEF(_L(" Use landscape: %d"), UseLandscape());
+    BMALOGGER_WRITEF(_L(" Scale bmps: %d"), ScaleBmps());
+    BMALOGGER_WRITEF(_L("BMA: End settings"));
+
+    return ETrue;
+    }
+
+
+// Saves (common) settings
+TBool CBmpAnimSettings::SaveSettingsL()
+    {
+    // Sanity check
+    if (!iIniData)
+        {
+        return EFalse;
+        }
+
+    // Write lights
+    if (iIniData->WriteVarL(
+            KIniSectionInfo, KIniKeyLights, iLights) == KErrNone)
+        {
+        iIniData->CommitL();
+        }
+
+    return ETrue;
+    }
+    
+// --- private ---
+
+    
+// Opens the settings file (initialises the settings reader)
+TInt CBmpAnimSettings::OpenSettings()
+    {
+    // Locate the dll path
+    TFileName dllName;
+//    Dll::FileName(dllName);
+    dllName.Append(_L("\\resource\\plugins\\"));
+
+    // Combine the dll path with the settings file name
+    TParse p;
+    p.SetNoWild(KIniFile, &dllName, NULL);
+
+    BMALOGGER_WRITEF(_L("Searching INI: %S"), &(p.FullName()));
+
+    // Try to open the INI file from plugin directory
+    TRAPD(err, iIniData = CBmpAnimIniData::NewL(p.FullName()));
+
+    if (err != KErrNone)
+        {
+        BMALOGGER_WRITE("INI not in plugin dir, trying \\system\\data");
+        // Try \system\data instead
+        TRAP(err, iIniData = CBmpAnimIniData::NewL(KIniFile));
+        }
+    
+    if (err != KErrNone)
+        {
+        // Make sure the settings are not attempted to be used
+        delete iIniData;
+        iIniData = NULL;
+        BMALOGGER_WRITE("INI not found");
+        }
+    else
+        {
+        BMALOGGER_WRITE("INI found");
+        }
+
+    return err;
+    }
+
+
+// Gets the bitmap file name from settings, or uses default
+void CBmpAnimSettings::LoadBitmapFileName(TBool aLandscape)
+    {
+    // Get the DLL path name. The path is used, if only a file name
+    // is specified.
+    TFileName dllName;
+    Dll::FileName(dllName);
+    
+    // Get whatever's in the settings
+	TFileName fileName;
+    TBool res = ETrue;
+    if (aLandscape)
+        {
+        res = iIniData->FindVar(KIniKeyMbmFileL, fileName);
+        }
+    else
+        {
+        res = iIniData->FindVar(KIniKeyMbmFile, fileName);
+        }
+    
+    if (!res)
+        {
+        // Not found - use the default name with the plugin directory
+        // there's really no need to do anything here (I think)
+        fileName = (_L("\\resource\\plugins\\"));
+        }
+
+    // The combination order should be:
+    // 1. use whatever was defined in the settings (part or full path)
+    // 2. use the default name part
+    // 3. use the DLL path, if no path parts have yet been defined
+    TParse p;
+    if (p.SetNoWild(fileName,
+                    aLandscape ? &KMbmFileNameL : &KMbmFileName,
+                    &dllName) == KErrNone)
+        {
+        if (aLandscape)
+            {
+            iMbmFileNameL = p.FullName();
+            }
+        else
+            {
+            iMbmFileName = p.FullName();
+            }
+        }
+    }
+
+//  End of File