From: H.G. Muller Date: Thu, 19 Jan 2012 15:34:13 +0000 (+0100) Subject: Implement GenericUpdate function X-Git-Url: http://winboard.nl/cgi-bin?a=commitdiff_plain;h=5dbd6684586ced536fedf1e2beb05897a629ba2e;p=xboard.git Implement GenericUpdate function This does the opposite from GenericReadout: it copies the current parameter values into the dialog. --- diff --git a/xoptions.c b/xoptions.c index 58c9a3b..114215b 100644 --- a/xoptions.c +++ b/xoptions.c @@ -130,7 +130,7 @@ SetWidgetText (Option *opt, char *buf, int n) Arg arg; XtSetArg(arg, XtNstring, buf); XtSetValues(opt->handle, &arg, 1); - SetFocus(opt->handle, shells[n], NULL, False); + if(n >= 0) SetFocus(opt->handle, shells[n], NULL, False); } void @@ -826,6 +826,50 @@ Option boardOptions[] = { { 0, 0, 0, NULL, (void*) &BoardOptionsOK, "", NULL, EndMark , "" } }; +void +GenericUpdate (int selected) +{ + int i, j; + char buf[MSG_SIZ]; + float x; + for(i=0; ; i++) { + if(selected >= 0) { if(i < selected) continue; else if(i > selected) break; } + switch(currentOption[i].type) { + case TextBox: + case FileName: + case PathName: + SetWidgetText(¤tOption[i], *(char**) currentOption[i].target, -1); + break; + case Spin: + sprintf(buf, "%d", *(int*) currentOption[i].target); + SetWidgetText(¤tOption[i], buf, -1); + break; + case Fractional: + sprintf(buf, "%4.2f", *(float*) currentOption[i].target); + SetWidgetText(¤tOption[i], buf, -1); + break; + case CheckBox: + SetWidgetState(¤tOption[i], *(Boolean*) currentOption[i].target); + break; + case ComboBox: + for(j=0; currentOption[i].choice[j]; j++) + if(*(char**)currentOption[i].target && !strcmp(*(char**)currentOption[i].target, currentOption[i].choice[j])) break; + values[i] = currentOption[i].value = j + (currentOption[i].choice[j] == NULL); + // TODO: actually display this + break; + case EndMark: + return; + default: + printf("GenericUpdate: unexpected case in switch.\n"); + case Button: + case SaveButton: + case Label: + case Break: + break; + } + } +} + int GenericReadout (int selected) {