7 # define _(s) gettext (s)
8 # define N_(s) gettext_noop (s)
15 extern GtkWidget *about;
16 extern GtkWidget *GUI_Window;
18 extern char *programVersion;
19 extern int errorExitStatus;
20 extern int promotionUp;
27 QuitProc (object, user_data)
35 void AboutProc (object, user_data)
41 const gchar *authors[] = {"Tim Mann <tim@tim-mann.org>",
43 "Evan Welsh <Evan.Welsh@msdw.com>",
44 "Elmar Bartel <bartel@informatik.tu-muenchen.de>",
47 "Hugh Fisher <Hugh.Fisher@cs.anu.edu.au>",
49 "H.G. Muller <h.g.muller AT hccnet DOT nl>",
50 "Eric Mullins <emwine AT earthlink DOT net>",
51 "Arun Persaud <arun@nubati.net>"};
53 /* set up about window */
54 about = GTK_WIDGET(gtk_about_dialog_new());
56 /* fill in some information */
59 char *zippy = " (with Zippy code)";
63 sprintf(buf, "%s%s", programVersion, zippy);
65 gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(about),buf);
67 gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(about),
68 "Copyright 1991 Digital Equipment Corporation\n"
69 "Enhancements Copyright 1992-2009 Free Software Foundation\n"
70 "Enhancements Copyright 2005 Alessandro Scotti");
71 gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(about),"http://www.gnu.org/software/xboard/");
72 gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(about),authors);
73 gtk_about_dialog_set_translator_credits(GTK_ABOUT_DIALOG(about),
74 " A. Alper (turkish)\n"
75 " A. Persaud (german)\n");
77 /* end set up about window */
78 gtk_dialog_run(GTK_DIALOG (about));
79 gtk_widget_destroy(about);
82 void IcsClientProc(object, user_data)
90 void LoadNextGameProc(object, user_data)
98 void LoadPrevGameProc(object, user_data)
106 void ReloadGameProc(object, user_data)
114 void MachineWhiteProc(object, user_data)
122 void MachineBlackProc(object, user_data)
130 void TwoMachinesProc(object, user_data)
138 void AcceptProc(object, user_data)
146 void DeclineProc(object, user_data)
154 void RematchProc(object, user_data)
162 void CallFlagProc(object, user_data)
170 void DrawProc(object, user_data)
178 void AbortProc(object, user_data)
186 void AdjournProc(object, user_data)
194 void ResignProc(object, user_data)
202 void StopObservingProc(object, user_data)
206 StopObservingEvent();
210 void StopExaminingProc(object, user_data)
214 StopExaminingEvent();
218 void AdjuWhiteProc(object, user_data)
222 UserAdjudicationEvent(+1);
226 void AdjuBlackProc(object, user_data)
230 UserAdjudicationEvent(-1);
234 void AdjuDrawProc(object, user_data)
238 UserAdjudicationEvent(0);
242 void BackwardProc(object, user_data)
250 void ForwardProc(object, user_data)
258 void ToStartProc(object, user_data)
266 void ToEndProc(object, user_data)
274 void RevertProc(object, user_data)
282 void TruncateGameProc(object, user_data)
290 void MoveNowProc(object, user_data)
298 void RetractMoveProc(object, user_data)
306 gboolean CloseWindowProc(GtkWidget *button)
308 gtk_widget_destroy(gtk_widget_get_toplevel(button));
313 ResetProc (object, user_data)
321 void WhiteClockProc(object, user_data)
325 if (gameMode == EditPosition || gameMode == IcsExamining) {
326 SetWhiteToPlayEvent();
327 } else if (gameMode == IcsPlayingBlack || gameMode == MachinePlaysWhite) {
332 void BlackClockProc(object, user_data)
336 if (gameMode == EditPosition || gameMode == IcsExamining) {
337 SetBlackToPlayEvent();
338 } else if (gameMode == IcsPlayingWhite || gameMode == MachinePlaysBlack) {
344 void ShowCoordsProc(object, user_data)
348 appData.showCoords = !appData.showCoords;
350 DrawPosition(True, NULL);
353 void ErrorPopDownProc(object, user_data)
357 gtk_widget_destroy(GTK_WIDGET(object));
361 void PauseProc(object, user_data)
365 // todo this toggling of the pause button doesn't seem to work?
366 // e.g. select pause from buttonbar doesn't activate menumode.pause
371 void LoadGameProc(object, user_data)
376 dialog = gtk_file_chooser_dialog_new (_("Load game file name?"),
377 GTK_WINDOW(GUI_Window),
378 GTK_FILE_CHOOSER_ACTION_OPEN,
379 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
380 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
382 if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
387 filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
390 f = fopen(filename, "rb");
392 DisplayError(_("Failed to open file"), errno);
395 (void) LoadGamePopUp(f, 0, filename);
399 gtk_widget_destroy (dialog);
408 void EventProc(window, event, data)
413 /* todo do we still need this?
414 if (!XtIsRealized(widget))
418 switch (event->type) {
420 if (event->expose.count > 0) return; /* no clipping is done */
421 DrawPosition(True, NULL);
430 * event handler for parsing user moves
432 void UserMoveProc(window, event, data)
439 static int second = 0;
441 if (errorExitStatus != -1) return;
443 if (event->type == GDK_BUTTON_PRESS) ErrorPopDown();
447 if (event->type == GDK_BUTTON_PRESS)
449 /* todo add promotionshellwidget
450 XtPopdown(promotionShell);
451 XtDestroyWidget(promotionShell); */
462 x = EventToSquare( (int)event->button.x, BOARD_WIDTH );
463 y = EventToSquare( (int)event->button.y, BOARD_HEIGHT );
464 if (!flipView && y >= 0)
466 y = BOARD_HEIGHT - 1 - y;
468 if (flipView && x >= 0)
470 x = BOARD_WIDTH - 1 - x;
475 if (event->type == ButtonPress)
478 if (OKToStartUserMove(x, y))
483 DragPieceBegin(event->button.x, event->button.y);
484 if (appData.highlightDragging)
486 SetHighlights(x, y, -1, -1);
494 if (event->type == GDK_BUTTON_PRESS && gameMode != EditPosition &&
498 /* Check if clicking again on the same color piece */
499 fromP = boards[currentMove][fromY][fromX];
500 toP = boards[currentMove][y][x];
501 if ((WhitePawn <= fromP && fromP <= WhiteKing &&
502 WhitePawn <= toP && toP <= WhiteKing) ||
503 (BlackPawn <= fromP && fromP <= BlackKing &&
504 BlackPawn <= toP && toP <= BlackKing)) {
505 /* Clicked again on same color piece -- changed his mind */
506 second = (x == fromX && y == fromY);
507 if (appData.highlightDragging) {
508 SetHighlights(x, y, -1, -1);
512 if (OKToStartUserMove(x, y)) {
515 DragPieceBegin(event->button.x, event->button.y);
521 if (event->type == GDK_BUTTON_RELEASE && x == fromX && y == fromY)
523 DragPieceEnd(event->button.x, event->button.y);
524 if (appData.animateDragging)
526 /* Undo animation damage if any */
527 DrawPosition(FALSE, NULL);
531 /* Second up/down in same square; just abort move */
536 ClearPremoveHighlights();
540 /* First upclick in same square; start click-click mode */
541 SetHighlights(x, y, -1, -1);
549 saveAnimate = appData.animate;
551 if (event->type == GDK_BUTTON_PRESS)
553 /* Finish clickclick move */
554 if (appData.animate || appData.highlightLastMove)
556 SetHighlights(fromX, fromY, toX, toY);
565 /* Finish drag move */
566 if (appData.highlightLastMove)
568 SetHighlights(fromX, fromY, toX, toY);
574 DragPieceEnd(event->button.x, event->button.y);
575 /* Don't animate move and drag both */
576 appData.animate = FALSE;
579 if (IsPromotion(fromX, fromY, toX, toY))
581 if (appData.alwaysPromoteToQueen)
583 UserMoveEvent(fromX, fromY, toX, toY, 'q');
584 if (!appData.highlightLastMove || gotPremove) ClearHighlights();
585 if (gotPremove) SetPremoveHighlights(fromX, fromY, toX, toY);
590 SetHighlights(fromX, fromY, toX, toY);
596 UserMoveEvent(fromX, fromY, toX, toY, NULLCHAR);
598 if (!appData.highlightLastMove || gotPremove) ClearHighlights();
599 if (gotPremove) SetPremoveHighlights(fromX, fromY, toX, toY);
603 appData.animate = saveAnimate;
604 if (appData.animate || appData.animateDragging) {
605 /* Undo animation damage if needed */
606 DrawPosition(FALSE, NULL);