X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=callback.c;h=cd831535fdcb208b02fb39d4f822f207bf6842c1;hb=9363a0417ee37bcbe98656aa3054c62b5fedc195;hp=652db01bb01e218a610979bc5e07a74ed00206d0;hpb=ceea9af6f6673bc83700a080d860fa68a4c29b41;p=xboard.git diff --git a/callback.c b/callback.c index 652db01..cd83153 100644 --- a/callback.c +++ b/callback.c @@ -175,6 +175,32 @@ void AboutProc (object, user_data) /* End Help Menu */ +/* Mode Menu */ + +void MachineWhiteProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + MachineWhiteEvent(); + return; +} + +void MachineBlackProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + MachineBlackEvent(); + return; +} + +void TwoMachinesProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + TwoMachinesEvent(); + return; +} + void IcsClientProc(object, user_data) GtkObject *object; gpointer user_data; @@ -183,6 +209,108 @@ void IcsClientProc(object, user_data) return; } +void +AnalyzeFileProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + if (!first.analysisSupport) + { + char buf[MSG_SIZ]; + snprintf(buf, sizeof(buf), _("%s does not support analysis"), first.tidy); + DisplayError(buf, 0); + return; + }; + Reset(FALSE, TRUE); + + if (!appData.showThinking) + ShowThinkingProc(NULL,NULL); + + AnalyzeFileEvent(); + FileNamePopUp(_("File to analyze"), "", LoadGamePopUp, "rb"); + AnalysisPeriodicEvent(1); + return; +} + +void +AnalyzeModeProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + char buf[MSG_SIZ]; + + if (!first.analysisSupport) + { + snprintf(buf, sizeof(buf), _("%s does not support analysis"), first.tidy); + DisplayError(buf, 0); + return; + } + /* [DM] icsEngineAnalyze [HGM] This is horrible code; reverse the gameMode and isEngineAnalyze tests! */ + if (appData.icsActive) + { + if (gameMode != IcsObserving) + { + sprintf(buf,_("You are not observing a game")); + DisplayError(buf, 0); + /* secure check */ + if (appData.icsEngineAnalyze) + { + if (appData.debugMode) + fprintf(debugFP, _("Found unexpected active ICS engine analyze \n")); + ExitAnalyzeMode(); + ModeHighlight(); + } + return; + } + /* if enable, use want disable icsEngineAnalyze */ + if (appData.icsEngineAnalyze) + { + ExitAnalyzeMode(); + ModeHighlight(); + return; + } + appData.icsEngineAnalyze = TRUE; + if (appData.debugMode) + fprintf(debugFP, _("ICS engine analyze starting... \n")); + } + if (!appData.showThinking) + ShowThinkingProc(NULL,NULL); + + AnalyzeModeEvent(); + return; +} + +void +EditGameProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + EditGameEvent(); + return; +} + +void +EditPositionProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + EditPositionEvent(); + return; +} + +void +TrainingProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + TrainingEvent(); + return; +} + + + +/* End Mode Menu */ + /* * File menu */ @@ -277,56 +405,9 @@ SavePositionProc(object, user_data) return; } -void -AnalyzeFileProc(object, user_data) - GtkObject *object; - gpointer user_data; -{ - if (!first.analysisSupport) - { - char buf[MSG_SIZ]; - snprintf(buf, sizeof(buf), _("%s does not support analysis"), first.tidy); - DisplayError(buf, 0); - return; - }; - Reset(FALSE, TRUE); - - if (!appData.showThinking) - ShowThinkingProc(NULL,NULL); - - AnalyzeFileEvent(); - FileNamePopUp(_("File to analyze"), "", LoadGamePopUp, "rb"); - AnalysisPeriodicEvent(1); - return; -} - /* End File Menu */ -void MachineWhiteProc(object, user_data) - GtkObject *object; - gpointer user_data; -{ - MachineWhiteEvent(); - return; -} - -void MachineBlackProc(object, user_data) - GtkObject *object; - gpointer user_data; -{ - MachineBlackEvent(); - return; -} - -void TwoMachinesProc(object, user_data) - GtkObject *object; - gpointer user_data; -{ - TwoMachinesEvent(); - return; -} - void AcceptProc(object, user_data) GtkObject *object; gpointer user_data; @@ -496,7 +577,8 @@ void RetractMoveProc(object, user_data) } /* Option Menu */ -void AutocommProc(object, user_data) +void +AutocommProc(object, user_data) GtkObject *object; gpointer user_data; { @@ -504,7 +586,8 @@ void AutocommProc(object, user_data) return; } -void AutoflagProc(object, user_data) +void +AutoflagProc(object, user_data) GtkObject *object; gpointer user_data; { @@ -512,7 +595,8 @@ void AutoflagProc(object, user_data) return; } -void AutoflipProc(object, user_data) +void +AutoflipProc(object, user_data) GtkObject *object; gpointer user_data; { @@ -520,7 +604,8 @@ void AutoflipProc(object, user_data) return; } -void ShowThinkingProc(object, user_data) +void +ShowThinkingProc(object, user_data) GtkObject *object; gpointer user_data; { @@ -530,7 +615,8 @@ void ShowThinkingProc(object, user_data) return; } -void HideThinkingProc(object, user_data) +void +HideThinkingProc(object, user_data) GtkObject *object; gpointer user_data; { @@ -540,7 +626,8 @@ void HideThinkingProc(object, user_data) return; } -void FlipViewProc(object, user_data) +void +FlipViewProc(object, user_data) GtkObject *object; gpointer user_data; { @@ -549,6 +636,217 @@ void FlipViewProc(object, user_data) return; } +void +AlwaysQueenProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + appData.alwaysPromoteToQueen = !appData.alwaysPromoteToQueen; + return; +} + +void +AnimateDraggingProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + appData.animateDragging = !appData.animateDragging; + + if (appData.animateDragging) + { + // TODO convert to gtk + // CreateAnimVars(); + }; + + return; +} + +void +AnimateMovingProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + appData.animate = !appData.animate; + + if (appData.animate) + { + // TODO convert to gtk + // CreateAnimVars(); + }; + + return; +} + +void +AutobsProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + appData.autoObserve = !appData.autoObserve; + return; +} + +void +AutoraiseProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + appData.autoRaiseBoard = !appData.autoRaiseBoard; + return; +} + +void +AutosaveProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + appData.autoSaveGames = !appData.autoSaveGames; + return; +} + +void +BlindfoldProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + appData.blindfold = !appData.blindfold; + DrawPosition(True, NULL); + return; +} + +void +TestLegalityProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + appData.testLegality = !appData.testLegality; + return; +} + +void +FlashMovesProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + if (appData.flashCount == 0) + { + appData.flashCount = 3; + } + else + { + appData.flashCount = -appData.flashCount; + }; + + // TODO: check if this is working correct*/ + return; +} + +#if HIGHDRAG +void +HighlightDraggingProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + /* TODO: connect to option menu */ + appData.highlightDragging = !appData.highlightDragging; + return; +} +#endif + +void +HighlightLastMoveProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + appData.highlightLastMove = !appData.highlightLastMove; + return; +} + +void +IcsAlarmProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + appData.icsAlarm = !appData.icsAlarm; + return; +} + +void +MoveSoundProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + appData.ringBellAfterMoves = !appData.ringBellAfterMoves; + return; +} + +void +OldSaveStyleProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + appData.oldSaveStyle = !appData.oldSaveStyle; + return; +} + +void +PeriodicUpdatesProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + PeriodicUpdatesEvent(!appData.periodicUpdates); + return; +} + +void +PremoveProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + appData.premove = !appData.premove; + return; +} + +void +QuietPlayProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + appData.quietPlay = !appData.quietPlay; + return; +} + + +void +PonderNextMoveProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + PonderNextMoveEvent(!appData.ponderNextMove); + return; +} + +void +PopupExitMessageProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + appData.popupExitMessage = !appData.popupExitMessage; + return; +} + +void +PopupMoveErrorsProc(object, user_data) + GtkObject *object; + gpointer user_data; +{ + appData.popupMoveErrors = !appData.popupMoveErrors; + return; +} + + + +/* end option menu */ gboolean CloseWindowProc(GtkWidget *button) { @@ -562,7 +860,7 @@ ResetProc (object, user_data) gpointer user_data; { ResetGameEvent(); - EngineOutputPopDown(); + return; } void WhiteClockProc(object, user_data) @@ -657,177 +955,25 @@ void UserMoveProc(window, event, data) GdkEvent *event; gpointer data; { - int x, y; - Boolean saveAnimate; - static int second = 0; - if (errorExitStatus != -1) return; - if (event->type == GDK_BUTTON_PRESS) ErrorPopDown(); - - if (promotionUp) + if (promotionUp) { - if (event->type == GDK_BUTTON_PRESS) + if (event->type == GDK_BUTTON_PRESS) { - /* todo add promotionshellwidget - XtPopdown(promotionShell); - XtDestroyWidget(promotionShell); */ promotionUp = False; ClearHighlights(); fromX = fromY = -1; } - else - { - return; - } - } - - x = EventToSquare( (int)event->button.x, BOARD_WIDTH ); - y = EventToSquare( (int)event->button.y, BOARD_HEIGHT ); - if (!flipView && y >= 0) - { - y = BOARD_HEIGHT - 1 - y; - } - if (flipView && x >= 0) - { - x = BOARD_WIDTH - 1 - x; - } - - if (fromX == -1) - { - if (event->type == ButtonPress) + else { - /* First square */ - if (OKToStartUserMove(x, y)) - { - fromX = x; - fromY = y; - second = 0; - DragPieceBegin(event->button.x, event->button.y); - if (appData.highlightDragging) - { - SetHighlights(x, y, -1, -1); - } - } - } - return; - } - - /* fromX != -1 */ - if (event->type == GDK_BUTTON_PRESS && gameMode != EditPosition && - x >= 0 && y >= 0) { - ChessSquare fromP; - ChessSquare toP; - /* Check if clicking again on the same color piece */ - fromP = boards[currentMove][fromY][fromX]; - toP = boards[currentMove][y][x]; - if ((WhitePawn <= fromP && fromP <= WhiteKing && - WhitePawn <= toP && toP <= WhiteKing) || - (BlackPawn <= fromP && fromP <= BlackKing && - BlackPawn <= toP && toP <= BlackKing)) { - /* Clicked again on same color piece -- changed his mind */ - second = (x == fromX && y == fromY); - if (appData.highlightDragging) { - SetHighlights(x, y, -1, -1); - } else { - ClearHighlights(); - } - if (OKToStartUserMove(x, y)) { - fromX = x; - fromY = y; - DragPieceBegin(event->button.x, event->button.y); - } return; - } - } - - if (event->type == GDK_BUTTON_RELEASE && x == fromX && y == fromY) - { - DragPieceEnd(event->button.x, event->button.y); - if (appData.animateDragging) - { - /* Undo animation damage if any */ - DrawPosition(FALSE, NULL); - } - if (second) - { - /* Second up/down in same square; just abort move */ - second = 0; - fromX = fromY = -1; - ClearHighlights(); - gotPremove = 0; - ClearPremoveHighlights(); - } - else - { - /* First upclick in same square; start click-click mode */ - SetHighlights(x, y, -1, -1); - } - return; - } - - /* Completed move */ - toX = x; - toY = y; - saveAnimate = appData.animate; - - if (event->type == GDK_BUTTON_PRESS) - { - /* Finish clickclick move */ - if (appData.animate || appData.highlightLastMove) - { - SetHighlights(fromX, fromY, toX, toY); - } - else - { - ClearHighlights(); } } - else - { - /* Finish drag move */ - if (appData.highlightLastMove) - { - SetHighlights(fromX, fromY, toX, toY); - } - else - { - ClearHighlights(); - } - DragPieceEnd(event->button.x, event->button.y); - /* Don't animate move and drag both */ - appData.animate = FALSE; - } - - if (IsPromotion(fromX, fromY, toX, toY)) - { - if (appData.alwaysPromoteToQueen) - { - UserMoveEvent(fromX, fromY, toX, toY, 'q'); - if (!appData.highlightLastMove || gotPremove) ClearHighlights(); - if (gotPremove) SetPremoveHighlights(fromX, fromY, toX, toY); - fromX = fromY = -1; - } - else - { - SetHighlights(fromX, fromY, toX, toY); - PromotionPopUp(); - } - } - else - { - UserMoveEvent(fromX, fromY, toX, toY, NULLCHAR); - - if (!appData.highlightLastMove || gotPremove) ClearHighlights(); - if (gotPremove) SetPremoveHighlights(fromX, fromY, toX, toY); - fromX = fromY = -1; - } - - appData.animate = saveAnimate; - if (appData.animate || appData.animateDragging) { - /* Undo animation damage if needed */ - DrawPosition(FALSE, NULL); - } + + // [HGM] mouse: the rest of the mouse handler is moved to the backend, and called here + if(event->type == GDK_BUTTON_PRESS) LeftClick(Press, (int)event->button.x, (int)event->button.y); + if(event->type == GDK_BUTTON_RELEASE) LeftClick(Release, (int)event->button.x, (int)event->button.y); return; }