gfxconversion/mifconv/src/mifconv_bitmapheaderconverter.cpp
changeset 0 f453ebb75370
--- /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();
+	}
+}