X-Git-Url: http://winboard.nl/cgi-bin?p=xboard.git;a=blobdiff_plain;f=nengineoutput.c;h=70fc9362789d355c9f7f51334f72d649259a4baa;hp=201eb3ddfa9ce2d026ec7054e9e1e0c4a225c02c;hb=HEAD;hpb=a3bc8bca7a7781d4468cd820e891b3989fc48612 diff --git a/nengineoutput.c b/nengineoutput.c index 201eb3d..70fc936 100644 --- a/nengineoutput.c +++ b/nengineoutput.c @@ -5,7 +5,8 @@ * * Copyright 2005 Alessandro Scotti * - * Enhancements Copyright 2009, 2010, 2011, 2012 Free Software Foundation, Inc. + * Enhancements Copyright 2009, 2010, 2011, 2012, 2013, 2014, 2015, + * 2016 Free Software Foundation, Inc. * * ------------------------------------------------------------------------ * @@ -52,6 +53,7 @@ extern char *getenv(); #include "frontend.h" #include "backend.h" #include "dialogs.h" +#include "menus.h" #include "engineoutput.h" #include "gettext.h" @@ -68,28 +70,64 @@ 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, L2L|T2T|SAME_ROW, 163, NULL, NULL, NULL, NULL, Label, N_("engine name") }, -{ 0, T2T|SAME_ROW, 30, NULL, NULL, NULL, NULL, Label, " " }, +{ 0, LL|T2T, 18, NULL, NULL, NULL, NULL, Icon, " " }, +{ 0, L2L|T2T|SAME_ROW, 162, NULL, NULL, NULL, NULL, Label, N_("engine name") }, +{ 0, T2T|SAME_ROW, 30, NULL, NULL, NULL, NULL, Icon, " " }, +/* TRANSLATORS: noun, as in "the move Nf3"*/ { 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, NULL, (char**) MemoProc, TextBox, "", &appData.historyFont }, { 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, LL|T2T, 18, NULL, NULL, NULL, NULL, Icon, " " }, +{ 0, L2L|T2T|SAME_ROW, 162, NULL, NULL, NULL, NULL, Label, N_("engine name") }, +{ 0, T2T|SAME_ROW, 30, NULL, NULL, NULL, NULL, Icon, " " }, +/* TRANSLATORS: noun, as in "the move Nf3"*/ { 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, NULL, (char**) MemoProc, TextBox, "", &appData.historyFont }, { 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 - if( nIcon ) DrawIcon(&engoutOptions[STRIDE*which + field - 1], nIcon); + if( nIcon ) DrawWidgetIcon(&engoutOptions[STRIDE*which + field - 1], nIcon); } void @@ -117,13 +155,13 @@ EngineOutputPopUp () static int needInit = TRUE; static char *title = N_("Engine output"); - if (GenericPopUp(engoutOptions, _(title), EngOutDlg, BoardWindow, NONMODAL, 1)) { + if (GenericPopUp(engoutOptions, _(title), EngOutDlg, BoardWindow, NONMODAL, appData.topLevel)) { 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 ) { - InitializeEngineOutput(&engoutOptions[0], &engoutOptions[MEMO]); // make icon bitmaps + InitEngineOutput(&engoutOptions[0], &engoutOptions[MEMO]); // make icon bitmaps needInit = FALSE; } SetEngineColorIcon( 0 ); @@ -153,8 +191,7 @@ EngineOutputDialogExists () } void -EngineOutputProc (Widget w, XEvent *event, String *prms, Cardinal *nprms) +EngineOutputProc () { if (!PopDown(EngOutDlg)) EngineOutputPopUp(); } -