imageeditorengine/ImageEditorUtils/src/PluginInfo.cpp
author Mikael Laine <mikael.laine@ixonos.com>
Fri, 29 Jan 2010 13:53:17 +0200
changeset 1 edfc90759b9f
permissions -rw-r--r--
Committing the Image Editor package under the Eclipse Public License

/*
* Copyright (c) 2010 Ixonos Plc.
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the "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:
* Ixonos Plc
*
* Description:  
* Utils class handling the information about the plugins.
*
*/



#include <fbs.h>

#include "PluginInfo.h"
#include "EditorVersion.h"

//=============================================================================
EXPORT_C TInt CPluginInfo::ComparePluginInfo (
    const CPluginInfo & aItem1,
    const CPluginInfo & aItem2
    )
{
    if (aItem1.iPluginRID < aItem2.iPluginRID)
    {
        return -1;
    }
    else if (aItem1.iPluginRID > aItem2.iPluginRID)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

//=============================================================================
EXPORT_C TInt CPluginInfo::ComparePluginOrder(
    const CPluginInfo & aItem1,
    const CPluginInfo & aItem2
    )
{
    if (aItem1.iPluginDisplayOrder < aItem2.iPluginDisplayOrder)
    {
        return -1;
    }
    else if (aItem1.iPluginDisplayOrder > aItem2.iPluginDisplayOrder)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

//=============================================================================
EXPORT_C CPluginInfo * CPluginInfo::NewL ()
{
    CPluginInfo * self = CPluginInfo::NewLC();
    CleanupStack::Pop(); // self
    return self;
}

//=============================================================================
EXPORT_C CPluginInfo * CPluginInfo::NewLC ()
{
    CPluginInfo * self = new (ELeave) CPluginInfo;
    CleanupStack::PushL(self);
    self->ConstructL();
    return self;
}

//=============================================================================
EXPORT_C CPluginInfo::~CPluginInfo ()
{
    delete iPluginDllName;
    delete iPluginName;
    delete iIconFileName;
    delete iIcon;
    delete iMask;

    if (iParams)
    {
        iParams->Reset();
    }
    delete iParams;

    if (iSk1Cmds)
    {
        iSk1Cmds->Reset();
    }
    delete iSk1Cmds;

    if (iSk1Texts)
    {
        iSk1Texts->Reset();
    }
    delete iSk1Texts;

    if (iSk2Cmds)
    {
        iSk2Cmds->Reset();
    }
    delete iSk2Cmds;

    if (iSk2Texts)
    {
        iSk2Texts->Reset();
    }
    delete iSk2Texts;

    if (iMSKCmds)
    {
        iMSKCmds->Reset();
    }
    delete iMSKCmds;

    if (iMSKTexts)
    {
        iMSKTexts->Reset();
    }
    delete iMSKTexts;
    if (iMenuItems)
    {
        iMenuItems->Reset();
    }
    delete iMenuItems;
}

//=============================================================================
EXPORT_C HBufC *& CPluginInfo::PluginDll ()
{
    return iPluginDllName;
}

//=============================================================================
EXPORT_C const TDesC & CPluginInfo::PluginDll () const
{
    return *iPluginDllName;
}

//=============================================================================
EXPORT_C TUid & CPluginInfo::Uid2 ()
{
    return iUID2;
}

//=============================================================================
EXPORT_C const TUid & CPluginInfo::Uid2 () const
{
    return iUID2;
}

//=============================================================================
EXPORT_C TUid & CPluginInfo::Uid3 ()
{
    return iUID3;
}

//=============================================================================
EXPORT_C const TUid & CPluginInfo::Uid3 () const
{
    return iUID3;
}

//=============================================================================
EXPORT_C TInt & CPluginInfo::PluginUiType()
{
    return iPluginUiType;
}

//=============================================================================
EXPORT_C const TInt & CPluginInfo::PluginUiType() const
{
    return iPluginUiType;
}

//=============================================================================
EXPORT_C TInt & CPluginInfo::PluginFilterType()
{
    return iPluginFilterType;
}

//=============================================================================
EXPORT_C const TInt & CPluginInfo::PluginFilterType() const
{
    return iPluginFilterType;
}

//=============================================================================
EXPORT_C TInt & CPluginInfo::PluginScope()
{
    return iScope;
}

//=============================================================================
EXPORT_C const TInt & CPluginInfo::PluginScope() const
{
    return iScope;
}

//=============================================================================
EXPORT_C TInt & CPluginInfo::PluginDisplayOrder()
{
    return iPluginDisplayOrder;
}

//=============================================================================
EXPORT_C const TInt & CPluginInfo::PluginDisplayOrder() const
{
    return iPluginDisplayOrder;
}

//=============================================================================
EXPORT_C TInt & CPluginInfo::PluginRID()
{
    return iPluginRID;
}

//=============================================================================
EXPORT_C const TInt & CPluginInfo::PluginRID() const
{
    return iPluginRID;
}

//=============================================================================
EXPORT_C HBufC *& CPluginInfo::PluginName()
{
    return iPluginName;
}

//=============================================================================
EXPORT_C const TDesC & CPluginInfo::PluginName() const
{
    return *iPluginName;
}
//=============================================================================
EXPORT_C HBufC *& CPluginInfo::IconFile()
{
    return iIconFileName;
}

//=============================================================================
EXPORT_C const TDesC & CPluginInfo::IconFile() const
{
    return *iIconFileName;
}

//=============================================================================
EXPORT_C CFbsBitmap *& CPluginInfo::Icon()
{
    return iIcon;
}

//=============================================================================
EXPORT_C const CFbsBitmap * CPluginInfo::Icon() const
{
    return iIcon;
}

//=============================================================================
EXPORT_C CFbsBitmap *& CPluginInfo::Mask()
{
    return iMask;
}

//=============================================================================
EXPORT_C const CFbsBitmap * CPluginInfo::Mask() const
{
    return iMask;
}

//=============================================================================
EXPORT_C CDesCArray & CPluginInfo::Parameters()
{
	return *iParams;
}

//=============================================================================
EXPORT_C const CDesCArray & CPluginInfo::Parameters() const
{
	return *iParams;
}

//=============================================================================
EXPORT_C CArrayFix<TInt> & CPluginInfo::Sk1Cmds()
{
    return *iSk1Cmds;
}

//=============================================================================
EXPORT_C const CArrayFix<TInt> & CPluginInfo::Sk1Cmds() const
{
    return *iSk1Cmds;
}

//=============================================================================
EXPORT_C CDesCArray & CPluginInfo::Sk1Texts()
{
    return *iSk1Texts;
}

//=============================================================================
EXPORT_C const CDesCArray & CPluginInfo::Sk1Texts() const
{
    return *iSk1Texts;
}

//=============================================================================
EXPORT_C CArrayFix<TInt> & CPluginInfo::Sk2Cmds()
{
    return *iSk2Cmds;
}

//=============================================================================
EXPORT_C const CArrayFix<TInt> & CPluginInfo::Sk2Cmds() const
{
    return *iSk2Cmds;
}

//=============================================================================
EXPORT_C CDesCArray & CPluginInfo::Sk2Texts()
{
    return *iSk2Texts;
}

//=============================================================================
EXPORT_C const CDesCArray & CPluginInfo::Sk2Texts() const
{
    return *iSk2Texts;
}

//=============================================================================
EXPORT_C CArrayFix<TInt> & CPluginInfo::MSKCmds()
{
    return *iMSKCmds;
}

//=============================================================================
EXPORT_C const CArrayFix<TInt> & CPluginInfo::MSKCmds() const
{
    return *iMSKCmds;
}

//=============================================================================
EXPORT_C CDesCArray & CPluginInfo::MSKTexts()
{
    return *iMSKTexts;
}

//=============================================================================
EXPORT_C const CDesCArray & CPluginInfo::MSKTexts() const
{
    return *iMSKTexts;
}
//=============================================================================
EXPORT_C CMenuItemArray & CPluginInfo::MenuItems()
{
    return *iMenuItems;
}

//=============================================================================
EXPORT_C const CMenuItemArray & CPluginInfo::MenuItems() const
{
    return *iMenuItems;
}

//=============================================================================
EXPORT_C void CPluginInfo::ExternalizeL ( RWriteStream& aStream ) const
{
    TInt i = 0;

    // Current UI language
    TLanguage lang = User::Language();
    aStream.WriteInt32L (lang);

    // Editor version (from EditorVersion.h)
    aStream.WriteInt32L (my_version_major); 
    aStream.WriteInt32L (my_version_minor);
    aStream.WriteInt32L (my_version_build);

    // HBufC * iPluginDllName
    if ( iPluginDllName )
        {
        TPtr pluginDllNamePtr = iPluginDllName->Des();
        aStream.WriteInt32L (pluginDllNamePtr.Length());
        aStream << pluginDllNamePtr;            
        }
	
    // TUid iUID2
    aStream << iUID2;

    // TUid iUID3
    aStream << iUID3;

    // TInt iPluginUiType
    aStream.WriteInt32L( iPluginUiType );

    // TInt iPluginFilterType
    aStream.WriteInt32L( iPluginFilterType );

    // TInt iScope
    aStream.WriteInt32L( iScope );

    //TInt iPluginDisplayOrder
    aStream.WriteInt32L( iPluginDisplayOrder );

    // TInt iPluginRID
    aStream.WriteInt32L( iPluginRID );

    // HBufC * iPluginName
    if ( iPluginName )
        {
        TPtr pluginNamePtr = iPluginName->Des();
        aStream.WriteInt32L (pluginNamePtr.Length());
        aStream << pluginNamePtr;            
        }

    // HBufC * iIconFileName
    if ( iIconFileName )
        {
        TPtr iconFileNamePtr = iIconFileName->Des();
        aStream.WriteInt32L (iconFileNamePtr.Length());
        aStream << iconFileNamePtr;            
        }
	
    // CDesCArray * iParams
    TInt paramCount = iParams->MdcaCount();
    aStream.WriteInt32L( paramCount );
    for ( i=0; i<paramCount; i++ )
    {
        TPtrC des = iParams->MdcaPoint(i);
        aStream.WriteInt32L( des.Length() );
        aStream << des;
    }

    // CArrayFix<TInt> * iSk1Cmds
    TInt sk1CmdCount = iSk1Cmds->Count();
    aStream.WriteInt32L( sk1CmdCount );
    for ( i=0; i<sk1CmdCount; i++ )
    {
        aStream.WriteInt32L( iSk1Cmds->At(i) );
    }

    // CDesCArray * iSk1Texts
    TInt sk1TextCount = iSk1Texts->MdcaCount();
    aStream.WriteInt32L( sk1TextCount );
    for ( i=0; i<sk1TextCount; i++ )
    {
        TPtrC des = iSk1Texts->MdcaPoint(i);
        aStream.WriteInt32L( des.Length() );
        aStream << des;
    }

    // CArrayFix<TInt> * iSk2Cmds
    TInt sk2CmdCount = iSk2Cmds->Count();
    aStream.WriteInt32L( sk2CmdCount );
    for ( i=0; i<sk2CmdCount; i++ )
    {
        aStream.WriteInt32L( iSk2Cmds->At(i) );
    }

    // CDesCArray * iSk2Texts
    TInt sk2TextCount = iSk2Texts->MdcaCount();
    aStream.WriteInt32L( sk2TextCount );
    for ( i=0; i<sk2TextCount; i++ )
    {
        TPtrC des = iSk2Texts->MdcaPoint(i);
        aStream.WriteInt32L( des.Length() );
        aStream << des;
    }
    
    // CArrayFix<TInt> * iMSKCmds
    TInt mskCmdCount = iMSKCmds->Count();
    aStream.WriteInt32L( mskCmdCount );
    for ( i=0; i<mskCmdCount; i++ )
    {
        aStream.WriteInt32L( iMSKCmds->At(i) );
    }

    // CDesCArray * iMSKTexts
    TInt mskTextCount = iMSKTexts->MdcaCount();
    aStream.WriteInt32L( mskTextCount );
    for ( i=0; i<mskTextCount; i++ )
    {
        TPtrC des = iMSKTexts->MdcaPoint(i);
        aStream.WriteInt32L( des.Length() );
        aStream << des;
    }
    
    // CMenuItemArray * iMenuItems
    TInt menuItemCount = iMenuItems->Count();
    aStream.WriteInt32L( menuItemCount );
    for ( i=0; i<menuItemCount; i++ )
    {
        CEikMenuPaneItem::SData& item = iMenuItems->At(i);

        // TInt iCommandId;
        aStream.WriteInt32L( item.iCommandId );
        // TInt iCascadeId;
        aStream.WriteInt32L( item.iCascadeId );
        // TInt iFlags;
        aStream.WriteInt32L( item.iFlags );
        // TBuf<ENominalTextLength> iText;
        aStream << item.iText;
        // TBuf<1> iExtraText;
        aStream << item.iText;
    }
}

//=============================================================================
EXPORT_C void CPluginInfo::InternalizeL ( RReadStream& aStream )
{
    TInt i = 0;

    // Check that the current UI language is the same as stored
    // in the ini file. If not, reject the stored information.
    TLanguage storedLang = (TLanguage) aStream.ReadInt32L();
    if (storedLang != User::Language())
    {
        User::Leave (KErrCorrupt);
    }

    // If the editor version has changed, also reject the stored data.
    TInt major = aStream.ReadInt32L(); 
    TInt minor = aStream.ReadInt32L();
    TInt build = aStream.ReadInt32L();
    if (major != my_version_major ||
        minor != my_version_minor ||
        build != my_version_build 
        )
    {
        User::Leave (KErrCorrupt);
    }

    // HBufC * iPluginDllName
    TInt pluginDllNameLength = aStream.ReadInt32L();
    iPluginDllName = HBufC::NewL(pluginDllNameLength);
    TPtr pluginDllNamePtr = iPluginDllName->Des();
    aStream >> pluginDllNamePtr;

    // TUid iUID2
    aStream >> iUID2;

    // TUid iUID3
    aStream >> iUID3;

    // TInt iPluginUiType
    iPluginUiType = aStream.ReadInt32L();

    // TInt iPluginFilterType
    iPluginFilterType = aStream.ReadInt32L();

    // TInt iScope
    iScope = aStream.ReadInt32L();

    // TInt iPluginDisplayOrder
    iPluginDisplayOrder = aStream.ReadInt32L();

    // TInt iPluginRID
    iPluginRID = aStream.ReadInt32L();

    // HBufC * iPluginName
    TInt pluginNameLength = aStream.ReadInt32L();
    iPluginName = HBufC::NewL(pluginNameLength);
    TPtr pluginNamePtr = iPluginName->Des();
    aStream >> pluginNamePtr;

    // HBufC * iIconFileName
    TInt iconFileNameLength = aStream.ReadInt32L();
    iIconFileName = HBufC::NewL(iconFileNameLength);
    TPtr iconFileNamePtr = iIconFileName->Des();
    aStream >> iconFileNamePtr;

    // CDesCArray *	iParams
    TInt paramCount = aStream.ReadInt32L();
    for ( i=0; i<paramCount; i++ )
    {
        TInt paramLength = aStream.ReadInt32L();
        HBufC* paramBuf = HBufC::NewLC( paramLength );
        TPtr paramPtr = paramBuf->Des();
        aStream >> paramPtr;
        iParams->AppendL( paramPtr );
        CleanupStack::PopAndDestroy( paramBuf );
    }

    // CArrayFix<TInt> * iSk1Cmds;
    TInt sk1CmdCount = aStream.ReadInt32L();
    for ( i=0; i<sk1CmdCount; i++ )
    {
        TInt cmd = aStream.ReadInt32L();
        iSk1Cmds->AppendL( cmd );
    }

    // CDesCArray * iSk1Texts;
    TInt sk1TextCount = aStream.ReadInt32L();
    for ( i=0; i<sk1TextCount; i++ )
    {
        TInt sk1TextLength = aStream.ReadInt32L();
        HBufC* sk1TextBuf = HBufC::NewLC( sk1TextLength );
        TPtr sk1TextPtr = sk1TextBuf->Des();
        aStream >> sk1TextPtr;
        iSk1Texts->AppendL( sk1TextPtr );
        CleanupStack::PopAndDestroy( sk1TextBuf );
    }

    // CArrayFix<TInt> * iSk2Cmds;
    TInt sk2CmdCount = aStream.ReadInt32L();
    for ( i=0; i<sk2CmdCount; i++ )
    {
        TInt cmd = aStream.ReadInt32L();
        iSk2Cmds->AppendL( cmd );
    }

    // CDesCArray * iSk2Texts;
    TInt sk2TextCount = aStream.ReadInt32L();
    for ( i=0; i<sk2TextCount; i++ )
    {
        TInt sk2TextLength = aStream.ReadInt32L();
        HBufC* sk2TextBuf = HBufC::NewLC( sk2TextLength );
        TPtr sk2TextPtr = sk2TextBuf->Des();
        aStream >> sk2TextPtr;
        iSk2Texts->AppendL( sk2TextPtr );
        CleanupStack::PopAndDestroy( sk2TextBuf );
    }
    
    // CArrayFix<TInt> * iMSKCmds;
    TInt mskCmdCount = aStream.ReadInt32L();
    for ( i=0; i<mskCmdCount; i++ )
    {
        TInt cmd = aStream.ReadInt32L();
        iMSKCmds->AppendL( cmd );
    }

    // CDesCArray * iMSKTexts;
    TInt mskTextCount = aStream.ReadInt32L();
    for ( i=0; i<mskTextCount; i++ )
    {
        TInt mskTextLength = aStream.ReadInt32L();
        HBufC* mskTextBuf = HBufC::NewLC( mskTextLength );
        TPtr mskTextPtr = mskTextBuf->Des();
        aStream >> mskTextPtr;
        iMSKTexts->AppendL( mskTextPtr );
        CleanupStack::PopAndDestroy( mskTextBuf );
    }
    
    // CMenuItemArray * iMenuItems;
    TInt menuItemCount = aStream.ReadInt32L();
    for ( i=0; i<menuItemCount; i++ )
    {
        CEikMenuPaneItem::SData item;

        // TInt iCommandId;
        item.iCommandId = aStream.ReadInt32L();
        // TInt iCascadeId;
        item.iCascadeId = aStream.ReadInt32L();
        // TInt iFlags;
        item.iFlags = aStream.ReadInt32L();
        // TBuf<ENominalTextLength> iText;
        aStream >> item.iText;
        // TBuf<1> iExtraText;
        aStream >> item.iText;

        iMenuItems->AppendL( item );
    }
}

//=============================================================================
void CPluginInfo::ConstructL()
{
	iParams = new (ELeave) CDesCArraySeg(16);
	iSk1Cmds= new (ELeave) CArrayFixSeg<TInt>(4);
	iSk1Texts = new (ELeave) CDesCArraySeg(4);
	iSk2Cmds= new (ELeave) CArrayFixSeg<TInt>(4);
	iSk2Texts = new (ELeave) CDesCArraySeg(4);
	iMSKCmds= new (ELeave) CArrayFixSeg<TInt>(4);
	iMSKTexts = new (ELeave) CDesCArraySeg(4);
    iMenuItems = new (ELeave) CMenuItemArray (8);
}

//=============================================================================
CPluginInfo::CPluginInfo ()
{

}

// End of File