diff -r 000000000000 -r f453ebb75370 gfxconversion/mifconv/src/mifconv_bitmapheaderconverter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfxconversion/mifconv/src/mifconv_bitmapheaderconverter.cpp Tue Feb 02 01:11:11 2010 +0200 @@ -0,0 +1,166 @@ +/* +* Copyright (c) 2009 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: Mifconv bitmap header converter class. +* +*/ + + +#include "mifconv.h" +#include "mifconv_bitmapheaderconverter.h" +#include "mifconv_argumentmanager.h" +#include "mifconv_util.h" +#include "mifconv_exception.h" + +const int MIF_ID_FIRST = 16384; + +/** + * + */ +MifConvBitmapHeaderConverter::MifConvBitmapHeaderConverter() +: +iCurrentSourceId(MIF_ID_FIRST) +{ + MifConvArgumentManager* argMgr = MifConvArgumentManager::Instance(); + iHeaderFilename = argMgr->StringValue(MifConvHeaderArg); +} + +/** + * + */ +MifConvBitmapHeaderConverter::~MifConvBitmapHeaderConverter() +{ +} + +/** + * + */ +void MifConvBitmapHeaderConverter::Init() +{ + CleanupTargetFiles(); +} + +/** + * + */ +void MifConvBitmapHeaderConverter::CleanupTargetFiles() +{ + if( MifConvUtil::FileExists(iHeaderFilename) ) + { + // Try to remove file MIFCONV_MAX_REMOVE_TRIES times, no exception in case of failure: + MifConvUtil::RemoveFile(iHeaderFilename, MIFCONV_MAX_REMOVE_TRIES, true); + } +} + +/** + * + */ +void MifConvBitmapHeaderConverter::AppendFile( const MifConvSourceFile& sourcefile ) +{ + iSourceFiles.push_back( sourcefile ); +} + +/** + * + */ +void MifConvBitmapHeaderConverter::Convert() +{ + // Check if the headerfile name is given. Return if not: + if( iHeaderFilename.length() > 0 ) + { + cout << "Writing mbg: " << iHeaderFilename << endl; + MifConvUtil::EnsurePathExists(iHeaderFilename, true); + } + else + { + return; + } + + // Create / open the header file: + fstream headerFile(iHeaderFilename.c_str(), ios::out|ios::trunc); + + // If file creation/opening was not successful, give warning and return: + if( !headerFile.is_open() ) + { + MifConvString debugStr("WARNING: Headerfile " + iHeaderFilename + " cannot be opened for writing."); + cout << debugStr << endl; + MifConvUtil::DebugLog(debugStr); + return; + } + iDestFile = &headerFile; // Save the pointer to the file stream + (*iDestFile) << endl; + // Write the beginning of the header file: + WriteStart(); + + // Add source file items to enumerator: + for( MifConvSourceFileList::iterator i = iSourceFiles.begin(); i != iSourceFiles.end(); ++i ) + { + WriteItemToHeader(*i); + } + + // Write the end of the file... + WriteEnd(); + + // ...and close the file: + iDestFile->close(); +} + +/** + * + */ +void MifConvBitmapHeaderConverter::WriteStart() +{ + (*iDestFile) << "/* This file has been generated, DO NOT MODIFY. */" << endl; + (*iDestFile) << "enum TMif" << MifConvUtil::UnadornedFilename(iHeaderFilename) << "\n\t{" << endl; +} + +/** + * + */ +void MifConvBitmapHeaderConverter::WriteItemToHeader( const MifConvSourceFile& source ) +{ + MifConvString unadornedHeaderFile(MifConvUtil::UnadornedFilename(iHeaderFilename)); + + (*iDestFile) << "\tEMbm" << unadornedHeaderFile << MifConvUtil::UnadornedFilename(source.Filename()) << " = " << iCurrentSourceId++ << "," << endl; + + // Write mask also, if any: + if( source.MaskDepth() != IconMaskDepth_Undefined ) + { + (*iDestFile) << "\tEMbm" << unadornedHeaderFile << MifConvUtil::UnadornedFilename(source.Filename()) << "_mask = " << iCurrentSourceId++ << "," << endl; + } + else + { + // Skip mask ID if mask not present so that adding a mask later does not change IDs. + iCurrentSourceId++; + } +} + +/** + * + */ +void MifConvBitmapHeaderConverter::WriteEnd() +{ + (*iDestFile) << "\tEMbm" << MifConvUtil::UnadornedFilename(iHeaderFilename) << "LastElement" << endl; + (*iDestFile) << "\t};" << endl; +} + +/** + * + */ +void MifConvBitmapHeaderConverter::Cleanup(bool err) +{ + if( err ) + { + CleanupTargetFiles(); + } +}