X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=xoptions.c;h=7e1603ed7614e51252577cab464d87953e3213e9;hb=3bfa1af62f41c7da05fa150d0b46ad6d09c88cca;hp=1165a098b3234dcfce14d6c68ab7e4a936f3cf5c;hpb=762e18baef5f815cc46019ba3e082bd5ec1980f6;p=xboard.git diff --git a/xoptions.c b/xoptions.c index 1165a09..7e1603e 100644 --- a/xoptions.c +++ b/xoptions.c @@ -1,28 +1,24 @@ /* * xoptions.c -- Move list window, part of X front end for XBoard * - * Copyright 2000 Free Software Foundation, Inc. - * - * The following terms apply to the enhanced version of XBoard distributed - * by the Free Software Foundation: + * Copyright 2000,2009 Free Software Foundation, Inc. * ------------------------------------------------------------------------ - * This program is free software; you can redistribute it and/or modify + * + * GNU XBoard is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * GNU XBoard is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * ------------------------------------------------------------------------ + * along with this program. If not, see http://www.gnu.org/licenses/. * * - * See the file ChangeLog for a revision history. - */ + *------------------------------------------------------------------------ + ** See the file ChangeLog for a revision history. */ // [HGM] this file is the counterpart of woptions.c, containing xboard popup menus // similar to those of WinBoard, to set the most common options interactively. @@ -72,6 +68,15 @@ extern char *getenv(); #include "common.h" #include "backend.h" #include "xboard.h" +#include "gettext.h" + +#ifdef ENABLE_NLS +# define _(s) gettext (s) +# define N_(s) gettext_noop (s) +#else +# define _(s) (s) +# define N_(s) s +#endif extern Widget formWidget, shellWidget, boardWidget, menuBarWidget; extern Display *xDisplay; @@ -127,24 +132,24 @@ void ShuffleCallback(w, client_data, call_data) XtSetArg(args[0], XtNlabel, &name); XtGetValues(w, args, 1); - if (strcmp(name, "cancel") == 0) { + if (strcmp(name, _("cancel")) == 0) { ShufflePopDown(); return; } - if (strcmp(name, "off") == 0) { + if (strcmp(name, _("off")) == 0) { ShufflePopDown(); shuffleOpenings = False; // [HGM] should be moved to New Variant menu, once we have it! ResetGameEvent(); AnalysisPopDown(); return; } - if (strcmp(name, "random") == 0) { + if (strcmp(name, _("random")) == 0) { sprintf(buf, "%d", rand()); XtSetArg(args[0],XtNvalue, buf); // erase bad (non-numeric) value XtSetValues(XtParent(w), args, 1); return; } - if (strcmp(name, "ok") == 0) { + if (strcmp(name, _("ok")) == 0) { int nr; String name; name = XawDialogGetValueString(w2 = XtParent(w)); if(sscanf(name ,"%d",&nr) != 1) { @@ -176,7 +181,7 @@ void ShufflePopUp() XtSetArg(args[i], XtNresizable, True); i++; XtSetArg(args[i], XtNwidth, DIALOG_SIZE); i++; shuffleShell = popup = - XtCreatePopupShell("New Shuffle Game", transientShellWidgetClass, + XtCreatePopupShell(_("New Shuffle Game"), transientShellWidgetClass, shellWidget, args, i); layout = @@ -185,20 +190,20 @@ void ShufflePopUp() sprintf(def, "%d\n", appData.defaultFrcPosition); i = 0; - XtSetArg(args[i], XtNlabel, "Start-position number:"); i++; + XtSetArg(args[i], XtNlabel, _("Start-position number:")); i++; XtSetArg(args[i], XtNvalue, def); i++; XtSetArg(args[i], XtNborderWidth, 0); i++; - dialog = XtCreateManagedWidget("Shuffle", dialogWidgetClass, + dialog = XtCreateManagedWidget(_("Shuffle"), dialogWidgetClass, layout, args, i); // XtSetArg(args[0], XtNeditType, XawtextEdit); // [HGM] can't get edit to work decently // XtSetArg(args[1], XtNuseStringInPlace, False); // XtSetValues(dialog, args, 2); - XawDialogAddButton(dialog, "ok", ShuffleCallback, (XtPointer) dialog); - XawDialogAddButton(dialog, "cancel", ShuffleCallback, (XtPointer) dialog); - XawDialogAddButton(dialog, "random", ShuffleCallback, (XtPointer) dialog); - XawDialogAddButton(dialog, "off", ShuffleCallback, (XtPointer) dialog); + XawDialogAddButton(dialog, _("ok"), ShuffleCallback, (XtPointer) dialog); + XawDialogAddButton(dialog, _("cancel"), ShuffleCallback, (XtPointer) dialog); + XawDialogAddButton(dialog, _("random"), ShuffleCallback, (XtPointer) dialog); + XawDialogAddButton(dialog, _("off"), ShuffleCallback, (XtPointer) dialog); XtRealizeWidget(popup); CatchDeleteWindow(popup, "ShufflePopDown"); @@ -259,13 +264,13 @@ void TimeControlCallback(w, client_data, call_data) XtSetArg(args[0], XtNlabel, &name); XtGetValues(w, args, 1); - if (strcmp(name, "classical") == 0) { + if (strcmp(name, _("classical")) == 0) { if(!tcInc) return; j=0; - XtSetArg(args[j], XtNlabel, "minutes for each"); j++; + XtSetArg(args[j], XtNlabel, _("minutes for each")); j++; XtSetValues(tcMess1, args, j); j=0; - XtSetArg(args[j], XtNlabel, "moves"); j++; + XtSetArg(args[j], XtNlabel, _("moves")); j++; XtSetValues(tcMess2, args, j); j=0; XtSetArg(args[j], XtNstring, &name); j++; @@ -278,13 +283,13 @@ void TimeControlCallback(w, client_data, call_data) tcInc = False; return; } - if (strcmp(name, "incremental") == 0) { + if (strcmp(name, _("incremental")) == 0) { if(tcInc) return; j=0; - XtSetArg(args[j], XtNlabel, "minutes, plus"); j++; + XtSetArg(args[j], XtNlabel, _("minutes, plus")); j++; XtSetValues(tcMess1, args, j); j=0; - XtSetArg(args[j], XtNlabel, "sec/move"); j++; + XtSetArg(args[j], XtNlabel, _("sec/move")); j++; XtSetValues(tcMess2, args, j); j=0; XtSetArg(args[j], XtNstring, &name); j++; @@ -297,7 +302,7 @@ void TimeControlCallback(w, client_data, call_data) tcInc = True; return; } - if (strcmp(name, " OK ") == 0) { + if (strcmp(name, _(" OK ")) == 0) { int inc, mps, tc, ok; XtSetArg(args[0], XtNstring, &txt); XtGetValues(tcData, args, 1); @@ -319,7 +324,7 @@ void TimeControlCallback(w, client_data, call_data) if(!ParseTimeControl(txt, inc, mps)) { XtSetArg(args[0], XtNstring, ""); // erase any offending input XtSetValues(tcTime, args, 1); - DisplayError("Bad Time-Control String", 0); + DisplayError(_("Bad Time-Control String"), 0); return; } appData.movesPerSession = mps; @@ -358,7 +363,7 @@ void TimeControlPopUp() XtSetArg(args[i], XtNresizable, True); i++; // XtSetArg(args[i], XtNwidth, DIALOG_SIZE); i++; TimeControlShell = popup = - XtCreatePopupShell("TimeControl Menu", transientShellWidgetClass, + XtCreatePopupShell(_("TimeControl Menu"), transientShellWidgetClass, shellWidget, args, i); layout = @@ -391,7 +396,7 @@ void TimeControlPopUp() XtAddEventHandler(tcTime, ButtonPressMask, False, SetFocus, (XtPointer) popup); j= 0; - XtSetArg(args[j], XtNlabel, tcInc ? " minutes, plus " : "minutes for each"); j++; + XtSetArg(args[j], XtNlabel, tcInc ? _(" minutes, plus ") : _("minutes for each")); j++; XtSetArg(args[j], XtNborderWidth, 0); j++; XtSetArg(args[j], XtNfromHoriz, tcTime); j++; XtSetArg(args[j], XtNtop, XtChainTop); j++; @@ -420,7 +425,7 @@ void TimeControlPopUp() XtAddEventHandler(tcData, ButtonPressMask, False, SetFocus, (XtPointer) popup); j= 0; - XtSetArg(args[j], XtNlabel, tcInc ? "sec/move" : "moves "); j++; + XtSetArg(args[j], XtNlabel, tcInc ? _("sec/move") : _("moves ")); j++; XtSetArg(args[j], XtNjustify, XtJustifyLeft); j++; XtSetArg(args[j], XtNborderWidth, 0); j++; XtSetArg(args[j], XtNfromHoriz, tcData); j++; @@ -469,7 +474,7 @@ void TimeControlPopUp() XtAddEventHandler(tcOdds2, ButtonPressMask, False, SetFocus, (XtPointer) popup); j= 0; - XtSetArg(args[j], XtNlabel, "Engine #1 and #2 Time-Odds Factors"); j++; + XtSetArg(args[j], XtNlabel, _("Engine #1 and #2 Time-Odds Factors")); j++; XtSetArg(args[j], XtNjustify, XtJustifyLeft); j++; XtSetArg(args[j], XtNborderWidth, 0); j++; XtSetArg(args[j], XtNfromVert, tcTime); j++; @@ -488,7 +493,7 @@ void TimeControlPopUp() XtSetArg(args[j], XtNtop, XtChainBottom); j++; XtSetArg(args[j], XtNleft, XtChainLeft); j++; XtSetArg(args[j], XtNright, XtChainLeft); j++; - b_clas= XtCreateManagedWidget("classical", commandWidgetClass, + b_clas= XtCreateManagedWidget(_("classical"), commandWidgetClass, form, args, j); XtAddCallback(b_clas, XtNcallback, TimeControlCallback, (XtPointer) 0); @@ -499,7 +504,7 @@ void TimeControlPopUp() XtSetArg(args[j], XtNtop, XtChainBottom); j++; XtSetArg(args[j], XtNleft, XtChainLeft); j++; XtSetArg(args[j], XtNright, XtChainLeft); j++; - b_inc = XtCreateManagedWidget("incremental", commandWidgetClass, + b_inc = XtCreateManagedWidget(_("incremental"), commandWidgetClass, form, args, j); XtAddCallback(b_inc, XtNcallback, TimeControlCallback, (XtPointer) 0); @@ -510,7 +515,7 @@ void TimeControlPopUp() XtSetArg(args[j], XtNtop, XtChainBottom); j++; XtSetArg(args[j], XtNleft, XtChainRight); j++; XtSetArg(args[j], XtNright, XtChainRight); j++; - b_ok= XtCreateManagedWidget(" OK ", commandWidgetClass, + b_ok= XtCreateManagedWidget(_(" OK "), commandWidgetClass, form, args, j); XtAddCallback(b_ok, XtNcallback, TimeControlCallback, (XtPointer) 0); @@ -521,7 +526,7 @@ void TimeControlPopUp() XtSetArg(args[j], XtNtop, XtChainBottom); j++; XtSetArg(args[j], XtNleft, XtChainRight); j++; XtSetArg(args[j], XtNright, XtChainRight); j++; - b_cancel= XtCreateManagedWidget("cancel", commandWidgetClass, + b_cancel= XtCreateManagedWidget(_("cancel"), commandWidgetClass, form, args, j); XtAddCallback(b_cancel, XtNcallback, TimeControlPopDown, (XtPointer) 0); @@ -593,7 +598,7 @@ void EngineCallback(w, client_data, call_data) XtSetArg(args[0], XtNlabel, &name); XtGetValues(w, args, 1); - if (strcmp(name, "OK") == 0) { + if (strcmp(name, _("OK")) == 0) { // read all switches appData.periodicUpdates = ReadToggle(w1); // appData.hideThinkingFromHuman = ReadToggle(w2); @@ -647,7 +652,7 @@ void EnginePopUp() XtSetArg(args[i], XtNresizable, True); i++; // XtSetArg(args[i], XtNwidth, DIALOG_SIZE); i++; EngineShell = popup = - XtCreatePopupShell("Adjudications", transientShellWidgetClass, + XtCreatePopupShell(_("Adjudications"), transientShellWidgetClass, shellWidget, args, i); layout = @@ -670,41 +675,41 @@ void EnginePopUp() XtSetArg(args[j], XtNright, (XtArgVal) XtChainRight); j++; XtSetArg(args[j], XtNstate, appData.periodicUpdates); j++; // XtSetArg(args[j], XtNjustify, (XtArgVal) XtJustifyLeft); j++; - w1 = XtCreateManagedWidget("Periodic Updates (Analysis Mode)", toggleWidgetClass, form, args, j); + w1 = XtCreateManagedWidget(_("Periodic Updates (Analysis Mode)"), toggleWidgetClass, form, args, j); XtSetArg(args[j], XtNwidth, (XtArgVal) &width); XtGetValues(w1, &args[j], 1); // XtSetArg(args[j-1], XtNfromVert, (XtArgVal) w1); // XtSetArg(args[j-3], XtNstate, appData.hideThinkingFromHuman); -// w2 = XtCreateManagedWidget("Hide Thinking from Human", toggleWidgetClass, form, args, j); +// w2 = XtCreateManagedWidget(_("Hide Thinking from Human"), toggleWidgetClass, form, args, j); XtSetArg(args[j], XtNwidth, (XtArgVal) width); j++; XtSetArg(args[j-2], XtNstate, appData.firstScoreIsAbsolute); XtSetArg(args[j], XtNfromVert, (XtArgVal) w1); j++; - w3 = XtCreateManagedWidget("Engine #1 Score is Absolute", toggleWidgetClass, form, args, j); + w3 = XtCreateManagedWidget(_("Engine #1 Score is Absolute"), toggleWidgetClass, form, args, j); XtSetArg(args[j-1], XtNfromVert, (XtArgVal) w3); XtSetArg(args[j-3], XtNstate, appData.secondScoreIsAbsolute); - w4 = XtCreateManagedWidget("Engine #2 Score is Absolute", toggleWidgetClass, form, args, j); + w4 = XtCreateManagedWidget(_("Engine #2 Score is Absolute"), toggleWidgetClass, form, args, j); - s1 = XtCreateManagedWidget("\nEngine-Engine Adjudications:", labelWidgetClass, form, args, 3); + s1 = XtCreateManagedWidget(_("\nEngine-Engine Adjudications:"), labelWidgetClass, form, args, 3); XtSetArg(args[j-1], XtNfromVert, (XtArgVal) s1); XtSetArg(args[j-3], XtNstate, appData.testClaims); - w5 = XtCreateManagedWidget("Verify Engine Result Claims", toggleWidgetClass, form, args, j); + w5 = XtCreateManagedWidget(_("Verify Engine Result Claims"), toggleWidgetClass, form, args, j); XtSetArg(args[j-1], XtNfromVert, (XtArgVal) w5); XtSetArg(args[j-3], XtNstate, appData.checkMates); - w6 = XtCreateManagedWidget("Detect All Mates", toggleWidgetClass, form, args, j); + w6 = XtCreateManagedWidget(_("Detect All Mates"), toggleWidgetClass, form, args, j); XtSetArg(args[j-1], XtNfromVert, (XtArgVal) w6); XtSetArg(args[j-3], XtNstate, appData.materialDraws); - w7 = XtCreateManagedWidget("Draw when Insuff. Mating Material", toggleWidgetClass, form, args, j); + w7 = XtCreateManagedWidget(_("Draw when Insuff. Mating Material"), toggleWidgetClass, form, args, j); XtSetArg(args[j-1], XtNfromVert, (XtArgVal) w7); XtSetArg(args[j-3], XtNstate, appData.trivialDraws); - w8 = XtCreateManagedWidget("Adjudicate Trivial Draws", toggleWidgetClass, form, args, j); + w8 = XtCreateManagedWidget(_("Adjudicate Trivial Draws"), toggleWidgetClass, form, args, j); XtSetArg(args[0], XtNfromVert, (XtArgVal) w4); XtSetArg(args[1], XtNborderWidth, (XtArgVal) 0); @@ -729,7 +734,7 @@ void EnginePopUp() XtAddEventHandler(engDrawMoves, ButtonPressMask, False, SetFocus, (XtPointer) popup); j= 0; - XtSetArg(args[j], XtNlabel, " moves maximum, then draw"); j++; + XtSetArg(args[j], XtNlabel, _(" moves maximum, then draw")); j++; XtSetArg(args[j], XtNjustify, (XtArgVal) XtJustifyLeft); j++; XtSetArg(args[j], XtNborderWidth, 0); j++; XtSetArg(args[j], XtNfromVert, w8); j++; @@ -761,7 +766,7 @@ void EnginePopUp() XtAddEventHandler(engThreshold, ButtonPressMask, False, SetFocus, (XtPointer) popup); j= 0; - XtSetArg(args[j], XtNlabel, "-centiPawn lead is win"); j++; + XtSetArg(args[j], XtNlabel, _("-centiPawn lead is win")); j++; XtSetArg(args[j], XtNjustify, XtJustifyLeft); j++; XtSetArg(args[j], XtNborderWidth, 0); j++; XtSetArg(args[j], XtNfromVert, engDrawMoves); j++; @@ -793,7 +798,7 @@ void EnginePopUp() XtAddEventHandler(engRule, ButtonPressMask, False, SetFocus, (XtPointer) popup); j= 0; - XtSetArg(args[j], XtNlabel, "-move rule applied"); j++; + XtSetArg(args[j], XtNlabel, _("-move rule applied")); j++; XtSetArg(args[j], XtNjustify, (XtArgVal) XtJustifyLeft); j++; XtSetArg(args[j], XtNborderWidth, 0); j++; XtSetArg(args[j], XtNfromVert, engThreshold); j++; @@ -825,7 +830,7 @@ void EnginePopUp() XtAddEventHandler(engRepeat, ButtonPressMask, False, SetFocus, (XtPointer) popup); j= 0; - XtSetArg(args[j], XtNlabel, "-fold repeat is draw"); j++; + XtSetArg(args[j], XtNlabel, _("-fold repeat is draw")); j++; XtSetArg(args[j], XtNjustify, XtJustifyLeft); j++; XtSetArg(args[j], XtNborderWidth, 0); j++; XtSetArg(args[j], XtNfromVert, engRule); j++; @@ -845,7 +850,7 @@ void EnginePopUp() XtSetArg(args[j], XtNtop, XtChainBottom); j++; XtSetArg(args[j], XtNleft, XtChainRight); j++; XtSetArg(args[j], XtNright, XtChainRight); j++; - b_ok= XtCreateManagedWidget("OK", commandWidgetClass, form, args, j); + b_ok= XtCreateManagedWidget(_("OK"), commandWidgetClass, form, args, j); XtAddCallback(b_ok, XtNcallback, EngineCallback, (XtPointer) 0); j=0; @@ -855,7 +860,7 @@ void EnginePopUp() XtSetArg(args[j], XtNtop, XtChainBottom); j++; XtSetArg(args[j], XtNleft, XtChainRight); j++; XtSetArg(args[j], XtNright, XtChainRight); j++; - b_cancel= XtCreateManagedWidget("cancel", commandWidgetClass, + b_cancel= XtCreateManagedWidget(_("cancel"), commandWidgetClass, form, args, j); XtAddCallback(b_cancel, XtNcallback, EnginePopDown, (XtPointer) 0); @@ -894,35 +899,35 @@ struct NewVarButton { }; struct NewVarButton buttonDesc[] = { - {"normal", "#FFFFFF", 0, VariantNormal}, - {"FRC", "#FFFFFF", 0, VariantFischeRandom}, - {"wild castle", "#FFFFFF", 0, VariantWildCastle}, - {"no castle", "#FFFFFF", 0, VariantNoCastle}, - {"knightmate", "#FFFFFF", 0, VariantKnightmate}, - {"berolina", "#FFFFFF", 0, VariantBerolina}, - {"cylinder", "#FFFFFF", 0, VariantCylinder}, - {"shatranj", "#FFFFFF", 0, VariantShatranj}, - {"atomic", "#FFFFFF", 0, VariantAtomic}, - {"two kings", "#FFFFFF", 0, VariantTwoKings}, - {"3-checks", "#FFFFFF", 0, Variant3Check}, - {"suicide", "#FFFFBF", 0, VariantSuicide}, - {"give-away", "#FFFFBF", 0, VariantGiveaway}, - {"losers", "#FFFFBF", 0, VariantLosers}, - {"fairy", "#BFBFBF", 0, VariantFairy}, - {"Superchess", "#FFBFBF", 0, VariantSuper}, - {"crazyhouse", "#FFBFBF", 0, VariantCrazyhouse}, - {"bughouse", "#FFBFBF", 0, VariantBughouse}, - {"shogi (9x9)", "#BFFFFF", 0, VariantShogi}, - {"xiangqi (9x10)", "#BFFFFF", 0, VariantXiangqi}, - {"courier (12x8)", "#BFFFBF", 0, VariantCourier}, - {"janus (10x8)", "#BFBFFF", 0, VariantJanus}, - {"Capablanca (10x8)", "#BFBFFF", 0, VariantCapablanca}, - {"CRC (10x8)", "#BFBFFF", 0, VariantCapaRandom}, + {N_("normal"), "#FFFFFF", 0, VariantNormal}, + {N_("FRC"), "#FFFFFF", 0, VariantFischeRandom}, + {N_("wild castle"), "#FFFFFF", 0, VariantWildCastle}, + {N_("no castle"), "#FFFFFF", 0, VariantNoCastle}, + {N_("knightmate"), "#FFFFFF", 0, VariantKnightmate}, + {N_("berolina"), "#FFFFFF", 0, VariantBerolina}, + {N_("cylinder"), "#FFFFFF", 0, VariantCylinder}, + {N_("shatranj"), "#FFFFFF", 0, VariantShatranj}, + {N_("atomic"), "#FFFFFF", 0, VariantAtomic}, + {N_("two kings"), "#FFFFFF", 0, VariantTwoKings}, + {N_("3-checks"), "#FFFFFF", 0, Variant3Check}, + {N_("suicide"), "#FFFFBF", 0, VariantSuicide}, + {N_("give-away"), "#FFFFBF", 0, VariantGiveaway}, + {N_("losers"), "#FFFFBF", 0, VariantLosers}, + {N_("fairy"), "#BFBFBF", 0, VariantFairy}, + {N_("Superchess"), "#FFBFBF", 0, VariantSuper}, + {N_("crazyhouse"), "#FFBFBF", 0, VariantCrazyhouse}, + {N_("bughouse"), "#FFBFBF", 0, VariantBughouse}, + {N_("shogi (9x9)"), "#BFFFFF", 0, VariantShogi}, + {N_("xiangqi (9x10)"), "#BFFFFF", 0, VariantXiangqi}, + {N_("courier (12x8)"), "#BFFFBF", 0, VariantCourier}, + {N_("janus (10x8)"), "#BFBFFF", 0, VariantJanus}, + {N_("Capablanca (10x8)"), "#BFBFFF", 0, VariantCapablanca}, + {N_("CRC (10x8)"), "#BFBFFF", 0, VariantCapaRandom}, #ifdef GOTHIC - {"Gothic (10x8)", "#BFBFFF", 0, VariantGothic}, + {N_("Gothic (10x8)"), "#BFBFFF", 0, VariantGothic}, #endif #ifdef FALCON - {"Falcon (10x8)", "#BFBFFF", 0, VariantFalcon}, + {N_("Falcon (10x8)"), "#BFBFFF", 0, VariantFalcon}, #endif {NULL, 0, 0, (VariantClass) 0} }; @@ -952,7 +957,7 @@ void NewVariantCallback(w, client_data, call_data) XtSetArg(args[0], XtNlabel, &name); XtGetValues(w, args, 1); - if (strcmp(name, " OK ") == 0) { + if (strcmp(name, _(" OK ")) == 0) { int nr = (int) XawToggleGetCurrent(buttonDesc[0].handle) - 1; if(nr < 0) return; v = buttonDesc[nr].variant; @@ -960,13 +965,13 @@ void NewVariantCallback(w, client_data, call_data) char *name = VariantName(v), buf[MSG_SIZ]; if (first.protocolVersion > 1 && StrStr(first.variants, name) == NULL) { /* [HGM] in protocol 2 we check if variant is suported by engine */ - sprintf(buf, "Variant %s not supported by %s", name, first.tidy); + sprintf(buf, _("Variant %s not supported by %s"), name, first.tidy); DisplayError(buf, 0); // NewVariantPopDown(); return; /* ignore OK if first engine does not support it */ } else if (second.initDone && second.protocolVersion > 1 && StrStr(second.variants, name) == NULL) { - sprintf(buf, "Warning: second engine (%s) does not support this!", second.tidy); + sprintf(buf, _("Warning: second engine (%s) does not support this!"), second.tidy); DisplayError(buf, 0); /* use of second engine is optional; only warn user */ } } @@ -999,7 +1004,7 @@ void NewVariantPopUp() // XtSetArg(args[i], XtNwidth, 250); i++; // XtSetArg(args[i], XtNheight, 300); i++; NewVariantShell = popup = - XtCreatePopupShell("NewVariant Menu", transientShellWidgetClass, + XtCreatePopupShell(_("NewVariant Menu"), transientShellWidgetClass, shellWidget, args, i); layout = @@ -1045,7 +1050,7 @@ void NewVariantPopUp() XtSetArg(args[j], XtNtop, XtChainBottom); j++; XtSetArg(args[j], XtNleft, XtChainRight); j++; XtSetArg(args[j], XtNright, XtChainRight); j++; - b_cancel= XtCreateManagedWidget("CANCEL", commandWidgetClass, form, args, j); + b_cancel= XtCreateManagedWidget(_("CANCEL"), commandWidgetClass, form, args, j); XtAddCallback(b_cancel, XtNcallback, NewVariantPopDown, (XtPointer) 0); j=0; @@ -1057,7 +1062,7 @@ void NewVariantPopUp() XtSetArg(args[j], XtNtop, XtChainBottom); j++; XtSetArg(args[j], XtNleft, XtChainRight); j++; XtSetArg(args[j], XtNright, XtChainRight); j++; - b_ok= XtCreateManagedWidget(" OK ", commandWidgetClass, form, args, j); + b_ok= XtCreateManagedWidget(_(" OK "), commandWidgetClass, form, args, j); XtAddCallback(b_ok, XtNcallback, NewVariantCallback, (XtPointer) 0); XtRealizeWidget(popup); @@ -1094,12 +1099,12 @@ struct UciControl { }; struct UciControl controlDesc[] = { - {"maximum nr of CPUs:", 0, &appData.smpCores}, - {"Polyglot Directory:", 0, &appData.polyglotDir}, - {"Hash Size (MB):", 0, &appData.defaultHashSize}, - {"EGTB Path:", 0, &appData.defaultPathEGTB}, - {"EGTB Cache (MB):", 0, &appData.defaultCacheSizeEGTB}, - {"Polyglot Book:", 0, &appData.polyglotBook}, + {N_("maximum nr of CPUs:"), 0, &appData.smpCores}, + {N_("Polyglot Directory:"), 0, &appData.polyglotDir}, + {N_("Hash Size (MB):"), 0, &appData.defaultHashSize}, + {N_("EGTB Path:"), 0, &appData.defaultPathEGTB}, + {N_("EGTB Cache (MB):"), 0, &appData.defaultCacheSizeEGTB}, + {N_("Polyglot Book:"), 0, &appData.polyglotBook}, {NULL, 0, NULL}, }; @@ -1124,7 +1129,7 @@ void UciCallback(w, client_data, call_data) XtSetArg(args[0], XtNlabel, &name); XtGetValues(w, args, 1); - if (strcmp(name, "OK") == 0) { + if (strcmp(name, _("OK")) == 0) { int nr, i, j; String name; for(i=0; i<6; i++) { XtSetArg(args[0], XtNstring, &name); @@ -1179,7 +1184,7 @@ void UciPopUp() XtSetArg(args[i], XtNresizable, True); i++; // XtSetArg(args[i], XtNwidth, 300); i++; UciShell = popup = - XtCreatePopupShell("Engine Settings", transientShellWidgetClass, + XtCreatePopupShell(_("Engine Settings"), transientShellWidgetClass, shellWidget, args, i); layout = @@ -1234,7 +1239,7 @@ void UciPopUp() XtSetArg(args[j], XtNleft, XtChainRight); j++; XtSetArg(args[j], XtNright, XtChainRight); j++; XtSetArg(args[j], XtNstate, appData.ponderNextMove); j++; - w4 = XtCreateManagedWidget("Ponder", toggleWidgetClass, form, args, j); + w4 = XtCreateManagedWidget(_("Ponder"), toggleWidgetClass, form, args, j); j=0; XtSetArg(args[j], XtNfromVert, last); j++; @@ -1242,29 +1247,29 @@ void UciPopUp() XtSetArg(args[j], XtNtop, XtChainBottom); j++; XtSetArg(args[j], XtNleft, XtChainLeft); j++; XtSetArg(args[j], XtNright, XtChainLeft); j++; - b_ok = XtCreateManagedWidget("OK", commandWidgetClass, form, args, j); + b_ok = XtCreateManagedWidget(_("OK"), commandWidgetClass, form, args, j); XtAddCallback(b_ok, XtNcallback, UciCallback, (XtPointer) 0); XtSetArg(args[j], XtNfromHoriz, b_ok); j++; - b_cancel = XtCreateManagedWidget("cancel", commandWidgetClass, form, args, j); + b_cancel = XtCreateManagedWidget(_("cancel"), commandWidgetClass, form, args, j); XtAddCallback(b_cancel, XtNcallback, UciPopDown, (XtPointer) 0); j = 5; XtSetArg(args[j], XtNfromHoriz, upperLeft); j++; XtSetArg(args[j], XtNstate, appData.usePolyglotBook); j++; - w1 = XtCreateManagedWidget(" use book ", toggleWidgetClass, form, args, j); + w1 = XtCreateManagedWidget(_(" use book "), toggleWidgetClass, form, args, j); // XtAddCallback(w1, XtNcallback, UciCallback, (XtPointer) 0); j = 5; XtSetArg(args[j], XtNfromHoriz, w1); j++; XtSetArg(args[j], XtNstate, appData.firstHasOwnBookUCI); j++; - w2 = XtCreateManagedWidget("own book 1", toggleWidgetClass, form, args, j); + w2 = XtCreateManagedWidget(_("own book 1"), toggleWidgetClass, form, args, j); // XtAddCallback(w2, XtNcallback, UciCallback, (XtPointer) 0); j = 5; XtSetArg(args[j], XtNfromHoriz, w2); j++; XtSetArg(args[j], XtNstate, appData.secondHasOwnBookUCI); j++; - w3 = XtCreateManagedWidget("own book 2", toggleWidgetClass, form, args, j); + w3 = XtCreateManagedWidget(_("own book 2"), toggleWidgetClass, form, args, j); // XtAddCallback(w3, XtNcallback, UciCallback, (XtPointer) 0); XtRealizeWidget(popup); @@ -1294,6 +1299,328 @@ void UciMenuProc(w, event, prms, nprms) UciPopUp(); } +//--------------------------- Engine-specific options menu ---------------------------------- + +int SettingsUp; +Widget SettingsShell; +int values[MAX_OPTIONS]; +ChessProgramState *currentCps; + +void SettingsPopDown() +{ + if (!SettingsUp) return; + XtPopdown(SettingsShell); + XtDestroyWidget(SettingsShell); + SettingsUp = False; + ModeHighlight(); +} + +void SpinCallback(w, client_data, call_data) + Widget w; + XtPointer client_data, call_data; +{ + String name, val; + Widget w2; + Arg args[16]; + char buf[MSG_SIZ]; + int i, j; + + XtSetArg(args[0], XtNlabel, &name); + XtGetValues(w, args, 1); + + j = 0; + XtSetArg(args[0], XtNstring, &val); + XtGetValues(currentCps->option[(int)client_data].handle, args, 1); + sscanf(val, "%d", &j); + if (strcmp(name, "+") == 0) { + if(++j > currentCps->option[(int)client_data].max) return; + } else + if (strcmp(name, "-") == 0) { + if(--j < currentCps->option[(int)client_data].min) return; + } else return; + sprintf(buf, "%d", j); + XtSetArg(args[0], XtNstring, buf); + XtSetValues(currentCps->option[(int)client_data].handle, args, 1); +} + +void SettingsCallback(w, client_data, call_data) + Widget w; + XtPointer client_data, call_data; +{ + String name, val; + Widget w2; + Arg args[16]; + char buf[MSG_SIZ]; + int i, j; + + XtSetArg(args[0], XtNlabel, &name); + XtGetValues(w, args, 1); + + if (strcmp(name, _("cancel")) == 0) { + SettingsPopDown(); + return; + } + if (strcmp(name, _("OK")) == 0 || (int)client_data) { // save buttons imply OK + int nr; + + for(i=0; inrOptions; i++) { // send all options that had to be OK-ed to engine + switch(currentCps->option[i].type) { + case TextBox: + XtSetArg(args[0], XtNstring, &val); + XtGetValues(currentCps->option[i].handle, args, 1); + if(strcmp(currentCps->option[i].textValue, val)) { + strcpy(currentCps->option[i].textValue, val); + sprintf(buf, "option %s=%s\n", currentCps->option[i].name, val); + SendToProgram(buf, currentCps); + } + break; + case Spin: + XtSetArg(args[0], XtNstring, &val); + XtGetValues(currentCps->option[i].handle, args, 1); + sscanf(val, "%d", &j); + if(j > currentCps->option[i].max) j = currentCps->option[i].max; + if(j < currentCps->option[i].min) j = currentCps->option[i].min; + if(currentCps->option[i].value != j) { + currentCps->option[i].value = j; + sprintf(buf, "option %s=%d\n", currentCps->option[i].name, j); + SendToProgram(buf, currentCps); + } + break; + case CheckBox: + j = 0; + XtSetArg(args[0], XtNstate, &j); + XtGetValues(currentCps->option[i].handle, args, 1); + if(currentCps->option[i].value != j) { + currentCps->option[i].value = j; + sprintf(buf, "option %s=%d\n", currentCps->option[i].name, j); + SendToProgram(buf, currentCps); + } + break; + case ComboBox: + if(currentCps->option[i].value != values[i]) { + currentCps->option[i].value = values[i]; + sprintf(buf, "option %s=%s\n", currentCps->option[i].name, + ((char**)currentCps->option[i].textValue)[values[i]]); + SendToProgram(buf, currentCps); + } + break; + } + } + if((int)client_data) { // send save-button command to engine + sprintf(buf, "option %s\n", name); + SendToProgram(buf, currentCps); + } + SettingsPopDown(); + return; + } + sprintf(buf, "option %s\n", name); + SendToProgram(buf, currentCps); +} + +void ComboSelect(w, addr, index) // callback for all combo items + Widget w; + caddr_t addr; + caddr_t index; +{ + Arg args[16]; + int i = ((int)addr)>>8; + int j = 255 & (int) addr; + + values[i] = j; // store in temporary, for transfer at OK + XtSetArg(args[0], XtNlabel, ((char**)currentCps->option[i].textValue)[j]); + XtSetValues(currentCps->option[i].handle, args, 1); +} + +void CreateComboPopup(parent, name, n, mb) + Widget parent; + String name; + int n; + char *mb[]; +{ + int i=0, j; + Widget menu, entry; + Arg args[16]; + + menu = XtCreatePopupShell(name, simpleMenuWidgetClass, + parent, NULL, 0); + j = 0; + XtSetArg(args[j], XtNwidth, 100); j++; +// XtSetArg(args[j], XtNright, XtChainRight); j++; + while (mb[i] != NULL) { + entry = XtCreateManagedWidget(mb[i], smeBSBObjectClass, + menu, args, j); + XtAddCallback(entry, XtNcallback, + (XtCallbackProc) ComboSelect, + (caddr_t) (256*n+i)); + i++; + } +} + +void SettingsPopUp(ChessProgramState *cps) +{ + Arg args[16]; + Widget popup, layout, dialog, edit, form, oldform, last, b_ok, b_cancel; + Window root, child; + int x, y, i, j; + int win_x, win_y; + unsigned int mask; + char def[80], *p, *q; + + // to do: start up second engine if needed + if(!cps->initDone || !cps->nrOptions) return; // nothing to be done + currentCps = cps; + + i = 0; + XtSetArg(args[i], XtNresizable, True); i++; + SettingsShell = popup = + XtCreatePopupShell(_("Settings Menu"), transientShellWidgetClass, + shellWidget, args, i); + + layout = + XtCreateManagedWidget(layoutName, formWidgetClass, popup, + layoutArgs, XtNumber(layoutArgs)); + + form = + XtCreateManagedWidget(layoutName, formWidgetClass, layout, + formArgs, XtNumber(formArgs)); + + last = NULL; + for(i=0; inrOptions; i++) { + Widget box; + switch(cps->option[i].type) { + case Spin: + sprintf(def, "%d", cps->option[i].value); + case TextBox: + j=0; + XtSetArg(args[j], XtNfromVert, last); j++; + XtSetArg(args[j], XtNborderWidth, 0); j++; + XtSetArg(args[j], XtNjustify, XtJustifyLeft); j++; + dialog = XtCreateManagedWidget(cps->option[i].name, labelWidgetClass, form, args, j); + j=0; + XtSetArg(args[j], XtNfromVert, last); j++; + XtSetArg(args[j], XtNfromHoriz, dialog); j++; + XtSetArg(args[j], XtNborderWidth, 1); j++; + XtSetArg(args[j], XtNwidth, cps->option[i].type == Spin ? 40 : 100); j++; + XtSetArg(args[j], XtNeditType, XawtextEdit); j++; + XtSetArg(args[j], XtNuseStringInPlace, False); j++; + XtSetArg(args[j], XtNdisplayCaret, False); j++; + XtSetArg(args[j], XtNright, XtChainRight); j++; + XtSetArg(args[j], XtNresizable, True); j++; + XtSetArg(args[j], XtNstring, cps->option[i].type==Spin ? def : cps->option[i].textValue); j++; + edit = last; + cps->option[i].handle = (void*) + (last = XtCreateManagedWidget("text", asciiTextWidgetClass, form, args, j)); + XtAddEventHandler(box, ButtonPressMask, False, SetFocus, (XtPointer) popup); + if(cps->option[i].type == TextBox) break; + // add increment and decrement controls for spin + j=0; + XtSetArg(args[j], XtNfromVert, edit); j++; + XtSetArg(args[j], XtNfromHoriz, box); j++; + XtSetArg(args[j], XtNheight, 10); j++; + XtSetArg(args[j], XtNwidth, 20); j++; + edit = XtCreateManagedWidget("+", commandWidgetClass, form, args, j); + XtAddCallback(edit, XtNcallback, SpinCallback, (XtPointer) i); + j=0; + XtSetArg(args[j], XtNfromVert, edit); j++; + XtSetArg(args[j], XtNfromHoriz, last); j++; + XtSetArg(args[j], XtNheight, 10); j++; + XtSetArg(args[j], XtNwidth, 20); j++; + last = XtCreateManagedWidget("-", commandWidgetClass, form, args, j); + XtAddCallback(last, XtNcallback, SpinCallback, (XtPointer) i); + break; + case CheckBox: + j=0; + XtSetArg(args[j], XtNfromVert, last); j++; + XtSetArg(args[j], XtNwidth, 10); j++; + XtSetArg(args[j], XtNheight, 10); j++; + XtSetArg(args[j], XtNstate, cps->option[i].value); j++; + cps->option[i].handle = (void*) + (dialog = XtCreateManagedWidget(" ", toggleWidgetClass, form, args, j)); + j=0; + XtSetArg(args[j], XtNfromVert, last); j++; + XtSetArg(args[j], XtNfromHoriz, dialog); j++; + XtSetArg(args[j], XtNborderWidth, 0); j++; + XtSetArg(args[j], XtNjustify, XtJustifyLeft); j++; + last = XtCreateManagedWidget(cps->option[i].name, labelWidgetClass, form, args, j); + break; + case SaveButton: + case Button: + j=0; + XtSetArg(args[j], XtNfromVert, last); j++; + XtSetArg(args[j], XtNstate, cps->option[i].value); j++; + cps->option[i].handle = (void*) + (last = XtCreateManagedWidget(cps->option[i].name, commandWidgetClass, form, args, j)); + XtAddCallback(last, XtNcallback, SettingsCallback, (XtPointer) (cps->option[i].type == SaveButton)); + break; + case ComboBox: + j=0; + XtSetArg(args[j], XtNfromVert, last); j++; + XtSetArg(args[j], XtNborderWidth, 0); j++; + XtSetArg(args[j], XtNjustify, XtJustifyLeft); j++; + dialog = XtCreateManagedWidget(cps->option[i].name, labelWidgetClass, form, args, j); + + j=0; + XtSetArg(args[j], XtNfromVert, last); j++; + XtSetArg(args[j], XtNfromHoriz, dialog); j++; + XtSetArg(args[j], XtNwidth, 100); j++; + XtSetArg(args[j], XtNmenuName, XtNewString(cps->option[i].name)); j++; + XtSetArg(args[j], XtNlabel, ((char**)cps->option[i].textValue)[cps->option[i].value]); j++; + cps->option[i].handle = (void*) + (last = XtCreateManagedWidget(" ", menuButtonWidgetClass, form, args, j)); + CreateComboPopup(last, cps->option[i].name, i, (char **) cps->option[i].textValue); + values[i] = cps->option[i].value; + break; + } + } + + j=0; + XtSetArg(args[j], XtNfromVert, last); j++; + XtSetArg(args[j], XtNbottom, XtChainBottom); j++; + XtSetArg(args[j], XtNtop, XtChainBottom); j++; + XtSetArg(args[j], XtNleft, XtChainLeft); j++; + XtSetArg(args[j], XtNright, XtChainLeft); j++; + b_ok = XtCreateManagedWidget(_("OK"), commandWidgetClass, form, args, j); + XtAddCallback(b_ok, XtNcallback, SettingsCallback, (XtPointer) 0); + + XtSetArg(args[j], XtNfromHoriz, b_ok); j++; + b_cancel = XtCreateManagedWidget(_("cancel"), commandWidgetClass, form, args, j); + XtAddCallback(b_cancel, XtNcallback, SettingsPopDown, (XtPointer) 0); + + XtRealizeWidget(popup); + CatchDeleteWindow(popup, "SettingsPopDown"); + + XQueryPointer(xDisplay, xBoardWindow, &root, &child, + &x, &y, &win_x, &win_y, &mask); + + XtSetArg(args[0], XtNx, x - 10); + XtSetArg(args[1], XtNy, y - 30); + XtSetValues(popup, args, 2); + + XtPopup(popup, XtGrabExclusive); + SettingsUp = True; + + previous = NULL; + SetFocus(edit, popup, (XEvent*) NULL, False); +} + +void FirstSettingsProc(w, event, prms, nprms) + Widget w; + XEvent *event; + String *prms; + Cardinal *nprms; +{ + SettingsPopUp(&first); +} + +void SecondSettingsProc(w, event, prms, nprms) + Widget w; + XEvent *event; + String *prms; + Cardinal *nprms; +{ + SettingsPopUp(&second); +} + //--------------------------- General Popup for Cloning ---------------------------------- #if 0 int XXXUp; @@ -1320,11 +1647,11 @@ void XXXCallback(w, client_data, call_data) XtSetArg(args[0], XtNlabel, &name); XtGetValues(w, args, 1); - if (strcmp(name, "cancel") == 0) { + if (strcmp(name, _("cancel")) == 0) { XXXPopDown(); return; } - if (strcmp(name, "ok") == 0) { + if (strcmp(name, _("ok")) == 0) { int nr; String name; name = XawDialogGetValueString(w2 = XtParent(w)); if(sscanf(name ,"%d",&nr) != 1) { @@ -1352,7 +1679,7 @@ void XXXPopUp() XtSetArg(args[i], XtNresizable, True); i++; XtSetArg(args[i], XtNwidth, DIALOG_SIZE); i++; XXXShell = popup = - XtCreatePopupShell("XXX Menu", transientShellWidgetClass, + XtCreatePopupShell(_("XXX Menu"), transientShellWidgetClass, shellWidget, args, i); layout = @@ -1367,8 +1694,8 @@ void XXXPopUp() dialog = XtCreateManagedWidget("XXX", dialogWidgetClass, layout, args, i); - XawDialogAddButton(dialog, "ok", XXXCallback, (XtPointer) dialog); - XawDialogAddButton(dialog, "cancel", XXXCallback, (XtPointer) dialog); + XawDialogAddButton(dialog, _("ok"), XXXCallback, (XtPointer) dialog); + XawDialogAddButton(dialog, _("cancel"), XXXCallback, (XtPointer) dialog); XtRealizeWidget(popup); CatchDeleteWindow(popup, "XXXPopDown");