Also configure sweep selection
[xboard.git] / xoptions.c
index 8b9b644..40758fc 100644 (file)
@@ -220,13 +220,13 @@ CreateComboPopup (Widget parent, Option *option, int n)
     int i=0, j;
     Widget menu, entry;
     Arg args[16];
+    char **mb = (char **) option->textValue;
 
+    if(mb[0] == NULL) return; // avoid empty menus, as they cause crash
     menu = XtCreatePopupShell(option->name, simpleMenuWidgetClass,
                              parent, NULL, 0);
     j = 0;
     XtSetArg(args[j], XtNwidth, 100);  j++;
-//    XtSetArg(args[j], XtNright, XtChainRight);  j++;
-    char **mb = (char **) option->textValue;
     while (mb[i] != NULL) 
       {
        if (option->min & NO_GETTEXT)
@@ -641,6 +641,7 @@ Option saveOptions[] = {
 { 0, 0, 0, NULL, (void*) &appData.savePositionFile, ".fen", NULL, FileName,  N_("Save Final Positions on File:") },
 { 0, 0, 0, NULL, (void*) &appData.pgnEventHeader, "", NULL, TextBox,  N_("PGN Event Header:") },
 { 0, 0, 0, NULL, (void*) &appData.oldSaveStyle, "", NULL, CheckBox, N_("Old Save Style (as opposed to PGN)") },
+{ 0, 0, 0, NULL, (void*) &appData.numberTag, "", NULL, CheckBox, N_("Include Number Tag in tourney PGN") },
 { 0, 0, 0, NULL, (void*) &appData.saveExtendedInfoInPGN, "", NULL, CheckBox, N_("Save Score/Depth Info in PGN") },
 { 0, 0, 0, NULL, (void*) &appData.saveOutOfBookInfo, "", NULL, CheckBox, N_("Save Out-of-Book Info in PGN           ") },
 { 0, 1, 0, NULL, NULL, "", NULL, EndMark , "" }
@@ -1082,6 +1083,7 @@ GenericPopUp (Option *option, char *title, int dlgNr)
            XtSetArg(args[j], XtNfromVert, last);  j++;
            XtSetArg(args[j], XtNleft, XtChainLeft); j++;
            XtSetArg(args[j], XtNright, XtChainLeft); j++;
+           XtSetArg(args[j], XtNheight, textHeight),  j++;
            XtSetArg(args[j], XtNborderWidth, 0);  j++;
            XtSetArg(args[j], XtNjustify, XtJustifyLeft);  j++;
            XtSetArg(args[j], XtNlabel, _(option[i].name));  j++;
@@ -1130,9 +1132,10 @@ GenericPopUp (Option *option, char *title, int dlgNr)
                msg = _("browse"); w = 0;
                /* automatically scale to width of text */
                XtSetArg(args[j], XtNwidth, (XtArgVal) NULL );  j++;
+               if(textHeight) XtSetArg(args[j], XtNheight, textHeight),  j++;
            } else {
                w = 20; msg = "+";
-               XtSetArg(args[j], XtNheight, 10);  j++;
+               XtSetArg(args[j], XtNheight, textHeight/2);  j++;
                XtSetArg(args[j], XtNwidth,   w);  j++;
            }
            edit = XtCreateManagedWidget(msg, commandWidgetClass, form, args, j);
@@ -1144,7 +1147,8 @@ GenericPopUp (Option *option, char *title, int dlgNr)
            j=0;
            XtSetArg(args[j], XtNfromVert, edit);  j++;
            XtSetArg(args[j], XtNfromHoriz, last);  j++;
-           XtSetArg(args[j], XtNheight, 10);  j++;
+           XtSetArg(args[j], XtNvertDistance, -1);  j++;
+           XtSetArg(args[j], XtNheight, textHeight/2);  j++;
            XtSetArg(args[j], XtNwidth, 20);  j++;
            XtSetArg(args[j], XtNleft, XtChainRight); j++;
            XtSetArg(args[j], XtNright, XtChainRight); j++;
@@ -1155,8 +1159,9 @@ GenericPopUp (Option *option, char *title, int dlgNr)
            if(!currentCps) option[i].value = *(Boolean*)option[i].target;
            j=0;
            XtSetArg(args[j], XtNfromVert, last);  j++;
-           XtSetArg(args[j], XtNwidth, 10);  j++;
-           XtSetArg(args[j], XtNheight, 10);  j++;
+           XtSetArg(args[j], XtNvertDistance, (textHeight+2)/4 + 3);  j++;
+           XtSetArg(args[j], XtNwidth, textHeight/2);  j++;
+           XtSetArg(args[j], XtNheight, textHeight/2);  j++;
            XtSetArg(args[j], XtNleft, XtChainLeft); j++;
            XtSetArg(args[j], XtNright, XtChainLeft); j++;
            XtSetArg(args[j], XtNstate, option[i].value);  j++;
@@ -1169,6 +1174,7 @@ GenericPopUp (Option *option, char *title, int dlgNr)
            j=0;
            XtSetArg(args[j], XtNfromVert, last);  j++;
            XtSetArg(args[j], XtNfromHoriz, option[i].type != Label ? dialog : NULL);  j++;
+           if(option[i].type != Label) XtSetArg(args[j], XtNheight, textHeight),  j++;
            XtSetArg(args[j], XtNleft, XtChainLeft); j++;
            XtSetArg(args[j], XtNborderWidth, 0);  j++;
            XtSetArg(args[j], XtNjustify, XtJustifyLeft);  j++;
@@ -1183,11 +1189,14 @@ GenericPopUp (Option *option, char *title, int dlgNr)
            if(option[i].min & SAME_ROW) {
                XtSetArg(args[j], XtNfromVert, lastrow);  j++;
                XtSetArg(args[j], XtNfromHoriz, last);  j++;
+               XtSetArg(args[j], XtNleft, XtChainRight); j++;
+               XtSetArg(args[j], XtNright, XtChainRight); j++;
            } else {
                XtSetArg(args[j], XtNfromVert, last);  j++;
                XtSetArg(args[j], XtNfromHoriz, NULL);  j++; lastrow = forelast;
            }
            XtSetArg(args[j], XtNlabel, _(option[i].name));  j++;
+           XtSetArg(args[j], XtNheight, textHeight),  j++;
            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
@@ -1210,6 +1219,7 @@ GenericPopUp (Option *option, char *title, int dlgNr)
            XtSetArg(args[j], XtNfromVert, last);  j++;
            XtSetArg(args[j], XtNleft, XtChainLeft); j++;
            XtSetArg(args[j], XtNright, XtChainLeft); j++;
+           XtSetArg(args[j], XtNheight, textHeight),  j++;
            XtSetArg(args[j], XtNborderWidth, 0);  j++;
            XtSetArg(args[j], XtNjustify, XtJustifyLeft);  j++;
            XtSetArg(args[j], XtNlabel, _(option[i].name));  j++;
@@ -1228,6 +1238,7 @@ GenericPopUp (Option *option, char *title, int dlgNr)
            XtSetArg(args[j], XtNleft, XtChainLeft); j++;
            XtSetArg(args[j], XtNmenuName, XtNewString(option[i].name));  j++;
            XtSetArg(args[j], XtNlabel, _(((char**)option[i].textValue)[option[i].value]));  j++;
+           XtSetArg(args[j], XtNheight, textHeight),  j++;
            option[i].handle = (void*)
                (last = XtCreateManagedWidget(" ", menuButtonWidgetClass, form, args, j));
            CreateComboPopup(last, option + i, i);
@@ -1315,6 +1326,7 @@ GenericPopUp (Option *option, char *title, int dlgNr)
     XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
     XtSetArg(args[j], XtNleft, XtChainRight);  j++;
     XtSetArg(args[j], XtNright, XtChainRight);  j++;
+    XtSetArg(args[j], XtNheight, textHeight),  j++;
     b_ok = XtCreateManagedWidget(_("OK"), commandWidgetClass, form, args, j);
     XtAddCallback(b_ok, XtNcallback, GenericCallback, (XtPointer)(intptr_t) dlgNr + (dlgNr<<16));
 
@@ -1413,7 +1425,7 @@ OptionsProc (Widget w, XEvent *event, String *prms, Cardinal *nprms)
 void
 MatchOptionsProc (Widget w, XEvent *event, String *prms, Cardinal *nprms)
 {
-   NamesToList(firstChessProgramNames, engineList, engineMnemonic);
+   NamesToList(firstChessProgramNames, engineList, engineMnemonic, "all");
    comboCallback = &AddToTourney;
    matchOptions[5].min = -(appData.pairingEngine[0] != NULLCHAR); // with pairing engine, allow Swiss
    ASSIGN(tfName, appData.tourneyFile[0] ? appData.tourneyFile : MakeName(appData.defName));
@@ -1742,7 +1754,7 @@ LoadEngineProc (Widget w, XEvent *event, String *prms, Cardinal *nprms)
    if(engineDir)    free(engineDir);    engineDir = strdup("");
    if(nickName)     free(nickName);     nickName = strdup("");
    if(params)       free(params);       params = strdup("");
-   NamesToList(firstChessProgramNames, engineList, engineMnemonic);
+   NamesToList(firstChessProgramNames, engineList, engineMnemonic, "all");
    GenericPopUp(installOptions, _("Load engine"), 0);
 }