--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/activepalette/Src/ActivePalette2Item.cpp Thu Jan 07 16:18:56 2010 +0200
@@ -0,0 +1,433 @@
+/*
+* Copyright (c) 2007 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: Active Palette Items*
+*/
+
+
+/**
+ * @file ActivePalette2Item.cpp
+ * Active Palette Items
+ */
+
+// DEFINITIONS
+#define ACTIVEPALETTE_SUPPORT_PLUGIN_CAM
+
+// INCLUDE FILES
+#include <activepalette2genericpluginint.h>
+
+#include "ActivePalette2Item.h"
+#include "ActivePalette2Model.h"
+#include "ActivePalette2Logger.h"
+#include "ActivePalette2Cfg.h"
+#include "ActivePalette2GenericPlugin.h"
+#include "CActivePalettePluginBase.h"
+
+#include <gulicon.h>
+#include <fbs.h>
+#include <bitstd.h>
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CActivePalette2IDHolder::CActivePalette2IDHolder()
+// -----------------------------------------------------------------------------
+//
+CActivePalette2IDHolder::CActivePalette2IDHolder()
+ {
+ // no implementation required
+ }
+
+// -----------------------------------------------------------------------------
+// CActivePalette2IDHolder::CActivePalette2IDHolder()
+// -----------------------------------------------------------------------------
+//
+CActivePalette2IDHolder::CActivePalette2IDHolder(TInt aItemId)
+: iItemId(aItemId)
+ {
+ // no implementation required
+ }
+
+// -----------------------------------------------------------------------------
+// CActivePalette2IDHolder::SetItemId()
+// -----------------------------------------------------------------------------
+//
+void CActivePalette2IDHolder::SetItemId(TInt aItemId)
+ {
+ iItemId = aItemId;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::NewLC()
+// -----------------------------------------------------------------------------
+//
+CActivePalette2Item * CActivePalette2Item::NewLC(TInt aItemId,
+ const TUid& aPluginUid,
+ CActivePalette2Model& aModel)
+ {
+ CActivePalette2Item * self = new (ELeave) CActivePalette2Item(
+ aItemId, aPluginUid, aModel
+ );
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::CActivePalette2Item()
+// -----------------------------------------------------------------------------
+//
+CActivePalette2Item::CActivePalette2Item(
+ TInt aItemId,
+ const TUid& aPluginUid,
+ CActivePalette2Model& aModel
+)
+: CActivePalette2IDHolder(aItemId),
+ iPluginUid(aPluginUid),
+ iModel(aModel)
+ {
+ LOGTEXT( _L( "CActivePalette2Item::CActivePalette2Item" ));
+ }
+
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CActivePalette2Item::ConstructL(void)
+ {
+ NActivePalettePluginFactory::TInstantiatePluginLFunc
+ instantiatePluginL = FindPluginFactoryL(iPluginUid);
+
+ // instantiate plugin
+ CActivePalettePluginBase* pluginObj = instantiatePluginL(iPluginUid, GetPluginCreationParams());
+ if (NULL == iPlugin || pluginObj != iPlugin)
+ {
+ // illegal plugin, plugin was supposed to callback via NotifyPluginCreated()
+ User::Leave(KErrGeneral);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::~CActivePalette2Item()
+// -----------------------------------------------------------------------------
+//
+CActivePalette2Item::~CActivePalette2Item()
+ {
+ LOGTEXT1( _L( "CActivePalette2Item::~CActivePalette2Item entered, item ID : %d" ), ItemId());
+
+ if (iPlugin)
+ {
+ LOGTEXT( _L( "... calling plugin's shutdown" ) );
+ iPlugin->Shutdown();
+ LOGTEXT( _L( "... plugin's shutdown returned" ) );
+ }
+ LOGTEXT( _L( "... deleting plugin's object" ) );
+ CBase::Delete(iPlugin);
+ LOGTEXT( _L( "... plugin's object deleted" ) );
+ iPlugin = NULL;
+
+ if (iOwnsIcon)
+ {
+ delete iIcon;
+ }
+ iIcon = NULL;
+
+ delete iTooltip;
+ iTooltip = NULL;
+
+ iDLL.Close();
+
+ LOGTEXT( _L( "CActivePalette2Item::~CActivePalette2Item left" ) );
+ }
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::FindPluginFactoryL()
+// -----------------------------------------------------------------------------
+//
+NActivePalettePluginFactory::TInstantiatePluginLFunc CActivePalette2Item::FindPluginFactoryL(const TUid aUid)
+ {
+ LOGTEXT1( _L( "CActivePalette2Item::FindPluginFactoryL entered, Uid : %d" ),
+ aUid.iUid);
+
+ NActivePalettePluginFactory::TInstantiatePluginLFunc factory = NULL;
+
+ if (aUid == TUid::Uid(KActivePalette2GenericPluginUID))
+ {
+ factory = &InstantiateGenericPluginL;
+ }
+ else
+ {
+ // lookup DLL file name
+ TFileName dllFileName;
+ TBool dllNameAssigned = EFalse;
+ // todo: implement lookup in plugin table
+
+ if (TUid::Uid(KPrintPluginUid) == aUid)
+ {
+ dllFileName = KPrintPluginDLLName;
+ dllNameAssigned = ETrue;
+ }
+ else if (TUid::Uid(KPrintIntentPluginUid) == aUid)
+ {
+ dllFileName = KPrintIntentPluginDLLName;
+ dllNameAssigned = ETrue;
+ }
+ else if( TUid::Uid( KOnlineSharingPluginUid ) == aUid )
+ {
+ dllFileName = KOnlineSharingPluginDLLName;
+ dllNameAssigned = ETrue;
+ }
+#ifdef ACTIVEPALETTE_SUPPORT_PLUGIN_CAM
+ else if (TUid::Uid( KCamAPPluginUid ) == aUid)
+ {
+ dllFileName = KCamAPluginDLLName;
+ dllNameAssigned = ETrue;
+ }
+ else
+ {
+ // lint
+ }
+#endif // ACTIVEPALETTE_SUPPORT_PLUGIN_CAM
+
+ LOGTEXT1( _L( "... DLL file name found?: %d" ), dllNameAssigned);
+ if (EFalse == dllNameAssigned)
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+ // load plug-in DLL
+ LOGTEXT( _L( "... loading DLL" ));
+ User::LeaveIfError(iDLL.Load(dllFileName));
+
+ // get factory function
+ LOGTEXT( _L( "... factory entry point lookup" ));
+ factory = (NActivePalettePluginFactory::TInstantiatePluginLFunc)
+ iDLL.Lookup(NActivePalettePluginFactory::KFactoryEntryOrdinal);
+
+ if(!factory)
+ {
+ User::Leave(KErrGeneral);
+ }
+ }
+
+ LOGTEXT1( _L( "CActivePalette2Item::FindPluginFactoryL left, factory : %p" ),
+ factory);
+
+ return factory;
+ }
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::GetPluginCreationParams()
+// -----------------------------------------------------------------------------
+//
+NActivePalettePluginFactory::TPluginCreationParams CActivePalette2Item::GetPluginCreationParams(void)
+ {
+ return NActivePalettePluginFactory::TPluginCreationParams(
+ *this,
+ iModel.ItemSize());
+ }
+
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::NotifyPluginCreated()
+// -----------------------------------------------------------------------------
+//
+void CActivePalette2Item::NotifyPluginCreated(CActivePalettePluginBase* aPlugin)
+ {
+ iPlugin = aPlugin;
+ }
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::NotifyPluginDestroyed()
+// -----------------------------------------------------------------------------
+//
+void CActivePalette2Item::NotifyPluginDestroyed(CActivePalettePluginBase* aPlugin)
+ {
+ if (iPlugin == aPlugin)
+ {
+ iPlugin = NULL;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::PluginUid()
+// -----------------------------------------------------------------------------
+//
+TUid CActivePalette2Item::PluginUid(void) const
+ {
+ return iPluginUid;
+ }
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::DoSetItemIcon()
+// -----------------------------------------------------------------------------
+//
+void CActivePalette2Item::DoSetItemIcon(CGulIcon* aIcon, TBool aOnwershipTransfer)
+ {
+ if (iOwnsIcon)
+ {
+ delete iIcon;
+ iIcon = NULL;
+ }
+
+ iIcon = aIcon;
+ iOwnsIcon = aOnwershipTransfer;
+ }
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::SetItemIcon()
+// -----------------------------------------------------------------------------
+//
+void CActivePalette2Item::SetItemIcon(CGulIcon* aIcon, TBool aOnwershipTransfer)
+ {
+ DoSetItemIcon(aIcon,aOnwershipTransfer);
+ // notify UI
+ iModel.NotifyGraphicsChanged(*this,ETrue,EFalse);
+ }
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::SetItemTooltipL()
+// -----------------------------------------------------------------------------
+//
+void CActivePalette2Item::SetItemTooltipL(const TDesC& aTooltipText)
+ {
+ // delete old
+ delete iTooltip;
+ iTooltip = NULL;
+
+ // copy text
+ iTooltip = aTooltipText.AllocL();
+ // notify UI
+ iModel.NotifyGraphicsChanged(*this,EFalse,ETrue);
+ }
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::SetItemIconAndTooltipL()
+// -----------------------------------------------------------------------------
+//
+void CActivePalette2Item::SetItemIconAndTooltipL(
+ CGulIcon* aIcon,
+ TBool aOnwershipTransfer,
+ const TDesC & aTooltipText
+)
+ {
+ // delete old
+ delete iTooltip;
+ iTooltip = NULL;
+
+ // copy icon and tooltip
+ DoSetItemIcon(aIcon, aOnwershipTransfer);
+ iTooltip = aTooltipText.AllocL();
+
+
+ // notify UI
+ iModel.NotifyGraphicsChanged(*this,ETrue,ETrue);
+ }
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::NotifyItemComplete()
+// -----------------------------------------------------------------------------
+//
+void CActivePalette2Item::NotifyItemComplete(const TDesC8& aDataDes)
+ {
+ // notify model' user
+ iModel.NotifyItemComplete(*this, KErrNone, aDataDes, KActivePaletteNoDataInt);
+ }
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::NotifyItemComplete()
+// -----------------------------------------------------------------------------
+//
+void CActivePalette2Item::NotifyItemComplete(TInt aDataInt)
+ {
+ // notify model' user
+ iModel.NotifyItemComplete(*this, KErrNone, KNullDesC8, aDataInt);
+ }
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::SendMessage()
+// -----------------------------------------------------------------------------
+//
+void CActivePalette2Item::SendMessage(TInt aMessageID, const TDesC8& aDataDes)
+ {
+ // notify model' user
+ iModel.NotifyMessage(*this, KErrNone, aMessageID, aDataDes, KActivePaletteNoDataInt);
+ }
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::SendMessage()
+// -----------------------------------------------------------------------------
+//
+void CActivePalette2Item::SendMessage(TInt aMessageID, TInt aDataInt)
+ {
+ // notify model' user
+ iModel.NotifyMessage(*this, KErrNone, aMessageID, KNullDesC8, aDataInt);
+ }
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::Icon()
+// -----------------------------------------------------------------------------
+//
+CFbsBitmap & CActivePalette2Item::Icon(void) const
+ { // icon is always valid
+ return *iIcon->Bitmap();
+ }
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::Mask()
+// -----------------------------------------------------------------------------
+//
+CFbsBitmap * CActivePalette2Item::Mask(void) const
+ {
+ return (NULL == iIcon) ? NULL : iIcon->Mask();
+ }
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::Tooltip()
+// -----------------------------------------------------------------------------
+//
+HBufC* CActivePalette2Item::Tooltip(void) const
+ {
+ return iTooltip;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::InitPluginL()
+// -----------------------------------------------------------------------------
+//
+void CActivePalette2Item::InitPluginL(const TDesC8& aCustomDataDes, TInt aCustomDataInt)
+ {
+ // do construct
+ iPlugin->ConstructL(GetPluginCreationParams(),aCustomDataDes,aCustomDataInt);
+ // validate icon
+ if (NULL == iIcon || NULL == iIcon->Bitmap())
+ {
+ User::Leave(KErrGeneral); // plugin MUST produce an icon during its ConstructL()
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CActivePalette2Item::Plugin()
+// -----------------------------------------------------------------------------
+//
+CActivePalettePluginBase& CActivePalette2Item::Plugin(void) const
+ {
+ return *iPlugin;
+ }
+
+
+// End of File