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


/*--------------------------------------------------------------------*\
Pro/TOOLKIT includes
\*--------------------------------------------------------------------*/
#include <ProToolkit.h>
#include <ProObjects.h>
#include <ProMdl.h>
#include <ProMenu.h>
#include <ProDrawing.h>
#include <ProMessage.h>
#include <ProUtil.h>
#include <ProDwgtable.h>
/*--------------------------------------------------------------------*\
Pro/DEVELOP includes
\*--------------------------------------------------------------------*/

/*--------------------------------------------------------------------*\
C System includes
\*--------------------------------------------------------------------*/

/*--------------------------------------------------------------------*\
Application includes
\*--------------------------------------------------------------------*/
#include "TestError.h"
/*--------------------------------------------------------------------*\
Application macros
\*--------------------------------------------------------------------*/

/*--------------------------------------------------------------------*\
Application data types
\*--------------------------------------------------------------------*/

/*--------------------------------------------------------------------*\
Application global/external data
\*--------------------------------------------------------------------*/

ProError ProTestDrawingMerge();
/*====================================================================*\
    FUNCTION :  ProTestDraw()
    PURPOSE  :  Define and activate menu of Toolkit Test commands drawing
\*====================================================================*/
int ProTestDraw()
{
    ProError status;
    ProMdl   model;
    int action;
    int ProTestLayerMenu        (ProMdl *mod);
    int ProTestDrwSimpRep       ();
    int ProTestDrwSheets        ();
    int ProTestDetail           ();
    int ProTestDrawingView      (ProMdl *mod);
    int ProTestDimensionMenu    (ProMdl *model);
    ProError ProTestDrawingInfo();
    ProError ProTestDrwTable();

    status = ProMdlCurrentGet(&model);
    TEST_CALL_REPORT("ProMdlCurrentGet()", "ProTestDraw()",
                     status, status != PRO_TK_NO_ERROR);
    ProMenuPush ();
    ProMenuFileRegister((char*)"TkDrawing",(char*)"tkdrawing.mnu", NULL);
    ProMenubuttonActionSet((char*)"TkDrawing",(char*)"-Layer",
        (ProMenubuttonAction)ProTestLayerMenu, &model,  0);
    ProMenubuttonActionSet((char*)"TkDrawing",(char*)"-Dimension",
        (ProMenubuttonAction)ProTestDimensionMenu, &model,  0);
    ProMenubuttonActionSet((char*)"TkDrawing",(char*)"-Table",
        (ProMenubuttonAction)ProTestDrwTable, NULL,  0);
    ProMenubuttonActionSet((char*)"TkDrawing",(char*)"-Sheets",
        (ProMenubuttonAction)ProTestDrwSheets, &model, 0);
    ProMenubuttonActionSet((char*)"TkDrawing",(char*)"-Simp Rep",
        (ProMenubuttonAction)ProTestDrwSimpRep, NULL, 0);
    ProMenubuttonActionSet((char*)"TkDrawing",(char*)"-Detail",
        (ProMenubuttonAction)ProTestDetail, &model, 0);
    ProMenubuttonActionSet((char*)"TkDrawing",(char*)"-View",
        (ProMenubuttonAction)ProTestDrawingView, &model,  0);
    ProMenubuttonActionSet((char*)"TkDrawing",(char*)"-Info",
        (ProMenubuttonAction)ProTestDrawingInfo,&model,  0);
    ProMenubuttonActionSet((char*)"TkDrawing",(char*)"-Drawing Merge",
        (ProMenubuttonAction)ProTestDrawingMerge,&model,  0);
    ProMenubuttonActionSet((char*)"TkDrawing",(char*)"TkDrawing",
        (ProMenubuttonAction)ProMenuDelete, NULL,  0);
    ProMenubuttonActionSet((char*)"TkDrawing",(char*)"-Done/Return",
        (ProMenubuttonAction)ProMenuDelete, NULL,  0);

    ProMenuCreate(PROMENUTYPE_MAIN, (char*)"TkDrawing", NULL);
    ProMenuProcess((char*)"", &action);
    ProMenuPop();
    return (0);
}

