}
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:
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:") },
{ 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") },
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;
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 --------------------------------------------------
/* 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") },