X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=xoptions.c;h=0ace8b671e5d85aa56dcdd6a5422228c638447aa;hb=3beab75f584e391ed8523be54fd56c6cf2cb5da3;hp=6742e3f39a5b97e08dadbff25af6993a489735e3;hpb=4e062d14429ed3a3a251c971690bade4c8cba946;p=xboard.git diff --git a/xoptions.c b/xoptions.c index 6742e3f..0ace8b6 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 @@ -253,6 +253,7 @@ int MakeColors P((void)); void CreateGCs P((int redo)); void CreateAnyPieces P((void)); int GenericReadout P((int selected)); +void GenericUpdate P((int selected)); Widget shells[10]; Widget marked[10]; Boolean shellUp[10]; @@ -362,6 +363,21 @@ UpgradeParticipant () Substitute(strdup(engineName), False); } +void +CloneTourney () +{ + FILE *f; + char *name; + GetWidgetText(currentOption, &name); + if(name && name[0] && (f = fopen(name, "r")) ) { + char *saveSaveFile; + saveSaveFile = appData.saveGameFile; appData.saveGameFile = NULL; // this is a persistent option, protect from change + ParseArgsFromFile(f); + engineName = appData.participants; GenericUpdate(-1); + FREE(appData.saveGameFile); appData.saveGameFile = saveSaveFile; + } else DisplayError(_("First you must specify an existing tourney file to clone"), 0); +} + Option matchOptions[] = { { 0, 0, 0, NULL, (void*) &tfName, ".trn", NULL, FileName, N_("Tournament file:") }, { 0, 0, 0, NULL, (void*) &appData.roundSync, "", NULL, CheckBox, N_("Sync after round (for concurrent playing of a single") }, @@ -382,6 +398,7 @@ Option matchOptions[] = { { 0, 0, 0, NULL, (void*) &appData.defNoBook, "", NULL, CheckBox, N_("Disable own engine books by default") }, { 0, 0, 0, NULL, (void*) &ReplaceParticipant, NULL, NULL, Button, N_("Replace Engine") }, { 0, 1, 0, NULL, (void*) &UpgradeParticipant, NULL, NULL, Button, N_("Upgrade Engine") }, +{ 0, 1, 0, NULL, (void*) &CloneTourney, NULL, NULL, Button, N_("Clone Tourney") }, { 0, 1, 0, NULL, (void*) &MatchOK, "", NULL, EndMark , "" } }; @@ -404,7 +421,6 @@ Option generalOptions[] = { { 0, 0, 0, NULL, (void*) &appData.blindfold, "", NULL, CheckBox, N_("Blindfold") }, { 0, 0, 0, NULL, (void*) &appData.dropMenu, "", NULL, CheckBox, N_("Drop Menu") }, { 0, 0, 0, NULL, (void*) &appData.hideThinkingFromHuman, "", NULL, CheckBox, N_("Hide Thinking from Human") }, -{ 0, 0, 0, NULL, (void*) &appData.highlightDragging, "", NULL, CheckBox, N_("Highlight Dragging (Show Move Targets)") }, { 0, 0, 0, NULL, (void*) &appData.highlightLastMove, "", NULL, CheckBox, N_("Highlight Last Move") }, { 0, 0, 0, NULL, (void*) &appData.highlightMoveWithArrow, "", NULL, CheckBox, N_("Highlight with Arrow") }, { 0, 0, 0, NULL, (void*) &appData.ringBellAfterMoves, "", NULL, CheckBox, N_("Move Sound") }, @@ -827,6 +843,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) {