X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=dialogs.c;h=cfd09b873d87e9621ea0a2a22da53dd0d56e97f5;hb=1a2742be566196487d87af36af190feb1612a642;hp=d1777dfb0b6d05dff292adbd6e2cb548348d5f8e;hpb=4aed6e1fe3f9c75dbb37ab41e81aed204bba602f;p=xboard.git diff --git a/dialogs.c b/dialogs.c index d1777df..cfd09b8 100644 --- a/dialogs.c +++ b/dialogs.c @@ -1,7 +1,7 @@ /* * dialogs.c -- platform-independent code for dialogs of XBoard * - * Copyright 2000, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. + * Copyright 2000, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * ------------------------------------------------------------------------ * * GNU XBoard is free software: you can redistribute it and/or modify @@ -253,11 +253,31 @@ 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 +303,9 @@ 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, 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,14 +315,14 @@ 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); } @@ -326,24 +349,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 -------------------------------------------------- @@ -423,7 +450,7 @@ static Option variantDescriptors[] = { { VariantBerolina,SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("berolina *")}, { VariantAtomic, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("atomic")}, { VariantTwoKings,SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("two kings")}, -{ VariantNormal, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_(" ")}, // dummy, to have good alignment +{ -1, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_(" ")}, // dummy, to have good alignment { VariantSpartan,SAME_ROW, 135, NULL, (void*) &Pick, "#FF0000", NULL, Button, N_("Spartan")}, { 0, 0, 0, NULL, NULL, NULL, NULL, Label, N_("Board size ( -1 = default for selected variant):")}, { 0, -1, BOARD_RANKS-1, NULL, (void*) &ranksTmp, "", NULL, Spin, N_("Number of Board Ranks:") }, @@ -454,7 +481,7 @@ static Option variantDescriptors[] = { { VariantCourier, SAME_ROW,135, NULL, (void*) &Pick, "#BFFFBF", NULL, Button, N_("courier (12x8)")}, { VariantChuChess, 0, 135, NULL, (void*) &Pick, "#BFBFBF", NULL, Button, N_("chu chess (10x10)")}, { VariantChu, SAME_ROW, 135, NULL, (void*) &Pick, "#BFFFBF", NULL, Button, N_("chu shogi (12x12)")}, -//{ VariantNormal, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_(" ")}, // dummy, to have good alignment +//{ -1, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_(" ")}, // dummy, to have good alignment // optional buttons for engine-defined variants { VariantUnknown, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, -1, NULL }, { VariantUnknown, SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, -1, NULL }, @@ -528,6 +555,7 @@ NewVariantProc () if(!(last&1)) { // odd number, add filler ASSIGN(variantDescriptors[start+last+1].name, " "); variantDescriptors[start+last+1].type = Button; + variantDescriptors[start+last+1].value = -1; } safeStrCpy(buf, engineVariant, MSG_SIZ); *engineVariant = NULLCHAR; // yeghh... GenericPopUp(variantDescriptors, _("New Variant"), TransientDlg, BoardWindow, MODAL, 0); @@ -1415,7 +1443,7 @@ ShuffleOK (int n) } static Option shuffleOptions[] = { - { 0, 0, 50, NULL, (void*) &shuffleOpenings, NULL, NULL, CheckBox, N_("shuffle") }, + { 0, 0, 0, NULL, (void*) &shuffleOpenings, NULL, NULL, CheckBox, N_("shuffle") }, { 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") }, @@ -1600,6 +1628,7 @@ PromoPick (int n) ClearHighlights(); return; } + if(promoChar == '=' && !IS_SHOGI(gameInfo.variant)) promoChar = NULLCHAR; UserMoveEvent(fromX, fromY, toX, toY, promoChar); if (!appData.highlightLastMove || gotPremove) ClearHighlights(); @@ -1616,11 +1645,11 @@ SetPromo (char *name, int nr, char promoChar) } void -PromotionPopUp () +PromotionPopUp (char choice) { // choice depends on variant: prepare dialog acordingly count = 8; - SetPromo(_("Cancel"), --count, 0); // Beware: GenericPopUp cannot handle user buttons named "cancel" (lowe case)! - if(!IS_SHOGI(gameInfo.variant)) { + SetPromo(_("Cancel"), --count, -1); // Beware: GenericPopUp cannot handle user buttons named "cancel" (lowe case)! + if(choice != '+') { if (!appData.testLegality || gameInfo.variant == VariantSuicide || gameInfo.variant == VariantSpartan && !WhiteOnMove(currentMove) || gameInfo.variant == VariantGiveaway) { @@ -2541,13 +2570,17 @@ Refresh (int pathFlag) SetWidgetLabel(&browseOptions[0], title); } +static char msg1[] = N_("FIRST TYPE DIRECTORY NAME HERE"); +static char msg2[] = N_("TRY ANOTHER NAME"); + void CreateDir (int n) { char *name, *errmsg = ""; GetWidgetText(&browseOptions[n-1], &name); - if(!name[0]) errmsg = _("FIRST TYPE DIRECTORY NAME HERE"); else - if(mkdir(name, 0755)) errmsg = _("TRY ANOTHER NAME"); + if(!strcmp(name, msg1) || !strcmp(name, msg2)) return; + if(!name[0]) errmsg = _(msg1); else + if(mkdir(name, 0755)) errmsg = _(msg2); else { chdir(name); Refresh(-1);