/*====================================================================*\
    FUNCTION :  ProTestDetail()
    PURPOSE  :  Define and activate menu of Toolkit Test commands drawing
\*====================================================================*/
int ProTestDetail (void** app_data, int int_dummy)
{
    ProDrawing drawing = (ProDrawing)*app_data;
    int menu_id;
    ProError err;

    int ProTestEntity();
    int ProTestDtlNoteMenu();
    int ProTestSymInst();
    int ProTestDtlGroupMenu();
    int ProTestSymDefMenu(ProDrawing drawing);

    err = ProMenuFileRegister((char*)"-Detail",(char*)"tkdetail.mnu", &menu_id);
    err = ProMenubuttonActionSet((char*)"-Detail",(char*)"-Detail",
        (ProMenubuttonAction)ProMenuDelete, NULL, 0);
    err = ProMenubuttonActionSet((char*)"-Detail",(char*)"Entity",
        (ProMenubuttonAction)ProTestEntity, &drawing, 0);
    err = ProMenubuttonActionSet((char*)"-Detail",(char*)"Note",
        (ProMenubuttonAction)ProTestDtlNoteMenu, &drawing, 0);
    err = ProMenubuttonActionSet((char*)"-Detail",(char*)"Symdef",
        (ProMenubuttonAction)ProTestSymDefMenu, drawing, 0);
    err = ProMenubuttonActionSet((char*)"-Detail",(char*)"Syminst",
        (ProMenubuttonAction)ProTestSymInst, drawing, 0);
    err = ProMenubuttonActionSet((char*)"-Detail",(char*)"Group",
        (ProMenubuttonAction)ProTestDtlGroupMenu, drawing, 0);
    err = ProMenuCreate(PROMENUTYPE_MAIN, (char*)"-Detail",&menu_id);
    err = ProMenuProcess((char*)"", &menu_id);
    
    return (0);
}


/*====================================================================*
  Function : ProTestDrawingMerge
  Purpose  : Merge two drawings
\*====================================================================*/
ProError ProTestDrawingMerge()
{
  ProDrawing drawing1,drawing2;
  wchar_t name [PRO_FAMILY_MDLNAME_SIZE];
  ProError status;

  ProFileName WMSGFIL = {'u','s','e','r','m','s','g','.','t','x','t','\0'};

  /*------------------------------------------------------------*\
      Get the current model
  \*------------------------------------------------------------*/
  status = ProMdlCurrentGet ((ProMdl*)&drawing1);
  TEST_CALL_REPORT ("UserDrawingMerge", "ProMdlCurrentGet", status,
	     status != PRO_TK_NO_ERROR);
  if (status != PRO_TK_NO_ERROR) return(status);

  /*------------------------------------------------------------*\
      Get drawings to merge 
  \*------------------------------------------------------------*/
  status = ProMessageDisplay (WMSGFIL, (char*)"USER %0s",
		"Enter model name which you want to merge");
  TEST_CALL_REPORT ("UserDrawingMerge", "ProMessageDisplay", status, 
		status != PRO_TK_NO_ERROR);

  status = ProMessageStringRead (PRO_FAMILY_MDLNAME_SIZE, (wchar_t*)name);
  TEST_CALL_REPORT ("ProMessageStringRead", "UserDrawingMerge", status,
	       status != PRO_TK_NO_ERROR);
  if (status != PRO_TK_NO_ERROR) return(status);

  status = ProMdlnameRetrieve (name, PRO_MDLFILE_DRAWING ,
		 (ProMdl*)&drawing2);
  TEST_CALL_REPORT ("ProMdlnameRetrieve", "UserDrawingMerge", status,
	       status != PRO_TK_NO_ERROR);
  if (status != PRO_TK_NO_ERROR) return(status);

  status = ProDrawingMerge (drawing1, drawing2);
  TEST_CALL_REPORT ("UserDrawingMerge", "ProDrawingMerge", status,
               status != PRO_TK_NO_ERROR);

 /*--------------------------------------------------------------*\
           To get handle for second drawing
 \*--------------------------------------------------------------*/
  status = ProMdlnameRetrieve (name,PRO_MDLFILE_DRAWING , (ProMdl*)&drawing2);
  TEST_CALL_REPORT ("ProMdlnameRetrieve", "UserDrawingMerge", status,
	       status != PRO_TK_NO_ERROR);

  return (status);
}