webengine/wmlengine/src/css/include/CSSImageList.h
changeset 0 dd21522fd290
child 37 cb62a4f66ebe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/wmlengine/src/css/include/CSSImageList.h	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,417 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:  Hold different CSS images
+*
+*/
+
+
+#ifndef CCSSImageList_H
+#define CCSSImageList_H
+
+//  INCLUDES
+#include "BrsrStatusCodes.h"
+#include "nw_text_ucs2.h"
+#include "nw_image_abstractimage.h"
+#include "nw_image_virtualimage.h"
+#include "nw_image_epoc32simpleimage.h"
+#include <nwx_http_header.h>
+#include "nw_css_processor.h"
+#include <e32base.h>
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+class CVirtualNodeImageEntry;
+
+typedef CArrayPtrFlat<CVirtualNodeImageEntry>	 CVirtualNodeImageList;
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+
+/**
+*  This class contains information about virtual node-image pairs associated
+*  with an image list entry
+*  @lib css.lib
+*  @since 2.1
+*/
+class CVirtualNodeImageEntry : public CBase
+  {
+  public:
+
+   /**
+    * Two-phased constructor.
+    * @return CVirtualNodeImageEntry*
+	  */
+    static CVirtualNodeImageEntry* NewL();
+
+    /**
+    * Two-phased constructor.
+    * @return CVirtualNodeImageEntry*
+	  */
+    static CVirtualNodeImageEntry* NewLC();
+
+    /**
+    * Destructor.
+    */
+    virtual ~CVirtualNodeImageEntry();
+
+    /**
+    * This method add a new virtual image 
+    * @since 2.1
+    * @param aVirtualImage: virtual image
+    * @return void
+    */
+    void AddVirtualImage( NW_Image_Virtual_t* aVirtualImage ) { iVirtualImage = aVirtualImage; }
+
+    /**
+    * This method add a new virtual node 
+    * @since 2.1
+    * @param aVirtualNode: virtual node associated with a virtual image
+    * @return void
+    */
+    void AddVirtualNode( NW_DOM_ElementNode_t* aVirtualNode ) { iVirtualNode = aVirtualNode; }
+
+    /**
+    * This method sets the ownership of the virtual image
+    * @since 2.1
+    * @return void
+    */
+    void TakeVirtualImageOwnership( void ) { iImageOwnership = ETrue; }
+
+    /**
+    * This method removes the ownership of the virtual image
+    * @since 2.1
+    * @param aUrl: url of the image
+    * @return void
+    */
+    void RemoveVirtualImageOwnership( void ) { iImageOwnership = EFalse; }
+
+    /**
+    * This method returns the virtual image
+    * @since 2.1
+    * @return NW_Image_Virtual_t* virtual image
+    */
+    NW_Image_Virtual_t* VirtualImage( void ) { return iVirtualImage; }
+
+    /**
+    * This method returns with virtual node
+    * @since 2.1
+    * @return NW_DOM_ElementNode_t* virtual node
+    */
+    NW_DOM_ElementNode_t* VirtulaNode( void ) { return iVirtualNode; }
+
+    /**
+    * This method returns the value of the ownership
+    * @since 2.1
+    * @return TBool: ETrue if the image is owned by the entry
+    */
+    TBool VirtualImageOwnership( void ) { return iImageOwnership; }
+
+  private: // New functions
+
+    /**
+    * C++ default constructor.
+    */
+    CVirtualNodeImageEntry();
+
+    /**
+    * By default Symbian 2nd phase constructor is private.
+    */
+    void ConstructL();
+
+  private:
+    // associated virtual image. 
+    // "ownership" member indicates
+    // the imageOwnership of the image
+    NW_Image_Virtual_t* iVirtualImage;
+    // associated virtual DOM node. 
+    // not owned
+    NW_DOM_ElementNode_t* iVirtualNode;
+    TBool iImageOwnership;
+  };
+
+
+/**
+*  This class contains information about an image entry in the list
+*  @lib css.lib
+*  @since 2.1
+*/
+class CCSSImageListEntry : public CBase
+{
+public:
+
+   /**
+    * Two-phased constructor.
+    * @return CCSSImageListEntry*
+	  */
+    static CCSSImageListEntry* NewL( NW_Text_t* aUrl, TBool aListItem );
+
+    /**
+    * Two-phased constructor.
+    * @return CCSSImageListEntry*
+	  */
+    static CCSSImageListEntry* NewLC( NW_Text_t* aUrl, TBool aListItem );
+
+    /**
+    * Destructor.
+    */
+    virtual ~CCSSImageListEntry();
+
+  public: // set-get functions
+    
+    /**
+    * This method sets the image and its content type
+    * @since 2.1
+    * @param aImage: image object
+    * @param aContentType: content type string
+    * @return void
+    */
+    void SetAbstractImage( NW_Image_AbstractImage_t* aImage, NW_Http_ContentTypeString_t aContentType );
+
+    /**
+    * This method returns the listItem member variable
+    * @since 2.1
+    * @return TBool EFalse if the image is background image
+    */
+    TBool ListItem( ) { return iListItem; }
+
+    /**
+    * This method returns the "main" image which is the base of every
+    * virtual images in the list
+    * @since 2.1
+    * @return NW_Image_AbstractImage_t* main image
+    */
+    NW_Image_AbstractImage_t* AbstractImage( ) { return iImage; }
+
+    /**
+    * This method returns the URL of the image. It is also the ID of the list.
+    * @since 2.1
+    * @return NW_Text_t* url
+    */
+    NW_Text_t* ImageUrl( ) { return iUrl; }
+
+    /**
+    * This method returns the content type of the image
+    * @since 2.1
+    * @return NW_Http_ContentTypeString_t content type
+    */
+    NW_Http_ContentTypeString_t ImageContentType( ) { return iContentTypeString; }
+    
+    /**
+    * This method returns the virtual node-image list associated with this entry
+    * @since 2.1
+    * @return CVirtualNodeImageList* virtual node-image pair list
+    */
+    CVirtualNodeImageList* VirtualNodeImageList() { return iVirtualNodeImageList; }
+
+    /**
+    * This method appends a new virtual-node pair to the list
+    * @since 2.1
+    * @param aVirtualImageNodeEntry: virtual image-node pair entry
+    * @return void
+    */
+    void AddVirtualImageNodeEntryL( CVirtualNodeImageEntry* aVirtualImageNodeEntry ) 
+              { iVirtualNodeImageList->AppendL( aVirtualImageNodeEntry ); }
+
+  private: // New functions
+
+    /**
+    * C++ default constructor.
+    */
+    CCSSImageListEntry( NW_Text_t* aUrl, TBool aListItem );
+
+    /**
+    * By default Symbian 2nd phase constructor is private.
+    */
+    void ConstructL();
+
+  private: // members    
+    
+    // url of Image. owned
+  NW_Text_t* iUrl;
+    // content type of image. owned
+    NW_Http_ContentTypeString_t iContentTypeString;
+    // either background or list image
+    TBool iListItem;
+    // "main" image. owned
+  NW_Image_AbstractImage_t* iImage;
+    // list of virtual node-image pairs
+    CVirtualNodeImageList* iVirtualNodeImageList;
+};
+// CLASS DECLARATION
+
+/**
+*  This class has different CSS images that can be used by the document
+*  @lib css.lib
+*  @since 2.1
+*/
+class CCSSImageList : public CBase
+{
+  public:  // Constructors and destructor
+        
+   /**
+    * Two-phased constructor.
+    * @return CCSSHandler*
+	  */
+    static CCSSImageList* NewL( NW_CSS_Processor_t& aProcessor );
+
+    /**
+    * Destructor.
+    */
+    virtual ~CCSSImageList();
+
+  public: // New functions
+        
+    /**
+    * This method creates a new image entry for a given URL
+    * @since 2.1
+    * @param aUrl: url of the image
+    * @param aImageNode: associated DOM node
+    * @param aListItem: image can be either list item or background image
+    * @return void
+    */
+    void CreateImageEntryL( NW_Text_t* aUrl, NW_DOM_ElementNode_t* aImageNode, TBool aListItem );
+
+    /**
+    * This method add a new virtual node for a given URL
+    * @since 2.1
+    * @param aUrl: url of the image
+    * @param aVirtualImageNode: virtual node
+    * @return void
+    */
+    NW_Image_AbstractImage_t* AddVirtualNodeToImageEntryL( NW_Text_t* aUrl, NW_DOM_ElementNode_t* aVirtualImageNode );
+
+    /**
+    * This method sets the image for a given URL
+    * @since 2.1
+    * @param aUrl: url of the image
+    * @param aData: image data
+    * @param aLength: image length
+    * @param aContentTypeString: content type of image
+    * @return image object 
+    */
+    NW_Image_AbstractImage_t* SetImageL(NW_Text_t* aUrl, NW_Byte* aData, NW_Uint32 aLength, 
+              NW_Http_ContentTypeString_t aContentTypeString );
+
+    /**
+    * This method returns the image corresponding to a given URL
+    * @since 2.1
+    * @param aUrl: url of the image
+    * @param aFound: denotes if entry exists
+    * @return corresponding image
+    */
+    NW_Image_AbstractImage_t* GetImageL( NW_Text_t* aUrl, TBool& aFound );
+
+    /**
+    * This method returns the image list entry corresponding to a given virtual image
+    * @since 2.1
+    * @param aVirtualImage: image
+    * @param aImageNode: corresponding node 
+    * @return CCSSImageListEntry* corresponding image list entry
+    */
+    CCSSImageListEntry* EntryByVirtualImage( NW_Image_AbstractImage_t* aVirtualImage, 
+                                                            NW_DOM_ElementNode_t** aImageNode );
+    /**
+    * This method removes the virtual image ownership.
+    * @since 2.1
+    * @param aImageEnrty: image enrty that holds the virtual image
+    * @param aVirtualImage: image to be removed
+    * @return void
+    */
+    void RemoveVirtualImageOwnership( CCSSImageListEntry& aImageEnrty, NW_Image_AbstractImage_t* aVirtualImage );
+
+    /**
+    * This method removes the virtual image.
+    * @since 2.1
+    * @param aImageEnrty: image enrty that holds the virtual image
+    * @param aVirtualImage: image to be removed
+    * @return void
+    */
+    void VirtualImageDestroyed( CCSSImageListEntry& aImageEnrty, NW_Image_AbstractImage_t* aVirtualImage );
+
+    /**
+    * This method Write CSS image components to a file in the form of multipart segments.
+    * Each segment consists of:
+    *                  header length (including content type length)
+    *                  image data length
+    *                  content type (including character encoding)
+    *                  headers
+    *                  image
+    * @since 2.1
+    * @param aFh: file name
+    * @return KBrsrSuccess, KBrsrOutOfMemory, KBrsrFailure, or KBrsrSavedPageFailed
+    */
+    TBrowserStatusCode WriteMultipartSegments(NW_Osu_File_t aFh);
+
+    /**
+    * This method returns the size of the imagelist
+    * @since 2.1
+    * @return size of the imageList
+    */
+    TInt GetNumImages();
+
+    /**
+    * This method issues load request for urls which don't have image
+    * @since 2.1
+    * @return KBrsrSuccess or KBrsrOutOfMemory
+    */
+    TBrowserStatusCode ShowImages();
+
+  private: // New functions
+
+    /**
+    * C++ default constructor.
+    */
+    CCSSImageList( NW_CSS_Processor_t& aProcessor );
+
+    /**
+    * By default Symbian 2nd phase constructor is private.
+    */
+    void ConstructL();
+
+    /**
+    * This method gets CSS image for a given URL
+    * @since 2.1
+    * @param aUrl: url of the image to be fetched
+    * @param aRetEntry: image
+    * @return KBrsrSuccess, KBrsrOutOfMemory, KBrsrNotFound
+    */
+    TBool QueryEntryL (NW_Text_t* aUrl, CCSSImageListEntry*& aRetEntry);
+
+    /**
+    * This method changes the ownership status of a virtual image.
+    * @since 2.1
+    * @param aImageEnrty: image enrty that holds the virtual image
+    * @param aVirtualImage: image to be removed
+    * @param aDestroyed: ETrue if the image was destroyed
+    * @return void
+    */
+    void VirtualImageOwnershipChanged( CCSSImageListEntry& aImageEnrty, NW_Image_AbstractImage_t* aVirtualImage, 
+                                       TBool aDestroyed );
+  
+  
+    typedef CArrayPtrFlat<CCSSImageListEntry> CImageListArray;
+
+  private:    // Data
+
+    // vector containing the images. owned
+    CImageListArray* iImageList;
+    // CSS processor. not owned
+    NW_CSS_Processor_t* iProcessor;
+};
+
+#endif /* CCSSImageList_H */