/*
	Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/

#include <ProToolkit.h>
#include <ProGraphic.h>
#include <ProLayer.h>
#include <ProObjects.h>
#include <ProSelection.h>
#include <ProMenu.h>

#include <TestError.h>

/*==========================================================================*\
    Utility to report a selected menu action
\*==========================================================================*/
int UserLayerAction (ProAppData dummy, int action)
{
    ProMenuDeleteWithStatus(action);
}

/*==========================================================================*\
    Utility to ask the user to select an element type for blanking
\*==========================================================================*/
int UserBlankTypeChoose()
{
    int menu_id;
    int action;
    ProError err;

    err=ProMenuFileRegister("ublank6","ublank6.mnu",&menu_id);
    ERROR_CHECK("UserSelectBlankType","ProMenuFileRegister",err);

    err=ProMenubuttonActionSet("ublank6","Part",
			       UserLayerAction,NULL,PRO_PART);
    ERROR_CHECK("UserSelectBlankType","ProMenubuttonActionSet(Part)",err);

    err=ProMenubuttonActionSet("ublank6","Feature",
			       UserLayerAction,NULL,PRO_FEATURE);
    ERROR_CHECK("UserSelectBlankType","ProMenubuttonActionSet(Feature)",err);

    err=ProMenubuttonActionSet("ublank6","Curve",
			       UserLayerAction,NULL,PRO_CURVE);
    ERROR_CHECK("UserSelectBlankType","ProMenubuttonActionSet(Curve)",err);

    err=ProMenubuttonActionSet("ublank6","Quilt",
			       UserLayerAction,NULL,PRO_QUILT);
    ERROR_CHECK("UserSelectBlankType","ProMenubuttonActionSet(Quilt)",err);

    err=ProMenubuttonActionSet("ublank6","Point",
			       UserLayerAction,NULL,PRO_POINT);
    ERROR_CHECK("UserSelectBlankType","ProMenubuttonActionSet(Point)",err);

    err=ProMenubuttonActionSet("ublank6","ublank6",
			       UserLayerAction,NULL,-1);
    ERROR_CHECK("UserSelectBlankType","ProMenubuttonActionSet(ublank)",err);

    ProMenuCreate(PROMENUTYPE_MAIN,"ublank6",&menu_id);
    ProMenuProcess("",&action);
    return(action);
}

/*=========================================================================*\
    Function to add selected items to a layer called "blank"
\*==========================================================================*/
int UserBlank()
{
    ProLayer   layer;
    ProLayerItem layer_item;
    ProMdl     object, member;
    ProSelection  *sel;
    ProModelitem model_item;
    int        type;
    int        nsel;
    int        m;
    char      *option;

    ProError   err;
   
/* PHILIPPE :   The Layer examples have to be changed for rev 20
                Until then, I make it unavailable */
    return (PRO_TK_NO_ERROR);
#if 0
 
/*-------------------------------------------------------------------------*\
    Get handle for the active model.
\*-------------------------------------------------------------------------*/
    err=ProMdlCurrentGet(&object);
    ERROR_CHECK("UserBlank","ProMdlCurrentGet",err);

/*-------------------------------------------------------------------------*\
    Load model and name ("blank") information into layer struct.
\*-------------------------------------------------------------------------*/
    layer.owner=object;
    ProStringToWstring(layer.layer_name,"blank");

/*-------------------------------------------------------------------------*\
    Create a layer
\*-------------------------------------------------------------------------*/
    err=ProLayerCreate(&layer);
    ERROR_CHECK("UserBlank","ProLayerCreate",err);

/*--------------------------------------------------------------------------*\
    Choose the type of element to be selected.
\*--------------------------------------------------------------------------*/
    type = UserBlankTypeChoose();
    if (type < 0)
        return(0);
    layer_item.type=type;
/*-------------------------------------------------------------------------*\
    Set the ProSelect() option accordingly.
\*-------------------------------------------------------------------------*/
    switch (type)
    {
    case PRO_PART    : option = "part"    ; break;
    case PRO_FEATURE : option = "feature" ; break;
    case PRO_CURVE   : option = "curve"   ; break;
    case PRO_QUILT   : option = "dtmqlt"  ; break;
    case PRO_POINT   : option = "point"   ; break;
    }
    while ( ProSelect(option,1,NULL,NULL,NULL,NULL,&sel,&nsel)==PRO_TK_NO_ERROR
	     && nsel>0 )
    {
        err=ProSelectionModelitemGet(sel[0],&model_item);
	ERROR_CHECK("UserBlank","ProSelectionModelitemGet",err);
	layer_item.id = model_item.id;
	err=ProLayerItemAdd(&layer,&layer_item);
	ERROR_CHECK("UserBlank","ProLayerItemAdd",err);
        ProWindowRepaint(-1);
    }
    return(0);

#endif
}