summaryrefslogtreecommitdiff
path: root/app/bin/param.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/bin/param.c')
-rw-r--r--app/bin/param.c553
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"));