idlehomescreen/xmluicontroller/src/imagetransactionelement.cpp
branchRCL_3
changeset 26 1b758917cafc
parent 2 08c6ee43b396
--- a/idlehomescreen/xmluicontroller/src/imagetransactionelement.cpp	Tue May 25 12:29:32 2010 +0300
+++ b/idlehomescreen/xmluicontroller/src/imagetransactionelement.cpp	Wed Jun 09 09:29:04 2010 +0300
@@ -17,451 +17,119 @@
 
 
 #include "xnbitmap.h"
-#include "xnnewsticker.h"
 #include "xntype.h"
-#include "xnmenu.h"
-#include "xnmenuadapter.h"
-#include "xnuiengineappif.h"
 
-#include <imageconversion.h>
 #include <gulicon.h>
 
 #include "imagetransactionelement.h"
 #include "xmluicontrollerpanic.h"
 #include "aixmluiutils.h"
-#include "xnuiengineappif.h"
 
 using namespace AiXmlUiController;
 using namespace XnImageInterface;
-using namespace ContentAccess;
 
 namespace AiXmlUiController
-    {
-
-TBool IsNodeVisible( CXnNodeAppIf& aNode )
-    {
-    CXnProperty* propVisibility = aNode.GetPropertyL( XnPropertyNames::style::common::KVisibility );;
-
-    if( propVisibility )
-        {
-        const TDesC8& visibility = propVisibility->StringValue();
-
-        if( visibility == XnPropertyNames::style::common::visibility::KHidden )
-            {
-            return EFalse;
-            }    
-        }
-
-    CXnProperty* propDisplay = aNode.GetPropertyL( XnPropertyNames::style::common::KDisplay );
-
-    if( propDisplay )
-        {
-        const TDesC8& display = propDisplay->StringValue();
-
-        if( display == XnPropertyNames::style::common::display::KNone )
-            {
-            return EFalse;
-            }
-        }
-
-    CXnProperty* propDisabled = aNode.GetPropertyL( XnPropertyNames::common::KDisabled );
-
-    if( propDisabled )
-        {
-        const TDesC8& disabled = propDisabled->StringValue();
-
-        if( disabled == XnPropertyNames::KTrue )
-            {
-            return EFalse;
-            }
-        }
-    return ETrue;
-    }
-/**
- * Uses CImageDecoder to decode images asynchronously.
- * When decoding is done, it tries to find target and set
- * image into element. Destroys itself at end of RunL method.
- */
-class CKamikazeImageDecoder: public CActive
-    {
-public:
-    static CKamikazeImageDecoder* NewL(
-            RFile& aFile, const TDesC8& aNodeId, 
-            const TDesC8& aNodeNs, TXnUiEngineAppIf& aUiEngine);
-    ~CKamikazeImageDecoder();
-public:
-    /**
-     * Start decoding and forget instance. 
-     * Destroyes itself.
-     */
-    void DecodeLD();
-private:
-    // from CActive
-    void DoCancel();
-    void RunL();
-private:    
-    void ConstructL(RFile& aFile, const TDesC8& aNodeId,const TDesC8& aNodeNs);
-    CKamikazeImageDecoder(TXnUiEngineAppIf& aUiEngine);
-    void SetImageL();
-private:
-    /**
-     * Image decoder. Own.
-     */
-    CImageDecoder* iDecoder;
-    /**
-     * Target node id
-     */
-    HBufC8* iNodeId;
-    /**
-     * Target node namespace
-     */
-    HBufC8* iNodeNs;
-    /**
-     * Provides services to find target
-     */
-    TXnUiEngineAppIf& iUiEngine;
-    /**
-     * Icon. Own.
-     */
-    CGulIcon* iIcon;
-    };
-
-CKamikazeImageDecoder* CKamikazeImageDecoder::NewL(
-    RFile& aFile, 
-    const TDesC8& aNodeId,
-    const TDesC8& aNodeNs,
-    TXnUiEngineAppIf& aUiEngine)
-    {
-    CKamikazeImageDecoder* p = new (ELeave)CKamikazeImageDecoder(aUiEngine);
-    CleanupStack::PushL(p);
-    p->ConstructL(aFile,aNodeId,aNodeNs);
-    CleanupStack::Pop(p);
-    return p;
-    }
-
-CKamikazeImageDecoder::CKamikazeImageDecoder(TXnUiEngineAppIf& aUiEngine):
-    CActive(CActive::EPriorityStandard ), iUiEngine(aUiEngine)
-    {
-    CActiveScheduler::Add( this );
-    }
-
-CKamikazeImageDecoder::~CKamikazeImageDecoder()
-    {
-    Cancel();
-    delete iDecoder;
-    delete iNodeId;
-    delete iNodeNs;
-    delete iIcon;
-    }
+{
 
-void CKamikazeImageDecoder::ConstructL(
-    RFile& aFile, 
-    const TDesC8& aNodeId, 
-    const TDesC8& aNodeNs)
-    {
-    // Create new decoder for file
-    iDecoder = CImageDecoder::FileNewL( aFile, EView );
-    iNodeId = aNodeId.AllocL();
-    iNodeNs = aNodeNs.AllocL();
-    iIcon = CGulIcon::NewL();
-    }
-
-void CKamikazeImageDecoder::DecodeLD()
-    {
-    TFrameInfo frameInfo = iDecoder->FrameInfo(0);
-    CFbsBitmap* bitmap = new( ELeave ) CFbsBitmap;
-    iIcon->SetBitmap( bitmap );
-    
-    User::LeaveIfError( bitmap->Create( frameInfo.iOverallSizeInPixels,
-                        frameInfo.iFrameDisplayMode ) );
-    
-    CFbsBitmap* mask(0);
-    if ( frameInfo.iFlags & TFrameInfo::ETransparencyPossible )
-        {
-        mask = new( ELeave ) CFbsBitmap;
-        iIcon->SetMask( mask );
-        User::LeaveIfError( mask->Create( frameInfo.iOverallSizeInPixels,
-                                          ( ( frameInfo.iFlags & TFrameInfo::EAlphaChannel )
-                                          ? EGray256 : EGray2 ) ) );
-        }
-    
-    if(iIcon->Mask())
-        {
-        iDecoder->Convert( &iStatus, *bitmap, *mask );
-        }
-    else
-        {
-        iDecoder->Convert( &iStatus, *bitmap );
-        }
-    SetActive();
-    }
-
-void CKamikazeImageDecoder::DoCancel()
-    {
-    iDecoder->Cancel();
-    }
-
-void CKamikazeImageDecoder::SetImageL()
-    {
-     
-    // Find target
-    CXnNodeAppIf* node = iUiEngine.FindNodeByIdL(*iNodeId,*iNodeNs);
-    if(!node)
-        {
-        return;
-        }
-        
-    const TDesC8& type = node->Type()->Type();
-    
-    if ( type == XnImageInterface::MXnImageInterface::Type() )
-        {
-        MXnImageInterface* imageIntr = NULL;
-        if ( !XnComponentInterface::MakeInterfaceL( imageIntr, *node ) )
-            {
-            return;
-            }
-        // Set new bitmaps. Ownership is transferred to MXnImageInterface
-        iIcon->SetBitmapsOwnedExternally( ETrue );
-        imageIntr->SetContentBitmaps( iIcon->Bitmap(), iIcon->Mask() );
-      
-        }
-    // Menu softkey icons
-    else if ( ( ( type == KXnMenuItem || type == KXnMenu ) &&
-                IsNodeVisible( *node ) ) ||
-              type == XnPropertyNames::softkey::KNodeName )
-        {
-        CXnNodeAppIf* menuBar = node->ParentL();
-        
-        XnMenuInterface::MXnMenuInterface::TSoftKeyPosition softkeyPosition = 
-            XnMenuInterface::MXnMenuInterface::ELeft;
-                    
-        CXnProperty* property = 
-            node->GetPropertyL( XnPropertyNames::softkey::KTypeAttribute );     
-        if ( property && property->StringValue() == XnPropertyNames::softkey::type::KRight )
-            {
-            softkeyPosition = XnMenuInterface::MXnMenuInterface::ERight;
-            }
-        else if ( property && property->StringValue() == XnPropertyNames::softkey::type::KLeft )
-            {
-            softkeyPosition = XnMenuInterface::MXnMenuInterface::ELeft;
-            }
-        else  // Image can be published only to RSK or LSK
-            {
-            return;
-            }
-            
-        XnMenuInterface::MXnMenuInterface* menuIf = NULL;
-        
-        XnComponentInterface::MakeInterfaceL( menuIf, *menuBar );
-        if ( menuIf )
-            {
-            // Use black mask and preserver aspect ratio
-           
-            menuIf->SetSoftKeyImageL( iIcon->Bitmap(), 
-                                          iIcon->Mask(), 
-                                          softkeyPosition, 
-                                          node,
-                                          ETrue, 
-                                          ETrue ); 
-            iIcon->SetBitmapsOwnedExternally( ETrue );
-            }
-        if( menuBar )
-            {
-            iUiEngine.RefreshMenuL();
-            }
-        }
-        
-    }
-
-void CKamikazeImageDecoder::RunL()
-    {
-    CleanupStack::PushL(this);
-    if(iStatus == KErrNone)
-        {
-        SetImageL();
-        iUiEngine.RenderUIL();
-        }
-    CleanupStack::PopAndDestroy(this);
-    }
-     
 // ======== MEMBER FUNCTIONS ========
 
 CImageTransactionElement::CImageTransactionElement(
-                                AiUtility::CContentPriorityMap& aContentPriorityMap)
+    AiUtility::CContentPriorityMap& aContentPriorityMap)
     : CTransactionElement(aContentPriorityMap)
     {
     }
 
 CImageTransactionElement* CImageTransactionElement::NewL(
-                                AiUtility::CContentPriorityMap& aContentPriorityMap)
+    AiUtility::CContentPriorityMap& aContentPriorityMap)
     {
-    CImageTransactionElement* self = new( ELeave ) CImageTransactionElement(
-                                                            aContentPriorityMap );
+    CImageTransactionElement* self = 
+        new( ELeave ) CImageTransactionElement( aContentPriorityMap );
+                                                            
     return self;
     }
 
 CImageTransactionElement::~CImageTransactionElement()
     {
-    delete iNewIcon;
-    delete iImageDecoder;
+    delete iIcon;    
     }
 
 void CImageTransactionElement::InitializeL( CXnNodeAppIf& aTarget,
-                                            CGulIcon* aIcon )
+    CGulIcon* aIcon )
     {
-    CheckTypeL( aTarget );
-    
     LeaveIfNull( aIcon, KErrArgument );
     
+    CheckTypeL( aTarget );
     SetTarget( aTarget );
-    iNewIcon = aIcon;
+
+    iIcon = aIcon;
+    iFilename = KNullDesC();
     }
 
 void CImageTransactionElement::InitializeL( CXnNodeAppIf& aTarget,
-                                            RFile& aFile )
-    {
-    CheckTypeL( aTarget );
-   
-    const TDesC8* nodeId = &KNullDesC8;
+    RFile& aFile )
+    {    
+    CheckTypeL( aTarget );   
+    SetTarget( aTarget );
+
+    iFilename = KNullDesC();
     
-    CXnProperty* property = aTarget.GetPropertyL(XnPropertyNames::common::KId);
-    if(property)
-        {
-        nodeId = &property->StringValue();
-        }
-    if ( iImageDecoder )
-        {
-        delete iImageDecoder;
-        iImageDecoder = NULL;
-        }
-    iImageDecoder = CKamikazeImageDecoder::NewL(
-                        aFile,*nodeId,aTarget.Namespace(),*aTarget.UiEngineL()); 
+    aFile.FullName( iFilename );
     
-    SetTarget( aTarget );
+    delete iIcon;
+    iIcon = NULL;    
     }
 
