X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=dialogs.c;h=92845b590a421634d5ee86b0e4e6dd472b0507bb;hb=36a3483dd6f8361b0ccb7c5648e83922883bb9a6;hp=57b7142ecaad5b0adc731331a0794780c6872a2c;hpb=e6e38912837a4fe2464356408d10dee950b3121c;p=xboard.git diff --git a/dialogs.c b/dialogs.c index 57b7142..92845b5 100644 --- a/dialogs.c +++ b/dialogs.c @@ -220,7 +220,7 @@ GenericReadout (Option *opts, int selected) } break; case EndMark: - if(opts[i].target) // callback for implementing necessary actions on OK (like redraw) + if(opts[i].target && selected != -2) // callback for implementing necessary actions on OK (like redraw) res = ((OKCallback*) opts[i].target)(i); break; default: @@ -247,17 +247,38 @@ static void AddToTourney P((int n, int sel)); static void CloneTourney P((void)); static void ReplaceParticipant P((void)); static void UpgradeParticipant P((void)); +static void PseudoOK P((void)); static int MatchOK (int n) { ASSIGN(appData.participants, engineName); if(!CreateTourney(tfName) || matchMode) return matchMode || !appData.participants[0]; - PopDown(TransientDlg); // early popdown to prevent FreezeUI called through MatchEvent from causing XtGrab warning + PopDown(MasterDlg); // early popdown to prevent FreezeUI called through MatchEvent from causing XtGrab warning MatchEvent(2); // start tourney return FALSE; // no double PopDown! } +static void +DoTimeControl(int n) +{ + TimeControlProc(); +} + +static void +DoCommonEngine(int n) +{ + UciMenuProc(); +} + +static void +DoGeneral(int n) +{ + OptionsProc(); +} + +#define PARTICIPANTS 6 /* This MUST be the number of the Option for &engineName!*/ + static Option matchOptions[] = { { 0, 0, 0, NULL, (void*) &tfName, ".trn", NULL, FileName, N_("Tournament file: ") }, { 0, 0, 0, NULL, NULL, "", NULL, Label, N_("For concurrent playing of tourney with multiple XBoards:") }, @@ -283,6 +304,10 @@ static Option matchOptions[] = { { 0, -2, 1000000000, NULL, (void*) &appData.loadPositionIndex, "", NULL, Spin, N_("Position Number (-1 or -2 = Auto-Increment):") }, { 0, 0, 1000000000, NULL, (void*) &appData.rewindIndex, "", NULL, Spin, N_("Rewind Index after this many Games (0 = never):") }, { 0, 0, 0, NULL, (void*) &appData.defNoBook, "", NULL, CheckBox, N_("Disable own engine books by default") }, +{ 0, 0, 0, NULL, (void*) &DoTimeControl, NULL, NULL, Button, N_("Time Control") }, +{ 0, SAME_ROW, 0, NULL, (void*) &DoCommonEngine, NULL, NULL, Button, N_("Common Engine") }, +{ 0, SAME_ROW, 0, NULL, (void*) &DoGeneral, NULL, NULL, Button, N_("General Options") }, +{ 0, SAME_ROW, 0, NULL, (void*) &PseudoOK, NULL, NULL, Button, N_("Continue Later") }, { 0, 0, 0, NULL, (void*) &ReplaceParticipant, NULL, NULL, Button, N_("Replace Engine") }, { 0, SAME_ROW, 0, NULL, (void*) &UpgradeParticipant, NULL, NULL, Button, N_("Upgrade Engine") }, { 0, SAME_ROW, 0, NULL, (void*) &CloneTourney, NULL, NULL, Button, N_("Clone Tourney") }, @@ -292,18 +317,26 @@ static Option matchOptions[] = { static void ReplaceParticipant () { - GenericReadout(matchOptions, 7); + GenericReadout(matchOptions, PARTICIPANTS); Substitute(strdup(engineName), True); } static void UpgradeParticipant () { - GenericReadout(matchOptions, 7); + GenericReadout(matchOptions, PARTICIPANTS); Substitute(strdup(engineName), False); } static void +PseudoOK () +{ + GenericReadout(matchOptions, -2); // read all, but suppress calling of MatchOK + ASSIGN(appData.participants, engineName); + PopDown(MasterDlg); // early popdown to prevent FreezeUI called through MatchEvent from causing XtGrab warning +} + +static void CloneTourney () { FILE *f; @@ -326,24 +359,28 @@ AddToTourney (int n, int sel) if(sel < 1) buf[0] = NULLCHAR; // back to top level else if(engineList[sel][0] == '#') safeStrCpy(buf, engineList[sel], MSG_SIZ); // group header, open group else { // normal line, select engine - AddLine(&matchOptions[7], engineMnemonic[sel]); + AddLine(&matchOptions[PARTICIPANTS], engineMnemonic[sel]); return; } nr = NamesToList(firstChessProgramNames, engineList, engineMnemonic, buf); // replace list by only the group contents ASSIGN(engineMnemonic[0], buf); - LoadListBox(&matchOptions[8], _("# no engines are installed"), -1, -1); - HighlightWithScroll(&matchOptions[8], 0, nr); + LoadListBox(&matchOptions[PARTICIPANTS+1], _("# no engines are installed"), -1, -1); + HighlightWithScroll(&matchOptions[PARTICIPANTS+1], 0, nr); } void MatchOptionsProc () { + if(matchOptions[PARTICIPANTS+1].type != ListBox) { + DisplayError(_("Internal error: PARTICIPANTS set wrong"), 0); + return; + } NamesToList(firstChessProgramNames, engineList, engineMnemonic, ""); matchOptions[9].min = -(appData.pairingEngine[0] != NULLCHAR); // with pairing engine, allow Swiss ASSIGN(tfName, appData.tourneyFile[0] ? appData.tourneyFile : MakeName(appData.defName)); ASSIGN(engineName, appData.participants); ASSIGN(engineMnemonic[0], ""); - GenericPopUp(matchOptions, _("Tournament Options"), TransientDlg, BoardWindow, MODAL, 0); + GenericPopUp(matchOptions, _("Tournament Options"), MasterDlg, BoardWindow, MODAL, 0); } // ------------------------------------------- General Options -------------------------------------------------- @@ -372,6 +409,7 @@ static Option generalOptions[] = { /* TRANSLATORS: the drop menu is used to drop a piece, e.g. during bughouse or editing a position */ { 0, 0, 0, NULL, (void*) &appData.dropMenu, "", NULL, CheckBox, N_("Drop Menu") }, { 0, 0, 0, NULL, (void*) &appData.variations, "", NULL, CheckBox, N_("Enable Variation Trees") }, +{ 0, 0, 0, NULL, (void*) &appData.headers, "", NULL, CheckBox, N_("Headers in Engine Output Window") }, { 0, 0, 0, NULL, (void*) &appData.hideThinkingFromHuman, "", NULL, CheckBox, N_("Hide Thinking from Human") }, { 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") }, @@ -495,6 +533,7 @@ Pick (int n) shuffleOpenings = FALSE; /* [HGM] shuffle: possible shuffle reset when we switch */ startedFromPositionFile = FALSE; /* [HGM] loadPos: no longer valid in new variant */ + appData.fischerCastling = FALSE; /* [HGM] fischer: no longer valid in new variant */ appData.NrRanks = ranksTmp; appData.NrFiles = filesTmp; appData.holdingsSize = sizeTmp; @@ -1417,6 +1456,7 @@ ShuffleOK (int n) static Option shuffleOptions[] = { { 0, 0, 0, NULL, (void*) &shuffleOpenings, NULL, NULL, CheckBox, N_("shuffle") }, + { 0, 0, 0, NULL, (void*) &appData.fischerCastling, NULL, NULL, CheckBox, N_("Fischer castling") }, { 0,-1,2000000000, NULL, (void*) &appData.defaultFrcPosition, "", NULL, Spin, N_("Start-position number:") }, { 0, 0, 0, NULL, (void*) &SetRandom, NULL, NULL, Button, N_("randomize") }, { 0, SAME_ROW, 0, NULL, (void*) &SetRandom, NULL, NULL, Button, N_("pick fixed") },