#ifndef PROPOPUPMENU_H
#define PROPOPUPMENU_H



#include <ProANSI.h>

PRO_BEGIN_C_DECLS

#include <ProToolkit.h>
#include <ProMenuBar.h>
#include <ProSelection.h>


/*===========================================================*/
/* Type definitions                                          */
/*===========================================================*/

typedef int     ProPopupMenuId;

typedef uiCmdAccessState (*ProPopupmenuAccessFunction) (uiCmdCmdId command,
                                                        ProAppData appdata,
                                                        ProSelection* sel_buffer);
/*
    Purpose: Callback for the check of popup menu item access State.

    Input Arguments:
        command - Command identifier.
        appdata - User application data
        sel_buffer - ProArray of selections in the selection buffer

    Output Arguments:
        none

    Return Values:
        Return the uiCmdAccessState for the menu item for this situation.

*/

/*===========================================================*/
/* Notification callbacks definition                         */
/*===========================================================*/

typedef ProError (*ProPopupmenuCreatePostAction) (const char* name);
/*
    Purpose: This notification function is called after a popup menu is created 
             internally in Creo Parametric. Use this notification to assign 
             application-specific buttons to the popup menu. Users must supply 
             this function by calling ProNotificationSet() with the notify type 
             PRO_POPUPMENU_CREATE_POST.

    Input Arguments:
        name - Popup menu name.

    Output Arguments:
        none

    Return Values:
        Return values are not interpreted by Creo Parametric.

*/

typedef ProError (*ProPopupmenuDestroyPreAction) (const char* name);
/*
    Purpose: This notification function is called before a popup menu is 
             destroyed internally in Creo Parametric. Use this notification to 
             free application-allocated memory for the custom buttons in the 
             popup menu. Users must supply this function by calling 
             ProNotificationSet() with the notify type 
             PRO_POPUPMENU_DESTROY_PRE.

    Input Arguments:
        name - Popup menu name.

    Output Arguments:
        none

    Return Values:
        Return values are not interpreted by Creo Parametric.

*/


/*===========================================================*/
/*                        PROPOPUP TOOLKIT API               */
/*===========================================================*/


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

LIB_UITOOLS_API  ProError ProPopupmenuIdGet(const char* name, 
                                  ProPopupMenuId *menu_id);
/*
    Purpose: Gets the popup menu id given a popup menu name.

    Input Arguments:
        name - Menu name.

    Output Arguments:
        menu_id - Menu Id

    Return Values:
        PRO_TK_NO_ERROR - The function successfully got the menu id.
        PRO_TK_E_NOT_FOUND - No menu with that name.

*/


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

LIB_UITOOLS_API  ProError ProPopupmenuNameGet(ProPopupMenuId menu_id, char** p_name);
/*
    Purpose: Gets the popup menu name given a popup menu id.

    Input Arguments:
        menu_id - Menu Id

    Output Arguments:
        p_name - The name of the menu. Free this string using ProStringFree.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully got the menu id.
        PRO_TK_E_NOT_FOUND - No menu with that name.

*/


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

LIB_UITOOLS_API  ProError ProPopupmenuButtonAdd(ProPopupMenuId menu_id, 
                int position,
                ProMenuName  button_name,
                ProLine  button_label,
                ProLine  button_helptext, 
                uiCmdCmdId  cmd_id,
                ProPopupmenuAccessFunction access_status,
                ProAppData appdata);
/*
    Purpose: Add a new item to a Creo Parametric popup menu. This function 
             supports pushbutton and checkbutton commands created by 
             ProCmdActionAdd() and ProCmdOptionAdd().

    Input Arguments:
        menu_id - The id of the Popup menu.
        position - Position at which to add the menubutton. Pass 
                   PRO_VALUE_UNUSED to append to the end of the relevant menu.
        button_name - The button name in the Popup Menu (must be unique)
        button_label - The button label. To localize this obtain and pass a 
                       message string from ProMessageToBuffer().
        button_helptext - The button helptext. To localize this obtain and pass 
                          a message string from ProMessageToBuffer().
        cmd_id - The command name.
        access_status - The accessibility function for the added Menu Item. 
                        This function is in addition to the command 
                        accessibility function. This argument is allowed to be 
                        NULL, in which case the item accessibility will be the 
                        command accessibility.
        appdata - Application data to be supplied to the access function. This 
                  argument is allowed to be NULL.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully added a menu item.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_E_FOUND - Button already exists.
        PRO_TK_INVALID_TYPE - The command type is not supported.
        PRO_TK_INVALID_ITEM - Invalid command.

*/


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

LIB_UITOOLS_API  ProError ProPopupmenuCascadebuttonAdd(
                ProPopupMenuId menu_id,
                int position,
                ProMenuName cascade_menu_name,
                ProLine cascade_menu_label,
                ProLine cascade_menu_helptext,
                ProPopupmenuAccessFunction access_status,
                ProAppData appdata,
                ProPopupMenuId *casc_menuId);
/*
    Purpose: Adds cascade to the existing menu.

    Input Arguments:
        menu_id - The id of the Popup menu.
        position - Position at which to add the cascade button. Pass 
                   PRO_VALUE_UNUSED to append to the end of the relevant menu.
        cascade_menu_name - The cascade menu name (must be unique)
        cascade_menu_label - The cascade menu label. To localize this obtain 
                             and pass a message string from 
                             ProMessageToBuffer().
        cascade_menu_helptext - The cascade menu helptext. To localize this 
                                obtain and pass a message string from 
                                ProMessageToBuffer().
        access_status - The accessibility function for the added Menu Item. 
                        This argument is allowed to be NULL, in which case the 
                        item will be always accessible.
        appdata - userdata to be given to any menu callback This argument is 
                  allowed to be NULL.

    Output Arguments:
        casc_menuId - menuId of the newly added cascade menu.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully created a Cascade Menu.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_E_FOUND - Cascade menu was already found.

*/

/* -------------------------------------------------------- */
PRO_END_C_DECLS
#endif