--- /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