/*******************************************************************************
*                              Openwave Systems.                               *
*                            Device Products Group                             *
*                               Shinjuku, JAPAN                                *
****************************************************************************//**
   @file
   This is a listing of all the public virtual functions that are supported
   by the extension.  This macro file eases maintenance of the virtual
   functions.  The OEM may replace #FUNCTION with #NO_FUNCTION for any virtual
   functions they don't want to support.  Do not modify the order of this list
   or anything else, otherwise you will <b>break the code</b>.

*//*
   REVISION HISTORY:
   Date:       Who:               Email:
      - Details:
--------------------------------------------------------------------------------
   24 Oct 2004 Richard Willis     richard.willis@openwave.com
      - Initial version

*******************************************************************************/
/*******************************************************************************
*                  Copyright (c) Openwave Systems 1995-2004                    *
*                            All rights reserved.                              *
*                                                                              *
*     THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF Openwave Systems Inc.     *
*               The copyright notice above does not evidence any               *
*              actual or intended publication of such source code.             *
*******************************************************************************/

///@addtogroup grp_virtual_function_macros
///@{
/*==============================================================================

	DUMMY DEFINES
	Blanks out anything that isn't defined when this macro file is included.

==============================================================================*/

/**@def FUNCTION
 This macro is used in the oemombv6.m file to declare that a given function is
 implemented by the OEM.  The browser will call this function to get the custom
 values/objects provided by the OEM instead of using it's internal items.
 @warning The contents of this item must not be altered by the OEM.  However the
 OEM may replace the FUNCTION macro with #NO_FUNCTION.
 @param RETURNS Return type.  Eg, char *, int, etc
 @param NAME Name of the function.
 @param VERSION_NUM Version number of the function.  See #oOEMOMBV6_FunctionExists.
*/
#ifndef FUNCTION
   #define FUNCTION( RETURNS, NAME, VERSION_NUM )
#endif

/**@def NO_FUNCTION
 This macro is used in the oemombv6.m file to declare that a given function is
 not implemented by the OEM.  The browser will simply use it's internal default
 values.  By using this macro, you should delete the function.  It does not need
 to be left in the code as a stub.
 @warning The contents of this item must not be altered by the OEM.  However the
 OEM may replace the NO_FUNCTION macro with #FUNCTION.
 @param RETURNS Return type.  Eg, char *, int, etc
 @param NAME Name of the function.
 @param VERSION_NUM Version number of the function.  See oOEMOMBV6_FunctionExists().
*/
#ifndef NO_FUNCTION
   #define NO_FUNCTION( RETURNS, NAME, VERSION_NUM )
#endif

/**@def NO_PARAM
 This macro is used in the oemombv6.m file to declare that a given function
 takes no parameters.
 @warning This item must not be altered by the OEM.
*/
#ifndef NO_PARAM
   #define NO_PARAM
#endif

/**@def FIRST_PARAM
 This macro is used in the oemombv6.m file to declare the first parameter for
 a given function.
 @warning This item must not be altered by the OEM.
 @param TYPE Parameter type.  Eg, char *, int, etc
 @param NAME Name of the parameter.
*/
#ifndef FIRST_PARAM
   #define FIRST_PARAM( TYPE, NAME )
#endif

/**@def NEXT_PARAM
 This macro is used in the oemombv6.m file to declare any subsequent parameters
 for a given function.
 @warning This item must not be altered by the OEM.
 @param TYPE Parameter type.  Eg, char *, int, etc
 @param NAME Name of the parameter.
*/
#ifndef NEXT_PARAM
   #define NEXT_PARAM( TYPE, NAME )
#endif

/**@def END_FUNCTION
 This macro is used in the oemombv6.m file to mark the end of a function
 declaration.
 @warning This item must not be altered by the OEM.
*/
#ifndef END_FUNCTION
   #define END_FUNCTION
#endif

///@}


/*==============================================================================

	VIRTUAL FUNCTIONS

 The OEM may replace FUNCTION with NO_FUNCTION for any methods they don't want
 to support, for example:

  FUNCTION( boolean, oOEMOMBV6_GetImageDimensions )

 becomes

  NO_FUNCTION( boolean, oOEMOMBV6_GetImageDimensions )

 meaning oOEMOMBV6_GetImageDimensions is not supported by the OEM and the
 browser should use it's internal version.

 ** DO NOT CHANGE THE ORDER OF THESE MACROS AS IT WILL BREAK THE SOFTWARE **

==============================================================================*/
//Make Doxygen ignore this next section (note in V1.4.4 we must use cond as
//Doxygen doesn't do pre-processing in *.m files, so #ifndef doesn't work).
///@cond DOXYGEN_WILL_IGNORE_THIS

//------------------------------------------------------------------------------
FUNCTION( uint32, lwOEMOMBV6_AddRef, 1 )
FIRST_PARAM( IOEMOMBv6 *, psMe )
END_FUNCTION

//------------------------------------------------------------------------------
FUNCTION( uint32, lwOEMOMBV6_Release, 1 )
FIRST_PARAM( IOEMOMBv6 *, psMe )
END_FUNCTION

//------------------------------------------------------------------------------
FUNCTION( boolean, oOEMOMBV6_FunctionExists, 1 )
FIRST_PARAM( IOEMOMBv6 *,        psMe )
NEXT_PARAM( teOEMOMBV6_FuncID,   eFuncID )
NEXT_PARAM( const char *,        kpczFuncName )
NEXT_PARAM( uint16,              wVersion )
END_FUNCTION

