diff -r aaeeca1f15af -r e8d784ac1a4b scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/CBmpAnimSettings.cpp --- /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 + +#include "CBmpAnimSettings.h" + +#include "BmpAnimUtils.h" +#include + +// 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