diff -r 000000000000 -r f453ebb75370 gfxconversion/mifconv/src/mifconv_convertermanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfxconversion/mifconv/src/mifconv_convertermanager.cpp Tue Feb 02 01:11:11 2010 +0200 @@ -0,0 +1,190 @@ +/* +* 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 converter manager class. +* +*/ + + +#include "mifconv.h" +#include "mifconv_convertermanager.h" +#include "mifconv_argumentmanager.h" +#include "mifconv_util.h" +#include "mifconv_bitmapconverter.h" +#include "mifconv_bitmapheaderconverter.h" +#include "mifconv_iconbinaryconverter.h" +#include "mifconv_mifconverter.h" + +// Static singleton initialization +MifConvConverterManager* MifConvConverterManager::iInstance = 0; + +/** + * Returns pointer to the singleton object + */ +MifConvConverterManager* MifConvConverterManager::Instance() +{ + if( iInstance == 0 ) + { + iInstance = new MifConvConverterManager(); + } + return iInstance; +} + +/** + * Free the allocated memory + */ +void MifConvConverterManager::Reset() +{ + delete iInstance; + iInstance = 0; +} + +/** + * Constructor + */ +MifConvConverterManager::MifConvConverterManager() +{ + +} + +/** + * + */ +void MifConvConverterManager::Init() +{ + // Add bmp --> mbm converter: + MifConvBitmapConverter* bitmapConverter = new MifConvBitmapConverter(); + iAllConverters.push_back(bitmapConverter); + + // Add headerfile (mbg) converter: + MifConvBitmapHeaderConverter* headerConverter = new MifConvBitmapHeaderConverter(); + iAllConverters.push_back(headerConverter); + + // Add svg --> svgb converter: + MifConvIconBinaryConverter* svgConverter = new MifConvIconBinaryConverter(); + iAllConverters.push_back(svgConverter); + + // Add mif converter: + MifConvMifConverter* mifConverter = new MifConvMifConverter(); + iAllConverters.push_back(mifConverter); + + // Add file converters for .BMP files: + MifConvFileConverterList bmpConverters; + bmpConverters.push_back(bitmapConverter); + bmpConverters.push_back(headerConverter); + bmpConverters.push_back(mifConverter); + iFileConverters.insert(std::make_pair(MifConvString(BMP_FILE_EXTENSION), bmpConverters)); + + // Add file converters for .SVG files: + MifConvFileConverterList svgConverters; + svgConverters.push_back(headerConverter); + svgConverters.push_back(svgConverter); + if( MifConvArgumentManager::Instance()->BooleanValue(MifConvDisableSvgCompression) ) + { + // SVG files will be added to mif-file without compression (i.e. don't use svgtbinencode for them). + svgConverters.push_back(mifConverter); + } + iFileConverters.insert(std::make_pair(MifConvString(SVG_FILE_EXTENSION), svgConverters)); + + // Add file converters for .SVGB files: + MifConvFileConverterList svgbConverters; + svgbConverters.push_back(headerConverter); + if( !MifConvArgumentManager::Instance()->BooleanValue(MifConvDisableSvgCompression) ) + { + // SVG files will be compressed first. + svgbConverters.push_back(mifConverter); + } + iFileConverters.insert(std::make_pair(MifConvString(SVGB_BINARY_FILE_EXTENSION), svgbConverters)); + + // Initialize converters + for( MifConvFileConverterList::iterator i = iAllConverters.begin(); i != iAllConverters.end(); ++i ) + { + (*i)->Init(); + } +} + +/** + * Destructor + */ +MifConvConverterManager::~MifConvConverterManager() +{ + for( MifConvFileConverterList::iterator conv = iAllConverters.begin(); conv != iAllConverters.end(); ++conv ) + { + delete *conv; + } +} + +/** + * Adds source files to converters and converts them + */ +void MifConvConverterManager::ProcessIcons() +{ + MifConvArgumentManager* argMgr = MifConvArgumentManager::Instance(); + // Loop all the source files and append them to correct converters: + const MifConvSourceFileList& sourcefiles = argMgr->SourceFiles(); + for( MifConvSourceFileList::const_iterator i = sourcefiles.begin(); i != sourcefiles.end(); ++i ) + { + MifConvFileConverterList& converters = GetConverters(*i); + for( MifConvFileConverterList::iterator converter = converters.begin(); converter != converters.end(); ++converter ) + { + (*converter)->AppendFile(*i); + } + } + + // Run all the converters: + for( MifConvFileConverterList::iterator conv = iAllConverters.begin(); conv != iAllConverters.end(); ++conv ) + { + (*conv)->Convert(); + } +} + +/** + * + */ +void MifConvConverterManager::Cleanup(bool error) +{ + for( MifConvFileConverterList::iterator conv = iAllConverters.begin(); conv != iAllConverters.end(); ++conv ) + { + try { + (*conv)->Cleanup(error); + } + catch(...) { + // Exception should not be thrown if cleaning after error situation + if( !error ) + throw; + } + } +} + +/** + * + */ +MifConvFileConverterList& MifConvConverterManager::GetConverters(const MifConvSourceFile& source) +{ + return GetConverters(source.Filename()); +} + +/** + * + */ +MifConvFileConverterList& MifConvConverterManager::GetConverters(const MifConvString& filename) +{ + MifConvString extension(MifConvUtil::FileExtension(filename)); + FileConverterMap::iterator i = iFileConverters.find(extension); + if( i != iFileConverters.end() ) + { + return i->second; + } + + return iDummyConverterList; +}