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


/*-------------------------- Pro/Toolkit includes ---------------------------*/
#include <ProToolkit.h>
#include <ProMdl.h>
#include <ProCsys.h>
#include <PTApplsUnicodeUtils.h>    
#include <ProDrawing.h>  
#include <ProWindows.h>
#include <ProSelection.h> 

/*-------------------------- Application includes ---------------------------*/
#include <TestError.h>

/*--------------------------- Function Prototypes----------------------------*/

extern ProError UserTreeExpand();
extern ProError UserTreeCollapse();
extern ProError UserTreeRefresh();

 ProError status;
 ProDrawing drawing;
 ProMdlType mdl_type;
 ProCharLine astr;
 int win_id = -1;
 ProFileName WMSGFIL = {'m','s','g','_','u','g','d','w','g','.','t','x','t','\0'};
/*================================================================*\
FUNCTION  : UserTreeExpand
PURPOSE   : Expand the drawing tree in the current drawing.
\*================================================================*/
ProError UserTreeExpand () 
{

    /*------------------------------------------------------------*\
      Get the current drawing 
    \*------------------------------------------------------------*/
	status = ProMdlCurrentGet((ProMdl*)&drawing);
	ERROR_CHECK ("UserTreeExpand","ProMdlCurrentGet",status);
	  if (status != PRO_TK_NO_ERROR)
		return (status);

    /*------------------------------------------------------------*\
      Check the type of current drawing 
    \*------------------------------------------------------------*/
         status = ProMdlTypeGet((ProMdl)drawing, &mdl_type);
	 ERROR_CHECK ("UserTreeExpand","ProMdlTypeGet",status);

           if (status != PRO_TK_NO_ERROR || (mdl_type != PRO_MDL_DRAWING))
              {
		ProTKSprintf (astr, "Current model is not drawing", status);
    	        status = ProMessageDisplay (WMSGFIL,"USER %0s", astr);
    	        ERROR_CHECK("UserTreeExpand","ProMessageDisplay",status);
	        return(PRO_TK_GENERAL_ERROR);
	      }

	status = ProDrawingtreeExpand(drawing, win_id);
	ERROR_CHECK ("UserTreeExpand","ProDrawingtreeExpand",status);
     
     return (status);
}

/*================================================================*\
FUNCTION  : UserTreeCollapse
PURPOSE   : Collapse the drawing tree in the current drawing.
\*================================================================*/
ProError UserTreeCollapse ()
{

    /*------------------------------------------------------------*\
      Get the current drawing 
    \*------------------------------------------------------------*/
	status = ProMdlCurrentGet((ProMdl*)&drawing);
	ERROR_CHECK ("UserTreeExpand","ProMdlCurrentGet",status);
	  if (status != PRO_TK_NO_ERROR)
		return (status);

         status = ProMdlTypeGet((ProMdl)drawing, &mdl_type);
	 ERROR_CHECK ("UserTreeExpand","ProMdlTypeGet",status);

           if (status != PRO_TK_NO_ERROR || (mdl_type != PRO_MDL_DRAWING))
              {
		ProTKSprintf (astr, "Current model is not drawing", status);
    	        status = ProMessageDisplay (WMSGFIL,"USER %0s", astr);
    	        ERROR_CHECK("UserTreeExpand","ProMessageDisplay",status);
	        return(PRO_TK_GENERAL_ERROR);
	      }

	status = ProDrawingtreeCollapse(drawing, win_id);
	ERROR_CHECK ("UserTreeExpand","ProDrawingtreeExpand",status);
     
     return (status);
}

/*================================================================*\
FUNCTION  : UserTreeRefresh
PURPOSE   : Refresh the current drawing tree.
\*================================================================*/
ProError UserTreeRefresh ()
{

    /*------------------------------------------------------------*\
      Get the current drawing 
    \*------------------------------------------------------------*/
	status = ProMdlCurrentGet((ProMdl*)&drawing);
	ERROR_CHECK ("UserTreeExpand","ProMdlCurrentGet",status);
	  if (status != PRO_TK_NO_ERROR)
		return (status);

         status = ProMdlTypeGet((ProMdl)drawing, &mdl_type);
	 ERROR_CHECK ("UserTreeExpand","ProMdlTypeGet",status);

           if (status != PRO_TK_NO_ERROR || (mdl_type != PRO_MDL_DRAWING))
             {
		ProTKSprintf (astr, "Current model is not drawing", status);
    	        status = ProMessageDisplay (WMSGFIL,"USER %0s", astr);
    	        ERROR_CHECK("UserTreeExpand","ProMessageDisplay",status);
	        return(PRO_TK_GENERAL_ERROR);
	      }

	status = ProDrawingtreeRefresh(drawing, win_id);
	ERROR_CHECK ("UserTreeExpand","ProDrawingtreeExpand",status);
     
     return (status);
}