X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=nengineoutput.c;h=7b013c016ca08b5d15c957e75c394d5cfa05cee0;hb=0aa6203676d6c3e1bfb8fb6a17d801ebecf4c317;hp=31bdbe574ed445df9ce68efea4476b5e1b565b9b;hpb=7c9ee0544821f7981792be03e90ba15e9a8aeada;p=xboard.git diff --git a/nengineoutput.c b/nengineoutput.c index 31bdbe5..7b013c0 100644 --- a/nengineoutput.c +++ b/nengineoutput.c @@ -52,6 +52,7 @@ extern char *getenv(); #include "frontend.h" #include "backend.h" #include "dialogs.h" +#include "menus.h" #include "engineoutput.h" #include "gettext.h" @@ -68,6 +69,9 @@ extern char *getenv(); int windowMode = 1; char *mem1, *mem2; // dummies, as this dialog can never be OK'ed +static int currentPV, highTextStart[2], highTextEnd[2]; + +int MemoProc P((Option *opt, int n, int x, int y, char *text, int index)); Option engoutOptions[] = { { 0, LL|T2T, 17, NULL, NULL, NULL, NULL, Label, " " }, @@ -75,17 +79,48 @@ Option engoutOptions[] = { { 0, T2T|SAME_ROW, 30, NULL, NULL, NULL, NULL, Label, " " }, { 0, R2R|T2T|SAME_ROW, 188, NULL, NULL, NULL, NULL, Label, N_("move") }, { 0, RR|T2T|SAME_ROW, 80, NULL, NULL, NULL, NULL, Label, N_("NPS") }, -{200, T_VSCRL | T_TOP, 500, NULL, (void*) &mem1, "", NULL, TextBox, "" }, +{200, T_VSCRL | T_TOP, 500, NULL, (void*) &mem1, "", (char**) MemoProc, TextBox, "" }, { 0, 0, 0, NULL, NULL, "", NULL, Break , "" }, { 0, LL|T2T, 17, NULL, NULL, NULL, NULL, Label, " " }, { 0, L2L|T2T|SAME_ROW, 163, NULL, NULL, NULL, NULL, Label, N_("engine name") }, { 0, T2T|SAME_ROW, 30, NULL, NULL, NULL, NULL, Label, " " }, { 0, R2R|T2T|SAME_ROW, 188, NULL, NULL, NULL, NULL, Label, N_("move") }, { 0, RR|T2T|SAME_ROW, 80, NULL, NULL, NULL, NULL, Label, N_("NPS") }, -{200, T_VSCRL | T_TOP, 500, NULL, (void*) &mem2, "", NULL, TextBox, "" }, +{200, T_VSCRL | T_TOP, 500, NULL, (void*) &mem2, "", (char**) MemoProc, TextBox, "" }, { 0, NO_OK, 0, NULL, NULL, "", NULL, EndMark , "" } }; +int +MemoProc (Option *opt, int n, int x, int y, char *text, int index) +{ // user callback for mouse events in memo + static int pressed; // keep track of button 3 state + int start, end, currentPV = (opt != &engoutOptions[5]); + + switch(n) { + case 0: // pointer motion + if(!pressed) return FALSE; // only motion with button 3 down is of interest + MovePV(x, y, 500/*lineGap + BOARD_HEIGHT * (squareSize + lineGap)*/); + break; + case 3: // press button 3 + pressed = 1; + if(LoadMultiPV(x, y, text, index, &start, &end, currentPV)) { + highTextStart[currentPV] = start; highTextEnd[currentPV] = end; + HighlightText(&engoutOptions[currentPV ? 12 : 5], start, end, TRUE); + } + break; + case -3: // release button 3 + pressed = 0; + if(highTextStart[currentPV] != highTextEnd[currentPV]) + HighlightText(&engoutOptions[currentPV ? 12 : 5], highTextStart[currentPV], highTextEnd[currentPV], FALSE); + highTextStart[currentPV] = highTextEnd[currentPV] = 0; + UnLoadPV(); + break; + default: + return FALSE; // not meant for us; do regular event handler + } + return TRUE; +} + void SetIcon (int which, int field, int nIcon) { // first call into xengineoutput.c to pick up icon pixmap @@ -153,7 +188,7 @@ EngineOutputDialogExists () } void -EngineOutputProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +EngineOutputProc () { if (!PopDown(EngOutDlg)) EngineOutputPopUp(); }