X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=dialogs.c;h=32f1e34d7ba768b2ad2154357da9e4d04bfb265c;hb=ad2b3cdfb2502c0cded2425a6fd1dd6f87b6c97e;hp=c4971d44cdc8b6d25da9aada0520dbda55961ece;hpb=36a8ecfac505400350e6d26fb6d1ad1d4cf0d4be;p=xboard.git diff --git a/dialogs.c b/dialogs.c index c4971d4..32f1e34 100644 --- a/dialogs.c +++ b/dialogs.c @@ -48,8 +48,9 @@ extern char *getenv(); #include #include "common.h" +#include "frontend.h" #include "backend.h" -#include "xboard.h" +#include "xboard2.h" #include "menus.h" #include "dialogs.h" #include "gettext.h" @@ -260,8 +261,8 @@ static Option matchOptions[] = { { 0, SAME_ROW|LL, 0, NULL, NULL, "", NULL, Label, N_(" (for concurrent playing of a single") }, { 0, 0, 0, NULL, (void*) &appData.cycleSync, "", NULL, CheckBox, N_("Sync after cycle") }, { 0, SAME_ROW|LL, 0, NULL, NULL, "", NULL, Label, N_(" tourney with multiple XBoards)") }, -{ 0, LR, 200, NULL, NULL, "", NULL, Label, N_("Tourney participants:") }, -{ 0, SAME_ROW|RR, 0, NULL, NULL, "", NULL, Label, N_("Select Engine:") }, +{ 0, LR, 175, NULL, NULL, "", NULL, Label, N_("Tourney participants:") }, +{ 0, SAME_ROW|RR, 175, NULL, NULL, "", NULL, Label, N_("Select Engine:") }, { 150, T_VSCRL | T_FILL | T_WRAP, 175, NULL, (void*) &engineName, "", NULL, TextBox, "" }, { 150, SAME_ROW|RR, @@ -327,7 +328,7 @@ AddToTourney (int n, int sel) } nr = NamesToList(firstChessProgramNames, engineList, engineMnemonic, buf); // replace list by only the group contents ASSIGN(engineMnemonic[0], buf); - LoadListBox(&matchOptions[8], _("# no engines are installed")); + LoadListBox(&matchOptions[8], _("# no engines are installed"), -1, -1); HighlightWithScroll(&matchOptions[8], 0, nr); } @@ -920,6 +921,9 @@ static char *commentText; static int commentIndex; static void ClearComment P((int n)); static void SaveChanges P((int n)); +int savedIndex; /* gross that this is global (and even across files...) */ + +static int CommentClick P((Option *opt, int n, int x, int y, char *val, int index)); static int NewComCallback (int n) @@ -929,12 +933,22 @@ NewComCallback (int n) } Option commentOptions[] = { -{ 200, T_VSCRL | T_FILL | T_WRAP | T_TOP, 250, NULL, (void*) &commentText, "", NULL, TextBox, "" }, +{ 200, T_VSCRL | T_FILL | T_WRAP | T_TOP, 250, NULL, (void*) &commentText, "", (MemoCallback *) &CommentClick, TextBox, "" }, { 0, 0, 50, NULL, (void*) &ClearComment, NULL, NULL, Button, N_("clear") }, { 0, SAME_ROW, 100, NULL, (void*) &SaveChanges, NULL, NULL, Button, N_("save changes") }, { 0, SAME_ROW, 0, NULL, (void*) &NewComCallback, "", NULL, EndMark , "" } }; +static int +CommentClick (Option *opt, int n, int x, int y, char *val, int index) +{ + if(n != 3) return FALSE; // only button-3 press is of interest + ReplaceComment(savedIndex, val); + if(savedIndex != currentMove) ToNrEvent(savedIndex); + LoadVariation( index, val ); // [HGM] also does the actual moving to it, now + return TRUE; +} + static void SaveChanges (int n) { @@ -959,10 +973,32 @@ NewCommentPopup (char *title, char *text, int index) commentIndex = index; MarkMenu("View.Comments", CommentDlg); if(GenericPopUp(commentOptions, title, CommentDlg, BoardWindow, NONMODAL, 1)) - AddHandler(&commentOptions[0], 1); + AddHandler(&commentOptions[0], CommentDlg, 1); } void +EditCommentPopUp (int index, char *title, char *text) +{ + savedIndex = index; + if (text == NULL) text = ""; + NewCommentPopup(title, text, index); +} + +void +CommentPopUp (char *title, char *text) +{ + savedIndex = currentMove; // [HGM] vari + NewCommentPopup(title, text, currentMove); +} + +void +CommentPopDown () +{ + PopDown(CommentDlg); +} + + +void EditCommentProc () { if (PopDown(CommentDlg)) { // popdown succesful @@ -1014,6 +1050,31 @@ NewTagsPopup (char *text, char *msg) GenericPopUp(tagsOptions, title, TagsDlg, BoardWindow, NONMODAL, 1); } +void +TagsPopUp (char *tags, char *msg) +{ + NewTagsPopup(tags, cmailMsgLoaded ? msg : NULL); +} + +void +EditTagsPopUp (char *tags, char **dest) +{ // wrapper to preserve old name used in back-end + NewTagsPopup(tags, NULL); +} + +void +TagsPopDown() +{ + PopDown(TagsDlg); + bookUp = False; +} + +void +EditTagsProc () +{ + if (bookUp || !PopDown(TagsDlg)) EditTagsEvent(); +} + //---------------------------------------------- ICS Input Box ---------------------------------- char *icsText; @@ -1119,7 +1180,8 @@ ICSInputBoxPopUp () { MarkMenu("View.ICSInputBox", InputBoxDlg); if(GenericPopUp(boxOptions, _("ICS input box"), InputBoxDlg, BoardWindow, NONMODAL, 0)) - AddHandler(&boxOptions[0], 3); + AddHandler(&boxOptions[0], InputBoxDlg, 3); + CursorAtEnd(&boxOptions[0]); } void @@ -1150,7 +1212,8 @@ PopUpMoveDialog (char firstchar) static char buf[2]; buf[0] = firstchar; ASSIGN(icsText, buf); if(GenericPopUp(typeOptions, _("Type a move"), TransientDlg, BoardWindow, MODAL, 0)) - AddHandler(&typeOptions[0], 2); + AddHandler(&typeOptions[0], TransientDlg, 2); + CursorAtEnd(&typeOptions[0]); } void @@ -1173,6 +1236,7 @@ BoxAutoPopUp (char *buf) void SettingsPopUp (ChessProgramState *cps) { + if(!cps->nrOptions) { DisplayNote(_("Engine has no options")); return; } currentCps = cps; GenericPopUp(cps->option, _("Engine Settings"), TransientDlg, BoardWindow, MODAL, 0); } @@ -1241,7 +1305,7 @@ EngSel (int n, int sel) } nr = NamesToList(firstChessProgramNames, engineList, engineMnemonic, buf); // replace list by only the group contents ASSIGN(engineMnemonic[0], buf); - LoadListBox(&installOptions[1], _("# no engines are installed")); + LoadListBox(&installOptions[1], _("# no engines are installed"), -1, -1); HighlightWithScroll(&installOptions[1], 0, nr); } @@ -1440,7 +1504,7 @@ AskQuestion (char *title, char *question, char *replyPrefix, ProcRef pr) ASSIGN(answer, ""); askOptions[0].name = question; if(GenericPopUp(askOptions, title, AskDlg, BoardWindow, MODAL, 0)) - AddHandler(&askOptions[1], 2); + AddHandler(&askOptions[1], AskDlg, 2); } //---------------------------- Promotion Popup -------------------------------------- @@ -1622,7 +1686,7 @@ void ChatProc () { if(GenericPopUp(chatOptions, _("Chat box"), ChatDlg, BoardWindow, NONMODAL, 0)) - AddHandler(&chatOptions[0], 2), AddHandler(&chatOptions[6], 2); // treats return as OK + AddHandler(&chatOptions[0], ChatDlg, 2), AddHandler(&chatOptions[6], ChatDlg, 2); // treats return as OK MarkMenu("View.OpenChatWindow", ChatDlg); } @@ -1661,7 +1725,7 @@ static void GLT_Button P((int n)); static int GLT_OK P((int n)); static Option listOptions[] = { -{ 0, LR|TB, 200, NULL, (void*) strings, "", NULL, ListBox, "" }, +{300, LR|TB, 200, NULL, (void*) strings, "", NULL, ListBox, "" }, // For GTK we need to specify a height, as default would just show 3 lines { 0, 0, 0, NULL, (void*) &GLT_Button, NULL, NULL, Button, N_("factory") }, { 0, SAME_ROW, 0, NULL, (void*) &GLT_Button, NULL, NULL, Button, N_("up") }, { 0, SAME_ROW, 0, NULL, (void*) &GLT_Button, NULL, NULL, Button, N_("down") }, @@ -1690,17 +1754,19 @@ GLT_Button (int n) if(index >= strlen(GLT_ALL_TAGS)) return; strings[index] = strings[index+1]; strings[++index] = p; + LoadListBox(&listOptions[0], "?", index, index-1); // only change the two specified entries } else if (n == 2) { if(index == 0) return; strings[index] = strings[index-1]; strings[--index] = p; + LoadListBox(&listOptions[0], "?", index, index+1); } else if (n == 1) { safeStrCpy(lpUserGLT, GLT_DEFAULT_TAGS, LPUSERGLT_SIZE); GLT_TagsToList(lpUserGLT); index = 0; - LoadListBox(&listOptions[0], "?"); // Note: the others don't need this, as the highlight switching redraws the change items + LoadListBox(&listOptions[0], "?", -1, -1); } HighlightListBoxItem(&listOptions[0], index); } @@ -1984,7 +2050,7 @@ CCB (int n) } Option mainOptions[] = { // description of main window in terms of generic dialog creator -{ 0, 0xCA, 0, NULL, NULL, "", NULL, BoxBegin, "" }, // menu bar +{ 0, 0xCA, 0, NULL, NULL, "", NULL, BarBegin, "" }, // menu bar { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("File") }, { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("Edit") }, { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("View") }, @@ -1993,11 +2059,11 @@ Option mainOptions[] = { // description of main window in terms of generic dialo { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("Engine") }, { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("Options") }, { 0, COMBO_CALLBACK, 0, NULL, (void*)&MenuCallback, NULL, NULL, DropDown, N_("Help") }, -{ 0, 0, 0, NULL, (void*)&SizeKludge, "", NULL, BoxEnd, "" }, +{ 0, 0, 0, NULL, (void*)&SizeKludge, "", NULL, BarEnd, "" }, { 0, LR|T2T|BORDER|SAME_ROW, 0, NULL, NULL, "", NULL, Label, "1" }, // optional title in window { 50, LL|TT, 100, NULL, (void*) &LogoW, NULL, NULL, -1, "LogoW" }, // white logo -{ 0, L2L|T2T, 200, NULL, (void*) &CCB, NULL, NULL, Label, "White" }, // white clock -{ 0, R2R|T2T|SAME_ROW, 200, NULL, (void*) &CCB, NULL, NULL, Label, "Black" }, // black clock +{ 12, L2L|T2T, 200, NULL, (void*) &CCB, NULL, NULL, Label, "White" }, // white clock +{ 13, R2R|T2T|SAME_ROW, 200, NULL, (void*) &CCB, NULL, NULL, Label, "Black" }, // black clock { 50, RR|TT|SAME_ROW, 100, NULL, (void*) &LogoB, NULL, NULL, -1, "LogoB" }, // black logo { 0, LR|T2T|BORDER, 401, NULL, NULL, "", NULL, -1, "2" }, // backup for title in window (if no room for other) { 0, LR|T2T|BORDER, 270, NULL, NULL, "", NULL, Label, "message" }, // message field @@ -2044,7 +2110,7 @@ MenuCallback (int n) { MenuProc *proc = (MenuProc *) (((MenuItem*)(mainOptions[n].choice))[values[n]].proc); - (proc)(); + if(!proc) RecentEngineEvent(values[n] - firstEngineItem); else (proc)(); } static Option * @@ -2114,6 +2180,7 @@ BoardPopUp (int squareSize, int lineGap, void *clockFontThingy) } if(!appData.showButtonBar) for(i=W_BUTTON; i