#ifndef PROSELBUFFER_H 
#define PROSELBUFFER_H

#include <ProSelection.h>



PRO_BEGIN_C_DECLS

extern  ProError ProSelbufferSelectionsGet (ProSelection **ret_buff);
/*
    Purpose: Get contents of the active selection buffer

    Input Arguments:
        none

    Output Arguments:
        ret_buff - ProArray of ProSelection. Free this array using 
                   ProSelectionarrayFree.

    Return Values:
        PRO_TK_NO_ERROR - buffer is in session and was returned.
        PRO_TK_BAD_INPUTS - The argument was invalid (NULL).
        PRO_TK_CANT_ACCESS - There is no Object/Action selection tool active.
        PRO_TK_E_NOT_FOUND - There are no objects in the current selection 
                             tool.

*/

 
extern  ProError ProSelbufferClear ( void );
/*
    Purpose: Clear the currently active selection buffer of all contents.

    Input Arguments:
        none

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The buffer was successfully cleared.
        PRO_TK_CANT_ACCESS - There is no Object/Action selection tool active.
        PRO_TK_CANT_MODIFY - Buffer modification is prohibited.

*/

extern  ProError ProSelbufferSelectionRemove (int index);
/*
    Purpose: Removes the selection at the indicated location from the selection 
             tool buffer.

    Input Arguments:
        index - Index of the item to remove from the currently active selection 
                tool. This index would be obtained from the index that the item 
                resides in after a call to ProSelbufferSelectionsGet().

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - The index input was invalid.
        PRO_TK_CANT_ACCESS - There is no Object/Action selection tool active.
        PRO_TK_CANT_MODIFY - Buffer modification is prohibited.

*/

extern  ProError  ProSelbufferSelectionAdd (ProSelection object);
/*
    Purpose: Programmatically add an item to the buffer of the currently active 
             selection tool.

    Input Arguments:
        object - The object to add to the buffer. This selection must reference 
                 an item that could have been selected in the current model 
                 (its owner, component path, and/or drawing view values must be 
                 properly constructed).

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - The input argument was invalid.
        PRO_TK_CANT_ACCESS - There is no Object/Action selection tool active.
        PRO_TK_INVALID_ITEM - The selection does not correctly reference the 
                              current model.
        PRO_TK_NOT_DISPLAYED - The item is not currently displayed and so 
                               cannot be added to the buffer.
        PRO_TK_BAD_CONTEXT - The selection cannot be added to the buffer in 
                             combination with one or more objects that are 
                             already in the buffer (e.g. geometry and features 
                             selected at the same time).
        PRO_TK_GENERAL_ERROR - The function failed to add the requested item to 
                               the buffer.
        PRO_TK_CANT_MODIFY - Buffer modification is prohibited.
        PRO_TK_MULTIBODY_UNSUPPORTED - input collection is not supported in 
                                       multi-body models.

*/



extern  ProError  ProSelbufferCollectionAdd( ProCollection collection );
/*
    Purpose: Add a collection (chain or surface collection) to the current 
             active selection buffer.

    Input Arguments:
        collection - The collection object

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed to add the requested item to 
                               the buffer.

    See Also:
        ProSelectionCollectionGet()
*/

typedef ProError (*ProSelbufferChangePostAction) ();
/*
    Purpose: This is the notification function called when there is change in 
             selection buffer.
             <p> Users must supply this function by calling 
             <b>ProNotificationSet()</b> with the notify type 
             PRO_SELBUFFER_CHANGE_POST.

    Input Arguments:
        none

    Output Arguments:
        none

    Return Values:
        Ignored.

    See Also:
        ProNotificationSet()
*/

PRO_END_C_DECLS
#endif /* PROSELBUFFER_H */