diff -r 000000000000 -r 05e9090e2422 skins/AknSkins/sdcsrc/SDCInlOutput.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/skins/AknSkins/sdcsrc/SDCInlOutput.cpp Thu Dec 17 09:14:12 2009 +0200 @@ -0,0 +1,399 @@ +/* +* 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: ?Description +* +*/ + +#include "SDCGlobals.h" +#include "SDCInlOutput.h" +#include "SDCException.h" + +////////////////////////////////////////////////////////////////////// +// Construction/Destruction +////////////////////////////////////////////////////////////////////// + +CSDCInlOutput::CSDCInlOutput() + { + + } + +CSDCInlOutput::~CSDCInlOutput() + { + + } + +////////////////////////////////////////////////////////////////////// +// Other methods +////////////////////////////////////////////////////////////////////// + +void CSDCInlOutput::Output( CSDCData* aData, const char* aSkinName, const char* aCppFilename, const char* aMmpFilename ) + { + iData = aData; + + if( iData->iPid.iPID2 != 0 ) + { + throw CSDCException( ESDCContentError, "System skin must have a UID, no PID is allowed"); + } + + if( iData->iParentPid.iPID2 != 0 ) + { + throw CSDCException( ESDCContentError, "System override skin must have a parent UID, no PID is allowed"); + } + + if( iData->iAHOverridePid.iPID2 != 0 ) + { + throw CSDCException( ESDCContentError, "System override skin must have a UID, no PID is allowed"); + } + + int storageUid = iData->iParentPid.iPID1; + if( storageUid == 0 ) storageUid = iData->iPid.iPID1; + + FILE* file = fopen( aCppFilename, "wt" ); + if( !file ) throw CSDCException( ESDCFileOpenError, "Text output file for CPP generation can not be opened" ); + + fprintf( file, "// Generated skin content DLL source file for %s\n", aSkinName ); + fprintf( file, "// Copyright (c) 2003,2004 Nokia. All rights reserved. Confidential.\n"); + + fprintf( file, "\n#include \n" ); + fprintf( file, "#include \"AknsSrvItemDef.h\"\n" ); + + fprintf( file, "\n#define AKNS_DTPP(a) {EAknsSrvMPPtrAbsoluteROM,static_cast(&(a))}\n" ); + + fprintf( file, "\n// Skin MBM file\n"); + fprintf( file, "#if defined(AKNS_SDC_NO_CONST_SUPPORT)\n"); + fprintf( file, "#define K%s_Mbm _S(\"z:\\\\system\\\\skins\\\\%08x\\\\%s.mbm\")\n", aSkinName, storageUid, aSkinName ); + fprintf( file, "#else\n"); + fprintf( file, "static const TText* const K%s_Mbm = _S(\"z:\\\\system\\\\skins\\\\%08x\\\\%s.mbm\");\n", aSkinName, storageUid, aSkinName ); + fprintf( file, "#endif\n"); + + int i, a; + + fprintf( file, "\n// Bitmap definitions\n"); + for( i=0; iiBitmapDefVector.size(); i++ ) + { + TSDCBitmapDef* entry = iData->iBitmapDefVector[i]; + + if( entry->iMaskMBMIndex!=-1 ) + { + fprintf( file, "static const TAknsSrvMaskedBitmapDef K%s_BitmapDef_%i =\n", aSkinName, i ); + fprintf( file, " { {EAknsSrvMPPtrAbsoluteROM,K%s_Mbm}, %i, %i, ", + aSkinName, entry->iMBMIndex, entry->iMaskMBMIndex ); + OutputAttributes( file, entry->iAttributes ); + fprintf( file, " };\n" ); + } + else + { + fprintf( file, "static const TAknsSrvBitmapDef K%s_BitmapDef_%i =\n", aSkinName, i ); + fprintf( file, " { {EAknsSrvMPPtrAbsoluteROM,K%s_Mbm}, %i, ", + aSkinName, entry->iMBMIndex ); + OutputAttributes( file, entry->iAttributes ); + fprintf( file, " };\n" ); + } + } + + fprintf( file, "\n// Color table definitions\n"); + for( i=0; iiColorTableDefVector.size(); i++ ) + { + TSDCColorTableDef* entry = iData->iColorTableDefVector[i]; + + fprintf( file, "static const TAknsColorTableEntry K%s_ColorTableDef_%i_All[] =\n", aSkinName, i ); + fprintf( file, " { " ); + for( a=0; aiColors.size(); a++ ) + { + if( a!= 0 ) fprintf( file, ", " ); + fprintf( file, "{%i,0x%06x}", entry->iColors[a].iIndex, entry->iColors[a].iRgb ); + } + fprintf( file, " };\n" ); + + fprintf( file, "static const TAknsSrvColorTableDef K%s_ColorTableDef_%i =\n", aSkinName, i ); + fprintf( file, " { %i, {EAknsSrvMPPtrAbsoluteROM,&K%s_ColorTableDef_%i_All[0]}, ", + entry->iColors.size(), aSkinName, i ); + TSDCImageAttributes attributes; + attributes.iAttributeFlags = ESDCImageAttributeNone; + attributes.iAlignmentFlags = ESDCImageAlignNone; + attributes.iCoordX = 0; + attributes.iCoordY = 0; + attributes.iSizeW = 0; + attributes.iSizeH = 0; + OutputAttributes( file, attributes ); + fprintf( file, " };\n" ); + } + + fprintf( file, "\n// Frame definitions\n"); + for( i=0; iiFrameDefVector.size(); i++ ) + { + TSDCFrameDef* entry = iData->iFrameDefVector[i]; + + fprintf( file, "static const TAknsItemID K%s_FrameDef_%i_All[] = \n", aSkinName, i ); + fprintf( file, " { " ); + for( a=0; aiElements.size(); a++ ) + { + if( a!=0 ) fprintf( file, ", " ); + fprintf( file, "{0x%x,0x%x}", entry->iElements[a].iMajor, entry->iElements[a].iMinor ); + } + fprintf( file, " };\n" ); + + fprintf( file, "static const TAknsSrvImageTableDef K%s_FrameDef_%i = \n", aSkinName, i ); + fprintf( file, " { %i, {EAknsSrvMPPtrAbsoluteROM,&K%s_FrameDef_%i_All[0]}, ", + entry->iElements.size(), aSkinName, i ); + TSDCImageAttributes attributes; + attributes.iAttributeFlags = ESDCImageAttributeNone; + attributes.iAlignmentFlags = ESDCImageAlignNone; + attributes.iCoordX = 0; + attributes.iCoordY = 0; + attributes.iSizeW = 0; + attributes.iSizeH = 0; + OutputAttributes( file, attributes ); + fprintf( file, " };\n" ); + } + + fprintf( file, "\n// Application icon definitions\n"); + for( i=0; iiAppIconDefVector.size(); i++ ) + { + TSDCAppIconDef* entry = iData->iAppIconDefVector[i]; + + fprintf( file, "static const TAknsItemID K%s_AppIconDef_%i_All[] = \n", aSkinName, i ); + fprintf( file, " { " ); + for( a=0; aiIcons.size(); a++ ) + { + if( a!=0 ) fprintf( file, ", " ); + fprintf( file, "{0x%x,0x%x}", entry->iIcons[a].iMajor, entry->iIcons[a].iMinor ); + } + fprintf( file, " };\n" ); + + fprintf( file, "static const TAknsSrvImageTableDef K%s_AppIconDef_%i = \n", aSkinName, i ); + fprintf( file, " { %i, {EAknsSrvMPPtrAbsoluteROM,&K%s_AppIconDef_%i_All[0]}, ", + entry->iIcons.size(), aSkinName, i ); + TSDCImageAttributes attributes; + attributes.iAttributeFlags = ESDCImageAttributeNone; + attributes.iAlignmentFlags = ESDCImageAlignNone; + attributes.iCoordX = 0; + attributes.iCoordY = 0; + attributes.iSizeW = 0; + attributes.iSizeH = 0; + OutputAttributes( file, attributes ); + fprintf( file, " };\n" ); + } + + fprintf( file, "\n// Bitmap animation definitions\n" ); + for( i=0; iiBmpAnimDefVector.size(); i++ ) + { + TSDCBmpAnimDef* entry = iData->iBmpAnimDefVector[i]; + + fprintf( file, "static const TAknsItemID K%s_BmpAnimDef_%i_All[] = \n", aSkinName, i ); + fprintf( file, " { " ); + for( a=0; aiFrames.size(); a++ ) + { + if( a!=0 ) fprintf( file, ", " ); + fprintf( file, "{0x%x,0x%x}", entry->iFrames[a].iIID.iMajor, entry->iFrames[a].iIID.iMinor ); + } + fprintf( file, " };\n" ); + + fprintf( file, "static const TAknsBmpAnimFrameInfo K%s_BmpAnimDef_%i_FramesAll[] = \n", aSkinName, i ); + fprintf( file, " { " ); + for( a=0; aiFrames.size(); a++ ) + { + if( a!=0 ) fprintf( file, ", " ); + fprintf( file, "{%i,%i,%i}", entry->iFrames[a].iTime, entry->iFrames[a].iPosX, entry->iFrames[a].iPosY ); + } + fprintf( file, " };\n" ); + + fprintf( file, "static const TAknsSrvBmpAnimDef K%s_BmpAnimDef_%i = \n", aSkinName, i ); + fprintf( file, " { %i, {EAknsSrvMPPtrAbsoluteROM,&K%s_BmpAnimDef_%i_All[0]}, ", + entry->iFrames.size(), aSkinName, i ); + fprintf( file, "{EAknsSrvMPPtrAbsoluteROM,&K%s_BmpAnimDef_%i_FramesAll[0]}, ", + aSkinName, i ); + fprintf( file, "%i, %i, ", entry->iInterval, entry->iPlayMode ); + if( entry->iFlash ) + { + fprintf( file, "ETrue, " ); + } + else + { + fprintf( file, "EFalse, " ); + } + fprintf( file, "EFalse, " ); + TSDCImageAttributes attributes; + attributes.iAttributeFlags = ESDCImageAttributeNone; + attributes.iAlignmentFlags = ESDCImageAlignNone; + attributes.iCoordX = 0; + attributes.iCoordY = 0; + attributes.iSizeW = 0; + attributes.iSizeH = 0; + OutputAttributes( file, attributes ); + fprintf( file, " };\n" ); + } + + fprintf( file, "\n// String definitions\n"); + for( i=0; iiStringDefVector.size(); i++ ) + { + TSDCStringDef* entry = iData->iStringDefVector[i]; + + char buf[512]; + CSDCInput::ConvertToAsciiWithCPPEscapes( buf, entry->iString ); + fprintf( file, "static const TText* const K%s_String_%i = _S(\"%s\");\n", aSkinName, i, buf ); + + fprintf( file, "static const TAknsSrvStringDef K%s_StringDef_%i =\n", aSkinName, i ); + fprintf( file, " { {EAknsSrvMPPtrAbsoluteROM,K%s_String_%i} ", aSkinName, i ); + fprintf( file, " };\n" ); + } + + OutputClassList( file, false, aSkinName ); + + if( iData->iAppIconDefVector.size() > 0 ) OutputClassList( file, true, aSkinName ); + + fprintf( file, "\nstatic const TAknsSrvSkinDef K%s_MasterTable =\n", aSkinName ); + fprintf( file, " { { 0x%x , 0x%x }, &K%s_BitmapClass, ", iData->iPid.iPID1, iData->iPid.iPID2, aSkinName ); + if( iData->iAppIconDefVector.size() > 0 ) + { + fprintf( file, "&K%s_AppIconClass, ", aSkinName ); + } + else + { + fprintf( file, "0, " ); + } + fprintf( file, "0, { 0x%x , 0x%x }, { 0x%x , 0x%x } };\n", iData->iPalettePid.iPID1, iData->iPalettePid.iPID2, iData->iAHOverridePid.iPID1, iData->iAHOverridePid.iPID2 ); + + fprintf( file, "\nIMPORT_C const TAny* MasterTable();\n" ); + fprintf( file, "EXPORT_C const TAny* MasterTable()\n" ); + fprintf( file, " { return &K%s_MasterTable; }\n", aSkinName ); + + fprintf( file, "\nGLDEF_C TInt E32Dll(TDllReason /*aReason*/)\n" ); + fprintf( file, " { return KErrNone; }\n" ); + + fprintf( file, "\n// End of file\n"); + + fclose( file ); + file = NULL; + + file = fopen( aMmpFilename, "wt" ); + if( !file ) throw CSDCException( ESDCFileOpenError, "Text output file for MMP generation can not be opened" ); + + fprintf( file, "// Generated skin content DLL project file for %s\n", aSkinName ); + fprintf( file, "// Copyright (c) 2003,2004 Nokia. All rights reserved. Confidential.\n"); + + fprintf( file, "\nTARGETPATH system\\skins\\%08x\n", storageUid ); + fprintf( file, "TARGET %08x.dll\n", iData->iPid.iPID1 ); + fprintf( file, "TARGETTYPE DLL\n" ); + fprintf( file, "UID 0x10005A26 0x%x\n", iData->iPid.iPID1 ); + + fprintf( file, "\nCAPABILITY CAP_GENERAL_DLL\n" ); + + fprintf( file, "\nUSERINCLUDE \\s60\\AknSkins\\srvinc\n" ); + fprintf( file, "SYSTEMINCLUDE \\epoc32\\include \\epoc32\\include\\oem\n" ); + + fprintf( file, "\nLIBRARY euser.lib\n" ); + + fprintf( file, "\nSOURCE %s_ContentDLL.cpp\n", aSkinName ); + fprintf( file, "\n#if defined(ARMCC)\n" ); + fprintf( file, "MACRO AKNS_SDC_NO_CONST_SUPPORT\n" ); + fprintf( file, "#endif\n" ); + + fprintf( file, "\n// End of file\n"); + + fclose( file ); + } + +void CSDCInlOutput::OutputAttributes( FILE* aFile, const TSDCImageAttributes& aAttributes ) + { + fprintf( aFile, "%i, %i, %i, %i, %i, %i", aAttributes.iAttributeFlags, aAttributes.iAlignmentFlags, + aAttributes.iCoordX, aAttributes.iCoordY, aAttributes.iSizeW, aAttributes.iSizeH ); + } + +void CSDCInlOutput::OutputClassList( FILE* aFile, const bool aAppIconClass, const char* aSkinName ) + { + const char* className = "BitmapClass"; + if( aAppIconClass ) className = "AppIconClass"; + + fprintf( aFile, "\n// Class content list\n"); + int entries = 0; + fprintf( aFile, "static const TAknsSrvDef K%s_%s_All[] = {\n", aSkinName, className ); + + int i; + for( i=0; iiBitmapDefVector.size(); i++ ) + { + TSDCBitmapDef* entry = iData->iBitmapDefVector[i]; + + if( entry->iAppIconBitmap == aAppIconClass ) + { + if( entry->iMaskMBMIndex!=-1 ) + { + fprintf( aFile, " { {0x%x,0x%x}, EAknsITMaskedBitmap, AKNS_DTPP(K%s_BitmapDef_%i) },\n", + entry->iIID.iMajor, entry->iIID.iMinor, aSkinName, i ); + entries++; + } + else + { + fprintf( aFile, " { {0x%x,0x%x}, EAknsITBitmap, AKNS_DTPP(K%s_BitmapDef_%i) },\n", + entry->iIID.iMajor, entry->iIID.iMinor, aSkinName, i ); + entries++; + } + } + } + + if( aAppIconClass ) + { + for( i=0; iiAppIconDefVector.size(); i++ ) + { + TSDCAppIconDef* entry = iData->iAppIconDefVector[i]; + + fprintf( aFile, " { {0x%x,0x%x}, EAknsITImageTable, AKNS_DTPP(K%s_AppIconDef_%i) },\n", + entry->iIID.iMajor, entry->iIID.iMinor, aSkinName, i ); + entries++; + } + } + else + { + for( i=0; iiColorTableDefVector.size(); i++ ) + { + TSDCColorTableDef* entry = iData->iColorTableDefVector[i]; + + fprintf( aFile, " { {0x%x,0x%x}, EAknsITColorTable, AKNS_DTPP(K%s_ColorTableDef_%i) },\n", + entry->iIID.iMajor, entry->iIID.iMinor, aSkinName, i ); + entries++; + } + + for( i=0; iiFrameDefVector.size(); i++ ) + { + TSDCFrameDef* entry = iData->iFrameDefVector[i]; + + fprintf( aFile, " { {0x%x,0x%x}, EAknsITImageTable, AKNS_DTPP(K%s_FrameDef_%i) },\n", + entry->iIID.iMajor, entry->iIID.iMinor, aSkinName, i ); + entries++; + } + + for( i=0; iiBmpAnimDefVector.size(); i++ ) + { + TSDCBmpAnimDef* entry = iData->iBmpAnimDefVector[i]; + + fprintf( aFile, " { {0x%x,0x%x}, EAknsITBmpAnim, AKNS_DTPP(K%s_BmpAnimDef_%i) },\n", + entry->iIID.iMajor, entry->iIID.iMinor, aSkinName, i ); + entries++; + } + + for( i=0; iiStringDefVector.size(); i++ ) + { + TSDCStringDef* entry = iData->iStringDefVector[i]; + + fprintf( aFile, " { {0x%x,0x%x}, EAknsITString, AKNS_DTPP(K%s_StringDef_%i) },\n", + entry->iIID.iMajor, entry->iIID.iMinor, aSkinName, i ); + entries++; + } + } + + fprintf( aFile, " };\n" ); + fprintf( aFile, "static const TAknsSrvClassDef K%s_%s = { &K%s_%s_All[0], %i };\n", aSkinName, className, aSkinName, className, entries ); + } + +// End of file