X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=xoptions.c;h=f297ab4713acd820ddfdc01099e945c418461f70;hb=ca4e429b35c3b392bce777857c921307eac3b666;hp=eabebbe94f56fff7f51d4e3f399c778311062e5e;hpb=1f070c3ba500547459ad3df71fbdbad1e5b4b4a0;p=xboard.git diff --git a/xoptions.c b/xoptions.c index eabebbe..f297ab4 100644 --- a/xoptions.c +++ b/xoptions.c @@ -163,7 +163,7 @@ void SpinCallback(w, client_data, call_data) GetWidgetText(¤tOption[data], &val); sscanf(val, "%d", &j); - if (strcmp(name, "browse") == 0) { + if (strcmp(name, _("browse")) == 0) { char *q=val, *r; for(r = ""; *q; q++) if(*q == '.') r = q; else if(*q == '/') r = ""; // last dot after last slash if(!strcmp(r, "") && !currentCps && currentOption[data].type == FileName && currentOption[data].textValue) @@ -200,36 +200,45 @@ void ComboSelect(w, addr, index) // callback for all combo items int j = 255 & (intptr_t) addr; values[i] = j; // store in temporary, for transfer at OK - XtSetArg(args[0], XtNlabel, _(((char**)currentOption[i].textValue)[j])); + + if(currentOption[i].min & NO_GETTEXT) + XtSetArg(args[0], XtNlabel, ((char**)currentOption[i].textValue)[j]); + else + XtSetArg(args[0], XtNlabel, _(((char**)currentOption[i].textValue)[j])); + XtSetValues(currentOption[i].handle, args, 1); - if(currentOption[i].min & 1 && !currentCps && comboCallback) (comboCallback)(i); + if(currentOption[i].min & COMBO_CALLBACK && !currentCps && comboCallback) (comboCallback)(i); } -void CreateComboPopup(parent, name, n, mb) +void CreateComboPopup(parent, option, n) Widget parent; - String name; + Option *option; int n; - char *mb[]; { int i=0, j; Widget menu, entry; Arg args[16]; - menu = XtCreatePopupShell(name, simpleMenuWidgetClass, + menu = XtCreatePopupShell(option->name, simpleMenuWidgetClass, parent, NULL, 0); j = 0; XtSetArg(args[j], XtNwidth, 100); j++; // XtSetArg(args[j], XtNright, XtChainRight); j++; - while (mb[i] != NULL) { - XtSetArg(args[j], XtNlabel, _(mb[i])); - entry = XtCreateManagedWidget(mb[i], smeBSBObjectClass, - menu, args, j+1); - XtAddCallback(entry, XtNcallback, - (XtCallbackProc) ComboSelect, - (caddr_t)(intptr_t) (256*n+i)); + char **mb = (char **) option->textValue; + while (mb[i] != NULL) + { + if (option->min & NO_GETTEXT) + XtSetArg(args[j], XtNlabel, mb[i]); + else + XtSetArg(args[j], XtNlabel, _(mb[i])); + entry = XtCreateManagedWidget((String) mb[i], smeBSBObjectClass, + menu, args, j+1); + XtAddCallback(entry, XtNcallback, + (XtCallbackProc) ComboSelect, + (caddr_t)(intptr_t) (256*n+i)); i++; - } + } } @@ -352,8 +361,9 @@ 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") }, { 0, 0, 0, NULL, (void*) &appData.cycleSync, "", NULL, CheckBox, N_("Sync after cycle tourney with multiple XBoards)") }, -{ 0xD, 150, 0, NULL, (void*) &engineName, "", NULL, TextBox, "Tourney participants:" }, -{ 0, 1, 0, NULL, (void*) &engineChoice, (char*) (engineMnemonic+1), (engineMnemonic+1), ComboBox, N_("Select Engine:") }, +{ 0xD, 150, 0, NULL, (void*) &engineName, "", NULL, TextBox, N_("Tourney participants:") }, +{ 0, COMBO_CALLBACK | NO_GETTEXT, + 0, NULL, (void*) &engineChoice, (char*) (engineMnemonic+1), (engineMnemonic+1), ComboBox, N_("Select Engine:") }, { 0, 0, 10, NULL, (void*) &appData.tourneyType, "", NULL, Spin, N_("Tourney type (0 = round-robin, 1 = gauntlet):") }, { 0, 1, 1000000000, NULL, (void*) &appData.tourneyCycles, "", NULL, Spin, N_("Number of tourney cycles (or Swiss rounds):") }, { 0, 1, 1000000000, NULL, (void*) &appData.defaultMatchGames, "", NULL, Spin, N_("Default Number of Games in Match (or Pairing):") }, @@ -628,7 +638,7 @@ char *soundNames[] = { char *soundFiles[] = { // sound files corresponding to above names "", "$", - "*", // kludge alert: as first thing in the dialog readout this is replaced with the user-given .WAV filename + NULL, // kludge alert: as first thing in the dialog readout this is replaced with the user-given .WAV filename "honkhonk.wav", "cymbal.wav", "ding1.wav", @@ -751,40 +761,40 @@ int BoardOptionsOK(int n) Option boardOptions[] = { { 0, 0, 70, NULL, (void*) &appData.whitePieceColor, "", NULL, TextBox, N_("White Piece Color:") }, { 1000, 1, 0, NULL, (void*) &DefColor, NULL, (char**) "#FFFFCC", Button, " " }, -{ 1, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "R" }, -{ 2, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "G" }, -{ 3, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "B" }, -{ 4, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "D" }, +{ 1, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("R") }, +{ 2, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("G") }, +{ 3, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("B") }, +{ 4, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("D") }, { 0, 0, 70, NULL, (void*) &appData.blackPieceColor, "", NULL, TextBox, N_("Black Piece Color:") }, { 1000, 1, 0, NULL, (void*) &DefColor, NULL, (char**) "#202020", Button, " " }, -{ 1, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "R" }, -{ 2, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "G" }, -{ 3, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "B" }, -{ 4, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "D" }, +{ 1, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("R") }, +{ 2, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("G") }, +{ 3, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("B") }, +{ 4, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("D") }, { 0, 0, 70, NULL, (void*) &appData.lightSquareColor, "", NULL, TextBox, N_("Light Square Color:") }, { 1000, 1, 0, NULL, (void*) &DefColor, NULL, (char**) "#C8C365", Button, " " }, -{ 1, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "R" }, -{ 2, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "G" }, -{ 3, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "B" }, -{ 4, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "D" }, +{ 1, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("R") }, +{ 2, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("G") }, +{ 3, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("B") }, +{ 4, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("D") }, { 0, 0, 70, NULL, (void*) &appData.darkSquareColor, "", NULL, TextBox, N_("Dark Square Color:") }, { 1000, 1, 0, NULL, (void*) &DefColor, NULL, (char**) "#77A26D", Button, " " }, -{ 1, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "R" }, -{ 2, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "G" }, -{ 3, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "B" }, -{ 4, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "D" }, +{ 1, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("R") }, +{ 2, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("G") }, +{ 3, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("B") }, +{ 4, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("D") }, { 0, 0, 70, NULL, (void*) &appData.highlightSquareColor, "", NULL, TextBox, N_("Highlight Color:") }, { 1000, 1, 0, NULL, (void*) &DefColor, NULL, (char**) "#FFFF00", Button, " " }, -{ 1, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "R" }, -{ 2, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "G" }, -{ 3, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "B" }, -{ 4, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "D" }, +{ 1, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("R") }, +{ 2, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("G") }, +{ 3, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("B") }, +{ 4, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("D") }, { 0, 0, 70, NULL, (void*) &appData.premoveHighlightColor, "", NULL, TextBox, N_("Premove Highlight Color:") }, { 1000, 1, 0, NULL, (void*) &DefColor, NULL, (char**) "#FF0000", Button, " " }, -{ 1, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "R" }, -{ 2, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "G" }, -{ 3, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "B" }, -{ 4, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "D" }, +{ 1, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("R") }, +{ 2, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("G") }, +{ 3, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("B") }, +{ 4, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, N_("D") }, { 0, 0, 0, NULL, (void*) &appData.upsideDown, "", NULL, CheckBox, N_("Flip Pieces Shogi Style (Colored buttons restore default)") }, //{ 0, 0, 0, NULL, (void*) &appData.allWhite, "", NULL, CheckBox, N_("Use Outline Pieces for Black") }, { 0, 0, 0, NULL, (void*) &appData.monoMode, "", NULL, CheckBox, N_("Mono Mode") }, @@ -944,7 +954,7 @@ GenericPopUp(Option *option, char *title, int dlgNr) if(!n) { DisplayNote(_("Engine has no options")); currentCps = NULL; return 0; } if(n > 50) width = 4; else if(n>24) width = 2; else width = 1; height = n / width + 1; - if(n && (currentOption[n-1].type == Button || currentOption[n-1].type == SaveButton)) currentOption[n].min = 1; // OK on same line + if(n && (currentOption[n-1].type == Button || currentOption[n-1].type == SaveButton)) currentOption[n].min = SAME_ROW; // OK on same line currentOption[n].type = EndMark; currentOption[n].target = NULL; // delimit list by callback-less end mark } i = 0; @@ -1034,12 +1044,14 @@ GenericPopUp(Option *option, char *title, int dlgNr) XtSetArg(args[j], XtNleft, XtChainRight); j++; XtSetArg(args[j], XtNright, XtChainRight); j++; if(option[i].type == FileName || option[i].type == PathName) { - w = 50; msg = _("browse"); + msg = _("browse"); + /* automatically scale to width of text */ + XtSetArg(args[j], XtNwidth, (XtArgVal) NULL ); j++; } else { - XtSetArg(args[j], XtNheight, 10); j++; w = 20; msg = "+"; + XtSetArg(args[j], XtNheight, 10); j++; + XtSetArg(args[j], XtNwidth, w); j++; } - XtSetArg(args[j], XtNwidth, w); j++; edit = XtCreateManagedWidget(msg, commandWidgetClass, form, args, j); XtAddCallback(edit, XtNcallback, SpinCallback, (XtPointer)(intptr_t) i); @@ -1084,10 +1096,14 @@ GenericPopUp(Option *option, char *title, int dlgNr) case SaveButton: case Button: j=0; - XtSetArg(args[j], XtNfromVert, option[i].min & 1 ? lastrow : last); j++; + if(option[i].min & SAME_ROW) { + XtSetArg(args[j], XtNfromVert, lastrow); j++; + XtSetArg(args[j], XtNfromHoriz, last); j++; + } else { + XtSetArg(args[j], XtNfromVert, last); j++; + XtSetArg(args[j], XtNfromHoriz, NULL); j++; lastrow = forelast; + } XtSetArg(args[j], XtNlabel, _(option[i].name)); j++; - if(option[i].min & 1) { XtSetArg(args[j], XtNfromHoriz, last); j++; } - else { XtSetArg(args[j], XtNfromHoriz, NULL); j++; lastrow = forelast; } if(option[i].max) { XtSetArg(args[j], XtNwidth, option[i].max); j++; } if(option[i].textValue) { // special for buttons of New Variant dialog XtSetArg(args[j], XtNsensitive, appData.noChessProgram || option[i].value < 0 @@ -1130,7 +1146,7 @@ GenericPopUp(Option *option, char *title, int dlgNr) XtSetArg(args[j], XtNlabel, _(((char**)option[i].textValue)[option[i].value])); j++; option[i].handle = (void*) (last = XtCreateManagedWidget(" ", menuButtonWidgetClass, form, args, j)); - CreateComboPopup(last, option[i].name, i, (char **) option[i].textValue); + CreateComboPopup(last, option + i, i); values[i] = option[i].value; break; case Break: @@ -1170,7 +1186,7 @@ GenericPopUp(Option *option, char *title, int dlgNr) for(h=0; hxkey), buf, 10, &sym, NULL); XQueryKeymap(xDisplay,keys); metaL = XKeysymToKeycode(xDisplay, XK_Meta_L); metaR = XKeysymToKeycode(xDisplay, XK_Meta_R); - if ( n == 1 && *buf >= 32 && !(keys[metaL>>3]&1<<(metaL&7)) && !(keys[metaR>>3]&1<<(metaR&7))) { // printable, no alt + ctrlL = XKeysymToKeycode(xDisplay, XK_Control_L); + ctrlR = XKeysymToKeycode(xDisplay, XK_Control_R); + if ( n == 1 && *buf >= 32 // printable + && !(keys[metaL>>3]&1<<(metaL&7)) && !(keys[metaR>>3]&1<<(metaR&7)) // no alt key pressed + && !(keys[ctrlL>>3]&1<<(ctrlL&7)) && !(keys[ctrlR>>3]&1<<(ctrlR&7)) // no ctrl key pressed + ) + { if(appData.icsActive) { // text typed to board in ICS mode: divert to ICS input box if(shells[4]) { // box already exists: append to current contents char *p, newText[MSG_SIZ]; @@ -1626,7 +1648,7 @@ int InstallOK(int n) } Option installOptions[] = { -{ 0, 0, 0, NULL, (void*) &engineLine, (char*) engineMnemonic, engineList, ComboBox, N_("Select engine from list:") }, +{ 0, NO_GETTEXT, 0, NULL, (void*) &engineLine, (char*) engineMnemonic, engineList, ComboBox, N_("Select engine from list:") }, { 0, 0, 0, NULL, NULL, NULL, NULL, Label, N_("or specify one below:") }, { 0, 0, 0, NULL, (void*) &nickName, NULL, NULL, TextBox, N_("Nickname (optional):") }, { 0, 0, 0, NULL, (void*) &useNick, NULL, NULL, CheckBox, N_("Use nickname in PGN player tags of engine-engine games") }, @@ -1676,11 +1698,11 @@ int ShuffleOK(int n) } Option shuffleOptions[] = { -{ 0, 0, 50, NULL, (void*) &shuffleOpenings, NULL, NULL, CheckBox, "shuffle" }, -{ 0,-1,2000000000, NULL, (void*) &appData.defaultFrcPosition, "", NULL, Spin, N_("Start-position number:") }, -{ 0, 0, 0, NULL, (void*) &SetRandom, NULL, NULL, Button, "randomize" }, -{ 0, 1, 0, NULL, (void*) &SetRandom, NULL, NULL, Button, "pick fixed" }, -{ 0, 1, 0, NULL, (void*) &ShuffleOK, "", NULL, EndMark , "" } + { 0, 0, 50, 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, 1, 0, NULL, (void*) &SetRandom, NULL, NULL, Button, N_("pick fixed") }, + { 0, 1, 0, NULL, (void*) &ShuffleOK, "", NULL, EndMark , "" } }; void SetRandom(int n)