This does the same as Revert, except that it adds the destroyed
variation as comment to the original movem in PGN variation format.
RevertEvent now has an argument to indicate if it should add the
comment, or not. Comments in the abandoned variation are included in the
varriation command to the main line. (The exact layout of the variation
comment that results leaves still to be desired.)
+RevertEvent(Boolean annotate)
- if(PopTail(TRUE)) { // [HGM] vari: restore old game tail
+ if(PopTail(annotate)) { // [HGM] vari: restore old game tail
return;
}
if (gameMode != IcsExamining) {
return;
}
if (gameMode != IcsExamining) {
sprintf(moveBuf, " %d. %s", i+2>>1, SavePart(parseList[i]));
else sprintf(moveBuf, " %s", SavePart(parseList[i]));
strcat(buf, moveBuf);
sprintf(moveBuf, " %d. %s", i+2>>1, SavePart(parseList[i]));
else sprintf(moveBuf, " %s", SavePart(parseList[i]));
strcat(buf, moveBuf);
+ if(commentList[i]) { strcat(buf, " "); strcat(buf, commentList[i]); }
if(!--cnt) { strcat(buf, "\n"); cnt = 10; }
}
strcat(buf, ")");
if(!--cnt) { strcat(buf, "\n"); cnt = 10; }
}
strcat(buf, ")");
void ToEndEvent P((void));
void ToStartEvent P((void));
void ToNrEvent P((int to));
void ToEndEvent P((void));
void ToStartEvent P((void));
void ToNrEvent P((int to));
-void RevertEvent P((void));
+void RevertEvent P((Boolean annotate));
void RetractMoveEvent P((void));
void MoveNowEvent P((void));
void TruncateGameEvent P((void));
void RetractMoveEvent P((void));
void MoveNowEvent P((void));
void TruncateGameEvent P((void));
#define IDM_Debug 174\r
#define IDM_AnalysisMode 177\r
#define IDM_AnalyzeFile 178\r
#define IDM_Debug 174\r
#define IDM_AnalysisMode 177\r
#define IDM_AnalyzeFile 178\r
+#define IDM_Annotate 179\r
#define IDM_CopyGame 180\r
#define IDM_PasteGame 181\r
#define IDM_CopyPosition 182\r
#define IDM_CopyGame 180\r
#define IDM_PasteGame 181\r
#define IDM_CopyPosition 182\r
if(q) *q++ = 0;\r
if(*p) ChatPopUp(p);\r
} while(p=q);\r
if(q) *q++ = 0;\r
if(*p) ChatPopUp(p);\r
} while(p=q);\r
}\r
SetActiveWindow(hwndConsole);\r
}\r
}\r
SetActiveWindow(hwndConsole);\r
}\r
break;\r
\r
case IDM_Revert:\r
break;\r
\r
case IDM_Revert:\r
+ RevertEvent(FALSE);\r
+ break;\r
+\r
+ case IDM_Annotate: // [HGM] vari: revert with annotation\r
+ RevertEvent(TRUE);\r
break;\r
\r
case IDM_TruncateGame:\r
break;\r
\r
case IDM_TruncateGame:\r
{ // [HGM] vari: for retracting variations in local mode\r
HMENU hmenu = GetMenu(hwndMain);\r
EnableMenuItem(hmenu, IDM_Revert, MF_BYCOMMAND|(grey ? MF_GRAYED : MF_ENABLED));\r
{ // [HGM] vari: for retracting variations in local mode\r
HMENU hmenu = GetMenu(hwndMain);\r
EnableMenuItem(hmenu, IDM_Revert, MF_BYCOMMAND|(grey ? MF_GRAYED : MF_ENABLED));\r
+ EnableMenuItem(hmenu, IDM_Annotate, MF_BYCOMMAND|(grey ? MF_GRAYED : MF_ENABLED));\r
{ IDM_StopObserving, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_Upload, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_Revert, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_StopObserving, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_Upload, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_Revert, MF_BYCOMMAND|MF_GRAYED },\r
+ { IDM_Annotate, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_NewChat, MF_BYCOMMAND|MF_GRAYED },\r
{ -1, -1 }\r
};\r
{ IDM_NewChat, MF_BYCOMMAND|MF_GRAYED },\r
{ -1, -1 }\r
};\r
{ IDM_IcsOptions, MF_BYCOMMAND|MF_ENABLED },\r
{ IDM_Engine1Options, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_Engine2Options, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_IcsOptions, MF_BYCOMMAND|MF_ENABLED },\r
{ IDM_Engine1Options, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_Engine2Options, MF_BYCOMMAND|MF_GRAYED },\r
+ { IDM_Annotate, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_IcsClient, MF_BYCOMMAND|MF_GRAYED },\r
{ ACTION_POS, MF_BYPOSITION|MF_GRAYED },\r
{ IDM_Revert, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_IcsClient, MF_BYCOMMAND|MF_GRAYED },\r
{ ACTION_POS, MF_BYPOSITION|MF_GRAYED },\r
{ IDM_Revert, MF_BYCOMMAND|MF_GRAYED },\r
+ { IDM_Annotate, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_MoveNow, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_RetractMove, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_TimeControl, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_MoveNow, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_RetractMove, MF_BYCOMMAND|MF_GRAYED },\r
{ IDM_TimeControl, MF_BYCOMMAND|MF_GRAYED },\r
MENUITEM "Back to &Start\tAlt+Home", IDM_ToStart\r
MENUITEM "Forward to &End\tAlt+End", IDM_ToEnd\r
MENUITEM "Re&vert", IDM_Revert\r
MENUITEM "Back to &Start\tAlt+Home", IDM_ToStart\r
MENUITEM "Forward to &End\tAlt+End", IDM_ToEnd\r
MENUITEM "Re&vert", IDM_Revert\r
+ MENUITEM "&Annotate", IDM_Annotate\r
MENUITEM "&Truncate Game", IDM_TruncateGame\r
MENUITEM SEPARATOR\r
MENUITEM "&Move Now\tCtrl+M", IDM_MoveNow\r
MENUITEM "&Truncate Game", IDM_TruncateGame\r
MENUITEM SEPARATOR\r
MENUITEM "&Move Now\tCtrl+M", IDM_MoveNow\r
void ToStartProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void ToEndProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void RevertProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void ToStartProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void ToEndProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void RevertProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
+void AnnotateProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void TruncateGameProc P((Widget w, XEvent *event, String *prms,
Cardinal *nprms));
void RetractMoveProc P((Widget w, XEvent *event, String *prms,
void TruncateGameProc P((Widget w, XEvent *event, String *prms,
Cardinal *nprms));
void RetractMoveProc P((Widget w, XEvent *event, String *prms,
{N_("Back to Start"), ToStartProc},
{N_("Forward to End"), ToEndProc},
{N_("Revert"), RevertProc},
{N_("Back to Start"), ToStartProc},
{N_("Forward to End"), ToEndProc},
{N_("Revert"), RevertProc},
+ {N_("Annotate"), AnnotateProc},
{N_("Truncate Game"), TruncateGameProc},
{"----", NothingProc},
{N_("Move Now"), MoveNowProc},
{N_("Truncate Game"), TruncateGameProc},
{"----", NothingProc},
{N_("Move Now"), MoveNowProc},
{ "ToStartProc", ToStartProc },
{ "ToEndProc", ToEndProc },
{ "RevertProc", RevertProc },
{ "ToStartProc", ToStartProc },
{ "ToEndProc", ToEndProc },
{ "RevertProc", RevertProc },
+ { "AnnotateProc", AnnotateProc },
{ "TruncateGameProc", TruncateGameProc },
{ "MoveNowProc", MoveNowProc },
{ "RetractMoveProc", RetractMoveProc },
{ "TruncateGameProc", TruncateGameProc },
{ "MoveNowProc", MoveNowProc },
{ "RetractMoveProc", RetractMoveProc },
} else {
XtSetSensitive(w, !grey);
}
} else {
XtSetSensitive(w, !grey);
}
+ w = XtNameToWidget(menuBarWidget, "menuStep.Annotate");
+ if (w == NULL) {
+ DisplayError("menuStep.Annotate", 0);
+ } else {
+ XtSetSensitive(w, !grey);
+ }
{ "menuOptions.Hide Thinking", False },
{ "menuOptions.Ponder Next Move", False },
#endif
{ "menuOptions.Hide Thinking", False },
{ "menuOptions.Ponder Next Move", False },
#endif
+ { "menuStep.Annotate", False },
{ "menuMode.ICS Input Box", False },
{ "Action", False },
{ "menuStep.Revert", False },
{ "menuMode.ICS Input Box", False },
{ "Action", False },
{ "menuStep.Revert", False },
+ { "menuStep.Annotate", False },
{ "menuStep.Move Now", False },
{ "menuStep.Retract Move", False },
{ "menuOptions.Auto Comment", False },
{ "menuStep.Move Now", False },
{ "menuStep.Retract Move", False },
{ "menuOptions.Auto Comment", False },
{ "menuAction.Stop Observing", False },
{ "menuAction.Upload to Examine", False },
{ "menuStep.Revert", False },
{ "menuAction.Stop Observing", False },
{ "menuAction.Upload to Examine", False },
{ "menuStep.Revert", False },
+ { "menuStep.Annotate", False },
{ "menuOptions.Auto Comment", False },
{ "menuOptions.Auto Observe", False },
{ "menuOptions.Auto Raise Board", False },
{ "menuOptions.Auto Comment", False },
{ "menuOptions.Auto Observe", False },
{ "menuOptions.Auto Raise Board", False },
String *prms;
Cardinal *nprms;
{
String *prms;
Cardinal *nprms;
{
+ RevertEvent(False);
+}
+
+void AnnotateProc(w, event, prms, nprms)
+ Widget w;
+ XEvent *event;
+ String *prms;
+ Cardinal *nprms;
+{
+ RevertEvent(True);
}
void TruncateGameProc(w, event, prms, nprms)
}
void TruncateGameProc(w, event, prms, nprms)