diff options
| author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2025-09-20 19:19:34 +0200 |
|---|---|---|
| committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2025-09-20 19:19:34 +0200 |
| commit | e7d20cf352688bf717a01f4e6d9e6f497c2bea4c (patch) | |
| tree | cfd2ef9b569f49af985a6f1ec44f2614f63c8e78 /app/bin/param.c | |
| parent | a14a7a0ccc9de76aeab0b2e4bbf58f1a79deedc2 (diff) | |
New upstream version 5.3.1Beta2upstream/5.3.1Beta2
Diffstat (limited to 'app/bin/param.c')
| -rw-r--r-- | app/bin/param.c | 553 |
1 files changed, 246 insertions, 307 deletions
diff --git a/app/bin/param.c b/app/bin/param.c index b6ad8c3..ed8469c 100644 --- a/app/bin/param.c +++ b/app/bin/param.c @@ -21,26 +21,29 @@ */ #include "common.h" -#include "compound.h" -#include "custom.h" +#include "messages.h" #include "fileio.h" -#include "misc.h" #include "param.h" -#include "track.h" -#include "common-ui.h" - -/* Bogus reg vars */ -EXPORT int paramLevel = 1; -EXPORT int paramLen; -EXPORT unsigned long paramKey; -EXPORT char paramId[100]; + +#include "include/toolbar.h" +#include "include/stringxtc.h" + +static void SimulateButtonClick(wButton_p p); + +// Processing an input file, objects may be incomplete so avoid some ops (MapRedraw) +static bool bInReadTracks; + EXPORT BOOL_T paramTogglePlaybackHilite; +static bool paramPlayback; +static long paramDelay; +static bool disablePlaybackDelays; EXPORT char *PREFSECT = "DialogItem"; EXPORT long angleSystem = 0; static int paramCheckErrorCount = 0; static BOOL_T paramCheckShowErrors = FALSE; +static FILE* recordParamF; static int log_paramLayout = 0; static int log_paraminput = 0; @@ -51,7 +54,6 @@ EXPORT wWinPix_t DlgSepTop = 12; EXPORT wWinPix_t DlgSepBottom = 12; static wWinPix_t DlgSepMid = 18; static wWinPix_t DlgSepNarrow = 6; -static wWinPix_t DlgSepWide = 12; static wWinPix_t DlgSepFrmLeft = 4; static wWinPix_t DlgSepFrmRight = 4; static wWinPix_t DlgSepFrmTop = 4; @@ -271,42 +273,14 @@ static BOOL_T GetDistance(char ** cpp, FLOAT_T * distP) } -EXPORT FLOAT_T DecodeFloat( - wString_p strCtrl, - BOOL_T * validP ) -{ - FLOAT_T valF; - const char *cp1; -// const char *cp0; - char *cp2; -// cp0 = cp1 = wStringGetValue( strCtrl ); - cp1 = wStringGetValue( strCtrl ); - while (isspace((unsigned char)*cp1)) { cp1++; } - if ( *cp1 ) { - valF = strtod( cp1, &cp2 ); - if ( *cp2 != 0 ) { - /*wStringSetHilight( strCtrl, cp2-cp0, -1 );*/ - snprintf( decodeErrorStr, sizeof(decodeErrorStr), _("Invalid Number") ); - *validP = FALSE; - return 0.0; - } - *validP = TRUE; - return valF; - } else { - *validP = TRUE; - return 0.0; - } -} - - -FLOAT_T DecodeDistance( - wString_p strCtrl, +static FLOAT_T DecodeDistance( + paramData_p pd, BOOL_T * validP) { - FLOAT_T valF; + FLOAT_T valF = 0.0; char *cp1, *cpN, c1; // CAST_AWAY_CONST: we temporarily replace *cpN with a NULL and later restore - cp1 = cpN = CAST_AWAY_CONST wStringGetValue(strCtrl); + cp1 = cpN = CAST_AWAY_CONST wStringGetValue((wString_p)pd->control); cpN += strlen(cpN)-1; while (cpN > cp1 && isspace((unsigned char)*cpN)) { @@ -342,7 +316,7 @@ FLOAT_T DecodeDistance( } if (cpN) { - wStringSetValue(strCtrl, FormatDistance(valF)); + wStringSetValue((wString_p)pd->control, FormatDistance(valF)); } } else { snprintf(decodeErrorStr, sizeof(decodeErrorStr), "%s @ %s", _(getNumberError), @@ -353,6 +327,46 @@ FLOAT_T DecodeDistance( return valF; } +static FLOAT_T DecodeNumber( + paramData_p pd, + BOOL_T * validP ) +{ + FLOAT_T valF; + const char *cp1; + char *cp2; + *validP = TRUE; + cp1 = wStringGetValue( (wString_p)pd->control ); + while (isspace((unsigned char)*cp1)) { cp1++; } + if ( *cp1 == '\0' ) { + return 0.0; + } + BOOL_T bDistance = TRUE; + if ( ( pd->option & PDO_DIM ) == 0 ) { + bDistance = FALSE; + } else { + if ( pd->winLabel && + strcmp( pd->winLabel, N_("Line Width") ) == 0 && + *cp1 == '-' ) { + bDistance = FALSE; + } + } + if ( ! bDistance ) { + valF = strtod( cp1, &cp2 ); + if ( *cp2 != 0 ) { + /*wStringSetHilight( strCtrl, cp2-cp0, -1 );*/ + snprintf( decodeErrorStr, sizeof(decodeErrorStr), _("Invalid Number") ); + *validP = FALSE; + return 0.0; + } + if ( pd->option & PDO_ANGLE) { + valF = NormalizeAngle( (angleSystem==ANGLE_POLAR)?valF:-valF ); + } + return valF; + } + valF = DecodeDistance( pd, validP ); + return valF; +} + #define N_STRING (10) static int formatStringInx; //Index ahead in case of overwrite @@ -387,7 +401,7 @@ static void FormatFraction( int digits, BOOL_T rational, FLOAT_T valF, - char * unitFmt ) + const char * unitFmt ) { char * cp = *cpp; long integ; @@ -496,6 +510,36 @@ EXPORT char * FormatSmallDistance( format |= 3; return FormatDistanceEx( valF, format ); } + + +static char * FormatNumber( paramData_t* pd, FLOAT_T valF ) +{ + BOOL_T bDistance = TRUE; + if ( ( pd->option & PDO_DIM ) == 0 ) { + bDistance = FALSE; + } else { + // Line Width: <=0 is zoom indep pixel, >0 zoom dep dist + if ( pd->winLabel && + strcmp( pd->winLabel, N_("Line Width") ) == 0 && + valF <= 0 ) { + bDistance = FALSE; + } + } + if ( bDistance ) { + if (pd->option&PDO_SMALLDIM) { + return FormatSmallDistance( valF ); + } else { + return FormatDistance( valF ); + } + } else { + if (pd->option&PDO_ANGLE) { + valF = NormalizeAngle( (angleSystem==ANGLE_POLAR)?valF:-valF ); + } + return FormatFloat( valF ); + } +} + + /***************************************************************************** * @@ -579,18 +623,7 @@ EXPORT void ParamLoadControl( break; case PD_FLOAT: tmpR = *(FLOAT_T*)p->valueP; - if (p->option&PDO_DIM) { - if (p->option&PDO_SMALLDIM) { - valS = FormatSmallDistance( tmpR ); - } else { - valS = FormatDistance( tmpR ); - } - } else { - if (p->option&PDO_ANGLE) { - tmpR = NormalizeAngle( (angleSystem==ANGLE_POLAR)?tmpR:-tmpR ); - } - valS = FormatFloat( tmpR ); - } + valS = FormatNumber( p, tmpR ); wStringSetValue( (wString_p)p->control, valS ); if ( !ParamFloatRangeCheck( p, tmpR ) ) { break; @@ -744,14 +777,7 @@ EXPORT long ParamUpdate( } break; case PD_FLOAT: - if (p->option & PDO_DIM) { - floatV = DecodeDistance( (wString_p)p->control, &valid ); - } else { - floatV = DecodeFloat( (wString_p)p->control, &valid ); - if (valid && (p->option & PDO_ANGLE) ) { - floatV = NormalizeAngle( (angleSystem==ANGLE_POLAR)?floatV:-floatV ); - } - } + floatV = DecodeNumber( p, &valid ); if ( !valid ) { break; } @@ -806,11 +832,7 @@ EXPORT long ParamUpdate( break; } } -#ifdef PGPROC - if (pg->proc) { - pg->proc( PGACT_UPDATE, change ); - } -#endif + return change; } @@ -871,15 +893,7 @@ void ParamLoadData( break; case PD_FLOAT: - if (p->option & PDO_DIM) { - floatV = DecodeDistance((wString_p)p->control, &valid); - } else { - floatV = DecodeFloat((wString_p)p->control, &valid); - - if (valid && (p->option & PDO_ANGLE)) { - floatV = NormalizeAngle((angleSystem==ANGLE_POLAR)?floatV:-floatV); - } - } + floatV = DecodeNumber( p, &valid ); if (p->winData) { inRange = (floatV <= ((paramFloatRange_t *)p->winData)->high) && @@ -991,18 +1005,7 @@ static long ParamIntRestore( *(FLOAT_T*)p->valueP = oldP->f; if (p->control) { valR = oldP->f; - if (p->option & PDO_DIM) { - if (p->option & PDO_SMALLDIM) { - valS = FormatSmallDistance( valR ); - } else { - valS = FormatDistance( valR ); - } - } else { - if (p->option & PDO_ANGLE) { - valR = NormalizeAngle( (angleSystem==ANGLE_POLAR)?valR:-valR ); - } - valS = FormatFloat( valR ); - } + valS = FormatNumber( p, valR ); wStringSetValue( (wString_p)p->control, valS ); } change |= (1L<<inx); @@ -1028,11 +1031,7 @@ static long ParamIntRestore( break; } } -#ifdef PGPROC - if (pg->proc) { - pg->proc( PGACT_RESTORE, change ); - } -#endif + return change; } @@ -1083,18 +1082,6 @@ static void ParamIntSave( } } -#ifdef LATER -static void ParamSave( paramGroup_p pg ) -{ - ParamIntSave( pg, 0 ); -} - -static long ParamRestore( paramGroup_p pg ) -{ - return ParamIntRestore( pg, 0 ); -} -#endif - /**************************************************************************** * * @@ -1333,7 +1320,7 @@ EXPORT void ParamGroupRecord( paramData_p p; long rgb; - if (recordF == NULL) { + if (recordParamF == NULL) { return; } for ( p=pg->paramPtr; p<&pg->paramPtr[pg->paramCnt]; p++ ) { @@ -1348,7 +1335,7 @@ EXPORT void ParamGroupRecord( case PD_LONG: case PD_RADIO: case PD_TOGGLE: - fprintf( recordF, "PARAMETER %s %s %ld\n", pg->nameStr, p->nameStr, + fprintf( recordParamF, "PARAMETER %s %s %ld\n", pg->nameStr, p->nameStr, *(long*)p->valueP ); break; case PD_LIST: @@ -1359,20 +1346,20 @@ EXPORT void ParamGroupRecord( } else { message[0] = '\0'; } - fprintf( recordF, "PARAMETER %s %s %d %s\n", pg->nameStr, p->nameStr, + fprintf( recordParamF, "PARAMETER %s %s %d %s\n", pg->nameStr, p->nameStr, *(wIndex_t*)p->valueP, message ); break; case PD_COLORLIST: rgb = wDrawGetRGB( *(wDrawColor*)p->valueP ); - fprintf( recordF, "PARAMETER %s %s %ld\n", + fprintf( recordParamF, "PARAMETER %s %s %ld\n", pg->nameStr, p->nameStr, rgb ); break; case PD_FLOAT: - fprintf( recordF, "PARAMETER %s %s %0.3f\n", pg->nameStr, p->nameStr, + fprintf( recordParamF, "PARAMETER %s %s %0.3f\n", pg->nameStr, p->nameStr, *(FLOAT_T*)p->valueP ); break; case PD_STRING: - fprintf( recordF, "PARAMETER %s %s %s\n", pg->nameStr, p->nameStr, + fprintf( recordParamF, "PARAMETER %s %s %s\n", pg->nameStr, p->nameStr, (char*)p->valueP ); break; case PD_MESSAGE: @@ -1386,18 +1373,24 @@ EXPORT void ParamGroupRecord( } } if (pg->nameStr) { - fprintf( recordF, "PARAMETER GROUP %s\n", pg->nameStr ); + fprintf( recordParamF, "PARAMETER GROUP %s\n", pg->nameStr ); } - fflush( recordF ); + fflush( recordParamF ); } +/** + * Start recording parameter activities to a macro file. + * + * \param macroFile handle of the opened macro file + */ -EXPORT void ParamStartRecord( void ) +EXPORT void ParamStartRecord( FILE *macroFile ) { int inx; paramGroup_p pg; - if (recordF == NULL) { + recordParamF = macroFile; + if (recordParamF == NULL) { return; } for ( inx=0; inx<paramGroups_da.cnt; inx++ ) { @@ -1439,9 +1432,10 @@ EXPORT void ParamSaveAll( void ) static void ParamButtonPush( void * dp ) { paramData_p p = (paramData_p)dp; - if (recordF && (p->option&PDO_NORECORD)==0 && p->group->nameStr && p->nameStr) { - fprintf( recordF, "PARAMETER %s %s\n", p->group->nameStr, p->nameStr ); - fflush( recordF ); + if (recordParamF && (p->option&PDO_NORECORD)==0 && p->group->nameStr + && p->nameStr) { + fprintf( recordParamF, "PARAMETER %s %s\n", p->group->nameStr, p->nameStr ); + fflush( recordParamF ); } if ( (p->option&PDO_NOPSHACT)==0 ) { if ( p->valueP ) { @@ -1457,10 +1451,11 @@ static void ParamChoicePush( long valL, void * dp ) { paramData_p p = (paramData_p)dp; - if (recordF && (p->option&PDO_NORECORD)==0 && p->group->nameStr && p->nameStr) { - fprintf( recordF, "PARAMETER %s %s %ld\n", p->group->nameStr, p->nameStr, + if (recordParamF && (p->option&PDO_NORECORD)==0 && p->group->nameStr + && p->nameStr) { + fprintf( recordParamF, "PARAMETER %s %s %ld\n", p->group->nameStr, p->nameStr, valL ); - fflush( recordF ); + fflush( recordParamF ); } if ( (p->option&PDO_NOPSHUPD)==0 && p->valueP) { *((long*)(p->valueP)) = valL; @@ -1473,11 +1468,11 @@ static void ParamChoicePush( long valL, void * dp ) static wBool_t ParamIntegerRangeCheck( paramData_p p, long valL ) { - if ( inPlayback ) { + if ( paramPlayback ) { return TRUE; } paramIntegerRange_t * irangeP = (paramIntegerRange_t*)p->winData; -// wBool_t bInvalid = p->bInvalid; + if ( ( (irangeP->rangechecks&PDO_NORANGECHECK_HIGH) == 0 && valL > irangeP->high ) || ( (irangeP->rangechecks&PDO_NORANGECHECK_LOW) == 0 && valL < irangeP->low ) ) { @@ -1510,7 +1505,6 @@ static void ParamIntegerPush( const char * val, void * dp ) char * cp; const char * value; -// wBool_t bInvalid = p->bInvalid; if (strlen(val) == 1 && val[strlen(val)-1] == '\n') { value = wStringGetValue((wString_p)p->control); p->enter_pressed = TRUE; @@ -1537,10 +1531,11 @@ static void ParamIntegerPush( const char * val, void * dp ) wControlSetBalloon( p->control, 0, 0, NULL ); p->bInvalid = FALSE; - if (recordF && (p->option&PDO_NORECORD)==0 && p->group->nameStr && p->nameStr) { - fprintf( recordF, "PARAMETER %s %s %ld\n", p->group->nameStr, p->nameStr, + if (recordParamF && (p->option&PDO_NORECORD)==0 && p->group->nameStr + && p->nameStr) { + fprintf( recordParamF, "PARAMETER %s %s %ld\n", p->group->nameStr, p->nameStr, valL ); - fflush( recordF ); + fflush( recordParamF ); } if ( (p->option&PDO_NOPSHUPD)==0 && p->valueP) { *((long*)(p->valueP)) = valL; @@ -1555,7 +1550,7 @@ static void ParamIntegerPush( const char * val, void * dp ) static wBool_t ParamFloatRangeCheck( paramData_p p, FLOAT_T valF ) { - if ( inPlayback ) { + if ( paramPlayback ) { return TRUE; } paramFloatRange_t * frangeP = (paramFloatRange_t*)p->winData; @@ -1602,7 +1597,6 @@ static void ParamFloatPush( const char * val, void * dp ) BOOL_T valid; const char * value; -// wBool_t bInvalid = p->bInvalid; if (strlen(val) == 1 && val[strlen(val)-1] == '\n') { value = wStringGetValue((wString_p)p->control); p->enter_pressed = TRUE; @@ -1613,14 +1607,7 @@ static void ParamFloatPush( const char * val, void * dp ) LOG( log_paraminput, 1, ( "ParamFloatPush( %s: Enter:%d Val:%s )\n", p->nameStr, p->enter_pressed, value ) ); - if (p->option & PDO_DIM) { - valF = DecodeDistance( (wString_p)p->control, &valid ); - } else { - valF = DecodeFloat( (wString_p)p->control, &valid ); - if (p->option & PDO_ANGLE) { - valF = NormalizeAngle( (angleSystem==ANGLE_POLAR)?valF:-valF ); - } - } + valF = DecodeNumber( p, &valid ); if ( !valid ) { wWinPix_t h = wControlGetHeight(p->control); wControlSetBalloon( p->control, 0, -h*3/4, decodeErrorStr ); @@ -1634,10 +1621,11 @@ static void ParamFloatPush( const char * val, void * dp ) wControlSetBalloon( p->control, 0, 0, NULL ); p->bInvalid = FALSE; - if (recordF && (p->option&PDO_NORECORD)==0 && p->group->nameStr && p->nameStr) { - fprintf( recordF, "PARAMETER %s %s %0.6f\n", p->group->nameStr, p->nameStr, + if (recordParamF && (p->option&PDO_NORECORD)==0 && p->group->nameStr + && p->nameStr) { + fprintf( recordParamF, "PARAMETER %s %s %0.6f\n", p->group->nameStr, p->nameStr, valF ); - fflush( recordF ); + fflush( recordParamF ); } if ( (p->option&PDO_NOPSHUPD)==0 && p->valueP) { *((FLOAT_T*)(p->valueP)) = valF; @@ -1654,9 +1642,11 @@ static void ParamStringPush( const char * val, void * dp ) paramData_p p = (paramData_p)dp; const char * value; // wBool_t bInvalid = p->bInvalid; - if (recordF && (p->option&PDO_NORECORD)==0 && p->group->nameStr && p->nameStr) { - fprintf( recordF, "PARAMETER %s %s %s\n", p->group->nameStr, p->nameStr, val ); - fflush( recordF ); + if (recordParamF && (p->option&PDO_NORECORD)==0 && p->group->nameStr + && p->nameStr) { + fprintf( recordParamF, "PARAMETER %s %s %s\n", p->group->nameStr, p->nameStr, + val ); + fflush( recordParamF ); } if (strlen(val) == 1 && val[strlen(val)-1] == '\n' ) { value = wStringGetValue((wString_p)p->control); @@ -1667,7 +1657,7 @@ static void ParamStringPush( const char * val, void * dp ) } LOG( log_paraminput, 1, ( "ParamStringPush( %s: Enter:%d Val:%s )\n", p->nameStr, p->enter_pressed, value ) ); - if ( ((!inPlayback) && p->option & PDO_NOTBLANK) && value[0] == '\0' ) { + if ( ((!paramPlayback) && p->option & PDO_NOTBLANK) && value[0] == '\0' ) { p->bInvalid = TRUE; wControlSetBalloon( p->control, 0, 0, NULL ); wWinPix_t h = wControlGetHeight(p->control); @@ -1710,10 +1700,12 @@ static void ParamListPush( wIndex_t inx, const char * val, wIndex_t op, case PD_LIST: case PD_DROPLIST: case PD_COMBOLIST: - if (recordF && (p->option&PDO_NORECORD)==0 && p->group->nameStr && p->nameStr) { - fprintf( recordF, "PARAMETER %s %s %d %s\n", p->group->nameStr, p->nameStr, inx, + if (recordParamF && (p->option&PDO_NORECORD)==0 && p->group->nameStr + && p->nameStr) { + fprintf( recordParamF, "PARAMETER %s %s %d %s\n", p->group->nameStr, p->nameStr, + inx, val ); - fflush( recordF ); + fflush( recordParamF ); } if ( (p->option&PDO_NOPSHUPD)==0 && p->valueP) { *(wIndex_t*)(p->valueP) = inx; @@ -1734,9 +1726,9 @@ EXPORT void ParamMenuPush( void * dp ) { paramData_p p = (paramData_p)dp; const char * groupNameStr = p->group ? p->group->nameStr : "misc"; - if (recordF && (p->option&PDO_NORECORD)==0 && groupNameStr && p->nameStr) { - fprintf( recordF, "PARAMETER %s %s\n", groupNameStr, p->nameStr ); - fflush( recordF ); + if (recordParamF && (p->option&PDO_NORECORD)==0 && groupNameStr && p->nameStr) { + fprintf( recordParamF, "PARAMETER %s %s\n", groupNameStr, p->nameStr ); + fflush( recordParamF ); } if ( (p->option&PDO_NOPSHACT)==0 && p->valueP ) { ((wMenuCallBack_p)(p->valueP))( p->context ); @@ -1758,10 +1750,11 @@ static void ParamColorSelectPush( void * dp, wDrawColor dc ) } dc = wDrawFindColor( rgb ); } - if (recordF && (p->option&PDO_NORECORD)==0 && p->group->nameStr && p->nameStr) { - fprintf( recordF, "PARAMETER %s %s %ld\n", p->group->nameStr, p->nameStr, + if (recordParamF && (p->option&PDO_NORECORD)==0 && p->group->nameStr + && p->nameStr) { + fprintf( recordParamF, "PARAMETER %s %s %ld\n", p->group->nameStr, p->nameStr, wDrawGetRGB(dc) ); - fflush( recordF ); + fflush( recordParamF ); } if ( (p->option&PDO_NOPSHUPD)==0 && p->valueP) { *(wDrawColor*)(p->valueP) = dc; @@ -1789,11 +1782,11 @@ static void ParamDrawAction( wDraw_p d, void * dp, wAction_t a, wDrawPix_t w, paramDrawData_t * ddp = (paramDrawData_t*)p->winData; coOrd pos; ddp->d->Pix2CoOrd( ddp->d, w, h, &pos ); - if ( recordF && (p->option&PDO_NORECORD)==0 && p->group->nameStr + if ( recordParamF && (p->option&PDO_NORECORD)==0 && p->group->nameStr && p->nameStr) { - fprintf( recordF, "PARAMETER %s %s %d %0.3f %0.3f\n", p->group->nameStr, + fprintf( recordParamF, "PARAMETER %s %s %d %0.3f %0.3f\n", p->group->nameStr, p->nameStr, a, pos.x, pos.y ); - fflush( recordF ); + fflush( recordParamF ); } if ( (p->option&PDO_NOPSHACT)== 0 && ddp->action ) { ddp->action( a, pos ); @@ -1839,9 +1832,9 @@ static void ParamButtonOk( void * groupVP ) if ( ! ParamCheckInputs( group, (wControl_p)group->okB ) ) { return; } - if ( recordF && group->nameStr ) { - fprintf( recordF, "PARAMETER %s %s\n", group->nameStr, "ok" ); - fflush( recordF ); + if ( recordParamF && group->nameStr ) { + fprintf( recordParamF, "PARAMETER %s %s\n", group->nameStr, "ok" ); + fflush( recordParamF ); } if ( group->okProc ) { @@ -1854,120 +1847,58 @@ static void ParamButtonOk( void * groupVP ) LOG( log_paraminput, 1, ( "ParamButtonOk -> Ok\n" ) ); } +/* No Cancel button required + */ +EXPORT void *ParamCancel_Null = NULL; -static void ParamButtonCancel( void * groupVP ) +#ifdef PARAMCANCEL_NEWUNDO +/* No Cancel button, Commnd can be undone + */ +EXPORT void *ParamCancel_Undo = NULL; +#else +EXPORT void ParamCancel_Undo( + wWin_p winP ) { - paramGroup_p group = groupVP; - if ( recordF && group->nameStr ) { - fprintf( recordF, "PARAMETER %s %s\n", group->nameStr, "cancel" ); - fflush( recordF ); - } - if ( group->cancelProc ) { - group->cancelProc( group->win ); - } + wHide( winP ); } +#endif +/* Cancel button, exits commands leaving control values as current + */ +EXPORT void ParamCancel_Current( + wWin_p winP ) +{ + wHide( winP ); +} -#ifdef LATER -EXPORT void ParamChange( paramData_p p ) +/* As above, but always exit command + */ +EXPORT void ParamCancel_Reset( + wWin_p winP ) { - FLOAT_T tmpR; + ResetIfNotSticky(); + wHide( winP ); +} - if (p->valueP==NULL) { - return; - } +/* Cancel button, exits commands restoring control values + */ +EXPORT void ParamCancel_Restore( + wWin_p winP ) +{ + wHide( winP ); +} - switch (p->type) { - case PD_LONG: - if (recordF && (p->option&PDO_NORECORD)==0 && p->group->nameStr && p->nameStr) { - fprintf( recordF, "PARAMETER %s %s %ld\n", p->group->nameStr, p->nameStr, - *(long*)p->valueP ); - } -#ifdef LATER - if ( p->control && (p->option&PDO_NOCONTUPD) == 0 ) { - wStringSetValue( (wString_p)p->control, FormatLong( *(long*)p->valueP ) ); - } -#endif - break; - case PD_RADIO: - if (recordF && (p->option&PDO_NORECORD)==0 && p->group->nameStr && p->nameStr) { - fprintf( recordF, "PARAMETER %s %s %ld\n", p->group->nameStr, p->nameStr, - *(long*)p->valueP ); - } -#ifdef LATER - if ( p->control && (p->option&PDO_NOCONTUPD) == 0 ) { - wRadioSetValue( (wChoice_p)p->control, *(long*)p->valueP ); - } -#endif - break; - case PD_TOGGLE: - if (recordF && (p->option&PDO_NORECORD)==0 && p->group->nameStr && p->nameStr) { - fprintf( recordF, "PARAMETER %s %s %ld\n", p->group->nameStr, p->nameStr, - *(long*)p->valueP ); - } -#ifdef LATER - if ( p->control && (p->option&PDO_NOCONTUPD) == 0 ) { - wToggleSetValue( (wChoice_p)p->control, *(long*)p->valueP ); - } -#endif - break; - case PD_LIST: - case PD_DROPLIST: - case PD_COMBOLIST: - if (recordF && (p->option&PDO_NORECORD)==0 && p->group->nameStr && p->nameStr) { - fprintf( recordF, "PARAMETER %s %s %d %s\n", p->group->nameStr, p->nameStr, - *(wIndex_t*)p->valueP, "???" ); - } -#ifdef LATER - if ( p->control && (p->option&PDO_NOCONTUPD) == 0 ) { - wListSetIndex( (wList_p)p->control, *(wIndex_t*)p->valueP ); - } -#endif - break; - case PD_COLORLIST: - if (recordF && (p->option&PDO_NORECORD)==0 && p->group->nameStr && p->nameStr) { - fprintf( recordF, "PARAMETER %s %s %ld\n", p->group->nameStr, p->nameStr, - rgb ); - } - break; - case PD_FLOAT: - tmpR = *(FLOAT_T*)p->valueP; - if (recordF && (p->option&PDO_NORECORD)==0 && p->group->nameStr && p->nameStr) { - fprintf( recordF, "PARAMETER %s %s %0.6f\n", p->group->nameStr, p->nameStr, - tmpR ); - } -#ifdef LATER - if ( p->control && (p->option&PDO_NOCONTUPD) == 0 ) { - if (p->option&PDO_DIM) -#endif - if (p->option&PDO_ANGLE) { - tmpR = NormalizeAngle( (angleSystem==ANGLE_POLAR)?tmpR:-tmpR ); - } - wStringSetValue( (wString_p)p->control, tmpR ); - } - break; - case PD_STRING: - if (recordF && (p->option&PDO_NORECORD)==0 && p->group->nameStr && p->nameStr) { - fprintf( recordF, "PARAMETER %s %s %s\n", p->group->nameStr, p->nameStr, - (char*)p->valueP ); - } -#ifdef LATER - if ( p->control && (p->option&PDO_NOCONTUPD) == 0 ) { - wStringSetValue( (wString_p)p->control, (char*)p->valueP ); - } -#endif - break; - case PD_MESSAGE: - case PD_BUTTON: - case PD_DRAW: - case PD_TEXT: - case PD_MENU: - case PD_MENUITEM: - break; +static void ParamButtonCancel( void * groupVP ) +{ + paramGroup_p group = groupVP; + if ( recordParamF && group->nameStr ) { + fprintf( recordParamF, "PARAMETER %s %s\n", group->nameStr, "cancel" ); + fflush( recordParamF ); + } + if ( group->cancelProc ) { + group->cancelProc( group->win ); } } -#endif - EXPORT void ParamHilite( wWin_p win, @@ -1979,8 +1910,8 @@ EXPORT void ParamHilite( if ( hilite ) { wControlHilite( control, TRUE ); wFlush(); - if ( inPlayback ) { - wPause(playbackDelay*4+1); + if ( paramPlayback ) { + wPause(paramDelay*4+1); } } else { wControlHilite( control, FALSE ); @@ -2015,6 +1946,28 @@ EXPORT void ParamControlShow( paramGroup_p pg, wIndex_t inx, wBool_t bShow ) p->bShown = bShow; } +/** + * . + * + * \param state + */ +void +ParamSetInPlayback(bool state, long delay) +{ + paramPlayback = state; + paramDelay = delay; +} + +void SimulateButtonClick(wButton_p control) +{ + if (!disablePlaybackDelays && control) { + wButtonSetBusy(control, TRUE); + wFlush(); + wPause(500); + wButtonSetBusy(control, FALSE); + wFlush(); + } +} static void ParamPlayback( char * line ) { @@ -2034,17 +1987,7 @@ static void ParamPlayback( char * line ) char * valS; if ( strncmp( line, "GROUP ", 6 ) == 0 ) { -#ifdef PGPROC - for ( inx=0; inx<paramGroups_da.cnt; inx++ ) { - pg = paramGroups(inx); - if ( pg->name && strncmp( line+6, pg->name, strlen( pg->name ) ) == 0 ) { - if ( pg->proc ) { - pg->proc( PGACT_PARAM, pg->action ); - } - pg->action = 0; - } - } -#endif + return; } @@ -2077,13 +2020,7 @@ static void ParamPlayback( char * line ) if (p->valueP) { ((wButtonCallBack_p)(p->valueP))( p->context ); } - if (playbackTimer == 0 && p->control) { - wButtonSetBusy( (wButton_p)p->control, TRUE ); - wFlush(); - wPause( 500 ); - wButtonSetBusy( (wButton_p)p->control, FALSE ); - wFlush(); - } + SimulateButtonClick((wButton_p)p->control); break; case PD_LONG: valL = atol( line+len ); @@ -2184,18 +2121,7 @@ static void ParamPlayback( char * line ) if (p->valueP) { *(FLOAT_T*)p->valueP = valF; } - if (p->option&PDO_DIM) { - if ( p->option&PDO_SMALLDIM ) { - valS = FormatSmallDistance( valF ); - } else { - valS = FormatDistance( valF ); - } - } else { - if (p->option&PDO_ANGLE) { - valF1 = NormalizeAngle( (angleSystem==ANGLE_POLAR)?valF1:-valF1 ); - } - valS = FormatFloat( valF ); - } + valS = FormatNumber( p, valF ); if (p->control) { wStringSetValue( (wString_p)p->control, valS ); wFlush(); @@ -2274,13 +2200,7 @@ static void ParamPlayback( char * line ) } button = pg->cancelB; } - if ( playbackTimer == 0 && button ) { - wButtonSetBusy( button, TRUE ); - wFlush(); - wPause( 500 ); - wButtonSetBusy( button, FALSE ); - wFlush(); - } + SimulateButtonClick(button); ParamHilite( pg->win, (wControl_p)button, FALSE ); if ( !button ) { NoticeMessage( "Unknown PARAM: %s", _("Ok"), NULL, line ); @@ -2966,6 +2886,25 @@ SkipControl: group->nameStr, group->origW, group->origH, windowK.term.x, windowK.term.y ) ); } +/** + * Inform about file operation in progress. While files are read, some + * operations in the params library must be disabled + * + * \param state TRUE if file operation starts, FALSE when done + */ + +EXPORT void +ParamSetInReadTracks(bool state) +{ + bInReadTracks = state; +} + +EXPORT void +ParamTurnOffDelays(bool disable) +{ + disablePlaybackDelays = disable; +} + static void ParamDlgProc( wWin_p win, @@ -3021,7 +2960,7 @@ wWin_p ParamCreateDialog( long winOption, paramChangeProc changeProc ) { - char helpStr[STR_SHORT_SIZE]; + char helpStr[STR_SHORT_SIZE] = ""; wWinPix_t w0, h0; char * cancelLabel = (winOption&PD_F_ALT_CANCELLABEL?_("Close"):_("Cancel")); |
