/*
Copyright (c) 2019 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/
#include <ProToolkit.h>
#include <ProDimension.h>
#include <ProFeature.h>
#include <ProSelection.h>
#include <ProUICheckbutton.h>
#include <ProUIPushbutton.h>
#include <ProUIDialog.h>
#include <ProUIInputpanel.h>
#include <ProUILabel.h>
#include <ProUISlider.h>
#include <PTApplsUnicodeUtils.h>
#include <ProUIOptionmenu.h>
#define OK 1
#define CANCEL 0
static ProName msgfil;
int UsrAngleGet();
/*====================================================================*\
FUNCTION : UsrModAngle()
PURPOSE : Command to modify an angular dimension using a slider
\*====================================================================*/
void UsrModAngle()
{
ProError status;
ProSelection *sel;
int n_sel, angle;
double value;
ProName wname;
ProCharName name;
ProCharLine prompt;
ProDimension dimension;
ProDimensiontype dtype;
while(1)
{
/*--------------------------------------------------------------------*\
Select a feature or a dimension
\*--------------------------------------------------------------------*/
status = ProSelect("feature,dimension",1,
NULL,NULL,NULL,NULL,&sel,&n_sel);
if(status != PRO_TK_NO_ERROR || n_sel < 1)
break;
ProSelectionModelitemGet(sel[0], &dimension);
/*--------------------------------------------------------------------*\
If it's a feature, display the dimensions
\*--------------------------------------------------------------------*/
if(dimension.type == PRO_FEATURE)
ProFeatureParamsDisplay(sel[0], PRO_DIM_PARAM);
else
{
/*--------------------------------------------------------------------*\
Check that it's angular
\*--------------------------------------------------------------------*/
ProDimensionTypeGet(&dimension, &dtype);
if(dtype != PRODIMTYPE_ANGLE)
continue;
/*--------------------------------------------------------------------*\
Get the current value
\*--------------------------------------------------------------------*/
ProDimensionValueGet(&dimension, &value);
angle = (int)value;
/*--------------------------------------------------------------------*\
Get the name and form a prompt string
\*--------------------------------------------------------------------*/
ProDimensionSymbolGet(&dimension, wname);
ProWstringToString(name, wname);
ProTKSprintf(prompt,"Enter the new value of %s",name);
/*--------------------------------------------------------------------*\
Input the new angle using a dialog box with a slider
\*--------------------------------------------------------------------*/
if(!UsrAngleGet(prompt, &angle))
continue;
/*--------------------------------------------------------------------*\
Set the new value and update the dim display
\*--------------------------------------------------------------------*/
value = (double)angle;
if(ProDimensionValueSet(&dimension, value) != PRO_TK_NO_ERROR)
{
ProMessageDisplay(msgfil,"USER Could not modify dimension");
continue;
}
ProDimensionDisplayUpdate(&dimension);
}
}
}
/*====================================================================*\
FUNCTION : UsrOKAction()
PURPOSE : Action function for the OK button
\*====================================================================*/
static void UsrSliderOKAction(
char *dialog,
char *component,
ProAppData data)
{
ProUIDialogExit(dialog, OK);
}
/*====================================================================*\
FUNCTION : UsrCancelAction()
PURPOSE : Action function for the CANCEL button
\*====================================================================*/
static void UsrSliderCancelAction(
char *dialog,
char *component,
ProAppData data)
{
ProUIDialogExit(dialog, CANCEL);
}
/*====================================================================*\
FUNCTION : UsrSliderAction() PURPOSE : Callback for movement of the
slider
\*====================================================================*/
void UsrSliderAction(
char *dialog,
char *component,
ProAppData data)
{
ProName wstr;
ProCharName str;
int *angle = (int*)data;
/*--------------------------------------------------------------------*\
Get the new value
\*--------------------------------------------------------------------*/
ProUISliderIntegerGet(dialog,component,angle);
/*--------------------------------------------------------------------*\
Set the input panel to the same value
\*--------------------------------------------------------------------*/
ProTKSprintf(str,"%d",*angle);
ProStringToWstring(wstr, str);
ProUIInputpanelValueSet(dialog,"InputPanel",wstr);
}
/*====================================================================*\
FUNCTION : UsrInputpanelAction()
PURPOSE : Callback for input to the input panel
\*====================================================================*/
void UsrInputpanelAction(
char *dialog,
char *component,
ProAppData data)
{
wchar_t *wstr;
ProCharName str;
int *angle = (int*)data;
/*--------------------------------------------------------------------*\
Get the current value as an integer
\*--------------------------------------------------------------------*/
ProUIInputpanelValueGet(dialog,component,&wstr);
ProWstringToString(str, wstr);
*angle = atoi(str);
/*--------------------------------------------------------------------*\
Set the slider to the same value
\*--------------------------------------------------------------------*/
ProUISliderIntegerSet(dialog,"Slider",*angle);
}
/*====================================================================*\
FUNCTION : UsrAngleGet()
PURPOSE : Input an angle using a dialog with a slider
\*====================================================================*/
int UsrAngleGet(
char *text, /* Text of the prompt displayed on the dialog */
int *angle)
{
int status;
ProName wstr;
ProCharName str;
ProLine wline;
/*--------------------------------------------------------------------*\
Load the dialog from the resource file
\*--------------------------------------------------------------------*/
ProUIDialogCreate("angle","angle");
/*--------------------------------------------------------------------*\
Set the prompt as the text of the Label component
\*--------------------------------------------------------------------*/
ProStringToWstring(wline,text);
ProUILabelTextSet("angle","Prompt",wline);
/*--------------------------------------------------------------------*\
Set the OK and Cancel callbacks
\*--------------------------------------------------------------------*/
ProUIPushbuttonActivateActionSet("angle","OK",
UsrSliderOKAction,NULL);
ProUIPushbuttonActivateActionSet("angle","Cancel",
UsrSliderCancelAction,NULL);
/*--------------------------------------------------------------------*\
Set the slider action and initial value
\*--------------------------------------------------------------------*/
ProUISliderUpdateActionSet("angle","Slider",UsrSliderAction, angle);
ProUISliderIntegerSet("angle","Slider",*angle);
/*--------------------------------------------------------------------*\
Set the input panel action and initial value
\*--------------------------------------------------------------------*/
ProUIInputpanelActivateActionSet("angle","InputPanel",
UsrInputpanelAction,angle);
ProTKSprintf(str,"%d",*angle);
ProStringToWstring(wstr, str);
ProUIInputpanelValueSet("angle","InputPanel",wstr);
/*--------------------------------------------------------------------*\
Display and activate the dialog
\*--------------------------------------------------------------------*/
ProUIDialogActivate("angle",&status);
/*--------------------------------------------------------------------*\
Dispose of the dialog
\*--------------------------------------------------------------------*/
ProUIDialogDestroy("angle");
return(status==OK?1:0);
}