--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/skins/AknSkins/sdcsrc/SDCData.cpp Thu Dec 17 09:14:12 2009 +0200
@@ -0,0 +1,463 @@
+/*
+* Copyright (c) 2003-2008 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: Data classs and structures.
+*
+*/
+
+
+#include <string.h>
+#include <sys/stat.h>
+
+#include "SDCGlobals.h"
+#include "SDCData.h"
+#include "SDCException.h"
+#include "SDCInput.h"
+
+// Make std namespace available for compatibility
+namespace std {}
+using namespace std;
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CSDCData::CSDCData()
+ {
+ iNextOwnMinor = 0x1000;
+ iAHOverridePid.iPID1 = 0;
+ iAHOverridePid.iPID2 = 0;
+ iParentPid.iPID1 = 0;
+ iParentPid.iPID2 = 0;
+ iPalettePid.iPID1 = 0;
+ iPalettePid.iPID2 = 0;
+ iProtection = 0;
+ iAuthor[0] = 0;
+ iCopyright[0] = 0;
+ iTool[0] = 0;
+ iBmpPath[0] = 0;
+ iCurrentRestriction = 0;
+
+ iNextIconIndex = 16384;
+ }
+
+CSDCData::~CSDCData()
+ {
+ while( iNameVector.size()>0 )
+ {
+ delete iNameVector.back();
+ iNameVector.pop_back();
+ }
+ while( iMbmVector.size()>0 )
+ {
+ delete iMbmVector.back();
+ iMbmVector.pop_back();
+ }
+ while( iBitmapDefVector.size()>0 )
+ {
+ delete iBitmapDefVector.back();
+ iBitmapDefVector.pop_back();
+ }
+ while( iColorTableDefVector.size()>0 )
+ {
+ delete iColorTableDefVector.back();
+ iColorTableDefVector.pop_back();
+ }
+ while( iFrameDefVector.size()>0 )
+ {
+ delete iFrameDefVector.back();
+ iFrameDefVector.pop_back();
+ }
+ while( iAppIconDefVector.size()>0 )
+ {
+ delete iAppIconDefVector.back();
+ iAppIconDefVector.pop_back();
+ }
+ while( iBmpAnimDefVector.size()>0 )
+ {
+ delete iBmpAnimDefVector.back();
+ iBmpAnimDefVector.pop_back();
+ }
+ while( iTargetDeviceVector.size()>0 )
+ {
+ delete iTargetDeviceVector.back();
+ iTargetDeviceVector.pop_back();
+ }
+ while( iStringDefVector.size()>0 )
+ {
+ delete iStringDefVector.back();
+ iStringDefVector.pop_back();
+ }
+ while( iScalableItemDefVector.size()>0 )
+ {
+ delete iScalableItemDefVector.back();
+ iScalableItemDefVector.pop_back();
+ }
+ while( iAnimationDefVector.size()>0 )
+ {
+ delete iAnimationDefVector.back();
+ iAnimationDefVector.pop_back();
+ }
+ while( iLanguageVector.size()>0 )
+ {
+ iLanguageVector.pop_back();
+ }
+ }
+
+//////////////////////////////////////////////////////////////////////
+// Other methods
+//////////////////////////////////////////////////////////////////////
+
+bool CSDCData::IsScalable()
+ {
+ if( iSkinType == 0x80 ) return true;
+ return false;
+ }
+
+bool CSDCData::IsDefined( const TSDCIID aIID )
+ {
+ int i;
+ for( i=0; i<iBitmapDefVector.size(); i++ )
+ {
+ TSDCBitmapDef* entry = iBitmapDefVector[i];
+ if( (entry->iIID.iMajor==aIID.iMajor) && (entry->iIID.iMinor==aIID.iMinor) ) return true;
+ }
+ for( i=0; i<iColorTableDefVector.size(); i++ )
+ {
+ TSDCColorTableDef* entry = iColorTableDefVector[i];
+ if( (entry->iIID.iMajor==aIID.iMajor) && (entry->iIID.iMinor==aIID.iMinor) ) return true;
+ }
+ for( i=0; i<iFrameDefVector.size(); i++ )
+ {
+ TSDCFrameDef* entry = iFrameDefVector[i];
+ if( (entry->iIID.iMajor==aIID.iMajor) && (entry->iIID.iMinor==aIID.iMinor) ) return true;
+ }
+ for( i=0; i<iAppIconDefVector.size(); i++ )
+ {
+ TSDCAppIconDef* entry = iAppIconDefVector[i];
+ if( (entry->iIID.iMajor==aIID.iMajor) && (entry->iIID.iMinor==aIID.iMinor) ) return true;
+ }
+ for( i=0; i<iBmpAnimDefVector.size(); i++ )
+ {
+ TSDCBmpAnimDef* entry = iBmpAnimDefVector[i];
+ if( (entry->iIID.iMajor==aIID.iMajor) && (entry->iIID.iMinor==aIID.iMinor) ) return true;
+ }
+ for( i=0; i<iStringDefVector.size(); i++ )
+ {
+ TSDCStringDef* entry = iStringDefVector[i];
+ if( (entry->iIID.iMajor==aIID.iMajor) && (entry->iIID.iMinor==aIID.iMinor) ) return true;
+ }
+ for( i=0; i<iScalableItemDefVector.size(); i++ )
+ {
+ TSDCScalableItemDef* entry = iScalableItemDefVector[i];
+ if( (entry->iIID.iMajor==aIID.iMajor) && (entry->iIID.iMinor==aIID.iMinor) ) return true;
+ }
+ for( i=0; i<iAnimationDefVector.size(); i++ )
+ {
+ TSDCAnimationDef* entry = iAnimationDefVector[i];
+ if( (entry->iIID.iMajor==aIID.iMajor) && (entry->iIID.iMinor==aIID.iMinor) ) return true;
+ }
+ return false;
+ }
+
+bool CSDCData::IsDefined( const TSDCIID aIID, const int aRestriction )
+ {
+ int i;
+ for( i=0; i<iBitmapDefVector.size(); i++ )
+ {
+ TSDCBitmapDef* entry = iBitmapDefVector[i];
+ if( (entry->iIID.iMajor==aIID.iMajor) && (entry->iIID.iMinor==aIID.iMinor) && (entry->iRestriction==aRestriction) ) return true;
+ }
+ for( i=0; i<iColorTableDefVector.size(); i++ )
+ {
+ TSDCColorTableDef* entry = iColorTableDefVector[i];
+ if( (entry->iIID.iMajor==aIID.iMajor) && (entry->iIID.iMinor==aIID.iMinor) && (entry->iRestriction==aRestriction) ) return true;
+ }
+ for( i=0; i<iFrameDefVector.size(); i++ )
+ {
+ TSDCFrameDef* entry = iFrameDefVector[i];
+ if( (entry->iIID.iMajor==aIID.iMajor) && (entry->iIID.iMinor==aIID.iMinor) && (entry->iRestriction==aRestriction) ) return true;
+ }
+ for( i=0; i<iAppIconDefVector.size(); i++ )
+ {
+ TSDCAppIconDef* entry = iAppIconDefVector[i];
+ if( (entry->iIID.iMajor==aIID.iMajor) && (entry->iIID.iMinor==aIID.iMinor) && (entry->iRestriction==aRestriction) ) return true;
+ }
+ for( i=0; i<iBmpAnimDefVector.size(); i++ )
+ {
+ TSDCBmpAnimDef* entry = iBmpAnimDefVector[i];
+ if( (entry->iIID.iMajor==aIID.iMajor) && (entry->iIID.iMinor==aIID.iMinor) && (entry->iRestriction==aRestriction) ) return true;
+ }
+ for( i=0; i<iStringDefVector.size(); i++ )
+ {
+ TSDCStringDef* entry = iStringDefVector[i];
+ if( (entry->iIID.iMajor==aIID.iMajor) && (entry->iIID.iMinor==aIID.iMinor) && (entry->iRestriction==aRestriction) ) return true;
+ }
+ for( i=0; i<iScalableItemDefVector.size(); i++ )
+ {
+ TSDCScalableItemDef* entry = iScalableItemDefVector[i];
+ if( (entry->iIID.iMajor==aIID.iMajor) && (entry->iIID.iMinor==aIID.iMinor) && (entry->iRestriction==aRestriction) ) return true;
+ }
+ for( i=0; i<iAnimationDefVector.size(); i++ )
+ {
+ TSDCAnimationDef* entry = iAnimationDefVector[i];
+ if( (entry->iIID.iMajor==aIID.iMajor) && (entry->iIID.iMinor==aIID.iMinor) && (entry->iRestriction==aRestriction) ) return true;
+ }
+ return false;
+ }
+
+void CSDCData::AppendNameEntry( const int aLanguageID, const wchar_t* aName )
+ {
+ for( int i=0; i<iNameVector.size(); i++ )
+ {
+ TSDCNameEntry* entry = iNameVector[i];
+ if( entry->iLanguageID == aLanguageID ) throw CSDCException( ESDCContentError, "Name for the language ID has already been specified" );
+ }
+
+ TSDCNameEntry* entry = new TSDCNameEntry();
+ entry->iLanguageID = aLanguageID;
+ wcscpy( entry->iName, aName );
+ iNameVector.push_back( entry );
+ }
+
+void CSDCData::AppendTargetDeviceEntry( const wchar_t* aDeviceName )
+ {
+ TSDCTargetDeviceEntry* entry = new TSDCTargetDeviceEntry();
+ wcscpy( entry->iDeviceName, aDeviceName );
+ iTargetDeviceVector.push_back( entry );
+ }
+
+bool CSDCData::HasMbmEntry( const TSDCColorDepth aColorDepth, const wchar_t* aFilename )
+ {
+ return FindMbmEntry(aColorDepth,aFilename)?true:false;
+ }
+
+TSDCMBMEntry* CSDCData::FindMbmEntry( const TSDCColorDepth aColorDepth, const wchar_t* aFilename )
+ {
+ for( int i=0; i<iMbmVector.size(); i++ )
+ {
+ TSDCMBMEntry* entry = iMbmVector[i];
+ if( (_wcsicmp(entry->iSourcePath,iBmpPath)==0) &&
+ (entry->iColorDepth==aColorDepth) &&
+ (_wcsicmp(entry->iSourceFilename,aFilename)==0) ) return entry;
+ }
+ return NULL;
+ }
+
+TSDCMBMEntry* CSDCData::AppendMbmEntry( const bool aSvg,
+ const TSDCColorDepth aColorDepth, const wchar_t* aFilename,
+ const bool aSvgAnim )
+ {
+ TSDCMBMEntry* entry = FindMbmEntry( aColorDepth, aFilename );
+ if( entry ) return entry;
+
+ entry = new TSDCMBMEntry();
+
+ //check file
+ if( !CheckFile( iBmpPath , aFilename ) )
+ {
+ char filename[512];
+ CSDCInput::ConvertToAscii( filename, aFilename );
+ printf("NOTE: item %s not add beacuse file not exist!!\n",filename);
+ return entry;
+ }
+
+ entry->iIndex = iNextIconIndex;
+ iNextIconIndex += 2;
+
+ wcscpy( entry->iSourceFilename, aFilename );
+
+ entry->iColorDepth = aColorDepth;
+ wcscpy( entry->iSourcePath, iBmpPath );
+
+ entry->iMaskColorDepth = ESDCColorDepthNone;
+ wcscpy( entry->iMaskSourceFilename, L"" );
+
+ entry->iSvgAnim = aSvgAnim;
+
+ iMbmVector.push_back( entry );
+ return entry;
+ }
+
+void CSDCData::SetBmpPath( const wchar_t* aPath )
+ {
+ if( !aPath )
+ {
+ wcscpy( iBmpPath, L"" );
+ }
+ else
+ {
+ wcscpy( iBmpPath, aPath );
+ if( wcslen( iBmpPath ) &&
+ wcscmp( iBmpPath+wcslen(iBmpPath)-1, L"\\" ) )
+ {
+ wcscat( iBmpPath, L"\\" );
+ printf("NOTE: Trailing backslash appended to bitmap path\n");
+ }
+ }
+ }
+
+void CSDCData::CreateBitmapDef( const TSDCIID aIID, const int aIndex, const int aMaskIndex, const TSDCImageAttributes aAttributes, const bool aAppIcon, const int aRestriction )
+ {
+ if( IsDefined( aIID, aRestriction ) ) throw CSDCException( ESDCContentError, "Item already defined" );
+
+ TSDCBitmapDef* entry = new TSDCBitmapDef();
+ entry->iIID = aIID;
+ entry->iMBMIndex = aIndex;
+ entry->iMaskMBMIndex = aMaskIndex;
+ entry->iAttributes = aAttributes;
+ entry->iAppIconBitmap = aAppIcon;
+ entry->iRestriction = aRestriction;
+ iBitmapDefVector.push_back( entry );
+ }
+
+TSDCBitmapDef* CSDCData::GetBitmapDef( const TSDCIID aIID )
+ {
+ for( int i=0; i<iBitmapDefVector.size(); i++ )
+ {
+ TSDCBitmapDef* entry = iBitmapDefVector[i];
+ if( (entry->iIID.iMajor==aIID.iMajor) && (entry->iIID.iMinor==aIID.iMinor) ) return entry;
+ }
+ return NULL;
+ }
+
+void CSDCData::CreateColorTableDef( const TSDCIID aIID, const vector<TSDCColorTableEntry> aColors, const int aRestriction )
+ {
+ if( IsDefined( aIID, aRestriction ) ) throw CSDCException( ESDCContentError, "Item already defined" );
+
+ TSDCColorTableDef* entry = new TSDCColorTableDef();
+ entry->iIID = aIID;
+ entry->iColors = aColors;
+ entry->iRestriction = aRestriction;
+ iColorTableDefVector.push_back( entry );
+ }
+
+void CSDCData::CreateFrameDef( const TSDCIID aIID, const vector<TSDCIID> aElements, const int aRestriction )
+ {
+ if( IsDefined( aIID, aRestriction ) ) throw CSDCException( ESDCContentError, "Item already defined" );
+ if( aElements.size() != 9 ) throw CSDCException( ESDCContentError, "Frame must have 9 elements" );
+
+ TSDCFrameDef* entry = new TSDCFrameDef();
+ entry->iIID = aIID;
+ entry->iElements = aElements;
+ entry->iRestriction = aRestriction;
+ iFrameDefVector.push_back( entry );
+ }
+
+void CSDCData::CreateAppIconDef( const TSDCIID aIID, const vector<TSDCIID> aIcons, const int aRestriction )
+ {
+ if( IsDefined( aIID, aRestriction ) ) throw CSDCException( ESDCContentError, "Item already defined" );
+
+ TSDCAppIconDef* entry = new TSDCAppIconDef();
+ entry->iIID = aIID;
+ entry->iIcons = aIcons;
+ entry->iRestriction = aRestriction;
+ iAppIconDefVector.push_back( entry );
+ }
+
+void CSDCData::CreateBmpAnimDef( const TSDCIID aIID, const int aInterval, const int aPlayMode, const int aFlash, const vector<TSDCBmpAnimFrame> aFrames, const int aRestriction )
+ {
+ if( IsDefined( aIID, aRestriction ) ) throw CSDCException( ESDCContentError, "Item already defined" );
+
+ TSDCBmpAnimDef* entry = new TSDCBmpAnimDef();
+ entry->iIID = aIID;
+ entry->iInterval = aInterval;
+ entry->iPlayMode = aPlayMode;
+ entry->iFlash = aFlash;
+ entry->iFrames = aFrames;
+ entry->iRestriction = aRestriction;
+ iBmpAnimDefVector.push_back( entry );
+ }
+
+void CSDCData::CreateStringDef( const TSDCIID aIID, const wchar_t* aString, const int aRestriction )
+ {
+ if( IsDefined( aIID, aRestriction ) ) throw CSDCException( ESDCContentError, "Item already defined" );
+
+ TSDCStringDef* entry = new TSDCStringDef();
+ entry->iIID = aIID;
+ entry->iRestriction = aRestriction;
+ wcscpy( entry->iString, aString );
+ iStringDefVector.push_back( entry );
+ }
+
+void CSDCData::CreateScalableItemDef( const TSDCIID aIID, const int aInput, const int aOutput, const vector<TSDCEffectCommand> aCommands, const int aRestriction )
+ {
+ if( IsDefined( aIID, aRestriction ) ) throw CSDCException( ESDCContentError, "Item already defined" );
+
+ TSDCScalableItemDef* entry = new TSDCScalableItemDef();
+ entry->iIID = aIID;
+ entry->iRefIID.iMajor = 0;
+ entry->iRefIID.iMinor = 0;
+ entry->iInput = aInput;
+ entry->iOutput = aOutput;
+ entry->iCommands = aCommands;
+ entry->iRestriction = aRestriction;
+ iScalableItemDefVector.push_back( entry );
+ }
+
+void CSDCData::CreateScalableItemRefDef( const TSDCIID aIID, const TSDCIID aRefIID, const int aRestriction )
+ {
+ if( IsDefined( aIID, aRestriction ) ) throw CSDCException( ESDCContentError, "Item already defined" );
+
+ TSDCScalableItemDef* entry = new TSDCScalableItemDef();
+ entry->iIID = aIID;
+ entry->iRefIID = aRefIID;
+ entry->iInput = 0;
+ entry->iOutput = 0;
+ entry->iRestriction = aRestriction;
+ iScalableItemDefVector.push_back( entry );
+ }
+
+void CSDCData::CreateAnimationDef( const TSDCIID aIID, const int aInput, const int aOutput, const int aMinInterval,
+ const vector<TSDCEffectCommand> aPreprocessCommands, const vector<TSDCEffectCommand> aAnimCommands,
+ const vector<TSDCAnimParamGroup> aValues, const vector<TSDCAnimParamGroup> aTimingModels,
+ const vector<TSDCAnimParamGroup> aSizeBoundParams, const bool aMorphing, const int aRestriction )
+ {
+ if( IsDefined( aIID, aRestriction ) ) throw CSDCException( ESDCContentError, "Item already defined" );
+
+ TSDCAnimationDef* entry = new TSDCAnimationDef();
+ entry->iIID = aIID;
+ entry->iInput = aInput;
+ entry->iOutput = aOutput;
+ entry->iMinInterval = aMinInterval;
+ entry->iMorphing = aMorphing;
+ entry->iPreprocessCommands = aPreprocessCommands;
+ entry->iAnimCommands = aAnimCommands;
+ entry->iValues = aValues;
+ entry->iTimingModels = aTimingModels;
+ entry->iSizeBoundParams = aSizeBoundParams;
+ entry->iRestriction = aRestriction;
+ iAnimationDefVector.push_back( entry );
+ }
+
+
+bool CSDCData::CheckFile( const wchar_t* aPath , const wchar_t* aFileName )
+ {
+ char asciiPatch[512];
+ CSDCInput::ConvertToAscii( asciiPatch, aPath );
+ char asciiFileName[512];
+ CSDCInput::ConvertToAscii( asciiFileName, aFileName );
+
+ strcat(asciiPatch,asciiFileName);
+
+ struct _stat buf;
+ int result = _stat( asciiPatch, &buf );
+ if(result == -1)
+ {
+ return false;
+ }
+ return true;
+
+ }
+
+// End of file