diff options
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"));  | 
