imageeditorengine/ImageEditorUtils/src/PluginInfo.cpp
changeset 1 edfc90759b9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imageeditorengine/ImageEditorUtils/src/PluginInfo.cpp	Fri Jan 29 13:53:17 2010 +0200
@@ -0,0 +1,698 @@
+/*
+* 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