X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=xhistory.c;h=4d0afe8ccf0b81812b0df742eafe2ff485f09b7e;hb=0a3919ff10a347a8d840f75fd2c816efe52e5098;hp=919ea9a670fa1e743aa5edcf3400c49aa7416759;hpb=7f968f51c36d6e15fee97107ad7c5b85838c3f68;p=xboard.git diff --git a/xhistory.c b/xhistory.c index 919ea9a..4d0afe8 100644 --- a/xhistory.c +++ b/xhistory.c @@ -1,6 +1,7 @@ /* * New (WinBoard-style) Move history for XBoard * + * Copyright 2009, 2010, 2011, 2012 Free Software Foundation, Inc. * ------------------------------------------------------------------------ * * GNU XBoard is free software: you can redistribute it and/or modify @@ -23,31 +24,11 @@ #include #include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "common.h" -#include "frontend.h" #include "backend.h" +#include "xhistory.h" +#include "dialogs.h" #include "gettext.h" #ifdef ENABLE_NLS @@ -58,63 +39,53 @@ # define N_(s) s #endif -// templates for calls into back-end -void RefreshMemoContent P((void)); -void MemoContentUpdated P((void)); +// templates for calls into back-end (= history.c; should be moved to history.h header shared with it!) void FindMoveByCharIndex P(( int char_index )); -void AppendText P((Option *opt, char *s)); -int GenericPopUp P((Option *option, char *title, int dlgNr)); -void MarkMenu P((char *item, int dlgNr)); -void GetWidgetText P((Option *opt, char **buf)); - +// variables in nhistory.c extern Option historyOptions[]; -extern Widget shells[10]; -extern Boolean shellUp[10]; // ------------- low-level front-end actions called by MoveHistory back-end ----------------- -void HighlightMove( int from, int to, Boolean highlight ) -{ - if(!highlight) from = to = 0; - XawTextSetSelection( historyOptions[0].handle, from, to ); // for lack of a better method, use selection for highighting -} - -void ClearHistoryMemo() -{ - ClearTextWidget(&historyOptions[0]); -} - -// the bold argument says 0 = normal, 1 = bold typeface -// the colorNr argument says 0 = font-default, 1 = gray -int AppendToHistoryMemo( char * text, int bold, int colorNr ) +void +HighlightMove (int from, int to, Boolean highlight) { - Arg args[10]; - char *s; - GetWidgetText(&historyOptions[0], &s); - AppendText(&historyOptions[0], text); // for now ignore bold & color stuff, as Xaw cannot handle that - return strlen(s); +#ifdef TODO_GTK + if(highlight) + XawTextSetSelection( historyOptions[0].handle, from, to ); // for lack of a better method, use selection for highighting +#endif } -void ScrollToCurrent(int caretPos) +void +ScrollToCurrent (int caretPos) { +#ifdef TODO_GTK Arg args[10]; char *s; + int len; GetWidgetText(&historyOptions[0], &s); - if(caretPos < 0) caretPos = strlen(s); - XtSetArg(args[0], XtNdisplayCaret, False); - XtSetArg(args[1], XtNinsertPosition, caretPos); // this triggers scrolling in Xaw + len = strlen(s); + if(caretPos < 0 || caretPos > len) caretPos = len; + if(caretPos > len-30) { // scroll to end, which causes no flicker + static XEvent event; + XtCallActionProc(historyOptions[0].handle, "end-of-file", &event, NULL, 0); + return; + } + // the following leads to a very annoying flicker, even when no scrolling is done at all. + XtSetArg(args[0], XtNinsertPosition, caretPos); // this triggers scrolling in Xaw + XtSetArg(args[1], XtNdisplayCaret, False); XtSetValues(historyOptions[0].handle, args, 2); +#endif } // ------------------------------ callbacks -------------------------- -char *historyText; char historyTranslations[] = ": select-start() \n \ : extend-end() SelectMove() \n"; +#ifdef TODO_GTK void SelectMove (Widget w, XEvent * event, String * params, Cardinal * nParams) { @@ -123,53 +94,5 @@ SelectMove (Widget w, XEvent * event, String * params, Cardinal * nParams) XawTextGetSelectionPos(w, &index, &dummy); FindMoveByCharIndex( index ); // [HGM] also does the actual moving to it, now } - -Option historyOptions[] = { -{ 0xD, 200, 400, NULL, (void*) &historyText, "", NULL, TextBox, "" }, -{ 0, 2, 0, NULL, (void*) NULL, "", NULL, EndMark , "" } -}; - -// ------------ standard entry points into MoveHistory code ----------- - -Boolean MoveHistoryIsUp() -{ - return shellUp[7]; -} - -Boolean MoveHistoryDialogExists() -{ - return shells[7] != NULL; -} - -void HistoryPopUp() -{ - if(GenericPopUp(historyOptions, _("Move list"), 7)) - XtOverrideTranslations(historyOptions[0].handle, XtParseTranslationTable(historyTranslations)); - MarkMenu("menuView.Show Move History", 7); -} - -void -HistoryShowProc(w, event, prms, nprms) - Widget w; - XEvent *event; - String *prms; - Cardinal *nprms; -{ - if (!shellUp[7]) { - ASSIGN(historyText, ""); - HistoryPopUp(); - RefreshMemoContent(); - MemoContentUpdated(); - } else PopDown(7); - ToNrEvent(currentMove); -} - -// duplicate of code in winboard.c, so an move to back-end! -void -HistorySet( char movelist[][2*MOVE_LEN], int first, int last, int current ) -{ - MoveHistorySet( movelist, first, last, current, pvInfoList ); - - EvalGraphSet( first, last, current, pvInfoList ); -} +#endif