X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=nengineoutput.c;h=088cc1c78052e75e8f7b66c9c69111f81f94ea03;hb=b737badf310f917fb0f7d5657fe7418aa4a8e401;hp=f494a7e757e32ddf2049f48e959473fe85dca7bb;hpb=21a44c336aa8cd16a38f3c682386528c8f112650;p=xboard.git diff --git a/nengineoutput.c b/nengineoutput.c index f494a7e..088cc1c 100644 --- a/nengineoutput.c +++ b/nengineoutput.c @@ -5,7 +5,7 @@ * * Copyright 2005 Alessandro Scotti * - * Enhancements Copyright 2009, 2010, 2011, 2012 Free Software Foundation, Inc. + * Enhancements Copyright 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. * * ------------------------------------------------------------------------ * @@ -69,24 +69,58 @@ extern char *getenv(); int windowMode = 1; char *mem1, *mem2; // dummies, as this dialog can never be OK'ed +int 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, " " }, +{ 0, LL|T2T, 17, NULL, NULL, NULL, NULL, Icon, " " }, { 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, T2T|SAME_ROW, 30, NULL, NULL, NULL, NULL, Icon, " " }, { 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, LL|T2T, 17, NULL, NULL, NULL, NULL, Icon, " " }, { 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, T2T|SAME_ROW, 30, NULL, NULL, NULL, NULL, Icon, " " }, { 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 @@ -121,8 +155,8 @@ EngineOutputPopUp () if (GenericPopUp(engoutOptions, _(title), EngOutDlg, BoardWindow, NONMODAL, 1)) { if(engoutOptions[STRIDE-1].type != Break) DisplayFatalError(_("Mismatch of STRIDE in nengineoutput.c\nChange and recompile!"), 0, 2); - AddHandler(&engoutOptions[MEMO], 6); - AddHandler(&engoutOptions[MEMO+STRIDE], 6); + AddHandler(&engoutOptions[MEMO], EngOutDlg, 6); + AddHandler(&engoutOptions[MEMO+STRIDE], EngOutDlg, 6); if( needInit ) { InitEngineOutput(&engoutOptions[0], &engoutOptions[MEMO]); // make icon bitmaps needInit = FALSE; @@ -158,4 +192,3 @@ EngineOutputProc () { if (!PopDown(EngOutDlg)) EngineOutputPopUp(); } -