gfxconversion/mifconv/src/mifconv_bitmapheaderconverter.cpp
author Simon Howkins <simonh@symbian.org>
Wed, 10 Nov 2010 00:18:53 +0000
branchRCL_3
changeset 46 476f0ee3c373
parent 0 f453ebb75370
permissions -rw-r--r--
Added useful diagnostics that explain why raptor is redefining commands for a target (when processing things through the mifconv.flm). This should make it much easier to pinpoint how the system model should be adjusted to avoid the warnings in future. Also simplified the existing redefinition guards.

/*
* 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();
	}
}