X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=dialogs.c;h=cf7b85a46d79812338f85dbfd801d0d0a24dc7fc;hb=1ac2b86e4df13b07f720de1b9f0196a39c1dabde;hp=09afb952589db8784a3808ec76b8d700e8d914a0;hpb=1c03d229073e56dda9e5856db5adaae51576a3bb;p=xboard.git diff --git a/dialogs.c b/dialogs.c index 09afb95..cf7b85a 100644 --- a/dialogs.c +++ b/dialogs.c @@ -228,6 +228,7 @@ GenericReadout (Option *opts, int selected) case SaveButton: case Label: case Break: + case -1: break; } if(opts[i].type == EndMark) break; @@ -368,13 +369,14 @@ static Option generalOptions[] = { { 0, 0, 0, NULL, (void*) &appData.autoFlipView, "", NULL, CheckBox, N_("Auto Flip View") }, { 0, 0, 0, NULL, (void*) &appData.blindfold, "", NULL, CheckBox, N_("Blindfold") }, { 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.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") }, -{ 0, 0, 0, NULL, (void*) &appData.ringBellAfterMoves, "", NULL, CheckBox, N_("Move Sound") }, { 0, 0, 0, NULL, (void*) &appData.oneClick, "", NULL, CheckBox, N_("One-Click Moving") }, { 0, 0, 0, NULL, (void*) &appData.periodicUpdates, "", NULL, CheckBox, N_("Periodic Updates (in Analysis Mode)") }, { 0, SAME_ROW, 0, NULL, NULL, NULL, NULL, Break, "" }, +{ 0, 0, 0, NULL, (void*) &appData.autoExtend, "", NULL, CheckBox, N_("Play Move(s) of Clicked PV (Analysis)") }, { 0, 0, 0, NULL, (void*) &appData.ponderNextMove, "", NULL, CheckBox, N_("Ponder Next Move") }, { 0, 0, 0, NULL, (void*) &appData.popupExitMessage, "", NULL, CheckBox, N_("Popup Exit Messages") }, { 0, 0, 0, NULL, (void*) &appData.popupMoveErrors, "", NULL, CheckBox, N_("Popup Move Errors") }, @@ -425,7 +427,7 @@ static Option variantDescriptors[] = { { 0, 0, 275, NULL, NULL, NULL, NULL, Label, warning }, { 0, 0, 275, NULL, NULL, NULL, NULL, Label, "Variants marked with * can only be played\nwith legality testing off"}, { 0, SAME_ROW, 0, NULL, NULL, NULL, NULL, Break, ""}, -{ VariantFairy, 0, 135, NULL, (void*) &Pick, "#BFBFBF", NULL, Button, N_("fairy")}, +{ VariantASEAN, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_("ASEAN")}, { VariantGreat, SAME_ROW, 135, NULL, (void*) &Pick, "#BFBFFF", NULL, Button, N_("Great Shatranj (10x8)")}, { VariantSChess, 0, 135, NULL, (void*) &Pick, "#FFBFBF", NULL, Button, N_("Seirawan")}, { VariantFalcon, SAME_ROW, 135, NULL, (void*) &Pick, "#BFBFFF", NULL, Button, N_("falcon (10x8)")}, @@ -443,8 +445,22 @@ static Option variantDescriptors[] = { { VariantShogi, SAME_ROW, 135, NULL, (void*) &Pick, "#BFFFFF", NULL, Button, N_("shogi (9x9)")}, { VariantSpartan, 0, 135, NULL, (void*) &Pick, "#FF0000", NULL, Button, N_("Spartan")}, { VariantXiangqi, SAME_ROW,135, NULL, (void*) &Pick, "#BFFFFF", NULL, Button, N_("xiangqi (9x10)")}, -{ VariantNormal, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_(" ")}, // dummy, to have good alignment +{ VariantFairy, 0, 135, NULL, (void*) &Pick, "#BFBFBF", NULL, Button, N_("fairy")}, +//{ VariantNormal, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, Button, N_(" ")}, // dummy, to have good alignment { VariantCourier, SAME_ROW,135, NULL, (void*) &Pick, "#BFFFBF", NULL, Button, N_("courier (12x8)")}, +// 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 }, +{ VariantUnknown, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, -1, NULL }, +{ VariantUnknown, SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, -1, NULL }, +{ VariantUnknown, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, -1, NULL }, +{ VariantUnknown, SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, -1, NULL }, +{ VariantUnknown, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, -1, NULL }, +{ VariantUnknown, SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, -1, NULL }, +{ VariantUnknown, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, -1, NULL }, +{ VariantUnknown, SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, -1, NULL }, +{ VariantUnknown, 0, 135, NULL, (void*) &Pick, "#FFFFFF", NULL, -1, NULL }, +{ VariantUnknown, SAME_ROW,135, NULL, (void*) &Pick, "#FFFFFF", NULL, -1, NULL }, { 0, NO_OK, 0, NULL, NULL, "", NULL, EndMark , "" } }; @@ -452,6 +468,7 @@ static void Pick (int n) { VariantClass v = variantDescriptors[n].value; + if(v == VariantUnknown) safeStrCpy(engineVariant, variantDescriptors[n].name, MSG_SIZ); else *engineVariant = NULLCHAR; if(!appData.noChessProgram) { char *name = VariantName(v), buf[MSG_SIZ]; if (first.protocolVersion > 1 && StrStr(first.variants, name) == NULL) { @@ -476,16 +493,32 @@ Pick (int n) appData.pieceToCharTable = NULL; appData.pieceNickNames = ""; appData.colorNickNames = ""; - Reset(True, True); PopDown(TransientDlg); + Reset(True, True); return; } void NewVariantProc () { + static int start; + int i, last; if(appData.noChessProgram) sprintf(warning, _("Only bughouse is not available in viewer mode")); else sprintf(warning, _("All variants not supported by first engine\n(currently %s) are disabled"), first.tidy); + if(!start) while(variantDescriptors[start].type != -1) start++; // locate first spare + last = -1; + for(i=0; variantDescriptors[start+i].type != EndMark; i++) { // create buttons for engine-defined variants + char *v = EngineDefinedVariant(&first, i); + if(v) { + last = i; + ASSIGN(variantDescriptors[start+i].name, v); + variantDescriptors[start+i].type = Button; + } else variantDescriptors[start+i].type = -1; + } + if(!(last&1)) { // odd number, add filler + ASSIGN(variantDescriptors[start+last+1].name, " "); + variantDescriptors[start+last+1].type = Button; + } GenericPopUp(variantDescriptors, _("New Variant"), TransientDlg, BoardWindow, MODAL, 0); } @@ -576,6 +609,8 @@ Option icsOptions[] = { { 0, 0, 0, NULL, (void*) &appData.quietPlay, "", NULL, CheckBox, N_("Quiet Play") }, { 0, 0, 0, NULL, (void*) &appData.seekGraph, "", NULL, CheckBox, N_("Seek Graph") }, { 0, 0, 0, NULL, (void*) &appData.autoRefresh, "", NULL, CheckBox, N_("Auto-Refresh Seek Graph") }, +{ 0, 0, 0, NULL, (void*) &appData.autoBox, "", NULL, CheckBox, N_("Auto-InputBox PopUp") }, +{ 0, 0, 0, NULL, (void*) &appData.quitNext, "", NULL, CheckBox, N_("Quit after game") }, { 0, 0, 0, NULL, (void*) &appData.premove, "", NULL, CheckBox, N_("Premove") }, { 0, 0, 0, NULL, (void*) &appData.premoveWhite, "", NULL, CheckBox, N_("Premove for White") }, { 0, 0, 0, NULL, (void*) &appData.premoveWhiteText, "", NULL, TextBox, N_("First White Move:") }, @@ -653,6 +688,7 @@ LoadOptionsProc () static Option saveOptions[] = { { 0, 0, 0, NULL, (void*) &appData.autoSaveGames, "", NULL, CheckBox, N_("Auto-Save Games") }, +{ 0, 0, 0, NULL, (void*) &appData.onlyOwn, "", NULL, CheckBox, N_("Own Games Only") }, { 0, 0, 0, NULL, (void*) &appData.saveGameFile, ".pgn", NULL, FileName, N_("Save Games on File:") }, { 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:") }, @@ -919,7 +955,7 @@ IcsTextProc () textOptions[i].target = NULL; textOptions[i].min = 2; MarkMenu("View.ICStextmenu", TextMenuDlg); - GenericPopUp(textOptions, _("ICS text menu"), TextMenuDlg, BoardWindow, NONMODAL, 1); + GenericPopUp(textOptions, _("ICS text menu"), TextMenuDlg, BoardWindow, NONMODAL, appData.topLevel); } //---------------------------------------------------- Edit Comment ----------------------------------- @@ -979,7 +1015,7 @@ NewCommentPopup (char *title, char *text, int index) if(commentText) free(commentText); commentText = strdup(text); commentIndex = index; MarkMenu("View.Comments", CommentDlg); - if(GenericPopUp(commentOptions, title, CommentDlg, BoardWindow, NONMODAL, 1)) + if(GenericPopUp(commentOptions, title, CommentDlg, BoardWindow, NONMODAL, appData.topLevel)) AddHandler(&commentOptions[0], CommentDlg, 1); } @@ -1023,7 +1059,7 @@ static char *tagsText; static int NewTagsCallback (int n) { - ReplaceTags(tagsText, &gameInfo); + if(!bookUp) ReplaceTags(tagsText, &gameInfo); return 1; } @@ -1038,7 +1074,7 @@ static void changeTags (int n) { GenericReadout(tagsOptions, 1); - if(bookUp) SaveToBook(tagsText); else + if(bookUp) SaveToBook(tagsText), DisplayBook(currentMove); else ReplaceTags(tagsText, &gameInfo); } @@ -1054,7 +1090,7 @@ NewTagsPopup (char *text, char *msg) if(tagsText) free(tagsText); tagsText = strdup(text); tagsOptions[0].name = msg; MarkMenu("View.Tags", TagsDlg); - GenericPopUp(tagsOptions, title, TagsDlg, BoardWindow, NONMODAL, 1); + GenericPopUp(tagsOptions, title, TagsDlg, BoardWindow, NONMODAL, appData.topLevel); } void @@ -1150,7 +1186,7 @@ ICSInputSendText () void IcsKey (int n) { // [HGM] input: let up-arrow recall previous line from history - char *val; + char *val = NULL; // to suppress spurious warning if (!shellUp[InputBoxDlg]) return; switch(n) { @@ -1164,7 +1200,8 @@ IcsKey (int n) case -1: val = NextInHistory(); } - SetWidgetText(&boxOptions[0], val ? val : "", InputBoxDlg); + SetWidgetText(&boxOptions[0], val = val ? val : "", InputBoxDlg); + SetInsertPos(&boxOptions[0], strlen(val)); } static void @@ -1226,6 +1263,7 @@ PopUpMoveDialog (char firstchar) void BoxAutoPopUp (char *buf) { + if(!appData.autoBox) return; if(appData.icsActive) { // text typed to board in ICS mode: divert to ICS input box if(DialogExists(InputBoxDlg)) { // box already exists: append to current contents char *p, newText[MSG_SIZ]; @@ -1693,7 +1731,7 @@ ChatSwitch (int n) void ChatProc () { - if(GenericPopUp(chatOptions, _("Chat box"), ChatDlg, BoardWindow, NONMODAL, 0)) + if(GenericPopUp(chatOptions, _("Chat box"), ChatDlg, BoardWindow, NONMODAL, appData.topLevel)) AddHandler(&chatOptions[0], ChatDlg, 2), AddHandler(&chatOptions[6], ChatDlg, 2); // treats return as OK MarkMenu("View.OpenChatWindow", ChatDlg); } @@ -1870,7 +1908,7 @@ DisplayMoveError (String message) { fromX = fromY = -1; ClearHighlights(); - DrawPosition(FALSE, NULL); + DrawPosition(TRUE, NULL); // selective redraw would miss the from-square of the rejected move, displayed empty after drag, but not marked damaged! if (appData.debugMode || appData.matchMode) { fprintf(stderr, "%s: %s\n", programName, message); } @@ -2137,6 +2175,11 @@ Exp (int n, int x, int y) if(SeekGraphClick(Press, x, y, 1)) return NULL; if(but1 && !PromoScroll(x, y)) DragPieceMove(x, y); if(but3) MovePV(x, y, lineGap + BOARD_HEIGHT * (squareSize + lineGap)); + if(appData.highlightDragging) { + x = EventToSquare(x, BOARD_WIDTH); if ( flipView && x >= 0) x = BOARD_WIDTH - 1 - x; + y = EventToSquare(y, BOARD_HEIGHT); if (!flipView && y >= 0) y = BOARD_HEIGHT - 1 - y; + HoverEvent(hi2X, hi2Y, x, y); + } return NULL; } if(n != 10 && PopDown(PromoDlg)) fromX = fromY = -1; // user starts fiddling with board when promotion dialog is up @@ -2195,7 +2238,7 @@ BoardPopUp (int squareSize, int lineGap, void *clockFontThingy) if(!appData.showButtonBar) for(i=W_BUTTON; i