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

/*---------------------- Pro/Toolkit Includes ------------------------*/
#include <ProToolkit.h>
#include <ProMenu.h>
#include <ProMdl.h>
#include <ProMenuBar.h>
#include <ProUtil.h>
#include <PTApplsUnicodeUtils.h>
/*---------------------- Application Includes ------------------------*/
#include <TestError.h>



/*---------------------- Function Prototypes -------------------------*/
int user_initialize(int argc, char *argv[], char *proe_vsn, char *build);
void user_terminate();

/*------------------------- External Data ----------------------------*/
extern int UserPartSetup();
extern int UserAssemblySetup();
extern int UserMechanicaSetup();
extern int UserUnicodeToNativeAndLegacy();
extern int UserUnicodeToUnicode();
extern int UserReadNativeToUnicode();
extern int UserReadUnicodeToUnicode(); 
extern int UserManufactureSetup();
extern int UserDrawingSetup();
extern ProError UserREADMESetup();
extern ProError UserGuideMain();
extern int UserNewDrawingMenuSetup();
extern int UserUIMenuSetup();

extern int UserPopupmenusSetup();
extern int UserCustomRelFunctionsDefine();
extern int UserCustomModelChecksDefine();
extern int UserSolidNoteCreate();

/*====================================================================*\
Function : user_initialize
Purpose  : Initialize Pro/TOOLKIT program
\*====================================================================*/
int user_initialize(
  int   argc,      /** Number of arguments                 **/
  char *argv[],    /** Pro/E arguments                     **/
  char *proe_vsn,  /** Pro/E version                       **/
  char *build)     /** Pro/E build                         **/
{
  int menu,i;
  uiCmdCmdId  cmd_id;
  ProFileName wmsgfil;
  ProError err;

/*--------------------------------------------------------------------*\
  Print out Pro/E version and build and set up logging if required
\*--------------------------------------------------------------------*/
  ProTKPrintf("\n");
  for(i=0;i<argc;i++)
  ProTKPrintf("\targv[%d]       = %s\n", i, argv[i]);
  ProTKPrintf("\tPro/E version = %s\n", proe_vsn);
  ProTKPrintf("\tPro/E build   = %s\n", build);

  if (argc > 4)
    ProTestErrlogOpen(argv[4], proe_vsn, build);
  else
    ProTestErrlogOpen("pt_userguide", proe_vsn, build);

/*---------------------------------------------------------------------*\
  Set up the entry point to the demos
\*---------------------------------------------------------------------*/
  ProStringToWstring (wmsgfil, "utilities.txt");

  err = ProMenubarMenuAdd ("UGMENU", "-UG MENU", 
		"Utilities", PRO_B_TRUE, wmsgfil);
  ERROR_CHECK("user_initialize","ProMenubarMenuAdd()",err);

  err = ProCmdActionAdd("-UG README!",
        (uiCmdCmdActFn)UserREADMESetup,
        uiProe2ndImmediate, NULL,
        PRO_B_TRUE, PRO_B_TRUE, &cmd_id);
  ERROR_CHECK("user_initialize","ProCmdActionAdd()",err);

  err = ProMenubarmenuPushbuttonAdd(
        "UGMENU", "-UG README!", "-UG README!",
        "Enter the README menu of the User Guide",
        NULL, PRO_B_FALSE, cmd_id, wmsgfil);
  ERROR_CHECK("user_initialize","ProMenubarmenuPushbuttonAdd()",err);

/*--------------------------------------------------------------------*\
	Register a menu button icon for the command
\*--------------------------------------------------------------------*/
  err = ProCmdIconSet (cmd_id, "tkreadme.gif");
  ERROR_CHECK("user_initialize","ProCmdIconSet()",err);

/*--------------------------------------------------------------------*\
	Make the command available as a Toolbar button
\*--------------------------------------------------------------------*/
  err = ProCmdDesignate (cmd_id,
						"-UG README!",
						"Enter the README menu of the User Guide", 
						"UG README description", 
						wmsgfil);
  ERROR_CHECK("user_initialize","ProCmdDesignate()",err);

  err = ProCmdActionAdd("-UsrGuide Main",
        (uiCmdCmdActFn)UserGuideMain,
        uiProe2ndImmediate, NULL,
        PRO_B_TRUE, PRO_B_TRUE, &cmd_id);
  ERROR_CHECK("user_initialize","ProCmdActionAdd()",err);

  err = ProMenubarmenuPushbuttonAdd(
        "UGMENU", "-UsrGuide Main", "-UsrGuide Main",
        "Enter the Main menu of the User Guide.",
        NULL, PRO_B_FALSE, cmd_id, wmsgfil);
  ERROR_CHECK("user_initialize","ProMenubarmenuPushbuttonAdd()",err);

  err = ProCmdIconSet (cmd_id, "tkmain.gif");
  ERROR_CHECK("user_initialize","ProCmdIconSet()",err);

  err = ProCmdDesignate (cmd_id,
						"-UsrGuide Main",
						"Enter the Main menu of the User Guide.", 
						"UG Main description", 
						wmsgfil);
  ERROR_CHECK("user_initialize","ProCmdDesignate()",err);

  err = ProCmdActionAdd("-TK Round",
        (uiCmdCmdActFn)UserEdgeRoundCreate,
        uiProe2ndImmediate, NULL,
        PRO_B_TRUE, PRO_B_TRUE, &cmd_id);
  ERROR_CHECK("user_initialize","ProCmdActionAdd()",err);

   err = ProCmdIconSet (cmd_id, "tkround");
  ERROR_CHECK("user_initialize","ProCmdIconSet()",err);

  err = ProCmdDesignate (cmd_id,
			 "-UsrGuide Round",
			 "Userguide Round Example", 
			 "UG Round description", 
			 wmsgfil);
  ERROR_CHECK("user_initialize","ProCmdDesignate()",err);

  err = ProCmdActionAdd("-TK Note Create",
        (uiCmdCmdActFn)UserSolidNoteCreate,
        uiProe2ndImmediate, NULL,
        PRO_B_TRUE, PRO_B_TRUE, &cmd_id);
  ERROR_CHECK("user_initialize","ProCmdActionAdd()",err);

  err = ProCmdIconSet (cmd_id, "tknote");
  ERROR_CHECK("user_initialize","ProCmdIconSet()",err);

  err = ProCmdDesignate (cmd_id,
			 "-UsrGuide Solid Note",
			 "Userguide Solid Note Example", 
			 "UG Solid Note description", 
			 wmsgfil);
  ERROR_CHECK("user_initialize","ProCmdDesignate()",err);




  /*--------------------------------------------------------------------*\
		Part menu
  \*--------------------------------------------------------------------*/
  err = ProCmdActionAdd("-UsrGuide Part",
        (uiCmdCmdActFn)UserPartSetup,
        uiProe2ndImmediate, NULL,
        PRO_B_TRUE, PRO_B_TRUE, &cmd_id);
  ERROR_CHECK("user_initialize","ProCmdActionAdd()",err);

  err = ProMenubarmenuPushbuttonAdd(
        "UGMENU", "-UsrGuide Part", "-UsrGuide Part",
        "Enter the Part menu of the User Guide.",
        NULL, PRO_B_TRUE, cmd_id, wmsgfil);
  ERROR_CHECK("user_initialize","ProMenubarmenuPushbuttonAdd()",err);

  err = ProMenuFileRegister("part","part.mnu",&menu);
  ERROR_CHECK("user_initialize","ProMenuFileRegister()",err);

  err = ProMenuAuxfileRegister("part","part.aux",&menu);
  ERROR_CHECK("user_initialize","ProMenuAuxfileRegister()",err);

  err = ProMenubuttonActionSet("part","-UG Part",
     (ProMenubuttonAction)UserPartSetup,NULL,0);
  ERROR_CHECK("user_initialize","ProMenubuttonActionSet()",err);

  /*--------------------------------------------------------------------*\
		Assembly menu
  \*--------------------------------------------------------------------*/
  err = ProCmdActionAdd("-UsrGuide Asm",
        (uiCmdCmdActFn)UserAssemblySetup,
        uiProe2ndImmediate, NULL,
        PRO_B_TRUE, PRO_B_TRUE, &cmd_id);
  ERROR_CHECK("user_initialize","ProCmdActionAdd()",err);

  err = ProMenubarmenuPushbuttonAdd(
        "UGMENU", "-UsrGuide Asm", "-UsrGuide Asm",
        "Enter the Assembly menu of the User Guide.",
        NULL, PRO_B_TRUE, cmd_id, wmsgfil);
  ERROR_CHECK("user_initialize","ProMenubarmenuPushbuttonAdd()",err);

  err = ProMenuFileRegister("assembly","assembly.mnu",&menu);
  ERROR_CHECK("user_initialize","ProMenuFileRegister()",err);

  err = ProMenuAuxfileRegister("assembly","assembly.aux",&menu);
  ERROR_CHECK("user_initialize","ProMenuAuxfileRegister()",err);

  err = ProMenubuttonActionSet("assembly","-UG Assembly",
     (ProMenubuttonAction)UserAssemblySetup,NULL,0);
  ERROR_CHECK("user_initialize","ProMenubuttonActionSet()",err);

  err = ProCmdActionAdd("-UsrGuide MFG",
        (uiCmdCmdActFn)UserManufactureSetup,
        uiProe2ndImmediate, NULL,
        PRO_B_TRUE, PRO_B_TRUE, &cmd_id);
  ERROR_CHECK("user_initialize","ProCmdActionAdd()",err);

  err = ProMenubarmenuPushbuttonAdd(
        "UGMENU", "-UsrGuide MFG", "-UsrGuide MFG",
        "Enter the MFG menu of the User Guide.",
        NULL, PRO_B_TRUE, cmd_id, wmsgfil);
  ERROR_CHECK("user_initialize","ProMenubarmenuPushbuttonAdd()",err);

  err = ProMenuFileRegister("manufacture","mfg.mnu",&menu);
  ERROR_CHECK("user_initialize","ProMenuFileRegister()",err);

  err = ProMenuAuxfileRegister("manufacture","mfg.aux",&menu);
  ERROR_CHECK("user_initialize","ProMenuAuxfileRegister()",err);

  err = ProMenubuttonActionSet("manufacture","-UG MFG",
     (ProMenubuttonAction)UserManufactureSetup,NULL,0);
  ERROR_CHECK("user_initialize","ProMenubuttonActionSet()",err);

  

  /*--------------------------------------------------------------------*\
		Drawing menu
  \*--------------------------------------------------------------------*/
  err = ProCmdActionAdd("-UsrGuide New Drw",
        (uiCmdCmdActFn)UserNewDrawingMenuSetup,
        uiProe2ndImmediate, NULL,
        PRO_B_TRUE, PRO_B_TRUE, &cmd_id);
  ERROR_CHECK("user_initialize","ProCmdActionAdd()",err);  

  err = ProMenubarmenuPushbuttonAdd(
        "UGMENU", "-UsrGuide New Drawing", "-UsrGuide New Drawing",
        "Enter the New Drawing menu of the User Guide.",
        NULL, PRO_B_TRUE, cmd_id, wmsgfil);
  ERROR_CHECK("user_initialize","ProMenubarmenuPushbuttonAdd()",err); 

  err = ProCmdActionAdd("-UsrGuide Drw",
      (uiCmdCmdActFn)UserDrawingSetup,
      uiProe2ndImmediate, NULL,
      PRO_B_TRUE, PRO_B_TRUE, &cmd_id);
  ERROR_CHECK("user_initialize", "ProCmdActionAdd()", err);

  err = ProMenubarmenuPushbuttonAdd(
      "UGMENU", "-UsrGuide Drawing", "-UsrGuide Drawing",
      "Enter the New Drawing menu of the User Guide.",
      NULL, PRO_B_TRUE, cmd_id, wmsgfil);
  ERROR_CHECK("user_initialize", "ProMenubarmenuPushbuttonAdd()", err);
  err = ProMenuFileRegister("drawing","draw.mnu", &menu);
  ERROR_CHECK("user_initialize","ProMenuFileRegister()",err);

  err = ProMenuAuxfileRegister("drawing","draw.aux", &menu);
  ERROR_CHECK("user_initialize","ProMenuAuxfileRegister()",err);

  err = ProMenubuttonActionSet("drawing","-UG Drawing",
        (ProMenubuttonAction)UserDrawingSetup,NULL,0);
  
  err = ProMenubuttonActionSet("drawing","-UG New Drawing",
        (ProMenubuttonAction)UserNewDrawingMenuSetup,NULL,0);

  ERROR_CHECK("user_initialize","ProMenubuttonActionSet()",err);

  err = ProCmdActionAdd("-UsrGuide UI",
        (uiCmdCmdActFn)UserUIMenuSetup,
        uiProe2ndImmediate, NULL,
        PRO_B_TRUE, PRO_B_TRUE, &cmd_id);
  ERROR_CHECK("user_initialize","ProCmdActionAdd()",err);

  err = ProMenubarmenuPushbuttonAdd(
        "UGMENU", "-UsrGuide UI", "-UsrGuide UI",
        "Enter the UI menu of the User Guide.",
        NULL, PRO_B_TRUE, cmd_id, wmsgfil);
  ERROR_CHECK("user_initialize","ProMenubarmenuPushbuttonAdd()",err); 


  err = ProMenuFileRegister("drawing","draw.mnu", &menu);
  ERROR_CHECK("user_initialize","ProMenuFileRegister()",err);

  err = ProMenuAuxfileRegister("drawing","ui.aux",&menu);
  ERROR_CHECK("user_initialize","ProMenuAuxfileRegister()",err);

  err = ProMenubuttonActionSet("drawing","-UG UI",
     (ProMenubuttonAction)UserUIMenuSetup,NULL,0);
  ERROR_CHECK("user_initialize","ProMenubuttonActionSet()",err);



/*---------------------------------------------------------------------*\
  Initialize popup menus for selected examples
\*---------------------------------------------------------------------*/
  UserPopupmenusSetup();

/*---------------------------------------------------------------------*\
  Initialize custom relation functions defined in this application
\*---------------------------------------------------------------------*/
  UserCustomRelFunctionsDefine();

/*---------------------------------------------------------------------*\
  Initialize ModelCheck custom checks defined in this application
\*---------------------------------------------------------------------*/
  UserCustomModelChecksDefine();

/*---------------------------------------------------------------------*\
Call init functions for menu examples
\*---------------------------------------------------------------------*/
  err = ProUserMenubuttonMoveInit();
  ERROR_CHECK("user_initialize","ProUserMenubuttonMoveInit",err);
  err = ProUserAddMenuInit();
  ERROR_CHECK("user_initialize","ProUserAddMenuInit",err);
  err = ProUserConfirmationInit();
  ERROR_CHECK("user_initialize","ProUserConfirmationInit",err);

  return(0);
}

void user_terminate()
{
}