/*
* Copyright (c) 2003 - 2004 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: Performs a set of util methods related to objects.
*
*/
#ifndef OBJECTUTILS_H
#define OBJECTUTILS_H
// INCLUDES
#include <e32def.h>
#include <badesca.h>
#include "nwx_defs.h"
#include <nw_dom_element.h>
// CONSTANTS
// MACROS
// DATA TYPES
// FUNCTION PROTOTYPES
// FORWARD DECLARATIONS
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
typedef struct NW_LMgr_Box_s NW_LMgr_Box_t;
typedef struct NW_HED_DomHelper_s NW_HED_DomHelper_t;
#ifdef __cplusplus
}
#endif /* __cplusplus */
class CBrCtlObjectInfo;
// CLASS DECLARATION
class ObjectUtils
{
public: // Datatypes
typedef enum
{
EHandlerImage,
EHandlerPlugin,
EHandlerExternalApp,
EHandlerAny
} THandlerType;
public: // Constructors and destructor
/**
* Destructor.
*/
~ObjectUtils();
public: // New Methods
/**
* Returns ETrue if aBox is an object box.
*
* @param aBox a box.
* @param aOnlyIfPlaceHolder if true this method will only return true
* if the box is showing its place-holder (not an active plugin).
* Otherwise it was true true if it an object-box.
*
* @return ETrue or EFalse.
*/
static TBool IsObjectBox(const NW_LMgr_Box_t& aBox, TBool aOnlyIfPlaceHolder);
/**
* Returns ETrue if aBox is an object box in the pre-active state.
*
* @param aBox a box.
*
* @return ETrue or EFalse.
*/
static TBool IsDownloadedObjectBox(const NW_LMgr_Box_t& aBox);
/**
* Gets the following information about the object's resource: whether a third party
* plugin or external application can open the resource, the size of the resource,
* the mime-type of the resource, and the name of the plugin or application to
* be used to open the resource.
*
* @param aBox the object's associated box.
* @param aBrCtlObjectInfo, upon completion it holds the info about the object.
*
* @return void.
*/
static void GetBrCtlObjectInfoL(const NW_LMgr_Box_t& aBox, CBrCtlObjectInfo& aBrCtlObjectInfo);
/**
* Determines whether a given content-type of dot-extension has a cooresponding
* plugin or external application. aContentType and aUrl can be NULL, but at least
* one must be non-NULL (otherwise it will always return EFalse). If aHandlerType
* is EPlugin then it returns ETrue only if their is a supported plugin. If aHandlerType
* is EExternalApp then it returns ETrue only if their is a supported external
* application. If aHandlerType is EBoth then it returns ETrue only if their is a
* supported plugin or external application.
*
* @param aContentType the content type to compare against, may be NULL.
* @param aUrl the url to extract the dot-extension and to compare against, may be NULL.
* @param aHandlerType the type of handler to consider.
*
* @return ETrue or EFalse.
*/
static TBool IsSupported(const TDesC* aContentType, const TDesC* aUrl,
THandlerType aHandlerType);
/**
* Returns ETrue if plugin support is enabled.
*
* @return ETrue or EFalse.
*/
static TBool Enabled();
/**
* Extracts the attribute's names and values from the given aElementNode.
*
* @param aDomHelper the caller's DomHelper, used to interact with its
* dom-tree.
* @param aElementNode the element to extract attributes from.
* @param aNameArray the attribute names.
* @param aValueArray the attribute values.
*
* @return void
*/
static void GetAttributesL(const NW_HED_DomHelper_t& aDomHelper,
const NW_DOM_ElementNode_t& aElementNode, CDesCArray** aNameArray,
CDesCArray** aValueArray);
/**
* Extracts the <param> tag attribute's name and value from the given aElementNode.
*
* @param aDomHelper the caller's DomHelper, used to interact with its
* dom-tree.
* @param aElementNode the element to extract attributes from.
* @param aNameArray the attribute names.
* @param aValueArray the attribute values.
*
* @return void
*/
static void GetParamAttributesL(const NW_HED_DomHelper_t& aDomHelper,
const NW_DOM_ElementNode_t& aElementNode, CDesCArray** aNameArray,
CDesCArray** aValueArray);
/**
* Given a name and value array attained from GetAttributesL it returns
* a copy of the attribute value associated with the given name. Upon
* success the caller adopts aValue. aValue is set to NULL if no
* attribute with the given name is present.
*
* @param aNameArray the attribute names.
* @param aValueArray the attribute values.
* @param aName the name of the attribute to be extracted.
* @param aValue upon success it contains a copy of the attribute value or
* NULL if the attribute wasn't present.
*
* @return void
*/
static void GetAttributeValueL(const CDesCArray& aNameArray,
const CDesCArray& aValueArray, const TDesC& aName, TDesC** aValue);
/**
* Given a name and value array this method inserts name/value pair to array.
* If the name already is in the array, replace value
* by deleting old pair and adding new pair
*
* @param aNameArray the attribute names.
* @param aValueArray the attribute values.
* @param aName the name of the attribute to be replaced.
* @param aValue the value of the attribute to be replaced.
*
* @return void
*/
static void SetAttributeValueL( CDesCArray& aNameArray,
CDesCArray& aValueArray, const TDesC& aName, const TDesC& aValue);
/**
* Given a name and value array this method remove name/value pair from array.
* If the name is not found in the array, do nothing
*
* @param aNameArray the attribute names.
* @param aValueArray the attribute values.
* @param aName the name of the attribute to be removed.
*
* @return void
*/
static void ObjectUtils::RemoveAttributeL( CDesCArray& aNameArray,
CDesCArray& aValueArray, const TDesC& aName );
/**
* Returns the content type associated with the given class-id.
*
* @param aClassId the classid to lookup.
*
* @return the associated content type of NULL if no association exists.
*/
static TDesC* ObjectUtils::GetAssociatedContentType(const TDesC& aClassId);
/**
* Returns the source param name associated with the given class-id.
*
* @param aClassId the classid to lookup.
*
* @return the associated source param name of NULL if no association exists.
*/
static TDesC* ObjectUtils::GetAssociatedSourceParamName(const TDesC& aClassId);
/**
* General purpose panic function for Object related errors.
*
* @since 2.6
* @param aError The reason for panic. Could be left out.
* @return void
*/
static void Panic(TInt aError = KErrNone);
/**
* General purpose panic function for Object related errors.
*
* @since 2.8
* @param aUrl The uri with file name and extension.
* @return the content type of the uri
*/
static HBufC* ObjectUtils::GetContentTypeByUrl(const TDesC* aUri);
private: // Private Methods
/**
* C++ default constructor.
*/
ObjectUtils();
/**
* Returns the name of the plugin that supports the given content-type or
* dot-extension otherwise NULL if no plugin support this type. aContentType
* and aUrl can be NULL, but at least one must be non-NULL (otherwise it will
* always return EFalse). The caller adopts the result.
*
* @param aContentType the content type to compare against, may be NULL.
* @param aUrl the url to compare against, may be NULL.
*
* @return The name of the plugin or NULL
*/
static TDesC* GetPluginNameL(const TDesC* aContentType,
const TDesC* aUrl);
/**
* Returns the name of the external application that supports the given
* content-type or NULL if no application support this type.
* The caller adopts the result.
*
* @return The name of the application or NULL
*/
static TDesC* GetExternalAppNameL(const TDesC* aContentType);
/**
* Returns ETrue if the content-type or dot-extension is a supported image type.
* aContentType and aUrl can be NULL, but at least one must be non-NULL (otherwise
* it will always return EFalse).
*
* @param aContentType the content type to compare against, may be NULL.
* @param aUrl the url to compare against, may be NULL.
*
* @return ETrue if its a supported image type.
*/
static TBool IsImageSupported(const TDesC* aContentType, const TDesC* aUrl);
/**
* Returns the cooresponding value (either source-param-name or content-type)
* given the class-id.
*
* @param aClassId the class-id used to map to the requested value.
* @param aValueSelector used to select the cooresponding value
* (either KParamName or KContentType)
* @return the value or NULL on out of memory.
*/
static TDesC* ObjectUtils::GetClassidAssociation(const TDesC& aClassId,
TInt aValueSelector);
};
#endif // OBJECTUTILS_H