skins/AknSkins/sdcsrc/SDCData.cpp
changeset 0 05e9090e2422
child 32 d9c996538b26
--- /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