//------------------------------------------------------------------------------
//---This marks the start of the functions that may be implemented by the OEM---
//------------------------------------------------------------------------------
FUNCTION( boolean, oOEMOMBV6_BrowserBusy, 1 )
FIRST_PARAM( IOEMOMBv6 *,           psMe )
NEXT_PARAM( teOEMOMBV6_BusyReason,  eBusyReason )
END_FUNCTION

//------------------------------------------------------------------------------
FUNCTION( boolean, oOEMOMBV6_GetImageDimensions, 1 )
FIRST_PARAM( IOEMOMBv6 *,           psMe )
NEXT_PARAM( teOEMOMBV6_Image,       eImage )
NEXT_PARAM( teOEMOMBV6_ImageStyle,  eStyle )
NEXT_PARAM( int16 *,                piWidth )
NEXT_PARAM( int16 *,                piHeight )
END_FUNCTION

//------------------------------------------------------------------------------
FUNCTION( const void *, kpvOEMOMBV6_GetImage, 1 )
FIRST_PARAM( IOEMOMBv6 *,              psMe )
NEXT_PARAM( teOEMOMBV6_Image,          eImage )
NEXT_PARAM( teOEMOMBV6_ImageStyle,     eStyle )
NEXT_PARAM( teOEMOMBV6_ImageFormat *,  peFormat )
NEXT_PARAM( boolean *,                 poIsTransparent )
NEXT_PARAM( boolean *,                 poFreeMemory )
END_FUNCTION

//------------------------------------------------------------------------------
FUNCTION( const void *, kpvOEMOMBV6_GetPictogram, 1 )
FIRST_PARAM( IOEMOMBv6 *,  psMe )
NEXT_PARAM( int16,         iIconNum )
NEXT_PARAM( int16 *,       piIconLength )
END_FUNCTION

//------------------------------------------------------------------------------
FUNCTION( int16, iOEMOMBV6_GetPictogramNumber, 1 )
FIRST_PARAM( IOEMOMBv6 *, psMe )
NEXT_PARAM( const char *, kpczName )
END_FUNCTION

//------------------------------------------------------------------------------
FUNCTION( boolean, oOEMOMBV6_DrawWidget, 1 )
FIRST_PARAM( IOEMOMBv6 *,           psMe )
NEXT_PARAM( IDisplay *,             psIDisplay )
NEXT_PARAM( teOEMOMBV6_Widget,      eWidget )
NEXT_PARAM( teOEMOMBV6_WidgetStyle, eStyle )
NEXT_PARAM( AEERect *,              psRect )
NEXT_PARAM( RGBVAL,                 lwColour )
END_FUNCTION

//------------------------------------------------------------------------------
FUNCTION( RGBVAL, lwOEMOMBV6_GetWidgetColour, 1 )
FIRST_PARAM( IOEMOMBv6 *,           psMe )
NEXT_PARAM( teOEMOMBV6_Widget,      eWidget )
NEXT_PARAM( teOEMOMBV6_WidgetStyle, eStyle )
END_FUNCTION

//------------------------------------------------------------------------------
FUNCTION( void, vOEMOMBV6_GetTextColourStyle, 1 )
FIRST_PARAM( IOEMOMBv6 *,           psMe )
NEXT_PARAM( teOEMOMBV6_TextStyle,   eStyle )
NEXT_PARAM( uint32 *,               plwFlags )
NEXT_PARAM( RGBVAL *,               plwTextForeColour )
NEXT_PARAM( RGBVAL *,               plwTextBackColour )
END_FUNCTION

//------------------------------------------------------------------------------
FUNCTION( boolean, oOEMOMBV6_DrawProgressBar, 1 )
FIRST_PARAM( IOEMOMBv6 *,  psMe )
NEXT_PARAM( IDisplay *,    psIDisplay )
NEXT_PARAM( AEERect *,     psRect )
NEXT_PARAM( uint32,        lwCurrentNofBytes )
NEXT_PARAM( uint32,        lwTotalNofBytes )
END_FUNCTION

//------------------------------------------------------------------------------
FUNCTION( int16, iOEMOMBV6_MeasureProgressBar, 1 )
FIRST_PARAM( IOEMOMBv6 *,  psMe )
NEXT_PARAM( int16 *,       piMaxWidth )
END_FUNCTION

//------------------------------------------------------------------------------
FUNCTION( const tsOEMOMBV6_FamilyFonts *, kpsOEMOMBV6_GetFontFamilies, 1 )
FIRST_PARAM( IOEMOMBv6 *,  psMe )
NEXT_PARAM( uint8 *,       pbNofFamilies )
END_FUNCTION

//------------------------------------------------------------------------------
FUNCTION( boolean,                  oOEMOMBV6_DrawWaitingAnimation, 2 )
FIRST_PARAM( IOEMOMBv6 *,           psMe )
NEXT_PARAM( IDisplay *,             psIDisplay )
NEXT_PARAM( AEERect *,              psSKeyArea )
NEXT_PARAM( teOEMOMV6_WaitReason,   eReason )
NEXT_PARAM( boolean *,              poBrowserCanUpdate )
END_FUNCTION

//------------------------------------------------------------------------------
FUNCTION( void,            vOEMOMBV6_GetMenuSoftkeyLabel, 1 )
FIRST_PARAM( IOEMOMBv6 *,  psMe )
NEXT_PARAM( uint32,        lwLanguage )
NEXT_PARAM( const char **, kpaczLabel )
END_FUNCTION


/*==============================================================================

	UNDEFINES
	Allows this macro file to be included multiple times

==============================================================================*/
#undef FUNCTION
#undef NO_FUNCTION
#undef NO_PARAM
#undef FIRST_PARAM
#undef NEXT_PARAM
#undef END_FUNCTION

///@endcond -- DOXYGEN_WILL_IGNORE_THIS


