/*
* xhistory.c -- Move list window, part of X front end for XBoard
*
- * Copyright 2000,2009 Free Software Foundation, Inc.
+ * Copyright 2000, 2009, 2010, 2011 Free Software Foundation, Inc.
* ------------------------------------------------------------------------
*
* GNU XBoard is free software: you can redistribute it and/or modify
#include "xboard.h"
#include "xhistory.h"
#include "gettext.h"
+#include "xevalgraph.h"
#ifdef ENABLE_NLS
# define _(s) gettext (s)
#define _LL_ 100
-extern Widget formWidget, shellWidget, boardWidget, menuBarWidget;
-extern Display *xDisplay;
-extern int squareSize;
-extern Pixmap xMarkPixmap;
-extern char *layoutName;
-
struct History{
String *Nr,*white,*black;
int aNr; /* space actually alocated */
struct History *hist=0;
String dots=" ... ";
Position gameHistoryX, gameHistoryY;
-Dimension gameHistoryW;
+Dimension gameHistoryW, gameHistoryH;
void
HistoryPopDown(w, client_data, call_data)
Arg args[16];
int j;
if(hist) {
+
+ // [HGM] remember old position
+ j = 0;
+ XtSetArg(args[j], XtNx, &gameHistoryX); j++;
+ XtSetArg(args[j], XtNy, &gameHistoryY); j++;
+ XtSetArg(args[j], XtNwidth, &gameHistoryW); j++;
+ XtSetArg(args[j], XtNheight, &gameHistoryH); j++;
+ XtGetValues(hist->sh, args, j);
+ wpMoveHistory.x = gameHistoryX - 4;
+ wpMoveHistory.y = gameHistoryY - 23;
+ wpMoveHistory.width = gameHistoryW;
+ wpMoveHistory.height = gameHistoryH;
+
XtPopdown(hist->sh);
hist->Up=False;
}
j=0;
XtSetArg(args[j], XtNleftBitmap, None); j++;
- XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Show Move History"),
+ XtSetValues(XtNameToWidget(menuBarWidget, "menuView.Show Move History"),
args, j);
}
void HistorySet(char movelist[][2*MOVE_LEN],int first,int last,int current){
int i,b,m;
+ Widget scroll;
if(hist){
if(last >= hist->aNr) HistoryAlloc(last+_LL_);
for(i=0;i<last;i++) {
strncpy(hist->white[i/2+1], movelist[i], p-movelist[i]);
hist->white[i/2+1][p-movelist[i]] = NULLCHAR;
} else {
- strcpy(hist->white[i/2+1],movelist[i]);
+ safeStrCpy(hist->white[i/2+1],movelist[i], MOVE_LEN);
}
} else {
- strcpy(hist->white[i/2+1],dots);
+ safeStrCpy(hist->white[i/2+1],dots, MOVE_LEN);
}
} else {
if(movelist[i][0]) {
strncpy(hist->black[i/2+1], movelist[i], p-movelist[i]);
hist->black[i/2+1][p-movelist[i]] = NULLCHAR;
} else {
- strcpy(hist->black[i/2+1],movelist[i]);
+ safeStrCpy(hist->black[i/2+1],movelist[i], MOVE_LEN);
}
} else {
- strcpy(hist->black[i/2+1],"");
+ safeStrCpy(hist->black[i/2+1],"", MOVE_LEN);
}
}
}
- strcpy(hist->black[last/2+1],"");
+ safeStrCpy(hist->black[last/2+1],"", MOVE_LEN);
b=first/2;
m=(last+3)/2-b;
XawFormDoLayout(hist->vbox, False);
if(current) XawListHighlight(hist->mvb, current/2+1);
else XawListUnhighlight(hist->mvb);
}
+ if(scroll = XtNameToWidget(hist->sh, "*form.viewport.vertical")) { // [HGM] always scroll to bottom
+ static char *params[3] = { "", "Forward", "FullLength" };
+ static XEvent event;
+ XtCallActionProc(scroll, "StartScroll", &event, params+1, 1);
+ XtCallActionProc(scroll, "NotifyScroll", &event, params+2, 1);
+ XtCallActionProc(scroll, "EndScroll", &event, params, 0);
+ }
}
+ EvalGraphSet( first, last, current, pvInfoList ); // piggy-backed
}
Widget HistoryCreate()
XtSetArg(args[j], XtNresizable, True); j++;
XtSetArg(args[j], XtNallowShellResize, True); j++;
#if TOPLEVEL
- hist->sh =
+ hist->sh = historyShell =
XtCreatePopupShell(_("Move list"), topLevelShellWidgetClass,
shellWidget, args, j);
#else
- hist->sh =
+ hist->sh = historyShell =
XtCreatePopupShell(_("Move list"), transientShellWidgetClass,
shellWidget, args, j);
#endif
form =
XtCreateManagedWidget("form", formWidgetClass, layout, args, j);
- j=0;
j = 0;
-
XtSetArg(args[j], XtNtop, XtChainTop); j++;
XtSetArg(args[j], XtNbottom, XtChainBottom); j++;
XtSetArg(args[j], XtNleft, XtChainLeft); j++;
CatchDeleteWindow(hist->sh, "HistoryPopDown");
for(i=1;i<hist->aNr;i++){
- strcpy(hist->white[i],dots);
- strcpy(hist->black[i],"");
+ safeStrCpy(hist->white[i],dots, MOVE_LEN);
+ safeStrCpy(hist->black[i],"", MOVE_LEN);
}
+ if(wpMoveHistory.width > 0) {
+ gameHistoryW = wpMoveHistory.width;
+ gameHistoryH = wpMoveHistory.height;
+ gameHistoryX = wpMoveHistory.x;
+ gameHistoryY = wpMoveHistory.y;
+ }
+
// [HGM] restore old position
+ if(gameHistoryW > 0) {
j = 0;
- XtSetArg(args[j], XtNx, &gameHistoryX); j++;
- XtSetArg(args[j], XtNy, &gameHistoryY); j++;
- XtSetArg(args[j], XtNwidth, &gameHistoryW); j++;
- XtGetValues(shellWidget, args, j);
- j = 0;
- XtSetArg(args[j], XtNx, gameHistoryX + gameHistoryW); j++;
+ XtSetArg(args[j], XtNx, gameHistoryX); j++;
XtSetArg(args[j], XtNy, gameHistoryY); j++;
+ XtSetArg(args[j], XtNwidth, gameHistoryW); j++;
+ XtSetArg(args[j], XtNheight, gameHistoryH); j++;
XtSetValues(hist->sh, args, j);
+ }
XtRealizeWidget(hist->sh);
return hist->sh;
j=0;
XtSetArg(args[j], XtNleftBitmap, xMarkPixmap); j++;
- XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Show Move History"),
+ XtSetValues(XtNameToWidget(menuBarWidget, "menuView.Show Move History"),
args, j);
hist->Up=True;
}
ToNrEvent(currentMove);
}
+Boolean
+MoveHistoryIsUp()
+{
+ return hist && hist->Up;
+}