-
 void CImageTransactionElement::UpdateDataL()
-    {
-    if ( iImageDecoder )
+    {           
+    const TDesC8& type( Target().Type()->Type() );
+    
+    if ( type == XnImageInterface::MXnImageInterface::Type() )
         {
-        iImageDecoder->DecodeLD();
-        iImageDecoder = NULL; // self destroy
-        }
-    else
-        {
-        __ASSERT_DEBUG( iNewIcon, Panic( EBitmapNull ) );
-    
-        const TDesC8& type = LeaveIfNull( Target().Type(), KErrNotSupported )->Type();
+        MXnImageInterface* image( NULL );
+        XnComponentInterface::MakeInterfaceL( image, Target() );
         
-        if ( type == XnImageInterface::MXnImageInterface::Type() )
+        LeaveIfNull( image, KErrNotSupported );
+
+        if ( iIcon )
             {
-            MXnImageInterface* imageIntr = NULL;
-            if ( !XnComponentInterface::MakeInterfaceL( imageIntr, Target() ) )
-                {
-                User::Leave( KErrNotSupported );
-                }
             // Set new bitmaps. Ownership is transferred to MXnImageInterface
-            iNewIcon->SetBitmapsOwnedExternally( ETrue );
-            imageIntr->SetContentBitmaps( iNewIcon->Bitmap(), iNewIcon->Mask() );
-            }
-        // Menu softkey icons
-        else if ( ( ( type == KXnMenuItem || type == KXnMenu ) &&
-                    IsNodeVisible( Target() ) ) ||
-                  type == XnPropertyNames::softkey::KNodeName )
-            {
-            CXnNodeAppIf* menuBar = Target().ParentL();
+            iIcon->SetBitmapsOwnedExternally( ETrue );
             
-            XnMenuInterface::MXnMenuInterface::TSoftKeyPosition softkeyPosition = 
-                XnMenuInterface::MXnMenuInterface::ELeft;
-                        
-            CXnProperty* property = 
-                Target().GetPropertyL( XnPropertyNames::softkey::KTypeAttribute );     
-            if ( property && property->StringValue() == XnPropertyNames::softkey::type::KRight )
-                {
-                softkeyPosition = XnMenuInterface::MXnMenuInterface::ERight;
-                }
-            else if ( property && property->StringValue() == XnPropertyNames::softkey::type::KLeft )
-                {
-                softkeyPosition = XnMenuInterface::MXnMenuInterface::ELeft;
-                }
-            else  // Image can be published only to RSK or LSK
-                {
-                delete iNewIcon;
-                iNewIcon = NULL;            
-                User::Leave( KErrNotSupported );
-                }
-                
-            XnMenuInterface::MXnMenuInterface* menuIf = NULL;
-            
-            XnComponentInterface::MakeInterfaceL( menuIf, *menuBar );
-            if ( menuIf )
-                {
-                // Use black mask and preserver aspect ratio
-                TRAPD(err,
-                    menuIf->SetSoftKeyImageL( iNewIcon->Bitmap(), 
-                                              iNewIcon->Mask(), 
-                                              softkeyPosition, 
-                                              &Target(),
-                                              ETrue, 
-                                              ETrue ) 
-                );
-                // Menuinterface takes ownership
-                if ( err == KErrNone )
-                    {
-                    iNewIcon->SetBitmapsOwnedExternally( ETrue );
-                    }
-                if( menuBar )
-                    {
-                    menuBar->UiEngineL()->RefreshMenuL();
-                    }
-                }
+            image->SetContentBitmaps( iIcon->Bitmap(), iIcon->Mask() );
             }
-        else
+        else if ( iFilename != KNullDesC() )
             {
-            User::Leave( KErrNotSupported );
-            }
+            image->SetContentBitmaps( iFilename );
+            }        
         }
     
-    delete iNewIcon;
-    iNewIcon = NULL;
-    
     UpdateContentPriorityL();
     }
 
 void CImageTransactionElement::Reset()
     {
-    if ( iImageDecoder )
-        {
-        delete iImageDecoder;
-        iImageDecoder = NULL;
-        }
-    
     CTransactionElement::Reset();
 
-    delete iNewIcon;
-    iNewIcon = NULL;
+    iFilename = KNullDesC();    
+    
+    delete iIcon;
+    iIcon = NULL;    
     }
 
 TBool CImageTransactionElement::IsSupported( CXnNodeAppIf& aTarget )
     {
     // Get type info
-    CXnType* typeInfo = aTarget.Type();
+    CXnType* typeInfo( aTarget.Type() );
     
     if ( !typeInfo )
         {
         return EFalse;
         }
     
-    const TDesC8& type = typeInfo->Type();
+    const TDesC8& type( typeInfo->Type() );
     
     // image element and newsticker supported
-    return ( type == XnImageInterface::MXnImageInterface::Type() ||
-             type == XnNewstickerInterface::MXnNewstickerInterface::Type() ||
-             type == XnMenuInterface::MXnMenuInterface::Type() ||
-             type == KXnMenuItem ||
-             type == KXnMenu ||
-             type == XnPropertyNames::softkey::KNodeName );
+    return ( type == XnImageInterface::MXnImageInterface::Type() );
     }
 
 void CImageTransactionElement::CheckTypeL( CXnNodeAppIf& aTarget )
@@ -472,3 +140,5 @@
         }
     }
 } // ns
+
+// End of file