/*
Copyright (c) 2019 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/
/*---------------------- Pro/Toolkit Includes ------------------------*/
#include <ProToolkit.h>
#include <ProMenu.h>
/*---------------------- Function Prototypes -------------------------*/
ProError ProUserBitToggle();
char ProUserBitsChange(char);
/*------------------------------------------------------------*\
Define names for the bit values
\*------------------------------------------------------------*/
#define EX10_BIT0 1<<0
#define EX10_BIT1 1<<1
#define EX10_BIT2 1<<2
#define EX10_BIT3 1<<3
/*------------------------------------------------------------*\
Button-action function to toggle the specified bit in the
specified bit map
\*------------------------------------------------------------*/
ProError ProUserBitToggle(char *bitmap, int bit)
{
*bitmap ^= (char)bit;
return ( PRO_TK_NO_ERROR );
}
/*------------------------------------------------------------*\
Function to get the user to toggle any of the first four bits
in the input bit map. Returns the modified bit map.
\*------------------------------------------------------------*/
char ProUserBitsChange(char bits)
{
int menuId;
int action;
/*------------------------------------------------------------*\
Set up the "Bit Values" menu
\*------------------------------------------------------------*/
ProMenuFileRegister("bit_values","bit_values.mnu", &menuId);
ProMenubuttonActionSet("bit_values", "Bit 0",
(ProMenubuttonAction)ProUserBitToggle, &bits, EX10_BIT0);
ProMenubuttonActionSet("bit_values", "Bit 1",
(ProMenubuttonAction)ProUserBitToggle, &bits, EX10_BIT1);
ProMenubuttonActionSet("bit_values", "Bit 2",
(ProMenubuttonAction)ProUserBitToggle, &bits, EX10_BIT2);
ProMenubuttonActionSet("bit_values", "Bit 3",
(ProMenubuttonAction)ProUserBitToggle, &bits, EX10_BIT3);
ProMenubuttonActionSet("bit_values", "Accept",
(ProMenubuttonAction)ProMenuDelete, NULL, 0);
ProMenubuttonActionSet("bit_values", "bit_values",
(ProMenubuttonAction)ProMenuHold, NULL, 0);
/*------------------------------------------------------------*\
Make the menu a data menu (with check marks), so that we
can have several buttons set.
\*------------------------------------------------------------*/
ProMenuModeSet("bit_values", PROMENUMODE_DATA);
ProMenuDatamodeSet("bit_values", 1);
/*------------------------------------------------------------*\
Display the menu
\*------------------------------------------------------------*/
ProMenuCreate(PROMENUTYPE_MAIN, "bit_values", &menuId);
/*------------------------------------------------------------*\
Make the button settings show the current bit map values
\*------------------------------------------------------------*/
if(bits & EX10_BIT0)
ProMenubuttonHighlight("bit_values","Bit 0");
if(bits & EX10_BIT1)
ProMenubuttonHighlight("bit_values","Bit 1");
if(bits & EX10_BIT2)
ProMenubuttonHighlight("bit_values","Bit 2");
if(bits & EX10_BIT3)
ProMenubuttonHighlight("bit_values","Bit 3");
/*------------------------------------------------------------*\
Make the menu active
\*------------------------------------------------------------*/
ProMenuProcess("", &action);
return((char)bits);
}