summaryrefslogtreecommitdiff
path: root/gtkgame.c
diff options
context:
space:
mode:
authorRuss Allbery <rra@debian.org>2012-01-27 13:49:47 -0800
committerRuss Allbery <rra@debian.org>2012-01-27 13:49:47 -0800
commite1a65d98e1b8c3beb93cb0f7388f94153bcb235b (patch)
tree1e1a0e8bea4f7bc128ab0dfb983c87bacfc0e267 /gtkgame.c
parent2dc6c06022f278f944c8b502fbe8ced1c73811e4 (diff)
Imported Upstream version 0.90+20120127
Diffstat (limited to 'gtkgame.c')
-rw-r--r--gtkgame.c2847
1 files changed, 1571 insertions, 1276 deletions
diff --git a/gtkgame.c b/gtkgame.c
index 0b3b172..3833cca 100644
--- a/gtkgame.c
+++ b/gtkgame.c
@@ -1,4 +1,3 @@
-
/*
* gtkgame.c
*
@@ -17,10 +16,12 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * $Id: gtkgame.c,v 1.813 2009/11/30 18:56:21 c_anthon Exp $
+ * $Id: gtkgame.c,v 1.853 2012/01/08 22:44:05 plm Exp $
*/
#include "config.h"
+#include "gtklocdefs.h"
+#include "gtkuidefs.h"
#include <glib.h>
#include <ctype.h>
@@ -31,6 +32,8 @@
#include <stdlib.h>
#include <string.h>
#include <errno.h>
+#include <locale.h>
+
#if HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -61,7 +64,6 @@
#include "matchequity.h"
#include "openurl.h"
#include "positionid.h"
-#include "record.h"
#include "sound.h"
#include "gtkoptions.h"
#include "gtktoolbar.h"
@@ -85,6 +87,15 @@
/* Offset action to avoid predefined values */
#define MENU_OFFSET 50
+
+#if (USE_GTKUIMANAGER)
+static void TogglePanel ( guint iType, guint iActionID, GtkToggleAction *action,
+ GtkToggleAction *alt, gpointer user_data );
+
+static void ToolbarStyle ( guint iType, guint iActionID, GtkRadioAction *action,
+ GtkRadioAction *alt, gpointer user_data );
+#endif
+
char *newLang;
/* Hack this for now to stop re-entering - should be fixed when menu switched to actions */
@@ -136,7 +147,6 @@ typedef enum _gnubgcommand {
CMD_PREV_ROLL,
CMD_PREV_ROLLED,
CMD_QUIT,
- CMD_RECORD_SHOW,
CMD_REJECT,
CMD_RELATIONAL_ADD_MATCH,
CMD_ROLL,
@@ -163,9 +173,213 @@ typedef enum _gnubgcommand {
CMD_SHOW_VERSION,
CMD_SHOW_WARRANTY,
CMD_SWAP_PLAYERS,
- NUM_CMDS
+ NUM_CMDS,
+ TOGGLE_GAMELIST,
+ TOGGLE_ANALYSIS,
+ TOGGLE_COMMENTARY,
+ TOGGLE_MESSAGE,
+ TOGGLE_THEORY,
+ TOGGLE_COMMAND,
+ VIEW_TOOLBAR_ICONSONLY,
+ VIEW_TOOLBAR_TEXTONLY,
+ VIEW_TOOLBAR_BOTH
} gnubgcommand;
+/* TRUE if gnubg is automatically setting the state of a menu item. */
+static int fAutoCommand;
+
+#if (USE_GTKUIMANAGER)
+static void ExecToggleActionCommand_internal ( guint iWidgetType, guint iCommand, gchar *szCommand,
+ gpointer *widget, gpointer *widgetalt, gpointer user_data ) {
+
+ char sz[ 80 ];
+
+ if( fAutoCommand )
+ return;
+
+ sprintf( sz, "%s %s", szCommand,
+ gtk_toggle_action_get_active (GTK_TOGGLE_ACTION(widget)) ? "on" : "off" );
+ UserCommand( sz );
+
+ return;
+}
+
+static void ExecRadioActionCommand_internal ( guint iWidgetType, guint iCommand, gchar *szCommand,
+ gpointer *widget, gpointer *widgetalt, gpointer user_data ) {
+
+ char sz[ 80 ];
+ gint actionID;
+
+ if( fAutoCommand )
+ return;
+
+ actionID = gtk_radio_action_get_current_value ( GTK_RADIO_ACTION ( widget ) );
+ switch( actionID ) {
+
+ case CMD_SET_TURN_0:
+ case CMD_SET_TURN_1:
+ sprintf( sz, "set turn %s", ap[ actionID - iCommand ].szName );
+ UserCommand( sz );
+ break;
+ }
+
+ return;
+}
+
+static void ExecActionCommand_internal ( guint iWidgetType, guint iCommand, gchar *szCommand,
+ gpointer *widget, gpointer *widgetalt, gpointer user_data ) {
+
+ char sz[ 80 ];
+
+ if( fAutoCommand )
+ return;
+
+ switch( iCommand ) {
+ case CMD_SET_APPEARANCE:
+ BoardPreferences( pwBoard );
+ return;
+
+ case CMD_SET_TURN_0:
+ case CMD_SET_TURN_1:
+ sprintf( sz, "set turn %s",
+ ap[ iCommand - CMD_SET_TURN_0 ].szName );
+ UserCommand( sz );
+ return;
+
+
+ default:
+ UserCommand( szCommand );
+ }
+}
+
+#define CREATE_CMD_ACTION_CALLBACK(CMDID, szCommand) \
+ static void CMDID##_action_cb ( GtkAction *action, gpointer user_data ) \
+ { \
+ ExecActionCommand_internal ( 0, CMDID, szCommand, (gpointer)action, NULL, user_data ); \
+ return; \
+ } ;
+
+#define CREATE_CMD_TOGGLE_CALLBACK(CMDID, szCommand) \
+ static void CMDID##_toggle_cb ( GtkToggleAction *action, gpointer user_data ) \
+ { \
+ ExecToggleActionCommand_internal ( 1, CMDID, szCommand, (gpointer)action, NULL, user_data ); \
+ return; \
+ } ;
+
+#define CREATE_CMD_RADIO_CALLBACK(CMDID, szCommand) \
+ static void CMDID##_radio_cb ( GtkRadioAction *action, GtkRadioAction *current, gpointer user_data ) \
+ { \
+ ExecRadioActionCommand_internal ( 2, CMDID, szCommand, (gpointer)action, (gpointer)current, user_data ); \
+ return; \
+ } ;
+
+#define CREATE_GENERIC_ACTION_CALLBACK(ACTIONID, callbackfunc) \
+ static void ACTIONID##_action_g_cb ( GtkAction *action, gpointer user_data ) \
+ { \
+ callbackfunc ( 0, ACTIONID, action, NULL, user_data ); \
+ return; \
+ } ;
+
+#define CREATE_GENERIC_TOGGLE_CALLBACK(ACTIONID, callbackfunc) \
+ static void ACTIONID##_toggle_g_cb ( GtkToggleAction *action, gpointer user_data ) \
+ { \
+ callbackfunc ( 1, ACTIONID, action, NULL, user_data ); \
+ return; \
+ } ;
+
+#define CREATE_GENERIC_RADIO_CALLBACK(ACTIONID, callbackfunc) \
+ static void ACTIONID##_radio_g_cb ( GtkRadioAction *action, GtkRadioAction *current, gpointer user_data ) \
+ { \
+ callbackfunc ( 2, ACTIONID, action, current, user_data ); \
+ return; \
+ } ;
+
+
+#define CMD_ACTION_CALLBACK_FROMID(CMDID) (GCallback)CMDID##_action_cb
+#define CMD_TOGGLE_CALLBACK_FROMID(CMDID) (GCallback)CMDID##_toggle_cb
+#define CMD_RADIO_CALLBACK_FROMID(CMDID) (GCallback)CMDID##_radio_cb
+#define GENERIC_ACTION_CALLBACK_FROMID(ACTIONID) (GCallback)ACTIONID##_action_g_cb
+#define GENERIC_TOGGLE_CALLBACK_FROMID(ACTIONID) (GCallback)ACTIONID##_toggle_g_cb
+#define GENERIC_RADIO_CALLBACK_FROMID(ACTIONID) (GCallback)ACTIONID##_radio_g_cb
+
+/* Create callback functions for all the commands. These do no need to be in any particular order */
+CREATE_CMD_ACTION_CALLBACK ( CMD_ACCEPT, "accept" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_ANALYSE_CLEAR_MOVE, "analyse clear move" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_ANALYSE_CLEAR_GAME, "analyse clear game" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_ANALYSE_CLEAR_MATCH, "analyse clear match" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_ANALYSE_MOVE, "analyse move" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_ANALYSE_GAME, "analyse game" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_ANALYSE_MATCH, "analyse match" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_ANALYSE_ROLLOUT_CUBE, "analyse rollout cube" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_ANALYSE_ROLLOUT_MOVE, "analyse rollout move" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_ANALYSE_ROLLOUT_GAME, "analyse rollout game" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_ANALYSE_ROLLOUT_MATCH, "analyse rollout match" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_CLEAR_TURN, "clear turn" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_CMARK_CUBE_CLEAR, "cmark cube clear" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_CMARK_CUBE_SHOW, "cmark cube show" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_CMARK_MOVE_CLEAR, "cmark move clear" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_CMARK_MOVE_SHOW, "cmark move show" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_CMARK_GAME_CLEAR, "cmark game clear" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_CMARK_GAME_SHOW, "cmark game show" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_CMARK_MATCH_CLEAR, "cmark match clear" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_CMARK_MATCH_SHOW, "cmark match show" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_END_GAME, "end game" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_DECLINE, "decline" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_DOUBLE, "double" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_EVAL, "eval" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_HELP, "help" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_HINT, "hint" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_LIST_GAME, "list game" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_NEXT, "next" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_NEXT_GAME, "next game" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_NEXT_MARKED, "next marked" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_NEXT_CMARKED, "next cmarked" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_NEXT_ROLL, "next roll" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_NEXT_ROLLED, "next rolled" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_PLAY, "play" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_PREV, "previous" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_PREV_GAME, "previous game" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_PREV_MARKED, "previous marked" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_PREV_CMARKED, "previous cmarked" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_PREV_ROLL, "previous roll" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_PREV_ROLLED, "previous rolled" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_QUIT, "quit" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_REJECT, "reject" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_RELATIONAL_ADD_MATCH, "relational add match" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_ROLL, "roll" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_ROLLOUT, "rollout" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_SAVE_SETTINGS, "save settings" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_SET_ANNOTATION_ON, "set annotation on" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_SET_APPEARANCE, NULL ); /* set appearance */
+CREATE_CMD_ACTION_CALLBACK ( CMD_SET_MESSAGE_ON, "set message on" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_SET_TURN_0, NULL ); /* set turn 0 */
+CREATE_CMD_ACTION_CALLBACK ( CMD_SET_TURN_1, NULL ); /* set turn 1 */
+CREATE_CMD_ACTION_CALLBACK ( CMD_SHOW_CALIBRATION, "show calibration" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_SHOW_COPYING, "show copying" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_SHOW_ENGINE, "show engine" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_SHOW_EXPORT, "show export" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_SHOW_MARKETWINDOW, "show marketwindow" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_SHOW_MATCHEQUITYTABLE, "show matchequitytable" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_SHOW_KLEINMAN, "show kleinman" ); /* opens race theory window */
+CREATE_CMD_ACTION_CALLBACK ( CMD_SHOW_MANUAL_ABOUT, "show manual about" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_SHOW_MANUAL_WEB, "show manual web" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_SHOW_ROLLS, "show rolls" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_SHOW_STATISTICS_MATCH, "show statistics match" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_SHOW_TEMPERATURE_MAP, "show temperaturemap" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_SHOW_TEMPERATURE_MAP_CUBE, "show temperaturemap =cube" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_SHOW_VERSION, "show version" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_SHOW_WARRANTY, "show warranty" );
+CREATE_CMD_ACTION_CALLBACK ( CMD_SWAP_PLAYERS, "swap players" );
+CREATE_GENERIC_TOGGLE_CALLBACK ( TOGGLE_GAMELIST, TogglePanel );
+CREATE_GENERIC_TOGGLE_CALLBACK ( TOGGLE_COMMENTARY, TogglePanel );
+CREATE_GENERIC_TOGGLE_CALLBACK ( TOGGLE_MESSAGE, TogglePanel );
+CREATE_GENERIC_TOGGLE_CALLBACK ( TOGGLE_ANALYSIS, TogglePanel );
+CREATE_GENERIC_TOGGLE_CALLBACK ( TOGGLE_THEORY, TogglePanel );
+CREATE_GENERIC_TOGGLE_CALLBACK ( TOGGLE_COMMAND, TogglePanel );
+CREATE_GENERIC_RADIO_CALLBACK ( VIEW_TOOLBAR_ICONSONLY, ToolbarStyle );
+CREATE_CMD_RADIO_CALLBACK ( CMD_SET_TURN_0, NULL );
+#else
+
static const char *aszCommands[ NUM_CMDS ] = {
"accept",
"analyse clear move",
@@ -208,7 +422,6 @@ static const char *aszCommands[ NUM_CMDS ] = {
"previous roll",
"previous rolled",
"quit",
- "record show",
"reject",
"relational add match",
"roll",
@@ -236,22 +449,62 @@ static const char *aszCommands[ NUM_CMDS ] = {
"show warranty",
"swap players",
};
-enum { TOGGLE_GAMELIST = NUM_CMDS + 1, TOGGLE_ANALYSIS, TOGGLE_COMMENTARY, TOGGLE_MESSAGE, TOGGLE_THEORY, TOGGLE_COMMAND };
+static void Command( gpointer p, guint iCommand, GtkWidget *widget ) {
+
+ char sz[ 80 ];
+
+ if( fAutoCommand )
+ return;
+
+ /* FIXME this isn't very good -- if UserCommand fails, the setting
+ won't have been changed, but the widget will automatically have
+ updated itself. */
+
+ if( GTK_IS_RADIO_MENU_ITEM( widget ) ) {
+ if( !gtk_check_menu_item_get_active( GTK_CHECK_MENU_ITEM( widget ) ) )
+ return;
+ } else if( GTK_IS_CHECK_MENU_ITEM( widget ) ) {
+ sprintf( sz, "%s %s", aszCommands[ iCommand ],
+ gtk_check_menu_item_get_active( GTK_CHECK_MENU_ITEM( widget ) ) ? "on" : "off" );
+ UserCommand( sz );
+
+ return;
+ }
+
+ switch( iCommand ) {
+ case CMD_SET_APPEARANCE:
+ BoardPreferences( pwBoard );
+ return;
+
+ case CMD_SET_TURN_0:
+ case CMD_SET_TURN_1:
+ sprintf( sz, "set turn %s",
+ ap[ iCommand - CMD_SET_TURN_0 ].szName );
+ UserCommand( sz );
+ return;
+
+
+ default:
+ UserCommand( aszCommands[ iCommand ] );
+ }
+}
+
+#endif
typedef struct _analysiswidget {
evalsetup esChequer;
- evalsetup esCube;
+ evalsetup esCube;
movefilter aamf[ MAX_FILTER_PLIES ][ MAX_FILTER_PLIES ];
evalsetup esEvalChequer;
- evalsetup esEvalCube;
+ evalsetup esEvalCube;
movefilter aaEvalmf[ MAX_FILTER_PLIES ][ MAX_FILTER_PLIES ];
GtkAdjustment *apadjSkill[3], *apadjLuck[4];
GtkWidget *pwMoves, *pwCube, *pwLuck, *pwHintSame, *pwCubeSummary;
GtkWidget *apwAnalysePlayers[ 2 ];
-
+
} analysiswidget;
/* A dummy widget that can grab events when others shouldn't see them. */
@@ -275,7 +528,11 @@ GtkAccelGroup *pagMain;
#if (GTK_MAJOR_VERSION < 3) && (GTK_MINOR_VERSION < 12)
GtkTooltips *ptt;
#endif
+#if (USE_GTKUIMANAGER)
+GtkUIManager *puim = NULL;
+#else
GtkItemFactory *pif;
+#endif
guint nNextTurn = 0; /* GTK idle function */
static guint idOutput, idProgress;
int fTTY = TRUE;
@@ -312,7 +569,7 @@ extern void GTKSuspendInput(void)
if (!fX)
return;
- if (suspendCount == 0)
+ if (suspendCount == 0 && GDK_IS_WINDOW(pwGrab))
{ /* Grab events so that the board window knows this is a re-entrant
call, and won't allow commands like roll, move or double. */
grabbedWidget = pwGrab;
@@ -339,7 +596,7 @@ extern void GTKResumeInput(void)
suspendCount--;
if (suspendCount == 0)
{
- if (GTK_IS_WIDGET(grabbedWidget) && GTK_WIDGET_HAS_GRAB(grabbedWidget))
+ if (GTK_IS_WIDGET(grabbedWidget) && gtk_widget_has_grab(grabbedWidget))
{
if (g_signal_handler_is_connected (G_OBJECT(grabbedWidget), grabIdSignal))
g_signal_handler_disconnect (G_OBJECT(grabbedWidget), grabIdSignal);
@@ -352,10 +609,10 @@ extern void GTKResumeInput(void)
GTKAllowStdin();
}
-static void StdinReadNotify( gpointer p, gint h, GdkInputCondition cond ) {
-
+static gboolean StdinReadNotify(GIOChannel *source, GIOCondition cond, gpointer p) {
+
char sz[ 2048 ], *pch;
-
+
#if HAVE_LIBREADLINE
/* Handle "next turn" processing before more input (otherwise we might
not even have a readline handler installed!) */
@@ -364,25 +621,25 @@ static void StdinReadNotify( gpointer p, gint h, GdkInputCondition cond ) {
rl_callback_read_char();
- return;
+ return TRUE;
#endif
while( nNextTurn )
NextTurnNotify( NULL );
-
+
if (fgets( sz, sizeof( sz ), stdin ) == NULL)
{
if( !isatty( STDIN_FILENO ) )
exit( EXIT_SUCCESS );
-
+
PromptForExit();
- return;
+ return TRUE;
}
if( ( pch = strchr( sz, '\n' ) ) )
*pch = 0;
-
-
+
+
fInterrupt = FALSE;
HandleCommand( sz, acTop );
@@ -393,29 +650,31 @@ static void StdinReadNotify( gpointer p, gint h, GdkInputCondition cond ) {
fNeedPrompt = TRUE;
else
Prompt();
+
+ return TRUE;
}
extern void GTKAllowStdin( void ) {
if( !fTTY || !nDisabledCount )
- return;
-
+ return;
+
if( !--nDisabledCount )
- nStdin = gtk_input_add_full( STDIN_FILENO, GDK_INPUT_READ,
- StdinReadNotify, NULL, NULL, NULL );
+ nStdin = g_io_add_watch_full ( g_io_channel_unix_new( STDIN_FILENO ), G_PRIORITY_HIGH,
+ G_IO_IN | G_IO_PRI, StdinReadNotify, NULL, NULL );
}
extern void GTKDisallowStdin( void ) {
if( !fTTY )
- return;
-
+ return;
+
nDisabledCount++;
-
+
if( nStdin ) {
- gtk_input_remove( nStdin );
- nStdin = 0;
+ g_source_remove( nStdin );
+ nStdin = 0;
}
}
@@ -424,57 +683,15 @@ int fEndDelay;
extern void GTKDelay( void ) {
GTKSuspendInput();
-
+
while( !fInterrupt && !fEndDelay )
gtk_main_iteration();
-
+
fEndDelay = FALSE;
-
+
GTKResumeInput();
}
-/* TRUE if gnubg is automatically setting the state of a menu item. */
-static int fAutoCommand;
-
-static void Command( gpointer p, guint iCommand, GtkWidget *widget ) {
-
- char sz[ 80 ];
-
- if( fAutoCommand )
- return;
-
- /* FIXME this isn't very good -- if UserCommand fails, the setting
- won't have been changed, but the widget will automatically have
- updated itself. */
-
- if( GTK_IS_RADIO_MENU_ITEM( widget ) ) {
- if( !GTK_CHECK_MENU_ITEM( widget )->active )
- return;
- } else if( GTK_IS_CHECK_MENU_ITEM( widget ) ) {
- sprintf( sz, "%s %s", aszCommands[ iCommand ],
- GTK_CHECK_MENU_ITEM( widget )->active ? "on" : "off" );
- UserCommand( sz );
-
- return;
- }
-
- switch( iCommand ) {
- case CMD_SET_APPEARANCE:
- BoardPreferences( pwBoard );
- return;
-
- case CMD_SET_TURN_0:
- case CMD_SET_TURN_1:
- sprintf( sz, "set turn %s",
- ap[ iCommand - CMD_SET_TURN_0 ].szName );
- UserCommand( sz );
- return;
-
-
- default:
- UserCommand( aszCommands[ iCommand ] );
- }
-}
static void gui_clear_turn(GtkWidget *pw, GtkWidget *dialog)
{
@@ -547,20 +764,20 @@ extern void GTKSetCube( gpointer p, guint n, GtkWidget *pw ) {
if( ms.gs != GAME_PLAYING || ms.fCrawford || !ms.fCubeUse )
return;
-
+
pwDialog = GTKCreateDialog( _("GNU Backgammon - Cube"), DT_INFO,
NULL, DIALOG_FLAG_MODAL | DIALOG_FLAG_CLOSEBUTTON, NULL, NULL );
pwCube = board_cube_widget( BOARD( pwBoard ) );
an[ 0 ] = -1;
-
+
gtk_container_add( GTK_CONTAINER( DialogArea( pwDialog, DA_MAIN ) ),
pwCube );
g_object_set_data( G_OBJECT( pwCube ), "user_data", an );
-
+
g_signal_connect( G_OBJECT( pwCube ), "destroy",
G_CALLBACK( DestroySetCube ), pwDialog );
-
+
GTKRunDialog(pwDialog);
if( an[ 0 ] < 0 )
@@ -587,7 +804,7 @@ extern void CommentaryChanged( GtkWidget *pw, GtkTextBuffer *buffer ) {
char *pch;
GtkTextIter begin, end;
-
+
if( fAutoCommentaryChange )
return;
@@ -600,7 +817,7 @@ extern void CommentaryChanged( GtkWidget *pw, GtkTextBuffer *buffer ) {
if( pmrAnnotation->sz )
g_free( pmrAnnotation->sz );
-
+
gtk_text_buffer_get_bounds (buffer, &begin, &end);
pch = gtk_text_buffer_get_text(buffer, &begin, &end, FALSE);
/* This copy is absolutely disgusting, but is necessary because GTK
@@ -638,7 +855,7 @@ ResignAnalysis ( float arResign[ NUM_ROLLOUT_OUTPUTS ],
char sz [ 64 ];
- if ( pesResign->et == EVAL_NONE )
+ if ( pesResign->et == EVAL_NONE )
return NULL;
GetMatchStateCubeInfo ( &ci, &ms );
@@ -651,7 +868,7 @@ ResignAnalysis ( float arResign[ NUM_ROLLOUT_OUTPUTS ],
gtk_table_attach ( GTK_TABLE ( pwTable ),
pwLabel,
0, 1, 0, 1,
- GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
+ GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
8, 2 );
pwLabel = gtk_label_new ( _("Equity after resignation: ") );
@@ -659,7 +876,7 @@ ResignAnalysis ( float arResign[ NUM_ROLLOUT_OUTPUTS ],
gtk_table_attach ( GTK_TABLE ( pwTable ),
pwLabel,
0, 1, 1, 2,
- GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
+ GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
8, 2 );
pwLabel = gtk_label_new ( _("Difference: ") );
@@ -667,7 +884,7 @@ ResignAnalysis ( float arResign[ NUM_ROLLOUT_OUTPUTS ],
gtk_table_attach ( GTK_TABLE ( pwTable ),
pwLabel,
0, 1, 2, 3,
- GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
+ GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
8, 2 );
/* Second column: equities/mwc */
@@ -684,7 +901,7 @@ ResignAnalysis ( float arResign[ NUM_ROLLOUT_OUTPUTS ],
gtk_table_attach ( GTK_TABLE ( pwTable ),
pwLabel,
1, 2, 0, 1,
- GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
+ GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
8, 2 );
@@ -698,7 +915,7 @@ ResignAnalysis ( float arResign[ NUM_ROLLOUT_OUTPUTS ],
gtk_table_attach ( GTK_TABLE ( pwTable ),
pwLabel,
1, 2, 1, 2,
- GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
+ GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
8, 2 );
@@ -713,7 +930,7 @@ ResignAnalysis ( float arResign[ NUM_ROLLOUT_OUTPUTS ],
gtk_table_attach ( GTK_TABLE ( pwTable ),
pwLabel,
1, 2, 2, 3,
- GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
+ GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
8, 2 );
@@ -730,7 +947,7 @@ static GtkWidget *luck_label(lucktype lt)
GtkWidget *label;
gchar *markup;
const gchar *skill;
- gchar *color[N_LUCKS] = {"red", "orange", "black", "green", "white"};
+ gchar *color[N_LUCKS] = {"red", "orange", "black", "green", "white"};
label = gtk_label_new(NULL);
skill = aszLuckType[lt] ? gettext(aszLuckType[lt]) : "";
@@ -745,7 +962,7 @@ static GtkWidget *skill_label(skilltype st)
GtkWidget *label;
gchar *markup;
const gchar *skill;
- gchar *color[] = {"red", "orange", "yellow", "black"};
+ gchar *color[] = {"red", "orange", "yellow", "black"};
label = gtk_label_new(NULL);
skill = aszSkillType[st] ? gettext(aszSkillType[st]) : "";
@@ -757,7 +974,7 @@ static GtkWidget *skill_label(skilltype st)
extern void SetAnnotation( moverecord *pmr) {
- GtkWidget *pwParent = pwAnalysis->parent, *pw = NULL, *pwBox, *pwAlign;
+ GtkWidget *pwParent = gtk_widget_get_parent( pwAnalysis ), *pw = NULL, *pwBox, *pwAlign;
int fMoveOld, fTurnOld;
listOLD *pl;
char sz[ 64 ];
@@ -783,7 +1000,7 @@ extern void SetAnnotation( moverecord *pmr) {
pmrAnnotation = pmr;
/* FIXME optimise by ignoring set if pmr is unchanged */
-
+
if( pwAnalysis ) {
gtk_widget_destroy( pwAnalysis );
pwAnalysis = NULL;
@@ -794,7 +1011,7 @@ extern void SetAnnotation( moverecord *pmr) {
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(pwCommentary));
gtk_text_buffer_set_text (buffer, "", -1);
fAutoCommentaryChange = FALSE;
-
+
if( pmr ) {
if( pmr->sz ) {
fAutoCommentaryChange = TRUE;
@@ -815,7 +1032,7 @@ extern void SetAnnotation( moverecord *pmr) {
ms.fMove = ms.fTurn = pmr->fPlayer;
- /*
+ /*
* Skill and luck
*/
@@ -836,9 +1053,9 @@ extern void SetAnnotation( moverecord *pmr) {
{
char sz[ 64 ], *pch;
cubeinfo ci;
-
+
pch = sz + sprintf( sz, _("Rolled %d%d"), pmr->anDice[0], pmr->anDice[1] );
-
+
if( pmr->rLuck != ERR_VAL ) {
if( fOutputMWC && ms.nMatchTo ) {
GetMatchStateCubeInfo( &ci, &ms );
@@ -858,10 +1075,10 @@ extern void SetAnnotation( moverecord *pmr) {
FormatMove( sz + strlen(_("Moved ")), msBoard(), pmr->n.anMove );
gtk_table_attach_defaults( GTK_TABLE( pwBox ),
- gtk_label_new( sz ),
+ gtk_label_new( sz ),
2, 3, 0, 1 );
- gtk_table_attach_defaults( GTK_TABLE( pwBox ),
+ gtk_table_attach_defaults( GTK_TABLE( pwBox ),
skill_label(pmr->n.stMove),
2, 3, 1, 2 );
@@ -872,8 +1089,8 @@ extern void SetAnnotation( moverecord *pmr) {
/* move */
-
- if( pmr->ml.cMoves )
+
+ if( pmr->ml.cMoves )
pwMoveAnalysis = CreateMoveList( pmr,
TRUE, FALSE, !IsPanelDocked(WINDOW_ANALYSIS), TRUE);
@@ -905,12 +1122,11 @@ extern void SetAnnotation( moverecord *pmr) {
gtk_box_pack_start ( GTK_BOX ( pwAnalysis ),
pwCubeAnalysis, TRUE, TRUE, 0 );
-
- if( !g_list_first( GTK_BOX( pwAnalysis )->children ) ) {
+ if( !g_list_first( gtk_container_get_children ( GTK_CONTAINER ( GTK_BOX( pwAnalysis ) ) ) ) ) {
gtk_widget_destroy( pwAnalysis );
pwAnalysis = NULL;
}
-
+
ms.fMove = fMoveOld;
ms.fTurn = fTurnOld;
break;
@@ -922,24 +1138,24 @@ extern void SetAnnotation( moverecord *pmr) {
pwAnalysis = gtk_vbox_new( FALSE, 0 );
pwBox = gtk_hbox_new( FALSE, 0 );
- gtk_box_pack_start( GTK_BOX( pwBox ),
- gtk_label_new(
+ gtk_box_pack_start( GTK_BOX( pwBox ),
+ gtk_label_new(
Q_ ( aszDoubleTypes[ dt ] ) ),
FALSE, FALSE, 2 );
- gtk_box_pack_start( GTK_BOX( pwBox ),
+ gtk_box_pack_start( GTK_BOX( pwBox ),
skill_label(pmr->stCube),
FALSE, FALSE, 2 );
gtk_box_pack_start( GTK_BOX( pwAnalysis ), pwBox, FALSE, FALSE,
0 );
if ( dt == DT_NORMAL || dt == DT_BEAVER ) {
-
+
if ( ( pw = CreateCubeAnalysis( pmr, &ms, TRUE, -1, TRUE ) ) )
gtk_box_pack_start( GTK_BOX( pwAnalysis ), pw, FALSE,
FALSE, 0 );
}
- else
+ else
gtk_box_pack_start ( GTK_BOX ( pwAnalysis ),
gtk_label_new ( _("GNU Backgammon cannot "
"analyse neither beavers "
@@ -964,7 +1180,7 @@ extern void SetAnnotation( moverecord *pmr) {
gtk_box_pack_start( GTK_BOX( pwAnalysis ), pwBox, FALSE, FALSE,
0 );
- if ( tt == TT_NORMAL ) {
+ if ( tt <= TT_NORMAL ) {
if ( ( pw = CreateCubeAnalysis( pmr, &ms, -1, pmr->mt == MOVE_TAKE, TRUE ) ) )
gtk_box_pack_start( GTK_BOX( pwAnalysis ), pw, FALSE,
FALSE, 0 );
@@ -977,12 +1193,12 @@ extern void SetAnnotation( moverecord *pmr) {
FALSE, FALSE, 0 );
break;
-
+
case MOVE_RESIGN:
pwAnalysis = gtk_vbox_new( FALSE, 0 );
/* equities for resign */
-
+
if( ( pw = ResignAnalysis( pmr->r.arResign,
pmr->r.nResigned,
&pmr->r.esResign ) ) )
@@ -1014,17 +1230,17 @@ extern void SetAnnotation( moverecord *pmr) {
0 );
gtk_container_add( GTK_CONTAINER( pwAlign ), pwBox );
-
+
break;
-
+
default:
break;
}
}
-
+
if( !pwAnalysis )
pwAnalysis = gtk_label_new( _("No analysis available.") );
-
+
if (!IsPanelDocked(WINDOW_ANALYSIS))
gtk_paned_pack1( GTK_PANED( pwParent ), pwAnalysis, TRUE, FALSE );
else
@@ -1052,7 +1268,7 @@ extern void GTKSaveSettings( void ) {
static gboolean main_delete( GtkWidget *pw ) {
getWindowGeometry(WINDOW_MAIN);
-
+
PromptForExit();
return TRUE;
@@ -1070,10 +1286,12 @@ static void TextPopped( GtkWidget *pw, guint id, gchar *text, void *p ) {
extern int GetPanelSize(void)
{
- if (!fFullScreen && fX && GTK_WIDGET_REALIZED(pwMain))
+ if (!fFullScreen && fX && gtk_widget_get_realized(pwMain))
{
int pos = gtk_paned_get_position(GTK_PANED(hpaned));
- return pwMain->allocation.width - pos;
+ GtkAllocation allocation;
+ gtk_widget_get_allocation (pwMain, &allocation);
+ return allocation.width - pos;
}
else
return panelSize;
@@ -1082,15 +1300,19 @@ extern int GetPanelSize(void)
extern void SetPanelWidth(int size)
{
panelSize = size;
- if( GTK_WIDGET_REALIZED( pwMain ) )
+ if( gtk_widget_get_realized( pwMain ) )
{
- if (panelSize > pwMain->allocation.width * .8)
- panelSize = (int)(pwMain->allocation.width * .8);
+ GtkAllocation allocation;
+ gtk_widget_get_allocation (pwMain, &allocation);
+ if (panelSize > allocation.width * .8)
+ panelSize = (int)(allocation.width * .8);
}
}
extern void SwapBoardToPanel(int ToPanel, int updateEvents)
{ /* Show/Hide panel on right of screen */
+ GtkAllocation allocation;
+ gtk_widget_get_allocation (pwMain, &allocation);
if (ToPanel)
{
gtk_widget_reparent(pwEventBox, pwPanelGameBox);
@@ -1098,10 +1320,10 @@ extern void SwapBoardToPanel(int ToPanel, int updateEvents)
if (updateEvents)
ProcessEvents();
gtk_widget_hide(pwGameBox);
- gtk_paned_set_position(GTK_PANED(hpaned), pwMain->allocation.width - panelSize);
+ gtk_paned_set_position(GTK_PANED(hpaned), allocation.width - panelSize);
{ /* Hack to sort out widget positions - may be removed if works in later version of gtk */
- GtkAllocation temp = pwMain->allocation;
+ GtkAllocation temp = allocation;
temp.height++;
gtk_widget_size_allocate(pwMain, &temp);
temp.height--;
@@ -1119,7 +1341,7 @@ extern void SwapBoardToPanel(int ToPanel, int updateEvents)
gtk_widget_show(pwGameBox);
if (updateEvents)
ProcessEvents();
- if (GTK_WIDGET_VISIBLE(hpaned))
+ if (gtk_widget_get_visible(hpaned))
{
panelSize = GetPanelSize();
gtk_widget_hide(hpaned);
@@ -1134,10 +1356,10 @@ static void MainSize( GtkWidget *pw, GtkRequisition *preq, gpointer p ) {
/* Give the main window a size big enough that the board widget gets
board_size=4, if it will fit on the screen. */
-
+
int width;
- if( GTK_WIDGET_REALIZED( pw ) )
+ if( gtk_widget_get_realized( pw ) )
g_signal_handlers_disconnect_by_func( G_OBJECT( pw ), G_CALLBACK( MainSize ), p );
else if (!SetMainWindowSize())
@@ -1154,21 +1376,31 @@ static void MainSize( GtkWidget *pw, GtkRequisition *preq, gpointer p ) {
}
+#if !(USE_GTKUIMANAGER)
static gchar *GTKTranslate ( const gchar *path, gpointer func_data ) {
-
return (gchar *) gettext ( (const char *) path );
-
}
+#endif
+#if (USE_GTKUIMANAGER)
+static void ToolbarStyle ( guint iType, guint iActionID, GtkRadioAction *action,
+ GtkRadioAction *alt, gpointer user_data )
+{
+ guint actionID = gtk_radio_action_get_current_value ( GTK_RADIO_ACTION ( action ) );
+ /* If radio button has been selected set style */
+ SetToolbarStyle( actionID - VIEW_TOOLBAR_ICONSONLY);
+}
+#else
static void ToolbarStyle(gpointer callback_data,
guint callback_action,
GtkWidget *widget)
{
- if(GTK_CHECK_MENU_ITEM(widget)->active)
+ if(gtk_check_menu_item_get_active( GTK_CHECK_MENU_ITEM( widget ) ) )
{ /* If radio button has been selected set style */
SetToolbarStyle(callback_action - TOOLBAR_ACTION_OFFSET);
}
}
+#endif
GtkClipboard *clipboard = NULL;
@@ -1190,6 +1422,14 @@ static void PasteIDs(void)
UserCommand(sz);
g_free(sz);
+ strcpy(ap[0].szName,default_names[0]);
+ strcpy(ap[1].szName,default_names[1]);
+
+#if USE_GTK
+ if( fX )
+ GTKSet(ap);
+#endif /* USE_GTK */
+
if (editing)
click_edit();
}
@@ -1212,6 +1452,13 @@ static void NewClicked(gpointer p, guint n, GtkWidget * pw)
GTKNew();
}
+static void CopyAsBGbase(gpointer p, guint n, GtkWidget * pw)
+{
+
+ UserCommand("export position backgammonbase2clipboard");
+
+}
+
static void CopyAsGOL(gpointer p, guint n, GtkWidget * pw)
{
@@ -1239,6 +1486,84 @@ static void CopyIDs(gpointer p, guint n, GtkWidget * pw)
gtk_statusbar_push( GTK_STATUSBAR( pwStatus ), idOutput, _("Position and Match IDs copied to the clipboard") );
}
+static void CopyMatchID(gpointer p, guint n, GtkWidget * pw)
+{ /* Copy the position and match ids to the clipboard */
+ char buffer[1024];
+
+ if( ms.gs == GAME_NONE )
+ {
+ output( _("No game in progress.") );
+ outputx();
+ return;
+ }
+
+ sprintf(buffer, "%s %s\n",_("Match ID:"),
+ MatchIDFromMatchState(&ms));
+
+ GTKTextToClipboard(buffer);
+
+ gtk_statusbar_push( GTK_STATUSBAR( pwStatus ), idOutput, _("Match ID copied to the clipboard") );
+}
+
+static void CopyPositionID(gpointer p, guint n, GtkWidget * pw)
+{ /* Copy the position and match ids to the clipboard */
+ char buffer[1024];
+
+ if( ms.gs == GAME_NONE )
+ {
+ output( _("No game in progress.") );
+ outputx();
+ return;
+ }
+
+ sprintf(buffer, "%s %s\n", _("Position ID:"),
+ PositionID(msBoard()));
+
+ GTKTextToClipboard(buffer);
+
+ gtk_statusbar_push( GTK_STATUSBAR( pwStatus ), idOutput, _("Position ID copied to the clipboard") );
+}
+
+#if (USE_GTKUIMANAGER)
+static void TogglePanel ( guint iType, guint iActionID, GtkToggleAction *action,
+ GtkToggleAction *alt, gpointer user_data )
+{
+ int f;
+ gnubgwindow panel = 0;
+
+ f = gtk_toggle_action_get_active (action);
+ switch (iActionID) {
+ case TOGGLE_ANALYSIS:
+ panel = WINDOW_ANALYSIS;
+ break;
+ case TOGGLE_COMMENTARY:
+ panel = WINDOW_ANNOTATION;
+ break;
+ case TOGGLE_GAMELIST:
+ panel = WINDOW_GAME;
+ break;
+ case TOGGLE_MESSAGE:
+ panel = WINDOW_MESSAGE;
+ break;
+ case TOGGLE_THEORY:
+ panel = WINDOW_THEORY;
+ break;
+ case TOGGLE_COMMAND:
+ panel = WINDOW_COMMAND;
+ break;
+ default:
+ g_assert(FALSE);
+ }
+ if (f)
+ PanelShow(panel);
+ else
+ PanelHide(panel);
+
+ /* Resize screen */
+ SetMainWindowSize();
+}
+
+#else
static void TogglePanel(gpointer p, guint n, GtkWidget * pw)
{
int f;
@@ -1246,7 +1571,7 @@ static void TogglePanel(gpointer p, guint n, GtkWidget * pw)
g_assert(GTK_IS_CHECK_MENU_ITEM(pw));
- f = GTK_CHECK_MENU_ITEM(pw)->active;
+ f = gtk_check_menu_item_get_active( GTK_CHECK_MENU_ITEM( pw ) );
switch (n) {
case TOGGLE_ANALYSIS:
panel = WINDOW_ANALYSIS;
@@ -1277,6 +1602,7 @@ static void TogglePanel(gpointer p, guint n, GtkWidget * pw)
/* Resize screen */
SetMainWindowSize();
}
+#endif
extern void GTKUndo(void)
{
@@ -1299,17 +1625,25 @@ extern void GTKUndo(void)
}
#if USE_BOARD3D
-
extern void SetSwitchModeMenuText(void)
{ /* Update menu text */
BoardData *bd = BOARD( pwBoard )->board_data;
+#if (USE_GTKUIMANAGER)
+ GtkWidget *pMenuItem = gtk_ui_manager_get_widget (puim,
+ "/MainMenu/ViewMenu/SwitchMode");
+#else
GtkWidget *pMenuItem = gtk_item_factory_get_widget_by_action(pif, TOOLBAR_ACTION_OFFSET + MENU_OFFSET);
+#endif
char *text;
if (display_is_2d(bd->rd))
text = _("Switch to 3D view");
else
text = _("Switch to 2D view");
+#if (USE_GTKUIMANAGER)
+ gtk_label_set_text( GTK_LABEL(gtk_bin_get_child(GTK_BIN(pMenuItem )) ), text );
+#else
gtk_label_set_text(GTK_LABEL(gtk_bin_get_child(GTK_BIN(pMenuItem))), text);
+#endif
gtk_widget_set_sensitive(pMenuItem, gtk_gl_init_success);
}
@@ -1354,14 +1688,27 @@ SwitchDisplayMode( gpointer p, guint n, GtkWidget *pw )
#endif
+#if (USE_GTKUIMANAGER)
+static void ToggleShowingIDs ( GtkToggleAction *action, gpointer user_data )
+{
+ int newValue = gtk_toggle_action_get_active (action);
+ char *sz = g_strdup_printf("set gui showids %s", newValue ? "on" :
+ "off");
+ UserCommand(sz);
+ g_free(sz);
+ UserCommand("save settings");
+}
+#else
static void ToggleShowingIDs( gpointer p, guint n, GtkWidget *pw )
{
- int newValue = GTK_CHECK_MENU_ITEM( pw )->active;
+ int newValue = gtk_check_menu_item_get_active( GTK_CHECK_MENU_ITEM( pw ) );
char *sz = g_strdup_printf("set gui showids %s", newValue ? "on" :
"off");
UserCommand(sz);
g_free(sz);
+ UserCommand("save settings");
}
+#endif
int fToolbarShowing = TRUE;
@@ -1371,12 +1718,24 @@ extern void ShowToolbar(void)
gtk_widget_show(pwToolbar);
gtk_widget_show(pwHandle);
+#if (USE_GTKUIMANAGER)
+ gtk_widget_show ( (gtk_ui_manager_get_widget (puim,
+ "/MainMenu/ViewMenu/ToolBarMenu/HideToolBar" )) );
+ gtk_widget_hide ( (gtk_ui_manager_get_widget (puim,
+ "/MainMenu/ViewMenu/ToolBarMenu/ShowToolBar" )) );
+ gtk_widget_set_sensitive ( (gtk_ui_manager_get_widget (puim,
+ "/MainMenu/ViewMenu/ToolBarMenu/TextOnly" )), TRUE );
+ gtk_widget_set_sensitive ( (gtk_ui_manager_get_widget (puim,
+ "/MainMenu/ViewMenu/ToolBarMenu/IconsOnly" )), TRUE );
+ gtk_widget_set_sensitive ( (gtk_ui_manager_get_widget (puim,
+ "/MainMenu/ViewMenu/ToolBarMenu/Both" )), TRUE );
+#else
gtk_widget_show(gtk_item_factory_get_widget(pif, "/View/Toolbar/Hide Toolbar"));
gtk_widget_hide(gtk_item_factory_get_widget(pif, "/View/Toolbar/Show Toolbar"));
gtk_widget_set_sensitive(gtk_item_factory_get_widget(pif, "/View/Toolbar/Text only"), TRUE);
gtk_widget_set_sensitive(gtk_item_factory_get_widget(pif, "/View/Toolbar/Icons only"), TRUE);
gtk_widget_set_sensitive(gtk_item_factory_get_widget(pif, "/View/Toolbar/Both"), TRUE);
-
+#endif
fToolbarShowing = TRUE;
}
@@ -1386,12 +1745,24 @@ extern void HideToolbar(void)
gtk_widget_hide(pwToolbar);
gtk_widget_hide(pwHandle);
+#if (USE_GTKUIMANAGER)
+ gtk_widget_hide ( (gtk_ui_manager_get_widget (puim,
+ "/MainMenu/ViewMenu/ToolBarMenu/HideToolBar" )) );
+ gtk_widget_show ( (gtk_ui_manager_get_widget (puim,
+ "/MainMenu/ViewMenu/ToolBarMenu/ShowToolBar" )) );
+ gtk_widget_set_sensitive ( (gtk_ui_manager_get_widget (puim,
+ "/MainMenu/ViewMenu/ToolBarMenu/TextOnly" )), FALSE );
+ gtk_widget_set_sensitive ( (gtk_ui_manager_get_widget (puim,
+ "/MainMenu/ViewMenu/ToolBarMenu/IconsOnly" )), FALSE );
+ gtk_widget_set_sensitive ( (gtk_ui_manager_get_widget (puim,
+ "/MainMenu/ViewMenu/ToolBarMenu/Both" )), FALSE );
+#else
gtk_widget_hide(gtk_item_factory_get_widget(pif, "/View/Toolbar/Hide Toolbar"));
gtk_widget_show(gtk_item_factory_get_widget(pif, "/View/Toolbar/Show Toolbar"));
gtk_widget_set_sensitive(gtk_item_factory_get_widget(pif, "/View/Toolbar/Text only"), FALSE);
gtk_widget_set_sensitive(gtk_item_factory_get_widget(pif, "/View/Toolbar/Icons only"), FALSE);
gtk_widget_set_sensitive(gtk_item_factory_get_widget(pif, "/View/Toolbar/Both"), FALSE);
-
+#endif
fToolbarShowing = FALSE;
}
@@ -1422,8 +1793,13 @@ static void DoFullScreenMode(gpointer p, guint n, GtkWidget * pw)
static gulong id;
static int changedRP, changedDP;
+#if (USE_GTKUIMANAGER)
+ GtkWidget *pmiRP = gtk_ui_manager_get_widget (puim, "/MainMenu/ViewMenu/RestorePanels" );
+ GtkWidget *pmiDP = gtk_ui_manager_get_widget (puim, "/MainMenu/ViewMenu/DockPanels" );
+#else
GtkWidget *pmiRP = gtk_item_factory_get_widget(pif, "/View/Restore panels");
GtkWidget *pmiDP = gtk_item_factory_get_widget(pif, "/View/Dock panels");
+#endif
#if USE_BOARD3D
if (display_is_3d(bd->rd))
@@ -1432,8 +1808,12 @@ static void DoFullScreenMode(gpointer p, guint n, GtkWidget * pw)
}
#endif
- fFullScreen = GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget(pif, "/View/Full screen"))->active;
-
+#if (USE_GTKUIMANAGER)
+ fFullScreen = gtk_check_menu_item_get_active ( GTK_CHECK_MENU_ITEM ( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/ViewMenu/FullScreen" ) ) );
+#else
+ fFullScreen = gtk_check_menu_item_get_active( GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget( pif, "/View/Full screen") ) );
+#endif
if (fFullScreen)
{
if (!fullScreenOnStartup)
@@ -1443,17 +1823,16 @@ static void DoFullScreenMode(gpointer p, guint n, GtkWidget * pw)
bd->rd->fShowGameInfo = FALSE;
- if (pmiRP && GTK_WIDGET_VISIBLE(pmiRP)
- && GTK_WIDGET_IS_SENSITIVE(pmiRP))
+ if (pmiRP && gtk_widget_get_visible(pmiRP)
+ && gtk_widget_is_sensitive(pmiRP))
changedRP = TRUE;
- if (pmiDP && GTK_WIDGET_VISIBLE(pmiDP)
- && GTK_WIDGET_IS_SENSITIVE(pmiDP))
+ if (pmiDP && gtk_widget_get_visible(pmiDP)
+ && gtk_widget_is_sensitive(pmiDP))
changedDP = TRUE;
-
/* Check if window is maximized */
{
GdkWindowState state =
- gdk_window_get_state(GTK_WIDGET(ptl)->window);
+ gdk_window_get_state(gtk_widget_get_window( GTK_WIDGET( ptl ) ) );
maximised =
((state & GDK_WINDOW_STATE_MAXIMIZED) ==
GDK_WINDOW_STATE_MAXIMIZED);
@@ -1483,7 +1862,6 @@ static void DoFullScreenMode(gpointer p, guint n, GtkWidget * pw)
gtk_window_fullscreen(ptl);
gtk_window_set_decorated(ptl, FALSE);
-
if (pmiRP)
gtk_widget_set_sensitive(pmiRP, FALSE);
if (pmiDP)
@@ -1537,8 +1915,13 @@ static void DoFullScreenMode(gpointer p, guint n, GtkWidget * pw)
extern void FullScreenMode(int state)
{
BoardData *bd = BOARD( pwBoard )->board_data;
+#if (USE_GTKUIMANAGER)
+ GtkWidget *pw = gtk_ui_manager_get_widget (puim,
+ "/MainMenu/ViewMenu/FullScreen" );
+#else
GtkWidget *pw = gtk_item_factory_get_widget(pif, "/View/Full screen");
- if (GTK_WIDGET_REALIZED(bd->table))
+#endif
+ if (gtk_widget_get_realized(bd->table))
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(pw), state);
}
@@ -1577,14 +1960,14 @@ typedef struct _evalwidget {
static void EvalGetValues ( evalcontext *pec, evalwidget *pew ) {
- pec->nPlies = (int)pew->padjPlies->value;
+ pec->nPlies = (int)gtk_adjustment_get_value( pew->padjPlies );
pec->fCubeful =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( pew->pwCubeful ) );
pec->fUsePrune =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( pew->pwUsePrune ) );
- pec->rNoise = (float)pew->padjNoise->value;
+ pec->rNoise = (float)gtk_adjustment_get_value( pew->padjNoise );
pec->fDeterministic =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( pew->pwDeterministic ) );
}
@@ -1605,15 +1988,15 @@ static void EvalChanged ( GtkWidget *pw, evalwidget *pew ) {
fEval = ! cmp_evalcontext ( &aecSettings[ i ], &ecCurrent );
fMoveFilter = ! aecSettings[ i ].nPlies ||
- ( ! pew->fMoveFilter ||
- equal_movefilters ( (movefilter (*)[MAX_FILTER_PLIES]) pew->pmf,
+ ( ! pew->fMoveFilter ||
+ equal_movefilters ( (movefilter (*)[MAX_FILTER_PLIES]) pew->pmf,
aaamfMoveFilterSettings[ aiSettingsMoveFilter[ i ] ] ) );
if ( fEval && fMoveFilter ) {
/* current settings equal to a predefined setting */
- gtk_option_menu_set_history ( GTK_OPTION_MENU ( pew->pwOptionMenu ), i );
+ gtk_combo_box_set_active(GTK_COMBO_BOX ( pew->pwOptionMenu ), i );
fFound = TRUE;
break;
@@ -1625,10 +2008,10 @@ static void EvalChanged ( GtkWidget *pw, evalwidget *pew ) {
/* user defined setting */
if ( ! fFound )
- gtk_option_menu_set_history ( GTK_OPTION_MENU ( pew->pwOptionMenu ),
+ gtk_combo_box_set_active( GTK_COMBO_BOX ( pew->pwOptionMenu ),
NUM_SETTINGS );
-
+
if ( pew->fMoveFilter )
gtk_widget_set_sensitive ( GTK_WIDGET ( pew->pwMoveFilter ),
ecCurrent.nPlies );
@@ -1638,34 +2021,32 @@ static void EvalChanged ( GtkWidget *pw, evalwidget *pew ) {
static void EvalNoiseValueChanged( GtkAdjustment *padj, evalwidget *pew ) {
- gtk_widget_set_sensitive( pew->pwDeterministic, padj->value != 0.0f );
+ gtk_widget_set_sensitive( pew->pwDeterministic, gtk_adjustment_get_value( padj ) != 0.0f );
EvalChanged ( NULL, pew );
-
+
}
static void EvalPliesValueChanged( GtkAdjustment *padj, evalwidget *pew ) {
- gtk_widget_set_sensitive( pew->pwUsePrune, padj->value > 0 );
+ gtk_widget_set_sensitive( pew->pwUsePrune, gtk_adjustment_get_value ( padj ) > 0 );
EvalChanged ( NULL, pew );
}
-static void SettingsMenuActivate ( GtkWidget *pwItem,
- evalwidget *pew ) {
-
+static void SettingsMenuActivate ( GtkComboBox *box, evalwidget *pew ) {
+
evalcontext *pec;
- int *piSelected;
-
+ int iSelected;
- piSelected = g_object_get_data ( G_OBJECT ( pwItem ), "user_data" );
- if ( *piSelected == NUM_SETTINGS )
+ iSelected = gtk_combo_box_get_active(box);
+ if ( iSelected == NUM_SETTINGS )
return; /* user defined */
/* set all widgets to predefined values */
- pec = &aecSettings[ *piSelected ];
-
+ pec = &aecSettings[ iSelected ];
+
gtk_adjustment_set_value ( pew->padjPlies, pec->nPlies );
gtk_adjustment_set_value ( pew->padjNoise, pec->rNoise );
@@ -1677,8 +2058,8 @@ static void SettingsMenuActivate ( GtkWidget *pwItem,
pec->fDeterministic );
if ( pew->fMoveFilter )
- MoveFilterSetPredefined ( pew->pwMoveFilter,
- aiSettingsMoveFilter[ *piSelected ] );
+ MoveFilterSetPredefined ( pew->pwMoveFilter,
+ aiSettingsMoveFilter[ iSelected ] );
}
@@ -1687,7 +2068,7 @@ static void SettingsMenuActivate ( GtkWidget *pwItem,
*
*/
-static GtkWidget *EvalWidget( evalcontext *pec, movefilter *pmf,
+static GtkWidget *EvalWidget( evalcontext *pec, movefilter *pmf,
int *pfOK, const int fMoveFilter ) {
evalwidget *pew;
@@ -1696,23 +2077,20 @@ static GtkWidget *EvalWidget( evalcontext *pec, movefilter *pmf,
GtkWidget *pwFrame, *pwFrame2;
GtkWidget *pw2, *pw3;
- GtkWidget *pwMenu;
- GtkWidget *pwItem;
GtkWidget *pwev;
int i;
- int *pi;
if( pfOK )
*pfOK = FALSE;
pwEval = gtk_vbox_new( FALSE, 0 );
gtk_container_set_border_width( GTK_CONTAINER( pwEval ), 8 );
-
+
pew = malloc( sizeof *pew );
/*
- * Frame with prefined settings
+ * Frame with prefined settings
*/
pwev = gtk_event_box_new();
@@ -1736,45 +2114,23 @@ static GtkWidget *EvalWidget( evalcontext *pec, movefilter *pmf,
"beginner's play to the grandmaster setting "
"that will test your patience"));
- pwMenu = gtk_menu_new ();
-
- for ( i = 0; i <= NUM_SETTINGS; i++ ) {
-
- if ( i < NUM_SETTINGS )
- gtk_menu_append ( GTK_MENU ( pwMenu ),
- pwItem = gtk_menu_item_new_with_label (
- Q_ ( aszSettings[ i ] ) ) );
- else
- gtk_menu_append ( GTK_MENU ( pwMenu ),
- pwItem = gtk_menu_item_new_with_label (
- _("user defined") ) );
-
- pi = malloc ( sizeof ( int ) );
- *pi = i;
- g_object_set_data_full( G_OBJECT( pwItem ), "user_data",
- pi, free );
-
- g_signal_connect( G_OBJECT ( pwItem ), "activate",
- G_CALLBACK ( SettingsMenuActivate ),
- (void *) pew );
-
- }
-
- pew->pwOptionMenu = gtk_option_menu_new ();
- gtk_option_menu_set_menu ( GTK_OPTION_MENU ( pew->pwOptionMenu ), pwMenu );
-
+ pew->pwOptionMenu = gtk_combo_box_text_new();
+ for ( i = 0; i < NUM_SETTINGS; i++ )
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(pew->pwOptionMenu), Q_(aszSettings[i]));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(pew->pwOptionMenu), _("user defined"));
+ g_signal_connect(G_OBJECT(pew->pwOptionMenu), "changed", G_CALLBACK(SettingsMenuActivate), pew);
gtk_container_add ( GTK_CONTAINER ( pw2 ), pew->pwOptionMenu );
-
+
/*
- * Frame with user settings
+ * Frame with user settings
*/
pwFrame = gtk_frame_new ( _("User defined settings") );
gtk_container_add ( GTK_CONTAINER ( pwEval ), pwFrame );
-
+
pw2 = gtk_vbox_new ( FALSE, 8 );
gtk_container_set_border_width( GTK_CONTAINER( pw2 ), 8 );
gtk_container_add ( GTK_CONTAINER ( pwFrame ), pw2 );
@@ -1803,9 +2159,9 @@ static GtkWidget *EvalWidget( evalcontext *pec, movefilter *pmf,
gtk_label_new( _("Plies:") ) );
gtk_container_add( GTK_CONTAINER( pw ),
gtk_spin_button_new( pew->padjPlies, 1, 0 ) );
-
+
/* Use pruning neural nets */
-
+
pwFrame2 = gtk_frame_new ( _("Pruning neural nets") );
gtk_container_add ( GTK_CONTAINER ( pw2 ), pwFrame2 );
@@ -1817,7 +2173,7 @@ static GtkWidget *EvalWidget( evalcontext *pec, movefilter *pmf,
/* FIXME This needs a tool tip */
/* cubeful */
-
+
pwFrame2 = gtk_frame_new ( _("Cubeful evaluations") );
gtk_container_add ( GTK_CONTAINER ( pw2 ), pwFrame2 );
@@ -1827,7 +2183,7 @@ static GtkWidget *EvalWidget( evalcontext *pec, movefilter *pmf,
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( pew->pwCubeful ),
pec->fCubeful );
- if ( fMoveFilter )
+ if ( fMoveFilter )
/* checker play */
gtk_widget_set_tooltip_text(pew->pwCubeful,
_("Instruct GNU Backgammon to use cubeful "
@@ -1875,7 +2231,7 @@ static GtkWidget *EvalWidget( evalcontext *pec, movefilter *pmf,
gtk_label_new( _("Noise:") ) );
gtk_container_add( GTK_CONTAINER( pw ), gtk_spin_button_new(
pew->padjNoise, 0.001, 3 ) );
-
+
gtk_container_add( GTK_CONTAINER( pw3 ),
pew->pwDeterministic = gtk_check_button_new_with_label(
_("Deterministic noise") ) );
@@ -1892,14 +2248,14 @@ static GtkWidget *EvalWidget( evalcontext *pec, movefilter *pmf,
/* move filter */
if ( fMoveFilter ) {
-
- pew->pwMoveFilter = MoveFilterWidget ( pmf, pfOK,
- G_CALLBACK ( EvalChanged ),
+
+ pew->pwMoveFilter = MoveFilterWidget ( pmf, pfOK,
+ G_CALLBACK( EvalChanged ),
pew );
pwev = gtk_event_box_new();
gtk_event_box_set_visible_window(GTK_EVENT_BOX(pwev), FALSE);
- gtk_container_add ( GTK_CONTAINER ( pwEval ), pwev );
+ gtk_container_add ( GTK_CONTAINER ( pwEval ), pwev );
gtk_container_add ( GTK_CONTAINER ( pwev ), pew->pwMoveFilter );
gtk_widget_set_tooltip_text(pwev,
@@ -1920,7 +2276,7 @@ static GtkWidget *EvalWidget( evalcontext *pec, movefilter *pmf,
g_signal_connect( G_OBJECT( pew->padjPlies ), "value-changed",
G_CALLBACK( EvalPliesValueChanged ), pew );
EvalPliesValueChanged( pew->padjPlies, pew );
-
+
g_signal_connect( G_OBJECT( pew->padjNoise ), "value-changed",
G_CALLBACK( EvalNoiseValueChanged ), pew );
EvalNoiseValueChanged( pew->padjNoise, pew );
@@ -1930,10 +2286,10 @@ static GtkWidget *EvalWidget( evalcontext *pec, movefilter *pmf,
g_signal_connect( G_OBJECT( pew->pwCubeful ), "toggled",
G_CALLBACK( EvalChanged ), pew );
-
+
g_signal_connect( G_OBJECT( pew->pwUsePrune ), "toggled",
G_CALLBACK( EvalChanged ), pew );
-
+
g_object_set_data_full( G_OBJECT( pwEval ), "user_data", pew, free );
return pwEval;
@@ -1948,7 +2304,7 @@ static void EvalOK( GtkWidget *pw, void *p ) {
*pew->pfOK = TRUE;
EvalGetValues ( pew->pec, pew );
-
+
if( pew->pfOK )
gtk_widget_destroy( gtk_widget_get_toplevel( pw ) );
}
@@ -1977,12 +2333,12 @@ static void SetEvalCommands( const char *szPrefix, evalcontext *pec,
if( pec->rNoise != pecOrig->rNoise ) {
gchar buf[G_ASCII_DTOSTR_BUF_SIZE];
- sprintf( sz, "%s noise %s", szPrefix,
+ sprintf( sz, "%s noise %s", szPrefix,
g_ascii_formatd( buf, G_ASCII_DTOSTR_BUF_SIZE,
"%.3f", pec->rNoise ));
UserCommand( sz );
}
-
+
if( pec->fDeterministic != pecOrig->fDeterministic ) {
sprintf( sz, "%s deterministic %s", szPrefix, pec->fDeterministic ?
"on" : "off" );
@@ -2020,8 +2376,8 @@ static int EvalDefaultSetting(evalcontext *pec, movefilter *pmf)
{
fEval = ! cmp_evalcontext ( &aecSettings[ i ], pec );
fMoveFilter = ! aecSettings[ i ].nPlies ||
- ( !pmf ||
- equal_movefilters ( (movefilter (*)[MAX_FILTER_PLIES]) pmf,
+ ( !pmf ||
+ equal_movefilters ( (movefilter (*)[MAX_FILTER_PLIES]) pmf,
aaamfMoveFilterSettings[ aiSettingsMoveFilter[ i ] ] ) );
if (fEval && fMoveFilter)
@@ -2041,7 +2397,7 @@ static void UpdateSummaryEvalMenuSetting(AnalysisDetails *pAnalDetails )
|| (chequerDefault == SETTINGS_SUPREMO && cubeDefault == SETTINGS_WORLDCLASS))
setting = chequerDefault;
- gtk_option_menu_set_history ( GTK_OPTION_MENU ( pAnalDetails->pwOptionMenu ), setting );
+ gtk_combo_box_set_active(GTK_COMBO_BOX( pAnalDetails->pwOptionMenu ), setting );
}
static void ShowDetailedAnalysis(GtkWidget *button, AnalysisDetails *pDetails)
@@ -2058,7 +2414,7 @@ static void ShowDetailedAnalysis(GtkWidget *button, AnalysisDetails *pDetails)
gtk_box_pack_start (GTK_BOX (hbox), pwFrame, TRUE, TRUE, 0);
gtk_container_set_border_width (GTK_CONTAINER (pwFrame), 4);
- gtk_container_add(GTK_CONTAINER (pwFrame ),
+ gtk_container_add(GTK_CONTAINER (pwFrame ),
pDetails->pwChequer = EvalWidget( pDetails->esChequer, pDetails->mfChequer,
NULL, pDetails->mfChequer != NULL ));
@@ -2069,7 +2425,7 @@ static void ShowDetailedAnalysis(GtkWidget *button, AnalysisDetails *pDetails)
pwvbox = gtk_vbox_new ( FALSE, 0 );
gtk_container_add( GTK_CONTAINER( pwFrame ), pwvbox );
- gtk_box_pack_start ( GTK_BOX ( pwvbox ),
+ gtk_box_pack_start ( GTK_BOX ( pwvbox ),
pDetails->pwCube = EvalWidget( pDetails->esCube, (movefilter*)&pDetails->mfCube[9],
NULL, pDetails->mfCube != NULL ),
FALSE, FALSE, 0 );
@@ -2081,9 +2437,9 @@ static void ShowDetailedAnalysis(GtkWidget *button, AnalysisDetails *pDetails)
UpdateSummaryEvalMenuSetting(pDetails);
}
-static void SummaryMenuActivate(GtkWidget *pwItem, AnalysisDetails *pAnalDetails)
+static void SummaryMenuActivate(GtkComboBox *box, AnalysisDetails *pAnalDetails)
{
- int selected = *((int*)(g_object_get_data ( G_OBJECT ( pwItem ), "user_data" )));
+ int selected = gtk_combo_box_get_active(box);
if (selected == NUM_SETTINGS)
return; /* user defined */
@@ -2099,9 +2455,8 @@ static void SummaryMenuActivate(GtkWidget *pwItem, AnalysisDetails *pAnalDetails
static GtkWidget *AddLevelSettings(GtkWidget *pwFrame, AnalysisDetails *pAnalDetails)
{
- GtkWidget *vbox, *hbox, *pw2, *pwMenu, *pwItem, *pwDetails, *vboxSpacer;
+ GtkWidget *vbox, *hbox, *pw2, *pwDetails, *vboxSpacer;
int i;
- int *pi;
vboxSpacer = gtk_vbox_new (FALSE, 0);
gtk_container_set_border_width ( GTK_CONTAINER ( vboxSpacer ), 8 );
@@ -2111,7 +2466,7 @@ static GtkWidget *AddLevelSettings(GtkWidget *pwFrame, AnalysisDetails *pAnalDet
gtk_container_add ( GTK_CONTAINER ( vboxSpacer ), vbox );
/*
- * Frame with prefined settings
+ * Frame with prefined settings
*/
pw2 = gtk_vbox_new ( FALSE, 4 );
@@ -2119,34 +2474,12 @@ static GtkWidget *AddLevelSettings(GtkWidget *pwFrame, AnalysisDetails *pAnalDet
/* option menu with selection of predefined settings */
- pwMenu = gtk_menu_new ();
-
- gtk_widget_set_tooltip_text(pwMenu,
- _("Select a predefined setting, ranging from "
- "beginner's play to the grandmaster setting "
- "that will test your patience"));
-
- for ( i = 0; i <= NUM_SETTINGS; i++ ) {
-
- if ( i < NUM_SETTINGS )
- gtk_menu_append ( GTK_MENU ( pwMenu ),
- pwItem = gtk_menu_item_new_with_label (
- Q_ ( aszSettings[ i ] ) ) );
- else
- gtk_menu_append ( GTK_MENU ( pwMenu ),
- pwItem = gtk_menu_item_new_with_label (
- _("user defined") ) );
-
- pi = malloc ( sizeof ( int ) );
- *pi = i;
- g_object_set_data_full( G_OBJECT( pwItem ), "user_data", pi, free );
-
- g_signal_connect( G_OBJECT ( pwItem ), "activate", G_CALLBACK ( SummaryMenuActivate ), (void*)pAnalDetails);
- }
-
- pAnalDetails->pwOptionMenu = gtk_option_menu_new ();
- gtk_option_menu_set_menu ( GTK_OPTION_MENU ( pAnalDetails->pwOptionMenu ), pwMenu );
+ pAnalDetails->pwOptionMenu = gtk_combo_box_text_new();
+ for ( i = 0; i < NUM_SETTINGS; i++ )
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(pAnalDetails->pwOptionMenu), Q_(aszSettings[i]));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(pAnalDetails->pwOptionMenu), _("user defined"));
+ g_signal_connect(G_OBJECT(pAnalDetails->pwOptionMenu), "changed", G_CALLBACK(SummaryMenuActivate), pAnalDetails);
gtk_container_add ( GTK_CONTAINER ( pw2 ), pAnalDetails->pwOptionMenu );
pwDetails = gtk_button_new_with_label( _("Advanced Settings...") );
@@ -2166,26 +2499,26 @@ static GtkWidget *AddLevelSettings(GtkWidget *pwFrame, AnalysisDetails *pAnalDet
}
#define ADJUSTSKILLUPDATE(button,flag,string) \
- if( paw->apadjSkill[(button)]->value != arSkillLevel[(flag)] ) \
+ if( gtk_adjustment_get_value ( paw->apadjSkill[(button)] ) != arSkillLevel[(flag)] ) \
{ \
gchar buf[G_ASCII_DTOSTR_BUF_SIZE]; \
sprintf(sz, (string), g_ascii_formatd( buf, G_ASCII_DTOSTR_BUF_SIZE, \
- "%0.3f", (gdouble) paw->apadjSkill[(button)]->value )); \
+ "%0.3f", (gdouble) gtk_adjustment_get_value( paw->apadjSkill[(button)] ) ) ); \
UserCommand(sz); \
}
#define ADJUSTLUCKUPDATE(button,flag,string) \
- if( paw->apadjLuck[(button)]->value != arLuckLevel[(flag)] ) \
+ if( gtk_adjustment_get_value( paw->apadjLuck[(button)] ) != arLuckLevel[(flag)] ) \
{ \
gchar buf[G_ASCII_DTOSTR_BUF_SIZE]; \
sprintf(sz, (string), g_ascii_formatd( buf, G_ASCII_DTOSTR_BUF_SIZE, \
- "%0.3f", (gdouble) paw->apadjLuck[(button)]->value )); \
+ "%0.3f", (gdouble) gtk_adjustment_get_value( paw->apadjLuck[(button)] ) ) ); \
UserCommand(sz); \
}
-
+
static void AnalysisOK( GtkWidget *pw, analysiswidget *paw ) {
- char sz[128];
+ char sz[128];
int n;
gtk_widget_hide( gtk_widget_get_toplevel( pw ) );
@@ -2232,6 +2565,7 @@ static void AnalysisOK( GtkWidget *pw, analysiswidget *paw ) {
SetEvalCommands( "set evaluation cubedecision eval", &paw->esEvalCube.ec,
&GetEvalCube()->ec );
}
+ UserCommand("save settings");
outputresume();
gtk_widget_destroy( gtk_widget_get_toplevel( pw ) );
@@ -2253,8 +2587,8 @@ static void AnalysisSet( analysiswidget *paw) {
fAnalyseDice );
for ( i = 0; i < 2; ++i )
- gtk_toggle_button_set_active(
- GTK_TOGGLE_BUTTON( paw->apwAnalysePlayers[ i ] ),
+ gtk_toggle_button_set_active(
+ GTK_TOGGLE_BUTTON( paw->apwAnalysePlayers[ i ] ),
afAnalysePlayers[ i ] );
gtk_adjustment_set_value ( GTK_ADJUSTMENT( paw->apadjSkill[0] ),
@@ -2300,7 +2634,7 @@ extern void SetAnalysis(gpointer p, guint n, GtkWidget * pw)
N_("Unlucky:"), N_("Very unlucky:") };
int i;
AnalysisDetails *pAnalDetailSettings1, *pAnalDetailSettings2;
- GtkWidget *pwDialog, *pwPage, *pwFrame, *pwLabel, *pwSpin, *pwTable;
+ GtkWidget *pwDialog, *pwPage, *pwFrame, *pwLabel, *pwSpin, *pwTable;
GtkWidget *hboxTop, *hboxBottom, *vbox1, *vbox2, *hbox;
analysiswidget aw;
@@ -2348,7 +2682,7 @@ extern void SetAnalysis(gpointer p, guint n, GtkWidget * pw)
char *sz = g_strdup_printf( _("Analyse player %s"), ap[ i ].szName );
aw.apwAnalysePlayers[ i ] = gtk_check_button_new_with_label ( sz );
- gtk_box_pack_start (GTK_BOX (vbox2), aw.apwAnalysePlayers[ i ],
+ gtk_box_pack_start (GTK_BOX (vbox2), aw.apwAnalysePlayers[ i ],
FALSE, FALSE, 0);
}
@@ -2368,12 +2702,12 @@ extern void SetAnalysis(gpointer p, guint n, GtkWidget * pw)
gtk_label_set_justify (GTK_LABEL (pwLabel), GTK_JUSTIFY_RIGHT);
gtk_misc_set_alignment (GTK_MISC (pwLabel), 0, 0.5);
}
-
+
for (i = 0; i < 3; i++){
- aw.apadjSkill[i] =
- GTK_ADJUSTMENT( gtk_adjustment_new( 1, 0, 1, 0.01, 10, 0 ) );
+ aw.apadjSkill[i] =
+ GTK_ADJUSTMENT( gtk_adjustment_new( 1, 0, 1, 0.01, 0.05, 0 ) );
- pwSpin =
+ pwSpin =
gtk_spin_button_new (GTK_ADJUSTMENT (aw.apadjSkill[i]), 1, 2);
gtk_table_attach (GTK_TABLE (pwTable), pwSpin, 1, 2, i, i+1,
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
@@ -2387,7 +2721,7 @@ extern void SetAnalysis(gpointer p, guint n, GtkWidget * pw)
pwTable = gtk_table_new (4, 2, FALSE);
gtk_container_add (GTK_CONTAINER (pwFrame), pwTable);
-
+
for (i = 0; i < 4; i++){
pwLabel = gtk_label_new ( gettext ( aszLuckLabel[i] ) );
gtk_table_attach (GTK_TABLE (pwTable), pwLabel, 0, 1, i, i+1,
@@ -2396,14 +2730,14 @@ extern void SetAnalysis(gpointer p, guint n, GtkWidget * pw)
gtk_label_set_justify (GTK_LABEL (pwLabel), GTK_JUSTIFY_RIGHT);
gtk_misc_set_alignment (GTK_MISC (pwLabel), 0, 0.5);
}
-
+
for (i = 0; i < 4; i++){
- aw.apadjLuck[i] =
- GTK_ADJUSTMENT( gtk_adjustment_new( 1, 0, 1, 0.01, 10, 0 ) );
+ aw.apadjLuck[i] =
+ GTK_ADJUSTMENT( gtk_adjustment_new( 1, 0, 1, 0.01, 0.05, 0 ) );
- pwSpin =
+ pwSpin =
gtk_spin_button_new (GTK_ADJUSTMENT (aw.apadjLuck[i]), 1, 2);
-
+
gtk_table_attach (GTK_TABLE (pwTable), pwSpin, 1, 2, i, i+1,
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
@@ -2460,7 +2794,7 @@ typedef struct _playerswidget {
GtkWidget *apwName[ 2 ], *apwRadio[ 2 ][ 3 ], *apwSocket[ 2 ], *apwExternal[ 2 ];
char aszSocket[ 2 ][ 128 ];
evalsetup esChequer[2];
- evalsetup esCube[2];
+ evalsetup esCube[2];
AnalysisDetails *pLevelSettings[2];
} playerswidget;
@@ -2490,16 +2824,16 @@ static GtkWidget *PlayersPage( playerswidget *ppw, int i, const char *title )
gtk_container_set_border_width( GTK_CONTAINER( pw ), 4 );
gtk_container_add( GTK_CONTAINER( pwVBox ), pw );
gtk_container_add( GTK_CONTAINER( pw ),
- gtk_label_new( _("Name:") ) );
+ gtk_label_new( _("Default Name:") ) );
gtk_container_add( GTK_CONTAINER( pw ),
ppw->apwName[ i ] = gtk_entry_new() );
gtk_entry_set_text( GTK_ENTRY( ppw->apwName[ i ] ),
(ppw->ap[ i ].szName) );
-
+
gtk_container_add( GTK_CONTAINER( pwVBox ),
ppw->apwRadio[ i ][ 0 ] =
gtk_radio_button_new_with_label( NULL, _("Human") ) );
-
+
gtk_container_add( GTK_CONTAINER( pwVBox ),
ppw->apwRadio[ i ][ 1 ] =
gtk_radio_button_new_with_label_from_widget(
@@ -2511,7 +2845,7 @@ static GtkWidget *PlayersPage( playerswidget *ppw, int i, const char *title )
ppw->pLevelSettings[i] = CreateEvalSettings(pwVBox, _("GNU Backgammon settings"),
&ppw->ap[ i ].esChequer.ec, (movefilter*)ppw->ap[ i ].aamf, &ppw->ap[ i ].esCube.ec, NULL);
-
+
gtk_container_add( GTK_CONTAINER( pwVBox ),
ppw->apwRadio[ i ][ 2 ] =
gtk_radio_button_new_with_label_from_widget(
@@ -2528,7 +2862,7 @@ static GtkWidget *PlayersPage( playerswidget *ppw, int i, const char *title )
if( ap[ i ].szSocket )
gtk_entry_set_text( GTK_ENTRY( ppw->apwSocket[ i ] ),
ap[ i ].szSocket );
-
+
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(
ppw->apwRadio[ i ][ ap[ i ].pt ] ), TRUE );
@@ -2536,7 +2870,7 @@ static GtkWidget *PlayersPage( playerswidget *ppw, int i, const char *title )
G_CALLBACK( PlayerTypeToggled ), ppw );
g_signal_connect( G_OBJECT( ppw->apwRadio[ i ][ 2 ] ), "toggled",
G_CALLBACK( PlayerTypeToggled ), ppw );
-
+
return pwFrame;
}
@@ -2548,7 +2882,7 @@ static void PlayersOK( GtkWidget *pw, playerswidget *pplw ) {
for( i = 0; i < 2; i++ ) {
strcpyn( pplw->ap[ i ].szName, gtk_entry_get_text(
GTK_ENTRY( pplw->apwName[ i ] ) ), MAX_NAME_LEN );
-
+
for( j = 0; j < 3; j++ )
if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(
pplw->apwRadio[ i ][ j ] ) ) ) {
@@ -2596,19 +2930,13 @@ static void SetPlayers(gpointer p, guint n, GtkWidget *pw)
{
outputpostpone();
- if (!CompareNames(apTemp[0].szName, ap[1].szName) && CompareNames(apTemp[0].szName, apTemp[1].szName)) { /* Trying to swap names - change current name to avoid error */
- sprintf(ap[1].szName, "_%s", apTemp[0].szName);
- }
+ sprintf(sz, "set defaultnames \"%s\" \"%s\"", apTemp[0].szName, apTemp[1].szName);
+ UserCommand(sz);
+
for (i = 0; i < 2; i++) {
/* NB: this comparison is case-sensitive, and does not use
CompareNames(), so that the user can modify the case of
names. */
- if (strcmp(ap[i].szName, apTemp[i].szName)) {
- sprintf(sz, "set player %d name %s", i,
- apTemp[i].szName);
- UserCommand(sz);
- }
-
switch (apTemp[i].pt) {
case PLAYER_HUMAN:
if (ap[i].pt != PLAYER_HUMAN) {
@@ -2656,6 +2984,7 @@ static void SetPlayers(gpointer p, guint n, GtkWidget *pw)
}
}
+ UserCommand("save settings");
outputresume();
}
}
@@ -2679,6 +3008,7 @@ static char *aaszLang[][ 3 ] = {
{ N_("Icelandic"), "is_IS", "flags/iceland.png" },
{ N_("Italian"), "it_IT", "flags/italy.png" },
{ N_("Japanese"), "ja_JP", "flags/japan.png" },
+ { N_("Romanian"), "ro_RO", "flags/romania.png" },
{ N_("Russian"), "ru_RU", "flags/russia.png" },
{ N_("Spanish"), "es_ES", "flags/spain.png" },
{ N_("Turkish"), "tr_TR", "flags/turkey.png" },
@@ -2744,7 +3074,7 @@ static gboolean FlagClicked(GtkWidget *pw, GdkEventButton *event, void* dummy)
eb = gtk_bin_get_child(GTK_BIN(frame));
gtk_frame_set_shadow_type(GTK_FRAME(gtk_bin_get_child(GTK_BIN(pw))), GTK_SHADOW_ETCHED_OUT);
- gtk_widget_modify_bg(eb, GTK_STATE_NORMAL, &pwMain->style->bg[GTK_STATE_SELECTED]);
+ gtk_widget_modify_bg(eb, GTK_STATE_NORMAL, &gtk_widget_get_style( pwMain )->bg[GTK_STATE_SELECTED]);
if (SetupLanguage((char *) g_object_get_data(G_OBJECT(curSel), "lang")))
/* Immediately translate this dialog */
@@ -2767,13 +3097,13 @@ static GtkWidget *GetFlagWidget(char *language, char *langCode, const char *flag
GError *pix_error = NULL;
eb = gtk_event_box_new();
- gtk_widget_modify_bg(eb, GTK_STATE_INSENSITIVE, &pwMain->style->bg[GTK_STATE_NORMAL]);
+ gtk_widget_modify_bg(eb, GTK_STATE_INSENSITIVE, &gtk_widget_get_style( pwMain )->bg[GTK_STATE_NORMAL]);
frame = gtk_frame_new(NULL);
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_NONE);
gtk_container_add( GTK_CONTAINER( eb ), frame );
eb2 = gtk_event_box_new();
- gtk_widget_modify_bg(eb2, GTK_STATE_INSENSITIVE, &pwMain->style->bg[GTK_STATE_NORMAL]);
+ gtk_widget_modify_bg(eb2, GTK_STATE_INSENSITIVE, &gtk_widget_get_style( pwMain )->bg[GTK_STATE_NORMAL]);
gtk_container_add( GTK_CONTAINER( frame ), eb2 );
vbox = gtk_vbox_new( FALSE, 5 );
@@ -2922,26 +3252,185 @@ static void ReportBug(gpointer p, guint n, GtkWidget * pwEvent)
OpenURL("http://savannah.gnu.org/bugs/?func=additem&group=gnubg");
}
+#if (USE_GTKUIMANAGER)
+
+static GtkActionEntry actionEntries[] = {
+ { "FileMenuAction", NULL, N_("_File") },
+ { "FileNewAction", GTK_STOCK_NEW, N_("_New..."), "<control>N", NULL, G_CALLBACK(NewClicked) },
+ { "FileOpenAction", GTK_STOCK_OPEN, N_("_Open"), "<control>O", NULL, G_CALLBACK(GTKOpen) },
+ { "FileSaveAction", GTK_STOCK_SAVE, N_("_Save"), "<control>S", NULL, G_CALLBACK(GTKSave) },
+ { "FileCommandsOpenAction", NULL, N_("Open _Commands..."), NULL, NULL, G_CALLBACK(GTKCommandsOpen) },
+ { "FileMatchInfoAction", NULL, N_("Match information..."), NULL, NULL, G_CALLBACK(GTKMatchInfo) },
+#ifdef WIN32
+ { "FileExitAction", NULL, N_("E_xit"), "<control>Q", NULL, CMD_ACTION_CALLBACK_FROMID(CMD_QUIT) },
+#else
+ { "FileExitAction", NULL, N_("_Quit"), "<control>Q", NULL, CMD_ACTION_CALLBACK_FROMID(CMD_QUIT) },
+#endif
+
+ { "EditMenuAction", NULL, N_("_Edit") },
+ { "UndoAction", GTK_STOCK_UNDO, N_("_Undo"), "<control>Z", NULL, G_CALLBACK(GTKUndo) },
+ { "CopyIDMenuAction", NULL, N_("_Copy ID to Clipboard") },
+ { "CopyGNUBGIDAction", NULL, N_("GNUbg ID"), "<control>C", NULL, G_CALLBACK(CopyIDs) },
+ { "CopyMatchIDAction", NULL, N_("Match ID"), "<control>M", NULL, G_CALLBACK(CopyMatchID) },
+ { "CopyPositionIDAction", NULL, N_("Position ID"), "<control>P", NULL, G_CALLBACK(CopyPositionID) },
+
+ { "CopyAsMenuAction", NULL, N_("Copy as") },
+ { "CopyPosAsAsciiAction", NULL, N_("Position as ASCII"), NULL, NULL, G_CALLBACK(CommandCopy) },
+ { "CopyAsGammOnLineAction", NULL, N_("GammOnLine (HTML)"), NULL, NULL, G_CALLBACK(CopyAsGOL) },
+ { "CopyAsBackgammonBaseAction", NULL, N_("BackgammonBase.com (URL)"), NULL, NULL, G_CALLBACK(CopyAsBGbase) },
+
+ { "PasteIDAction", GTK_STOCK_PASTE, N_("_Paste ID"), "<control>V", NULL, G_CALLBACK(PasteIDs) },
+
+ { "ViewMenuAction", NULL, N_("_View") },
+ { "PanelsMenuAction", NULL, N_("_Panels") },
+
+ { "RestorePanelsAction", NULL, N_("Restore panels"), NULL, NULL, G_CALLBACK(ShowAllPanels) },
+ { "HidePanelsAction", NULL, N_("Hide panels"), NULL, NULL, G_CALLBACK(HideAllPanels) },
+
+ { "ToolBarMenuAction", NULL, N_("_Toolbar") },
+ { "HideToolBarAction", NULL, N_("_Hide Toolbar"), NULL, NULL, G_CALLBACK(HideToolbar) },
+ { "ShowToolBarAction", NULL, N_("_Show Toolbar"), NULL, NULL, G_CALLBACK(ShowToolbar) },
+
+#if USE_BOARD3D
+ { "SwitchModeAction", NULL, N_("Switch to xD view"), NULL, NULL, G_CALLBACK(SwitchDisplayMode) },
+#endif
+
+ { "GameMenuAction", NULL, N_("_Game") },
+ { "RollAction", NULL, N_("_Roll"), "<control>R", NULL, CMD_ACTION_CALLBACK_FROMID(CMD_ROLL) },
+ { "FinishMoveAction", NULL, N_("_Finish move"), "<control>F", NULL, G_CALLBACK(FinishMove) },
+ { "DoubleAction", GNUBG_STOCK_DOUBLE, N_("_Double"), "<control>D", NULL, CMD_ACTION_CALLBACK_FROMID(CMD_DOUBLE) },
+ { "ResignAction", GNUBG_STOCK_RESIGN, N_("Re_sign"), NULL, NULL, G_CALLBACK(GTKResign) },
+ { "AcceptAction", GNUBG_STOCK_ACCEPT, N_("_Accept"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_ACCEPT) },
+ { "RejectAction", GNUBG_STOCK_REJECT, N_("Re_ject"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_REJECT) },
+ { "PlayComputerTurnAction", NULL, N_("Play computer turn"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_PLAY) },
+ { "EndGameAction", GNUBG_STOCK_END_GAME, N_("_End Game"), "<control>G", NULL, CMD_ACTION_CALLBACK_FROMID(CMD_END_GAME) },
+ { "SwapPlayersAction", NULL, N_("Swap players"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_SWAP_PLAYERS) },
+ { "SetCubeAction", NULL, N_("Set cube..."), NULL, NULL, G_CALLBACK(GTKSetCube) },
+ { "SetDiceAction", NULL, N_("Set _dice..."), NULL, NULL, G_CALLBACK(GTKSetDice) },
+
+ { "SetTurnMenuAction", NULL, N_("Set _turn") },
+
+ { "ClearTurnAction", NULL, N_("Clear turn"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_CLEAR_TURN) },
+
+ { "AnalyseMenuAction", NULL, N_("_Analyse") },
+ { "EvaluateAction", NULL, N_("_Evaluate"), "<control>E", NULL, CMD_ACTION_CALLBACK_FROMID(CMD_EVAL) },
+ { "HintAction", GNUBG_STOCK_HINT, N_("_Hint"), "<control>H", NULL, CMD_ACTION_CALLBACK_FROMID(CMD_HINT) },
+ { "RolloutAction", NULL, N_("_Rollout"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_ROLLOUT) },
+ { "AnalyseMoveAction", NULL, N_("Analyse move"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_ANALYSE_MOVE) },
+ { "AnalyseGameAction", NULL, N_("Analyse game"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_ANALYSE_GAME) },
+ { "AnalyseMatchAction", NULL, N_("Analyse match or session"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_ANALYSE_MATCH) },
+
+ { "ClearAnalysisMenuAction", NULL, N_("Clear analysis") },
+ { "ClearAnalysisMoveAction", GTK_STOCK_CLEAR, N_("Move"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_ANALYSE_CLEAR_MOVE) },
+ { "ClearAnalysisGameAction", GTK_STOCK_CLEAR, N_("_Game"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_ANALYSE_CLEAR_GAME) },
+ { "ClearAnalysisMatchOrSessionAction", GTK_STOCK_CLEAR, N_("_Match or session"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_ANALYSE_CLEAR_MATCH) },
+
+ { "CMarkMenuAction", NULL, N_("CMark") },
+ { "CMarkCubeMenuAction", NULL, N_("Cube") },
+ { "CMarkCubeClearAction", NULL, N_("Clear"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_CMARK_CUBE_CLEAR) },
+ { "CMarkCubeShowAction", NULL, N_("Show"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_CMARK_CUBE_SHOW) },
+ { "CMarkMoveMenuAction", NULL, N_("Move") },
+ { "CMarkMoveClearAction", NULL, N_("Clear"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_CMARK_MOVE_CLEAR) },
+ { "CMarkMoveShowAction", NULL, N_("Show"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_CMARK_MOVE_SHOW) },
+ { "CMarkGameMenuAction", NULL, N_("Game") },
+ { "CMarkGameClearAction", NULL, N_("Clear"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_CMARK_GAME_CLEAR) },
+ { "CMarkGameShowAction", NULL, N_("Show"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_CMARK_GAME_SHOW) },
+ { "CMarkMatchMenuAction", NULL, N_("Match") },
+ { "CMarkMatchClearAction", NULL, N_("Clear"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_CMARK_MATCH_CLEAR) },
+ { "CMarkMatchShowAction", NULL, N_("Show"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_CMARK_MATCH_SHOW) },
+
+ { "RolloutMenuAction", NULL, N_("Rollout") },
+ { "RolloutCubeAction", NULL, N_("Cube"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_ANALYSE_ROLLOUT_CUBE) },
+ { "RolloutMoveAction", NULL, N_("Move"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_ANALYSE_ROLLOUT_MOVE) },
+ { "RolloutGameAction", NULL, N_("Game"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_ANALYSE_ROLLOUT_GAME) },
+ { "RolloutMatchAction", NULL, N_("Match"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_ANALYSE_ROLLOUT_MATCH) },
+
+ { "BatchAnalyseAction", NULL, N_("Batch analyse..."), NULL, NULL, G_CALLBACK (GTKBatchAnalyse) },
+ { "MatchOrSessionStatsAction", NULL, N_("Match or session statistics"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_SHOW_STATISTICS_MATCH) },
+ { "AddMatchOrSessionStatsToDBAction", GTK_STOCK_ADD, N_("Add match or session to database"), NULL, NULL, G_CALLBACK (GtkRelationalAddMatch) },
+ { "ShowRecordsAction", NULL, N_("Show Records"), NULL, NULL, G_CALLBACK (GtkShowRelational) },
+ { "DistributionOfRollsAction", NULL, N_("Distribution of rolls"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_SHOW_ROLLS) },
+ { "TemperatureMapAction", NULL, N_("Temperature Map"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_SHOW_TEMPERATURE_MAP) },
+ { "TemperatureMapCubeAction", NULL, N_("Temperature Map (cube decision)"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_SHOW_TEMPERATURE_MAP_CUBE) },
+ { "RaceTheoryAction", NULL, N_("_Race Theory"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_SHOW_KLEINMAN) },
+ { "MarketWindowAction", NULL, N_("_Market window"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_SHOW_MARKETWINDOW) },
+ { "MatchEquityTableAction", NULL, N_("M_atch equity table"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_SHOW_MATCHEQUITYTABLE) },
+ { "EvaluationSpeedAction", NULL, N_("Evaluation speed"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_SHOW_CALIBRATION) },
+
+ { "SettingsMenuAction", NULL, N_("_Settings") },
+ { "SettingsAnalysisAction", NULL, N_("_Analysis..."), NULL, NULL, G_CALLBACK (SetAnalysis) },
+ { "SettingsBoardAppearanceAction", NULL, N_("_Board Appearance..."), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_SET_APPEARANCE) },
+ { "SettingsExportAction", NULL, N_("E_xport..."), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_SHOW_EXPORT) },
+ { "SettingsPlayersAction", NULL, N_("_Players..."), NULL, NULL, G_CALLBACK (SetPlayers) },
+ { "SettingsRolloutsAction", NULL, N_("_Rollouts..."), NULL, NULL, G_CALLBACK (SetRollouts) },
+ { "SettingsOptionsAction", NULL, N_("_Options..."), NULL, NULL, G_CALLBACK (SetOptions) },
+ { "SettingsLanguageAction", NULL, N_("_Language..."), NULL, NULL, G_CALLBACK (SetLanguage) },
+
+ { "GoMenuAction", NULL, N_("G_o") },
+ { "GoPreviousMarkedMoveAction", GNUBG_STOCK_GO_PREV_MARKED, N_("Previous marked move"), "<shift><control>Page_Up", NULL, CMD_ACTION_CALLBACK_FROMID(CMD_PREV_MARKED) },
+ { "GoPreviousCMarkedMoveAction", GNUBG_STOCK_GO_PREV_CMARKED, N_("Previous cmarked move"), "<shift>Page_Up", NULL, CMD_ACTION_CALLBACK_FROMID(CMD_PREV_CMARKED) },
+ { "GoPreviousRollAction", GNUBG_STOCK_GO_PREV, N_("Previous rol_l"), "Page_Up", NULL, CMD_ACTION_CALLBACK_FROMID(CMD_PREV_ROLL) },
+ { "GoPreviousGameAction", GNUBG_STOCK_GO_PREV_GAME, N_("Pre_vious game"), "<control>Page_Up", NULL, CMD_ACTION_CALLBACK_FROMID(CMD_PREV_GAME) },
+ { "GoNextGameAction", GNUBG_STOCK_GO_NEXT_GAME, N_("Next _game"), "<control>Page_Down", NULL, CMD_ACTION_CALLBACK_FROMID(CMD_NEXT_GAME) },
+ { "GoNextRollAction", GNUBG_STOCK_GO_NEXT, N_("Next _roll"), "Page_Down", NULL, CMD_ACTION_CALLBACK_FROMID(CMD_NEXT_ROLL) },
+ { "GoNextCMarkedMoveAction", GNUBG_STOCK_GO_NEXT_CMARKED, N_("Next cmarked move"), "<shift>Page_Down", NULL, CMD_ACTION_CALLBACK_FROMID(CMD_NEXT_CMARKED) },
+ { "GoNextMarkedMoveAction", GNUBG_STOCK_GO_NEXT_MARKED, N_("Next marked move"), "<shift><control>Page_Down", NULL, CMD_ACTION_CALLBACK_FROMID(CMD_NEXT_MARKED) },
+
+ { "HelpMenuAction", NULL, N_("_Help") },
+ { "HelpCommandsAction", NULL, N_("_Commands"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_HELP) },
+ { "HelpManualAllAboutAction", NULL, N_("_Manual (all about)"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_SHOW_MANUAL_ABOUT) },
+ { "HelpManualWebAction", NULL, N_("Manual (_web)"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_SHOW_MANUAL_WEB) },
+ { "HelpAboutGNUBGAction", GTK_STOCK_ABOUT, N_("_About gnubg"), NULL, NULL, CMD_ACTION_CALLBACK_FROMID(CMD_SHOW_VERSION) }
+};
+
+static GtkToggleActionEntry toggleActionEntries[] = {
+ { "EditPositionAction", GTK_STOCK_EDIT, N_("_Edit Position"), NULL, NULL, G_CALLBACK(ToggleEdit) },
+
+ { "PanelGameRecordAction", NULL, N_("_Game record"), NULL, NULL, GENERIC_TOGGLE_CALLBACK_FROMID(TOGGLE_GAMELIST) }, /* TOGGLE */
+ { "PanelAnalysisAction", NULL, N_("_Analysis"), NULL, NULL, GENERIC_TOGGLE_CALLBACK_FROMID(TOGGLE_ANALYSIS) }, /* TOGGLE */
+ { "PanelCommentaryAction", NULL, N_("_Commentary"), NULL, NULL, GENERIC_TOGGLE_CALLBACK_FROMID(TOGGLE_COMMENTARY) }, /* TOGGLE */
+ { "PanelMessageAction", NULL, N_("_Message"), NULL, NULL, GENERIC_TOGGLE_CALLBACK_FROMID(TOGGLE_MESSAGE) }, /* TOGGLE */
+ { "PanelTheoryAction", NULL, N_("_Theory"), NULL, NULL, GENERIC_TOGGLE_CALLBACK_FROMID(TOGGLE_THEORY) }, /* TOGGLE */
+ { "PanelCommandAction", NULL, N_("Command"), NULL, NULL, GENERIC_TOGGLE_CALLBACK_FROMID(TOGGLE_COMMAND) }, /* TOGGLE */
+
+ { "DockPanelsAction", NULL, N_("_Dock panels"), NULL, NULL, G_CALLBACK(ToggleDockPanels) },
+ { "ShowIDStatusBarAction", NULL, N_("Show _ID in status bar"), NULL, NULL, G_CALLBACK(ToggleShowingIDs) }, /* TOGGLE */
+ { "FullScreenAction", NULL, N_("Full screen"), "F11", NULL, G_CALLBACK(DoFullScreenMode) }, /* TOGGLE */
+ { "PlayClockwiseAction", NULL, N_("Play _Clockwise"), NULL, NULL, G_CALLBACK(ToggleClockwise) } /* TOGGLE */
+};
+
+static GtkRadioActionEntry toolbarRadioActionEntries[] = {
+ { "TextOnlyToolBarAction", NULL, N_("_Text only"), NULL, NULL, VIEW_TOOLBAR_TEXTONLY },
+ { "IconsOnlyToolBarAction", NULL, N_("_Icons only"), NULL, NULL, VIEW_TOOLBAR_ICONSONLY },
+ { "BothToolBarAction", NULL, N_("_Both"), NULL, NULL, VIEW_TOOLBAR_BOTH }
+};
+
+static GtkRadioActionEntry setTurnRadioActionEntries[] = {
+ { "SetTurnPlayer0Action", NULL, "0", NULL, NULL, CMD_SET_TURN_0 },
+ { "SetTurnPlayer1Action", NULL, "1", NULL, NULL, CMD_SET_TURN_1 },
+};
+
+#else
GtkItemFactoryEntry aife[] = {
{ N_("/_File"), NULL, NULL, 0, "<Branch>", NULL },
{ N_("/_File/_New..."), "<control>N", NewClicked, 0,
"<StockItem>", GTK_STOCK_NEW
},
- { N_("/_File/_Open..."), "<control>O", GTKOpen, 0,
+ { N_("/_File/_Open..."), "<control>O", GTKOpen, 0,
"<StockItem>", GTK_STOCK_OPEN
},
- { N_("/_File/_Save..."), "<control>S", GTKSave, 0,
+ { N_("/_File/_Save..."), "<control>S", GTKSave, 0,
"<StockItem>", GTK_STOCK_SAVE
},
{ N_("/_File/-"), NULL, NULL, 0, "<Separator>", NULL },
- { N_("/_File/Open _Commands..."), NULL, GTKCommandsOpen, 0,
+ { N_("/_File/Open _Commands..."), NULL, GTKCommandsOpen, 0,
NULL, NULL
},
{ N_("/_File/-"), NULL, NULL, 0, "<Separator>", NULL },
{ N_("/_File/Match information..."), NULL, GTKMatchInfo, 0, NULL,
NULL },
{ N_("/_File/-"), NULL, NULL, 0, "<Separator>", NULL },
- {
+ {
#ifdef WIN32
N_("/_File/E_xit"),
#else
@@ -2950,22 +3439,25 @@ GtkItemFactoryEntry aife[] = {
"<control>Q", Command, CMD_QUIT, "<StockItem>", GTK_STOCK_QUIT
},
{ N_("/_Edit"), NULL, NULL, 0, "<Branch>", NULL },
- { N_("/_Edit/_Undo"), "<control>Z", GTKUndo, 0,
+ { N_("/_Edit/_Undo"), "<control>Z", GTKUndo, 0,
"<StockItem>", GTK_STOCK_UNDO
},
{ N_("/_Edit/-"), NULL, NULL, 0, "<Separator>", NULL },
- { N_("/_Edit/_Copy Position ID"), "<control>C", CopyIDs, 0,
- "<StockItem>", GTK_STOCK_COPY
- },
+ { N_("/_Edit/_Copy ID to Clipboard"), NULL, NULL, 0, "<Branch>", NULL },
+ { N_("/_Edit/_Copy ID to Clipboard/GNUbg ID"), "<control>C", CopyIDs, 0, NULL, NULL },
+ { N_("/_Edit/_Copy ID to Clipboard/Match ID"), "<control>M", CopyMatchID, 0, NULL, NULL },
+ { N_("/_Edit/_Copy ID to Clipboard/Position ID"), "<control>P", CopyPositionID, 0, NULL, NULL },
{ N_("/_Edit/Copy as"), NULL, NULL, 0, "<Branch>", NULL },
{ N_("/_Edit/Copy as/Position as ASCII"), NULL,
CommandCopy, 0, NULL, NULL },
{ N_("/_Edit/Copy as/GammOnLine (HTML)"), NULL,
CopyAsGOL, 0, NULL, NULL },
+ { N_("/_Edit/Copy as/BackgammonBase.com (URL)"), NULL,
+ CopyAsBGbase, 0, NULL, NULL },
- { N_("/_Edit/_Paste Position ID"), "<control>V", PasteIDs, 0,
+ { N_("/_Edit/_Paste ID"), "<control>V", PasteIDs, 0,
"<StockItem>", GTK_STOCK_PASTE},
{ N_("/_Edit/-"), NULL, NULL, 0, "<Separator>", NULL },
@@ -3028,7 +3520,7 @@ GtkItemFactoryEntry aife[] = {
{ N_("/_Game/Set cube..."), NULL, GTKSetCube, 0, NULL, NULL },
{ N_("/_Game/Set _dice..."), NULL, GTKSetDice, 0, NULL, NULL },
{ N_("/_Game/Set _turn"), NULL, NULL, 0, "<Branch>", NULL },
- { N_("/_Game/Set turn/0"),
+ { N_("/_Game/Set turn/0"),
NULL, Command, CMD_SET_TURN_0, "<RadioItem>", NULL },
{ N_("/_Game/Set turn/1"), NULL, Command, CMD_SET_TURN_1,
"/Game/Set turn/0", NULL },
@@ -3039,23 +3531,23 @@ GtkItemFactoryEntry aife[] = {
"<StockItem>", GNUBG_STOCK_HINT},
{ N_("/_Analyse/_Rollout"), NULL, Command, CMD_ROLLOUT, NULL, NULL },
{ N_("/_Analyse/-"), NULL, NULL, 0, "<Separator>", NULL },
- { N_("/_Analyse/Analyse move"),
+ { N_("/_Analyse/Analyse move"),
NULL, Command, CMD_ANALYSE_MOVE, NULL, NULL },
- { N_("/_Analyse/Analyse game"),
+ { N_("/_Analyse/Analyse game"),
NULL, Command, CMD_ANALYSE_GAME, NULL, NULL },
- { N_("/_Analyse/Analyse match or session"),
+ { N_("/_Analyse/Analyse match or session"),
NULL, Command, CMD_ANALYSE_MATCH, NULL, NULL },
{ N_("/_Analyse/-"), NULL, NULL, 0, "<Separator>", NULL },
{ N_("/_Analyse/Clear analysis"), NULL, NULL, 0, "<Branch>", NULL },
- { N_("/_Analyse/Clear analysis/Move"),
- NULL, Command, CMD_ANALYSE_CLEAR_MOVE,
+ { N_("/_Analyse/Clear analysis/Move"),
+ NULL, Command, CMD_ANALYSE_CLEAR_MOVE,
"<StockItem>", GTK_STOCK_CLEAR
},
- { N_("/_Analyse/Clear analysis/_Game"),
+ { N_("/_Analyse/Clear analysis/_Game"),
NULL, Command, CMD_ANALYSE_CLEAR_GAME,
"<StockItem>", GTK_STOCK_CLEAR
},
- { N_("/_Analyse/Clear analysis/_Match or session"),
+ { N_("/_Analyse/Clear analysis/_Match or session"),
NULL, Command, CMD_ANALYSE_CLEAR_MATCH,
"<StockItem>", GTK_STOCK_CLEAR
},
@@ -3086,22 +3578,20 @@ GtkItemFactoryEntry aife[] = {
{ N_("/_Analyse/Match or session statistics"), NULL, Command,
CMD_SHOW_STATISTICS_MATCH, NULL, NULL },
{ N_("/_Analyse/-"), NULL, NULL, 0, "<Separator>", NULL },
- { N_("/_Analyse/Old Player records"), NULL, Command,
- CMD_RECORD_SHOW, NULL, NULL },
{ N_("/_Analyse/Add match or session to database"), NULL,
GtkRelationalAddMatch, 0,
"<StockItem>", GTK_STOCK_ADD},
{ N_("/_Analyse/Show Records"), NULL,
GtkShowRelational, 0, NULL, NULL },
{ N_("/_Analyse/-"), NULL, NULL, 0, "<Separator>", NULL },
- { N_("/_Analyse/Distribution of rolls"), NULL, Command,
+ { N_("/_Analyse/Distribution of rolls"), NULL, Command,
CMD_SHOW_ROLLS, NULL, NULL },
- { N_("/_Analyse/Temperature Map"), NULL, Command,
+ { N_("/_Analyse/Temperature Map"), NULL, Command,
CMD_SHOW_TEMPERATURE_MAP, NULL, NULL },
- { N_("/_Analyse/Temperature Map (cube decision)"), NULL, Command,
+ { N_("/_Analyse/Temperature Map (cube decision)"), NULL, Command,
CMD_SHOW_TEMPERATURE_MAP_CUBE, NULL, NULL },
{ N_("/_Analyse/-"), NULL, NULL, 0, "<Separator>", NULL },
- { N_("/_Analyse/_Race Theory"),
+ { N_("/_Analyse/_Race Theory"),
NULL, Command, CMD_SHOW_KLEINMAN, NULL, NULL },
{ N_("/_Analyse/-"), NULL, NULL, 0, "<Separator>", NULL },
{ N_("/_Analyse/_Market window"), NULL, Command, CMD_SHOW_MARKETWINDOW,
@@ -3122,9 +3612,6 @@ GtkItemFactoryEntry aife[] = {
{ N_("/_Settings/-"), NULL, NULL, 0, "<Separator>", NULL },
{ N_("/_Settings/_Options..."), NULL, SetOptions, 0, NULL, NULL },
{ N_("/_Settings/_Language..."), NULL, SetLanguage, 0, NULL, NULL },
- { N_("/_Settings/-"), NULL, NULL, 0, "<Separator>", NULL },
- { N_("/_Settings/_Save settings"),
- NULL, Command, CMD_SAVE_SETTINGS, NULL, NULL },
{ N_("/G_o"), NULL, NULL, 0, "<Branch>", NULL },
{ N_("/G_o/Previous marked move"), "<shift><control>Page_Up", Command, CMD_PREV_MARKED, "<StockItem>", GNUBG_STOCK_GO_PREV_MARKED },
{ N_("/G_o/Previous cmarked move"), "<shift>Page_Up", Command, CMD_PREV_CMARKED, "<StockItem>", GNUBG_STOCK_GO_PREV_CMARKED },
@@ -3138,15 +3625,16 @@ GtkItemFactoryEntry aife[] = {
{ N_("/_Help"), NULL, NULL, 0, "<Branch>", NULL },
{ N_("/_Help/_Commands"), NULL, Command, CMD_HELP, NULL, NULL },
{ N_("/_Help/-"), NULL, NULL, 0, "<Separator>", NULL },
- { N_("/_Help/_Manual (all about)"), NULL, Command,
+ { N_("/_Help/_Manual (all about)"), NULL, Command,
CMD_SHOW_MANUAL_ABOUT, NULL, NULL },
- { N_("/_Help/Manual (_web)"), NULL, Command,
+ { N_("/_Help/Manual (_web)"), NULL, Command,
CMD_SHOW_MANUAL_WEB, NULL, NULL },
{ N_("/_Help/-"), NULL, NULL, 0, "<Separator>", NULL },
{ N_("/_Help/_About gnubg"), NULL, Command, CMD_SHOW_VERSION,
"<StockItem>", GTK_STOCK_ABOUT
}
};
+#endif
extern int automaticTask;
@@ -3173,8 +3661,9 @@ static void Stop( GtkWidget *pw, gpointer unused )
static gboolean StopAnyAnimations(void)
{
- BoardData *bd = BOARD( pwBoard )->board_data;
#if USE_BOARD3D
+ BoardData *bd = BOARD( pwBoard )->board_data;
+
if (display_is_3d(bd->rd))
{
if (Animating3d(bd->bd3d))
@@ -3203,11 +3692,15 @@ static void StopNotButton( GtkWidget *pw, gpointer unused )
static void FileDragDropped(GtkWidget *widget, GdkDragContext * drag_context,
gint x, gint y, GtkSelectionData * data, guint info, guint time)
{
- if (data->length > 0) {
+ gchar **list;
+ list = g_uri_list_extract_uris( (gchar *)gtk_selection_data_get_data( data ) );
+
+ if ( list[0] ){
char *next, *file, *quoted;
- char *uri = (char *)data->data;
+ char *uri = (char *)list[0];
if (StrNCaseCmp("file:", uri, 5) != 0) {
outputerrf(_("Only local files supported in dnd"));
+ g_strfreev( list );
return;
}
@@ -3215,6 +3708,7 @@ static void FileDragDropped(GtkWidget *widget, GdkDragContext * drag_context,
if (!file) {
outputerrf(_("Failed to parse uri"));
+ g_strfreev( list );
return;
}
@@ -3226,6 +3720,9 @@ static void FileDragDropped(GtkWidget *widget, GdkDragContext * drag_context,
g_free(quoted);
g_free(file);
}
+
+ if ( list )
+ g_strfreev( list );
}
@@ -3242,7 +3739,11 @@ static gboolean ContextMenu(GtkWidget *widget, GdkEventButton *event, GtkWidget*
static void CreateMainWindow(void)
{
GtkWidget *pwVbox, *pwHbox, *pwHbox2, *pwHandle, *pwPanelHbox, *pwStopButton, *idMenu, *menu_item, *pwFrame;
+#ifdef GTK_TARGET_OTHER_APP /* gtk 2.12+ */
GtkTargetEntry fileDrop = {"text/uri-list", GTK_TARGET_OTHER_APP, 1};
+#else
+ GtkTargetEntry fileDrop = {"text/uri-list", 0, 1};
+#endif
pwMain = gtk_window_new( GTK_WINDOW_TOPLEVEL );
gtk_window_maximize(GTK_WINDOW(pwMain));
@@ -3257,6 +3758,39 @@ static void CreateMainWindow(void)
gtk_container_add( GTK_CONTAINER( pwMain ), pwVbox = gtk_vbox_new( FALSE, 0 ) );
+#if (USE_GTKUIMANAGER)
+ GError *error = NULL;
+ GtkActionGroup *action_group;
+
+ puim = gtk_ui_manager_new ();
+
+ action_group = gtk_action_group_new ("Actions");
+ gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
+ gtk_action_group_add_actions (action_group, actionEntries, G_N_ELEMENTS (actionEntries), NULL);
+ gtk_action_group_add_toggle_actions (action_group, toggleActionEntries, G_N_ELEMENTS (toggleActionEntries), NULL);
+ gtk_action_group_add_radio_actions (action_group, toolbarRadioActionEntries, G_N_ELEMENTS (toolbarRadioActionEntries), 0, GENERIC_RADIO_CALLBACK_FROMID(VIEW_TOOLBAR_ICONSONLY), NULL );
+ gtk_action_group_add_radio_actions (action_group, setTurnRadioActionEntries, G_N_ELEMENTS (setTurnRadioActionEntries), 0, CMD_RADIO_CALLBACK_FROMID(CMD_SET_TURN_0), NULL );
+ gtk_ui_manager_insert_action_group (puim, action_group, 0);
+
+ gtk_ui_manager_add_ui_from_string (puim, GNUBG_MAIN_UI, -1, &error);
+ if (error) {
+ g_warning ("Cannot load UI: %s", error->message);
+ g_error_free (error);
+ error = NULL;
+ }
+#if USE_BOARD3D
+ gtk_ui_manager_add_ui_from_string (puim, UIADDITIONS3D, -1, &error);
+ if (error) {
+ g_warning ("Cannot load UI: %s", error->message);
+ g_error_free (error);
+ error = NULL;
+ }
+#endif
+ /* Bind the accelerators */
+ gtk_window_add_accel_group (GTK_WINDOW (pwMain), pagMain = gtk_ui_manager_get_accel_group (puim));
+
+
+#else
pagMain = gtk_accel_group_new();
pif = gtk_item_factory_new( GTK_TYPE_MENU_BAR, "<main>", pagMain );
@@ -3264,25 +3798,28 @@ static void CreateMainWindow(void)
gtk_item_factory_create_items( pif, sizeof( aife ) / sizeof( aife[ 0 ] ), aife, NULL );
- if (!records_exist())
- gtk_item_factory_delete_item(pif, "/Analyse/Old Player records");
-
- /* Tick default toolbar style */
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget_by_action(pif, nToolbarStyle + TOOLBAR_ACTION_OFFSET)), TRUE);
+ /* Tick default toolbar style */
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget_by_action(pif, nToolbarStyle + TOOLBAR_ACTION_OFFSET)), TRUE);
gtk_window_add_accel_group( GTK_WINDOW( pwMain ), pagMain );
-
+#endif
gtk_box_pack_start( GTK_BOX( pwVbox ),
pwHandle = gtk_handle_box_new(),
FALSE, FALSE, 0 );
- gtk_container_add( GTK_CONTAINER( pwHandle ),
+#if (USE_GTKUIMANAGER)
+ pwMenuBar = gtk_ui_manager_get_widget (puim, "/MainMenu");
+ gtk_container_add( GTK_CONTAINER( pwHandle ), pwMenuBar );
+
+#else
+ gtk_container_add( GTK_CONTAINER( pwHandle ),
pwMenuBar = gtk_item_factory_get_widget( pif,
"<main>" ));
+#endif
gtk_box_pack_start( GTK_BOX( pwVbox ),
pwHandle = gtk_handle_box_new(), FALSE, TRUE, 0 );
gtk_container_add( GTK_CONTAINER( pwHandle ),
pwToolbar = ToolbarNew() );
-
+
gtk_box_pack_start( GTK_BOX( pwVbox ),
pwGameBox = gtk_hbox_new(FALSE, 0),
TRUE, TRUE, 0 );
@@ -3302,10 +3839,15 @@ static void CreateMainWindow(void)
gtk_paned_pack2(GTK_PANED(hpaned), pwPanelHbox, FALSE, FALSE);
gtk_box_pack_start( GTK_BOX( pwPanelHbox ), pwPanelVbox = gtk_vbox_new( FALSE, 1 ), TRUE, TRUE, 0);
+ /* Do this so that the menu is packed now instead of in the idle loop */
+#if (USE_GTKUIMANAGER)
+ gtk_ui_manager_ensure_update (puim);
+#endif
+
DockPanels();
/* Status bar */
-
+
gtk_box_pack_end( GTK_BOX( pwVbox ), pwHbox = gtk_hbox_new( FALSE, 0 ), FALSE, FALSE, 0 );
gtk_box_pack_start( GTK_BOX( pwHbox ), pwStatus = gtk_statusbar_new(),
@@ -3314,8 +3856,8 @@ static void CreateMainWindow(void)
gtk_statusbar_set_has_resize_grip( GTK_STATUSBAR( pwStatus ), FALSE );
/* It's a bit naughty to access pwStatus->label, but its default alignment
is ugly, and GTK gives us no other way to change it. */
- gtk_misc_set_alignment( GTK_MISC( GTK_STATUSBAR( pwStatus )->label ),
- 0.0f, 0.5f );
+ gtk_misc_set_alignment( GTK_MISC( get_statusbar_label (GTK_STATUSBAR( pwStatus ) ) ),
+ 0.0f, 0.5f );
idOutput = gtk_statusbar_get_context_id( GTK_STATUSBAR( pwStatus ),
"gnubg output" );
idProgress = gtk_statusbar_get_context_id( GTK_STATUSBAR( pwStatus ),
@@ -3341,7 +3883,7 @@ static void CreateMainWindow(void)
pwHbox2 = gtk_hbox_new( FALSE, 0 );
gtk_container_add(GTK_CONTAINER(pwIDBox), pwHbox2);
- gtk_box_pack_start( GTK_BOX( pwHbox2 ), gtk_label_new("Gnubg id:"), FALSE, FALSE, 0 );
+ gtk_box_pack_start( GTK_BOX( pwHbox2 ), gtk_label_new("GNUbg ID:"), FALSE, FALSE, 0 );
pwFrame = gtk_frame_new(NULL);
gtk_box_pack_start( GTK_BOX( pwHbox2 ), pwFrame, FALSE, FALSE, 0 );
@@ -3419,8 +3961,6 @@ static void gnubg_set_default_icon(void)
}
extern void InitGTK(int *argc, char ***argv)
{
-#include "xpm/gnu.xpm"
-#include "xpm/question.xpm"
char *sz;
GtkIconFactory *pif;
GdkAtom cb;
@@ -3450,19 +3990,11 @@ extern void InitGTK(int *argc, char ***argv)
/*add two xpm based icons*/
pif = gtk_icon_factory_new();
gtk_icon_factory_add_default(pif);
- gtk_icon_factory_add(pif, GTK_STOCK_DIALOG_GNU,
- gtk_icon_set_new_from_pixbuf
- (gdk_pixbuf_new_from_xpm_data
- ((const char **) gnu_xpm)));
- gtk_icon_factory_add(pif, GTK_STOCK_DIALOG_GNU_QUESTION,
- gtk_icon_set_new_from_pixbuf
- (gdk_pixbuf_new_from_xpm_data
- ((const char **) question_xpm)));
#if (GTK_MAJOR_VERSION < 3) && (GTK_MINOR_VERSION < 12)
ptt = gtk_tooltips_new();
#endif
-
+
gnubg_set_default_icon();
CreateMainWindow();
@@ -3474,9 +4006,10 @@ extern void InitGTK(int *argc, char ***argv)
clipboard = gtk_clipboard_get(cb);
}
+
#ifndef WIN32
static gint python_run_file (gpointer file)
-{
+{
char *pch;
g_assert(file);
pch = g_strdup_printf(">import sys;"
@@ -3509,11 +4042,12 @@ extern void RunGTK( GtkWidget *pwSplash, char *commands, char *python_script, ch
GTKSet( ap );
GTKSet( &ms.fTurn );
GTKSet( &ms.gs );
-
+ GTKSet( &ms.fJacoby );
+
PushSplash ( pwSplash, _("Rendering"), _("Board") );
GTKAllowStdin();
-
+
if( fTTY ) {
#if HAVE_LIBREADLINE
fReadingCommand = TRUE;
@@ -3530,13 +4064,18 @@ extern void RunGTK( GtkWidget *pwSplash, char *commands, char *python_script, ch
GTKSet( &fShowIDs);
/* Set the default arrow cursor in the stop window so obvious it can be clicked */
- gdk_window_set_cursor(pwStop->window, gdk_cursor_new(GDK_ARROW));
+ gdk_window_set_cursor(gtk_widget_get_window( pwStop ), gdk_cursor_new(GDK_ARROW));
/* Make sure toolbar looks correct */
{
int style = nToolbarStyle;
nToolbarStyle = 2; /* Default style is fine */
SetToolbarStyle(style);
+#if (USE_GTKUIMANAGER)
+ gtk_check_menu_item_set_active ( GTK_CHECK_MENU_ITEM (gtk_ui_manager_get_widget (puim,
+ "/MainMenu/ViewMenu/ToolBarMenu/Both" )), nToolbarStyle );
+#endif
+
}
#if USE_BOARD3D
@@ -3560,30 +4099,54 @@ extern void RunGTK( GtkWidget *pwSplash, char *commands, char *python_script, ch
if (!ArePanelsDocked())
{
gtk_widget_hide(hpaned);
+#if (USE_GTKUIMANAGER)
+ gtk_widget_hide ( (gtk_ui_manager_get_widget (puim,
+ "/MainMenu/ViewMenu/PanelsMenu/Commentary" )) );
+ gtk_widget_hide ( (gtk_ui_manager_get_widget (puim,
+ "/MainMenu/ViewMenu/HidePanels" )) );
+ gtk_widget_hide ( (gtk_ui_manager_get_widget (puim,
+ "/MainMenu/ViewMenu/RestorePanels" )) );
+#else
gtk_widget_hide(gtk_item_factory_get_widget(pif, "/View/Panels/Commentary"));
gtk_widget_hide(gtk_item_factory_get_widget(pif, "/View/Hide panels"));
gtk_widget_hide(gtk_item_factory_get_widget(pif, "/View/Restore panels"));
+#endif
}
- else
+ else
{
if (ArePanelsShowing())
{
+#if (USE_GTKUIMANAGER)
+ gtk_widget_hide ( (gtk_ui_manager_get_widget (puim,
+ "/MainMenu/ViewMenu/RestorePanels" )) );
+#else
gtk_widget_hide(gtk_item_factory_get_widget(pif, "/View/Restore panels"));
+#endif
gtk_widget_hide(pwGameBox);
}
else
+#if (USE_GTKUIMANAGER)
+ gtk_widget_hide ( (gtk_ui_manager_get_widget (puim,
+ "/MainMenu/ViewMenu/HidePanels" )) );
+#else
gtk_widget_hide(gtk_item_factory_get_widget(pif, "/View/Hide panels"));
+#endif
}
/* Make sure main window is on top */
- gdk_window_raise(pwMain->window);
+ gdk_window_raise( gtk_widget_get_window( pwMain ) );
/* force update of board; needed to display board correctly if user
has special settings, e.g., clockwise or nackgammon */
ShowBoard();
if (fToolbarShowing)
+#if (USE_GTKUIMANAGER)
+ gtk_widget_hide ( (gtk_ui_manager_get_widget (puim,
+ "/MainMenu/ViewMenu/ToolBarMenu/ShowToolBar" )) );
+#else
gtk_widget_hide(gtk_item_factory_get_widget(pif, "/View/Toolbar/Show Toolbar"));
+#endif
if (fFullScreen)
{ /* Change to full screen (but hide warning) */
@@ -3630,8 +4193,8 @@ extern void RunGTK( GtkWidget *pwSplash, char *commands, char *python_script, ch
extern void GtkChangeLanguage(void)
{
- gtk_set_locale();
- if (pwMain && GTK_WIDGET_REALIZED(pwMain))
+ setlocale(LC_ALL, "C");
+ if (pwMain && gtk_widget_get_realized(pwMain))
{
reasonExited = RE_LANGUAGE_CHANGE;
custom_cell_renderer_invalidate_size(); /* Recalulate widget sizes */
@@ -3658,7 +4221,7 @@ extern void OK( GtkWidget *pw, int *pf ) {
if( pf )
*pf = TRUE;
-
+
gtk_widget_destroy( gtk_widget_get_toplevel( pw ) );
}
@@ -3674,7 +4237,7 @@ static void TutorEnd( GtkWidget *pw, int *pf ) {
if( pf )
*pf = TRUE;
-
+
fTutor = FALSE;
gtk_widget_destroy( gtk_widget_get_toplevel( pw ) );
}
@@ -3705,7 +4268,7 @@ extern int GtkTutor ( char *sz )
*pwButtons, *pwPrompt, *pwHint;
pwTutorDialog = GTKCreateDialog( _("GNU Backgammon - Tutor"),
- DT_GNUQUESTION, NULL, DIALOG_FLAG_MODAL, G_CALLBACK(OK), (void*)&f);
+ DT_QUESTION, NULL, DIALOG_FLAG_MODAL, G_CALLBACK(OK), (void*)&f);
pwOK = DialogArea(pwTutorDialog, DA_OK);
gtk_button_set_label(GTK_BUTTON(pwOK), _("Play Anyway"));
@@ -3727,7 +4290,7 @@ extern int GtkTutor ( char *sz )
gtk_container_add( GTK_CONTAINER( pwButtons ), pwHint );
g_signal_connect( G_OBJECT( pwHint ), "clicked",
G_CALLBACK( TutorHint ), (void *) &f );
-
+
pwPrompt = gtk_label_new( sz );
gtk_misc_set_padding( GTK_MISC( pwPrompt ), 8, 8 );
@@ -3735,24 +4298,24 @@ extern int GtkTutor ( char *sz )
gtk_label_set_line_wrap( GTK_LABEL( pwPrompt ), TRUE );
gtk_container_add( GTK_CONTAINER( DialogArea( pwTutorDialog, DA_MAIN ) ),
pwPrompt );
-
+
gtk_window_set_resizable( GTK_WINDOW( pwTutorDialog ), FALSE);
-
+
/* This dialog should be REALLY modal -- disable "next turn" idle
processing and stdin handler, to avoid reentrancy problems. */
- if( nNextTurn )
+ if( nNextTurn )
g_source_remove( nNextTurn );
-
+
GTKRunDialog(pwTutorDialog);
-
- if( nNextTurn )
+
+ if( nNextTurn )
nNextTurn = g_idle_add( NextTurnNotify, NULL );
-
+
/* if tutor mode was disabled, update the checklist */
if ( !fTutor) {
GTKSet ( (void *) &fTutor);
}
-
+
return f;
}
@@ -3794,7 +4357,7 @@ extern void GTKOutputErr( const char *sz ) {
GtkTextBuffer *buffer;
GtkTextIter iter;
GTKMessage( (char*)sz, DT_ERROR );
-
+
if (PanelShowing(WINDOW_MESSAGE)) {
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pwMessageText));
gtk_text_buffer_get_end_iter (buffer, &iter);
@@ -3810,9 +4373,9 @@ extern void GTKOutputNew( void ) {
the progress bar leaves a message in the status stack. There should
be at most one message, so we get rid of it here. */
gtk_statusbar_pop( GTK_STATUSBAR( pwStatus ), idProgress );
-
+
fFinishedPopping = FALSE;
-
+
do
gtk_statusbar_pop( GTK_STATUSBAR( pwStatus ), idOutput );
while( !fFinishedPopping );
@@ -3834,18 +4397,18 @@ button_from_image ( GtkWidget *pwImage ) {
}
static void UpdatePlayerSettings( newwidget *pnw ) {
-
- int fManDice =
+
+ int fManDice =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pnw->pwManualDice));
- int fTM =
+ int fTM =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pnw->pwTutorMode));
- int fCPS =
+ int fCPS =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pnw->pwCPS));
- int fGH =
+ int fGH =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pnw->pwGNUvsHuman));
- int fHH =
+ int fHH =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pnw->pwHumanHuman));
-
+
if(!fCPS){
if (fGH){
UserCommand("set player 0 gnubg");
@@ -3857,19 +4420,20 @@ static void UpdatePlayerSettings( newwidget *pnw ) {
}
}
-
+
if((fManDice) && (rngCurrent != RNG_MANUAL))
UserCommand("set rng manual");
-
+
if((!fManDice) && (rngCurrent == RNG_MANUAL))
UserCommand("set rng mersenne");
-
+
if((fTM) && (!fTutor))
UserCommand("set tutor mode on");
if((!fTM) && (fTutor))
UserCommand("set tutor mode off");
+ UserCommand("save settings");
}
static void SettingsPressed( GtkWidget *pw, gpointer data )
@@ -3879,7 +4443,7 @@ static void SettingsPressed( GtkWidget *pw, gpointer data )
}
static void ToolButtonPressedMS( GtkWidget *pw, newwidget *pnw ) {
- UpdatePlayerSettings( pnw );
+ UpdatePlayerSettings( pnw );
gtk_widget_destroy( gtk_widget_get_toplevel( pw ) );
UserCommand("new session");
}
@@ -3905,7 +4469,8 @@ extern int edit_new(unsigned int length)
ms.fDoubled = 0;
ms.fCubeOwner = -1;
ms.fCrawford = FALSE;
- ms.anScore[0] = ms.anScore[1] = 0;
+ ms.fJacoby = fJacoby;
+ ms.anScore[0] = ms.anScore[1] = 0;
ms.nCube = 0;
ms.gs = GAME_PLAYING;
@@ -3928,74 +4493,62 @@ static void edit_new_clicked(GtkWidget * pw, newwidget * pnw)
static GtkWidget *NewWidget( newwidget *pnw)
{
int i, j = 1 ;
- char **apXPM[10];
GtkWidget *pwVbox, *pwHbox, *pwLabel, *pwToolbar;
- GtkWidget *pwButtons, *pwFrame, *pwVbox2;
-#include "xpm/stock_new_all.xpm"
-#include "xpm/stock_new_money.xpm"
+ GtkWidget *pwButtons, *pwFrame, *pwVbox2;
+ GtkToolItem *pwToolButton;
pwVbox = gtk_vbox_new(FALSE, 0);
pwToolbar = gtk_toolbar_new ();
- gtk_toolbar_set_orientation ( GTK_TOOLBAR ( pwToolbar ),
+ toolbar_set_orientation ( GTK_TOOLBAR ( pwToolbar ),
GTK_ORIENTATION_HORIZONTAL );
gtk_toolbar_set_style ( GTK_TOOLBAR ( pwToolbar ),
GTK_TOOLBAR_ICONS );
+ gtk_toolbar_set_show_arrow (GTK_TOOLBAR ( pwToolbar ), FALSE);
pwFrame = gtk_frame_new(_("Shortcut buttons"));
gtk_box_pack_start ( GTK_BOX ( pwVbox ), pwFrame, TRUE, TRUE, 0);
gtk_container_add( GTK_CONTAINER( pwFrame ), pwToolbar);
gtk_container_set_border_width( GTK_CONTAINER( pwToolbar ), 4);
-
+
/* Edit button */
- pwButtons = gtk_button_new();
- gtk_container_add ( GTK_CONTAINER ( pwButtons ), gtk_image_new_from_stock(GTK_STOCK_EDIT, GTK_ICON_SIZE_LARGE_TOOLBAR));
- gtk_widget_show(pwButtons);
- gtk_toolbar_append_widget( GTK_TOOLBAR( pwToolbar ),
- pwButtons, _("Edit position"), NULL );
- g_signal_connect(pwButtons, "clicked", G_CALLBACK(edit_new_clicked), pnw);
+ pwToolButton = gtk_tool_button_new_from_stock (GTK_STOCK_EDIT);
+ gtk_widget_set_tooltip_text(GTK_WIDGET(pwToolButton), _("Edit position"));
+ gtk_toolbar_insert(GTK_TOOLBAR(pwToolbar), pwToolButton, -1);
+ g_signal_connect(pwToolButton, "clicked", G_CALLBACK(edit_new_clicked), pnw);
- gtk_toolbar_append_space(GTK_TOOLBAR(pwToolbar));
+ gtk_toolbar_insert(GTK_TOOLBAR(pwToolbar), gtk_separator_tool_item_new(), -1);
- pwButtons = button_from_image( image_from_xpm_d ( stock_new_money_xpm,
- pwToolbar ) );
- gtk_toolbar_append_widget( GTK_TOOLBAR( pwToolbar ),
- pwButtons, _("Start a new money game session"), NULL );
- g_signal_connect( G_OBJECT( pwButtons ), "clicked",
+ pwToolButton = gtk_tool_button_new_from_stock (GNUBG_STOCK_NEW0);
+ gtk_widget_set_tooltip_text(GTK_WIDGET(pwToolButton), _("Start a new money game session"));
+ gtk_toolbar_insert(GTK_TOOLBAR(pwToolbar), pwToolButton, -1);
+ g_signal_connect( G_OBJECT( pwToolButton ), "clicked",
G_CALLBACK( ToolButtonPressedMS ), pnw );
- gtk_toolbar_append_space(GTK_TOOLBAR(pwToolbar));
-
- apXPM[0] = stock_new_xpm;
- apXPM[1] = stock_new1_xpm;
- apXPM[2] = stock_new3_xpm;
- apXPM[3] = stock_new5_xpm;
- apXPM[4] = stock_new7_xpm;
- apXPM[5] = stock_new9_xpm;
- apXPM[6] = stock_new11_xpm;
- apXPM[7] = stock_new13_xpm;
- apXPM[8] = stock_new15_xpm;
- apXPM[9] = stock_new17_xpm;
-
- for(i = 1; i < 19; i=i+2, j++ ){
+ gtk_toolbar_insert(GTK_TOOLBAR(pwToolbar), gtk_separator_tool_item_new(), -1);
+
+ for(i = 1; i < 19; i=i+2, j++ ){
gchar *sz;
+ gchar stock[50];
int *pi;
sz = g_strdup_printf(_("Start a new %d point match"), i);
- pwButtons = button_from_image( image_from_xpm_d ( apXPM[j],
- pwToolbar ) );
- gtk_toolbar_append_widget( GTK_TOOLBAR( pwToolbar ),
- pwButtons, sz, NULL );
+ sprintf(stock, "gnubg-stock-new%d", i);
+ pwToolButton = gtk_tool_button_new_from_stock (stock);
+ gtk_widget_set_tooltip_text(GTK_WIDGET(pwToolButton), sz);
+ gtk_toolbar_insert(GTK_TOOLBAR(pwToolbar), pwToolButton, -1);
+ gtk_tool_item_set_homogeneous(pwToolButton, FALSE);
+
g_free(sz);
-
- pi = malloc ( sizeof ( int ) );
- *pi = i;
- g_object_set_data_full( G_OBJECT( pwButtons ), "user_data",
+
+ pi = malloc ( sizeof ( int ) );
+ *pi = i;
+ g_object_set_data_full( G_OBJECT( pwToolButton ), "user_data",
pi, free );
- g_signal_connect( G_OBJECT( pwButtons ), "clicked",
+ g_signal_connect( G_OBJECT( pwToolButton ), "clicked",
G_CALLBACK( ToolButtonPressed ), pnw );
}
-
+
pwFrame = gtk_frame_new(_("Match settings"));
pwHbox = gtk_hbox_new(FALSE, 0);
@@ -4010,9 +4563,9 @@ static GtkWidget *NewWidget( newwidget *pnw)
gtk_container_add(GTK_CONTAINER(pwVbox), pwFrame);
/* Here the simplified player settings starts */
-
+
pwFrame = gtk_frame_new(_("Player settings"));
-
+
pwHbox = gtk_hbox_new(FALSE, 0);
pwVbox2 = gtk_vbox_new(FALSE, 0);
@@ -4020,22 +4573,22 @@ static GtkWidget *NewWidget( newwidget *pnw)
pnw->pwCPS = gtk_radio_button_new_with_label( NULL, _("Current player settings"));
gtk_box_pack_start(GTK_BOX(pwVbox2), pnw->pwCPS, FALSE, FALSE, 0);
-
+
pnw->pwGNUvsHuman = gtk_radio_button_new_with_label_from_widget( GTK_RADIO_BUTTON(pnw->pwCPS), _("GNU Backgammon vs. Human"));
pnw->pwHumanHuman = gtk_radio_button_new_with_label_from_widget( GTK_RADIO_BUTTON(pnw->pwCPS), _("Human vs. Human"));
gtk_box_pack_start(GTK_BOX(pwVbox2), pnw->pwGNUvsHuman, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(pwVbox2), pnw->pwHumanHuman, FALSE, FALSE, 0);
-
+
pwButtons = gtk_button_new_with_label(_("Modify player settings..."));
gtk_container_set_border_width(GTK_CONTAINER(pwButtons), 10);
-
+
gtk_container_add(GTK_CONTAINER(pwVbox2), pwButtons );
g_signal_connect(G_OBJECT(pwButtons), "clicked",
G_CALLBACK( SettingsPressed ), NULL );
pwVbox2 = gtk_vbox_new( FALSE, 0);
-
+
gtk_container_add(GTK_CONTAINER(pwHbox), pwVbox2);
pnw->pwManualDice = gtk_check_button_new_with_label(_("Manual dice"));
@@ -4045,9 +4598,9 @@ static GtkWidget *NewWidget( newwidget *pnw)
gtk_box_pack_start(GTK_BOX(pwVbox2), pnw->pwTutorMode, FALSE, FALSE, 0);
gtk_container_add(GTK_CONTAINER(pwFrame), pwHbox);
gtk_container_add(GTK_CONTAINER(pwVbox), pwFrame);
-
+
return pwVbox;
-}
+}
static void NewOK( GtkWidget *pw, newwidget *pnw )
{
@@ -4077,16 +4630,19 @@ extern void GTKNew( void )
{
GtkWidget *pwDialog, *pwPage;
newwidget nw;
+ GtkAllocation allocation;
pwDialog = GTKCreateDialog( _("GNU Backgammon - New"),
DT_QUESTION, NULL, DIALOG_FLAG_MODAL, G_CALLBACK( NewOK ), &nw );
gtk_container_add( GTK_CONTAINER( DialogArea( pwDialog, DA_MAIN ) ),
pwPage = NewWidget(&nw));
+ gtk_widget_get_allocation (pwToolbar, &allocation);
+ gtk_widget_set_size_request (pwToolbar, allocation.width, allocation.height);
gtk_widget_grab_focus(DialogArea(pwDialog, DA_OK));
NewSet( &nw );
-
+
GTKRunDialog(pwDialog);
}
@@ -4109,9 +4665,10 @@ SetMET (GtkWidget * pw, gpointer p)
g_free (command);
g_free (filename);
/* update filename on option page */
- if (p && GTK_WIDGET_VISIBLE (p))
+ if (p && gtk_widget_get_visible (p))
gtk_label_set_text (GTK_LABEL (p), (char *) miCurrent.szFileName);
}
+ UserCommand("save settings");
}
typedef struct _rolloutpagewidget {
@@ -4151,7 +4708,7 @@ typedef struct _rolloutwidget {
/***************************************************************************
*****
- ***** Change SGF_ROLLOUT_VER in eval.h if rollout settings change
+ ***** Change SGF_ROLLOUT_VER in eval.h if rollout settings change
***** such that previous .sgf files won't be able to extend rollouts
*****
***************************************************************************/
@@ -4159,10 +4716,10 @@ static void GetRolloutSettings( GtkWidget *pw, rolloutwidget *prw ) {
int p0, p1, i;
int fCubeEqChequer, fPlayersAreSame;
- prw->rcRollout.nTrials = (int)prw->prwGeneral->padjTrials->value;
- prw->rcRollout.nTruncate = (unsigned short)prw->prwGeneral->padjTruncPlies->value;
+ prw->rcRollout.nTrials = (int)gtk_adjustment_get_value( prw->prwGeneral->padjTrials );
+ prw->rcRollout.nTruncate = (unsigned short)gtk_adjustment_get_value( prw->prwGeneral->padjTruncPlies );
- prw->rcRollout.nSeed = (int)prw->prwGeneral->padjSeed->value;
+ prw->rcRollout.nSeed = (int)gtk_adjustment_get_value( prw->prwGeneral->padjSeed );
prw->rcRollout.fCubeful = gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON( prw->prwGeneral->pwCubeful ) );
@@ -4185,35 +4742,35 @@ static void GetRolloutSettings( GtkWidget *pw, rolloutwidget *prw ) {
prw->rcRollout.fTruncBearoffOS = gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON( prw->prwGeneral->pwTruncBearoffOS ) );
- if (prw->rcRollout.nTruncate == 0)
+ if (prw->rcRollout.nTruncate == 0)
prw->rcRollout.fDoTruncate = FALSE;
prw->rcRollout.fLateEvals = gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON( prw->prwGeneral->pwDoLate ) );
- prw->rcRollout.nLate = (unsigned short)prw->prwGeneral->padjLatePlies->value;
+ prw->rcRollout.nLate = (unsigned short)gtk_adjustment_get_value( prw->prwGeneral->padjLatePlies );
- fCubeEqChequer =
+ fCubeEqChequer =
gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( prw->prwGeneral->pwCubeEqualChequer ) );
- fPlayersAreSame =
+ fPlayersAreSame =
gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( prw->prwGeneral->pwPlayersAreSame ) );
prw->rcRollout.fStopOnSTD = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(
prw->prwGeneral->pwDoSTDStop));
prw->rcRollout.nMinimumGames = (unsigned int) gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (prw->prwGeneral->pwMinGames));
- prw->rcRollout.rStdLimit = gtk_spin_button_get_value_as_float (GTK_SPIN_BUTTON (prw->prwGeneral->pwMaxError));
+ prw->rcRollout.rStdLimit = gtk_spin_button_get_value (GTK_SPIN_BUTTON (prw->prwGeneral->pwMaxError));
prw->rcRollout.fStopOnJsd = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(prw->prwGeneral->pwJsdDoStop));
prw->rcRollout.nMinimumJsdGames = (unsigned int) gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (prw->prwGeneral->pwJsdMinGames));
- prw->rcRollout.rJsdLimit = gtk_spin_button_get_value_as_float (GTK_SPIN_BUTTON (prw->prwGeneral->pwJsdAdjLimit));
+ prw->rcRollout.rJsdLimit = gtk_spin_button_get_value (GTK_SPIN_BUTTON (prw->prwGeneral->pwJsdAdjLimit));
/* if the players are the same, copy player 0 settings to player 1 */
if (fPlayersAreSame) {
for (p0 = 0, p1 = 1; p0 < 4; p0 += 2, p1 += 2) {
- memcpy (prw->prpwPages[p1]->precCheq, prw->prpwPages[p0]->precCheq,
+ memcpy (prw->prpwPages[p1]->precCheq, prw->prpwPages[p0]->precCheq,
sizeof (evalcontext));
- memcpy (prw->prpwPages[p1]->precCube, prw->prpwPages[p0]->precCube,
+ memcpy (prw->prpwPages[p1]->precCube, prw->prpwPages[p0]->precCube,
sizeof (evalcontext));
memcpy (prw->prpwPages[p1]->pmf, prw->prpwPages[p0]->pmf,
@@ -4229,12 +4786,12 @@ static void GetRolloutSettings( GtkWidget *pw, rolloutwidget *prw ) {
memcpy (prw->prpwPages[i]->precCube, prw->prpwPages[i]->precCheq,
sizeof (evalcontext));
}
-
+
memcpy (prw->prpwTrunc->precCube, prw->prpwTrunc->precCheq,
sizeof (evalcontext));
}
- if (gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (
+ if (gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (
prw->prwGeneral->pwTruncEqualPlayer0))) {
memcpy (prw->prpwTrunc->precCube, prw->prpwPages[0]->precCheq,
sizeof (evalcontext));
@@ -4302,7 +4859,7 @@ static void STDStopToggled( GtkWidget *pw, rolloutwidget *prw) {
static void JsdStopToggled( GtkWidget *pw, rolloutwidget *prw) {
int do_jsd_stop = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON (prw->prwGeneral->pwJsdDoStop ) );
-
+
gtk_widget_set_sensitive (GTK_WIDGET (prw->prwGeneral->pwJsdAdjLimit), do_jsd_stop);
gtk_widget_set_sensitive (GTK_WIDGET (prw->prwGeneral->pwJsdAdjMinGames), do_jsd_stop);
@@ -4328,10 +4885,10 @@ static void TruncEnableToggled( GtkWidget *pw, rolloutwidget *prw)
static void TruncEqualPlayer0Toggled( GtkWidget *pw, rolloutwidget *prw)
{
- int do_trunc =
+ int do_trunc =
gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON (
prw->prwGeneral->pwDoTrunc ) );
- int sameas_p0 =
+ int sameas_p0 =
gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON (
prw->prwGeneral->pwTruncEqualPlayer0));
@@ -4353,10 +4910,10 @@ static void CubeEqCheqToggled( GtkWidget *pw, rolloutwidget *prw)
static void
CubefulToggled ( GtkWidget *pw, rolloutwidget *prw ) {
- int f = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON (
+ int f = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON (
prw->prwGeneral->pwCubeful ) );
-
- gtk_widget_set_sensitive ( GTK_WIDGET (
+
+ gtk_widget_set_sensitive ( GTK_WIDGET (
prw->prwGeneral->pwTruncBearoffOS ), ! f );
}
@@ -4381,17 +4938,26 @@ static void PlayersSameToggled( GtkWidget *pw, rolloutwidget *prw)
static GtkWidget *
RolloutPageGeneral (rolloutpagegeneral *prpw, rolloutwidget *prw) {
GtkWidget *pwPage, *pw, *pwv;
- GtkWidget *pwHBox, *pwVBox;
- GtkWidget *pwFrame;
+ GtkWidget *pwHBox;
+ GtkWidget *pwTable, *pwFrame;
pwPage = gtk_vbox_new( FALSE, 0 );
gtk_container_set_border_width( GTK_CONTAINER( pwPage ), 8 );
+ prpw->padjSeed = GTK_ADJUSTMENT( gtk_adjustment_new(
+ abs( prw->rcRollout.nSeed ), 0, INT_MAX, 1, 1, 0 ) );
+
prpw->padjTrials = GTK_ADJUSTMENT(gtk_adjustment_new(
prw->rcRollout.nTrials, 1,
1296 * 1296, 36, 36, 0 ) );
pw = gtk_hbox_new( FALSE, 0 );
gtk_container_add( GTK_CONTAINER( pwPage), pw );
+
+ gtk_container_add( GTK_CONTAINER( pw ),
+ gtk_label_new( _("Seed:") ) );
+ gtk_container_add( GTK_CONTAINER( pw ),
+ gtk_spin_button_new( prpw->padjSeed, 1, 0 ) );
+
gtk_container_add( GTK_CONTAINER( pw ),
gtk_label_new( _("Trials:") ) );
gtk_container_add( GTK_CONTAINER( pw ),
@@ -4403,7 +4969,7 @@ RolloutPageGeneral (rolloutpagegeneral *prpw, rolloutwidget *prw) {
pw = gtk_hbox_new( FALSE, 8 );
gtk_container_set_border_width( GTK_CONTAINER( pw ), 8 );
gtk_container_add ( GTK_CONTAINER ( pwFrame ), pw);
-
+
prpw->pwDoTrunc = gtk_check_button_new_with_label (
_( "Truncate Rollouts" ) );
gtk_container_add( GTK_CONTAINER( pw ), prpw->pwDoTrunc );
@@ -4412,14 +4978,14 @@ RolloutPageGeneral (rolloutpagegeneral *prpw, rolloutwidget *prw) {
g_signal_connect( G_OBJECT( prpw->pwDoTrunc ), "toggled",
G_CALLBACK (TruncEnableToggled), prw);
- prpw->pwAdjTruncPlies = pwVBox = gtk_vbox_new( FALSE, 0 );
- gtk_container_add( GTK_CONTAINER( pw ), pwVBox);
- gtk_container_add( GTK_CONTAINER( pwVBox ),
+ prpw->pwAdjTruncPlies = pwHBox = gtk_hbox_new( FALSE, 0 );
+ gtk_container_add( GTK_CONTAINER( pw ), pwHBox);
+ gtk_container_add( GTK_CONTAINER( pwHBox ),
gtk_label_new( _("Truncate at ply:" ) ) );
- prpw->padjTruncPlies = GTK_ADJUSTMENT( gtk_adjustment_new(
+ prpw->padjTruncPlies = GTK_ADJUSTMENT( gtk_adjustment_new(
prw->rcRollout.nTruncate, 0, 1000, 1, 1, 0 ) );
- gtk_container_add( GTK_CONTAINER( pwVBox ), gtk_spin_button_new(
+ gtk_container_add( GTK_CONTAINER( pwHBox ), gtk_spin_button_new(
prpw->padjTruncPlies, 1, 0 ) );
@@ -4429,24 +4995,24 @@ RolloutPageGeneral (rolloutpagegeneral *prpw, rolloutwidget *prw) {
pw = gtk_hbox_new( FALSE, 8 );
gtk_container_set_border_width( GTK_CONTAINER( pw ), 8 );
gtk_container_add ( GTK_CONTAINER ( pwFrame ), pw);
-
+
prpw->pwDoLate = gtk_check_button_new_with_label (
_( "Enable separate evaluations " ) );
gtk_container_add( GTK_CONTAINER( pw ), prpw->pwDoLate );
- gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (
- prw->prwGeneral->pwDoLate ),
+ gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (
+ prw->prwGeneral->pwDoLate ),
prw->rcRollout.fLateEvals);
- g_signal_connect( G_OBJECT( prw->prwGeneral->pwDoLate ),
+ g_signal_connect( G_OBJECT( prw->prwGeneral->pwDoLate ),
"toggled", G_CALLBACK (LateEvalToggled), prw);
- prpw->pwAdjLatePlies = pwVBox = gtk_vbox_new( FALSE, 0 );
- gtk_container_add( GTK_CONTAINER( pw ), pwVBox);
- gtk_container_add( GTK_CONTAINER( pwVBox ),
+ prpw->pwAdjLatePlies = pwHBox = gtk_hbox_new( FALSE, 0 );
+ gtk_container_add( GTK_CONTAINER( pw ), pwHBox);
+ gtk_container_add( GTK_CONTAINER( pwHBox ),
gtk_label_new( _("Change eval after ply:" ) ) );
- prpw->padjLatePlies = GTK_ADJUSTMENT( gtk_adjustment_new(
+ prpw->padjLatePlies = GTK_ADJUSTMENT( gtk_adjustment_new(
prw->rcRollout.nLate, 0, 1000, 1, 1, 0 ) );
- gtk_container_add( GTK_CONTAINER( pwVBox ), gtk_spin_button_new(
+ gtk_container_add( GTK_CONTAINER( pwHBox ), gtk_spin_button_new(
prpw->padjLatePlies, 1, 0 ) );
pwFrame = gtk_frame_new ( _("Stop when result is accurate") );
@@ -4456,27 +5022,27 @@ RolloutPageGeneral (rolloutpagegeneral *prpw, rolloutwidget *prw) {
pw = gtk_hbox_new( FALSE, 8 );
gtk_container_set_border_width( GTK_CONTAINER( pw ), 8 );
gtk_container_add ( GTK_CONTAINER ( pwFrame ), pw);
-
+
prpw->pwDoSTDStop = gtk_check_button_new_with_label (
- _( "Stop when STDs are small enough " ) );
+ _( "Stop when STD is small enough " ) );
gtk_container_add( GTK_CONTAINER( pw ), prpw->pwDoSTDStop );
- gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (
- prw->prwGeneral->pwDoSTDStop ),
+ gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (
+ prw->prwGeneral->pwDoSTDStop ),
prw->rcRollout.fStopOnSTD);
- g_signal_connect( G_OBJECT( prw->prwGeneral->pwDoSTDStop ),
+ g_signal_connect( G_OBJECT( prw->prwGeneral->pwDoSTDStop ),
"toggled", G_CALLBACK (STDStopToggled), prw);
/* a vbox for the adjusters */
pwv = gtk_vbox_new( FALSE, 0 );
gtk_container_add( GTK_CONTAINER( pw ), pwv);
-
+
prpw->pwAdjMinGames = pwHBox = gtk_hbox_new( FALSE, 0 );
gtk_container_add( GTK_CONTAINER( pwv ), pwHBox);
- gtk_container_add( GTK_CONTAINER( pwHBox ),
+ gtk_container_add( GTK_CONTAINER( pwHBox ),
gtk_label_new( _("Minimum Trials:" ) ) );
- prpw->padjMinGames = GTK_ADJUSTMENT( gtk_adjustment_new(
+ prpw->padjMinGames = GTK_ADJUSTMENT( gtk_adjustment_new(
prw->rcRollout.nMinimumGames, 1, 1296 * 1296, 36, 36, 0 ) );
prpw->pwMinGames = gtk_spin_button_new(prpw->padjMinGames, 1, 0 ) ;
@@ -4485,10 +5051,10 @@ RolloutPageGeneral (rolloutpagegeneral *prpw, rolloutwidget *prw) {
prpw->pwAdjMaxError = pwHBox = gtk_hbox_new( FALSE, 0 );
gtk_container_add( GTK_CONTAINER( pwv ), pwHBox);
- gtk_container_add( GTK_CONTAINER( pwHBox ),
- gtk_label_new( _("Ratio |Standard Deviation/Value|:" ) ) );
+ gtk_container_add( GTK_CONTAINER( pwHBox ),
+ gtk_label_new( _("Equity Standard Deviation:" ) ) );
- prpw->padjMaxError = GTK_ADJUSTMENT( gtk_adjustment_new(
+ prpw->padjMaxError = GTK_ADJUSTMENT( gtk_adjustment_new(
prw->rcRollout.rStdLimit, 0, 1, .0001, .0001, 0 ) );
prpw->pwMaxError = gtk_spin_button_new(prpw->padjMaxError, .0001, 4 );
@@ -4503,12 +5069,12 @@ RolloutPageGeneral (rolloutpagegeneral *prpw, rolloutwidget *prw) {
pw = gtk_hbox_new( FALSE, 8 );
gtk_container_set_border_width( GTK_CONTAINER( pw ), 8 );
gtk_container_add ( GTK_CONTAINER ( pwFrame ), pw);
-
+
/* a vbox for the check boxes */
pwv = gtk_vbox_new( FALSE, 0 );
gtk_container_add( GTK_CONTAINER( pw ), pwv);
- prpw->pwJsdDoStop = gtk_check_button_new_with_label (_( "Enable Stop on Jsd" ) );
+ prpw->pwJsdDoStop = gtk_check_button_new_with_label (_( "Enable Stop on JSD" ) );
gtk_container_add( GTK_CONTAINER( pwv ), prpw->pwJsdDoStop );
gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( prw->prwGeneral->pwJsdDoStop ), prw->rcRollout.fStopOnJsd);
g_signal_connect( G_OBJECT( prw->prwGeneral->pwJsdDoStop ), "toggled", G_CALLBACK (JsdStopToggled), prw);
@@ -4529,25 +5095,16 @@ RolloutPageGeneral (rolloutpagegeneral *prpw, rolloutwidget *prw) {
prpw->pwJsdAdjLimit = pwHBox = gtk_hbox_new( FALSE, 0 );
gtk_container_add( GTK_CONTAINER( pwv ), pwHBox);
- gtk_container_add( GTK_CONTAINER( pwHBox ),
+ gtk_container_add( GTK_CONTAINER( pwHBox ),
gtk_label_new( _("JSDs from best choice" ) ) );
- prpw->padjJsdLimit = GTK_ADJUSTMENT( gtk_adjustment_new(
+ prpw->padjJsdLimit = GTK_ADJUSTMENT( gtk_adjustment_new(
prw->rcRollout.rJsdLimit, 0, 8, .0001, .0001, 0 ) );
prpw->pwJsdAdjLimit = gtk_spin_button_new(prpw->padjJsdLimit, .0001, 4 );
gtk_container_add( GTK_CONTAINER( pwHBox ), prpw->pwJsdAdjLimit);
-
- prpw->pwCubeful = gtk_check_button_new_with_label ( _("Cubeful") );
- gtk_container_add ( GTK_CONTAINER (pwPage ), prpw->pwCubeful );
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( prpw->pwCubeful ),
- prw->rcRollout.fCubeful );
-
- g_signal_connect( G_OBJECT( prpw->pwCubeful ), "toggled",
- G_CALLBACK( CubefulToggled ), prw );
-
pwFrame = gtk_frame_new ( _("Bearoff Truncation") );
gtk_container_add ( GTK_CONTAINER (pwPage ), pwFrame );
prpw->pwTruncBearoffOpts = pw = gtk_vbox_new( FALSE, 8 );
@@ -4565,37 +5122,58 @@ RolloutPageGeneral (rolloutpagegeneral *prpw, rolloutwidget *prw) {
_( "Truncate cubeless at one-sided bearoff database" ) );
gtk_container_add( GTK_CONTAINER( pw ), prpw->pwTruncBearoffOS );
- gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON
+ gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON
(prpw->pwTruncBearoffOS ),
prw->rcRollout.fTruncBearoffOS );
- prpw->pwVarRedn = gtk_check_button_new_with_label (
+
+ pwTable = gtk_table_new ( 2, 2, TRUE );
+ gtk_container_add ( GTK_CONTAINER (pwPage ), pwTable );
+
+ prpw->pwCubeful = gtk_check_button_new_with_label ( _("Cubeful") );
+ gtk_table_attach ( GTK_TABLE ( pwTable ), prpw->pwCubeful,
+ 0, 1, 0, 1,
+ GTK_FILL,
+ GTK_FILL,
+ 2, 2 );
+
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( prpw->pwCubeful ),
+ prw->rcRollout.fCubeful );
+
+ g_signal_connect( G_OBJECT( prpw->pwCubeful ), "toggled",
+ G_CALLBACK( CubefulToggled ), prw );
+
+
+ prpw->pwVarRedn = gtk_check_button_new_with_label (
_("Variance reduction") );
- gtk_container_add ( GTK_CONTAINER (pwPage ), prpw->pwVarRedn );
+ gtk_table_attach ( GTK_TABLE ( pwTable ), prpw->pwVarRedn,
+ 1, 2, 0, 1,
+ GTK_FILL,
+ GTK_FILL,
+ 2, 2 );
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( prpw->pwVarRedn ),
prw->rcRollout.fVarRedn );
- prpw->pwRotate = gtk_check_button_new_with_label (
+ prpw->pwRotate = gtk_check_button_new_with_label (
_("Use quasi-random dice") );
- gtk_container_add ( GTK_CONTAINER (pwPage ), prpw->pwRotate );
+ gtk_table_attach ( GTK_TABLE ( pwTable ), prpw->pwRotate,
+ 0, 1, 1, 2,
+ GTK_FILL,
+ GTK_FILL,
+ 2, 2 );
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( prpw->pwRotate ),
prw->rcRollout.fRotate );
- prpw->pwInitial = gtk_check_button_new_with_label (
+ prpw->pwInitial = gtk_check_button_new_with_label (
_("Rollout as initial position") );
- gtk_container_add ( GTK_CONTAINER (pwPage ), prpw->pwInitial );
+ gtk_table_attach ( GTK_TABLE ( pwTable ), prpw->pwInitial,
+ 1, 2, 1, 2,
+ GTK_FILL,
+ GTK_FILL,
+ 2, 2 );
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( prpw->pwInitial ),
prw->rcRollout.fInitial );
- pwHBox = gtk_hbox_new( FALSE, 0 );
- gtk_container_add( GTK_CONTAINER( pwPage ), pwHBox);
- gtk_container_add( GTK_CONTAINER( pwHBox ),
- gtk_label_new( _("Seed:") ) );
- prpw->padjSeed = GTK_ADJUSTMENT( gtk_adjustment_new(
- abs( prw->rcRollout.nSeed ), 0, INT_MAX, 1, 1, 0 ) );
- gtk_container_add( GTK_CONTAINER( pwHBox ), gtk_spin_button_new(
- prpw->padjSeed, 1, 0 ) );
-
return pwPage;
}
@@ -4728,7 +5306,7 @@ extern void SetRollouts( gpointer p, guint n, GtkWidget *pwIgnore )
gtk_container_set_border_width( GTK_CONTAINER( rw.RolloutNotebook ), 4 );
- gtk_notebook_append_page( GTK_NOTEBOOK( rw.RolloutNotebook ),
+ gtk_notebook_append_page( GTK_NOTEBOOK( rw.RolloutNotebook ),
RolloutPageGeneral (rw.prwGeneral, &rw),
gtk_label_new ( _("General Settings" ) ) );
@@ -4784,7 +5362,7 @@ extern void SetRollouts( gpointer p, guint n, GtkWidget *pwIgnore )
for (i = 0; i < 5; i++)
free(rw.analysisDetails[i]);
- if( fOK || saveAs )
+ if( fOK || saveAs )
{
unsigned int fCubeful;
outputoff();
@@ -4801,9 +5379,9 @@ extern void SetRollouts( gpointer p, guint n, GtkWidget *pwIgnore )
rw.rcRollout.aecCube[i].fCubeful = fCubeful;
rw.rcRollout.aecCubeLate[i].fCubeful = fCubeful;
}
- rw.rcRollout.aecCubeTrunc.fCubeful =
+ rw.rcRollout.aecCubeTrunc.fCubeful =
rw.rcRollout.aecChequerTrunc.fCubeful = fCubeful;
-
+
}
for (i = 0; i < 2; ++i) {
@@ -4811,51 +5389,51 @@ extern void SetRollouts( gpointer p, guint n, GtkWidget *pwIgnore )
if (EvalCmp (&rw.rcRollout.aecCube[i], &rcRollout.aecCube[i], 1) ) {
sprintf (sz, "set rollout player %d cubedecision", i);
- SetEvalCommands( sz, &rw.rcRollout.aecCube[i],
+ SetEvalCommands( sz, &rw.rcRollout.aecCube[i],
&rcRollout.aecCube[ i ] );
}
- if (EvalCmp (&rw.rcRollout.aecChequer[i],
+ if (EvalCmp (&rw.rcRollout.aecChequer[i],
&rcRollout.aecChequer[i], 1)) {
sprintf (sz, "set rollout player %d chequer", i);
- SetEvalCommands( sz, &rw.rcRollout.aecChequer[i],
+ SetEvalCommands( sz, &rw.rcRollout.aecChequer[i],
&rcRollout.aecChequer[ i ] );
}
-
+
sprintf ( sz, "set rollout player %d movefilter", i );
- SetMovefilterCommands ( sz,
- rw.rcRollout.aaamfChequer[ i ],
+ SetMovefilterCommands ( sz,
+ rw.rcRollout.aaamfChequer[ i ],
rcRollout.aaamfChequer[ i ] );
- if (EvalCmp (&rw.rcRollout.aecCubeLate[i],
+ if (EvalCmp (&rw.rcRollout.aecCubeLate[i],
&rcRollout.aecCubeLate[i], 1 ) ) {
sprintf (sz, "set rollout late player %d cube", i);
- SetEvalCommands( sz, &rw.rcRollout.aecCubeLate[i],
+ SetEvalCommands( sz, &rw.rcRollout.aecCubeLate[i],
&rcRollout.aecCubeLate[ i ] );
}
- if (EvalCmp (&rw.rcRollout.aecChequerLate[i],
+ if (EvalCmp (&rw.rcRollout.aecChequerLate[i],
&rcRollout.aecChequerLate[i], 1 ) ) {
sprintf (sz, "set rollout late player %d chequer", i);
- SetEvalCommands( sz, &rw.rcRollout.aecChequerLate[i],
+ SetEvalCommands( sz, &rw.rcRollout.aecChequerLate[i],
&rcRollout.aecChequerLate[ i ] );
}
sprintf ( sz, "set rollout late player %d movefilter", i );
- SetMovefilterCommands ( sz,
- rw.rcRollout.aaamfLate[ i ],
+ SetMovefilterCommands ( sz,
+ rw.rcRollout.aaamfLate[ i ],
rcRollout.aaamfLate[ i ] );
}
if (EvalCmp (&rw.rcRollout.aecCubeTrunc, &rcRollout.aecCubeTrunc, 1) ) {
- SetEvalCommands( "set rollout truncation cube",
+ SetEvalCommands( "set rollout truncation cube",
&rw.rcRollout.aecCubeTrunc, &rcRollout.aecCubeTrunc );
}
- if (EvalCmp (&rw.rcRollout.aecChequerTrunc,
+ if (EvalCmp (&rw.rcRollout.aecChequerTrunc,
&rcRollout.aecChequerTrunc, 1) ) {
- SetEvalCommands( "set rollout truncation chequer",
- &rw.rcRollout.aecChequerTrunc,
+ SetEvalCommands( "set rollout truncation chequer",
+ &rw.rcRollout.aecChequerTrunc,
&rcRollout.aecChequerTrunc );
}
@@ -4896,7 +5474,7 @@ extern void SetRollouts( gpointer p, guint n, GtkWidget *pwIgnore )
}
if( rw.rcRollout.nTruncate != rcRollout.nTruncate ) {
- sprintf( sz, "set rollout truncation plies %d",
+ sprintf( sz, "set rollout truncation plies %d",
rw.rcRollout.nTruncate );
UserCommand( sz );
}
@@ -4957,13 +5535,13 @@ extern void SetRollouts( gpointer p, guint n, GtkWidget *pwIgnore )
}
if( rw.rcRollout.fTruncBearoff2 != rcRollout.fTruncBearoff2 ) {
- sprintf( sz, "set rollout bearofftruncation exact %s",
+ sprintf( sz, "set rollout bearofftruncation exact %s",
rw.rcRollout.fTruncBearoff2 ? "on" : "off" );
UserCommand( sz );
}
if( rw.rcRollout.fTruncBearoffOS != rcRollout.fTruncBearoffOS ) {
- sprintf( sz, "set rollout bearofftruncation onesided %s",
+ sprintf( sz, "set rollout bearofftruncation onesided %s",
rw.rcRollout.fTruncBearoffOS ? "on" : "off" );
UserCommand( sz );
}
@@ -4986,15 +5564,16 @@ extern void SetRollouts( gpointer p, guint n, GtkWidget *pwIgnore )
UserCommand( sz );
}
+ UserCommand("save settings");
outputon();
if (saveAs)
gtk_save_rollout_settings();
- else if (fOK)
+ else if (fOK)
break;
}
if (loadRS)
gtk_load_rollout_settings();
- }
+ }
}
void
@@ -5047,7 +5626,7 @@ static void DestroyHint( gpointer p, GObject *obj ) {
if ( pml ) {
if ( pml->amMoves )
free ( pml->amMoves );
-
+
free ( pml );
}
@@ -5062,7 +5641,7 @@ HintOK ( GtkWidget *pw, void *unused )
}
extern void GTKCubeHint(moverecord *pmr, const matchstate *pms, int did_double, int did_take, int hist ) {
-
+
GtkWidget *pw, *pwHint;
if (GetPanelWidget(WINDOW_HINT))
@@ -5078,12 +5657,12 @@ extern void GTKCubeHint(moverecord *pmr, const matchstate *pms, int did_double,
pw );
gtk_widget_grab_focus( DialogArea( pwHint, DA_OK ) );
-
+
setWindowGeometry(WINDOW_HINT);
g_object_weak_ref( G_OBJECT( pwHint ), DestroyHint, NULL );
-
+
gtk_window_set_default_size(GTK_WINDOW(pwHint), 400, 300);
-
+
gtk_widget_show_all( pwHint );
}
@@ -5112,7 +5691,7 @@ GTKResignHint( float arOutput[], float rEqBefore, float rEqAfter,
char *pch, sz[ 16 ];
/* equity before resignation */
-
+
gtk_table_attach( GTK_TABLE( pwTable ), pw = gtk_label_new(
fMWC ? _("MWC before resignation") : _("Equity before resignation") ), 0, 1, 0, 1,
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 4, 0 );
@@ -5134,7 +5713,7 @@ GTKResignHint( float arOutput[], float rEqBefore, float rEqAfter,
fMWC ? _("MWC after resignation") : _("Equity after resignation") ), 0, 1, 1, 2,
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 4, 0 );
gtk_misc_set_alignment( GTK_MISC( pw ), 0, 0.5 );
-
+
if( fMWC )
sprintf( sz, "%6.2f%%",
100.0 * eq2mwc ( - rEqAfter, pci ) );
@@ -5150,23 +5729,28 @@ GTKResignHint( float arOutput[], float rEqBefore, float rEqAfter,
pch = _("You should accept the resignation!");
else
pch = _("You should reject the resignation!");
-
+
gtk_table_attach( GTK_TABLE( pwTable ), pw = gtk_label_new( pch ),
0, 2, 2, 3, GTK_EXPAND | GTK_FILL,
GTK_EXPAND | GTK_FILL, 0, 8 );
gtk_container_set_border_width( GTK_CONTAINER( pwTable ), 8 );
-
+
gtk_container_add( GTK_CONTAINER( DialogArea( pwDialog, DA_MAIN ) ),
pwTable );
GTKRunDialog(pwDialog);
}
-extern void
+extern void
GTKHint( moverecord *pmr, int hist)
{
GtkWidget *pwMoves, *pwHint;
+ if (!pmr || pmr->ml.cMoves < 1)
+ {
+ outputerrf(_("There are no legal moves. Figure it out yourself."));
+ return;
+ }
if (GetPanelWidget(WINDOW_HINT))
gtk_widget_destroy(GetPanelWidget(WINDOW_HINT));
@@ -5178,8 +5762,8 @@ GTKHint( moverecord *pmr, int hist)
pwHint = GTKCreateDialog( _("GNU Backgammon - Hint"), DT_INFO,
NULL, DIALOG_FLAG_NONE, G_CALLBACK( HintOK ), NULL );
SetPanelWidget(WINDOW_HINT, pwHint);
-
- gtk_container_add( GTK_CONTAINER( DialogArea( pwHint, DA_MAIN ) ),
+
+ gtk_container_add( GTK_CONTAINER( DialogArea( pwHint, DA_MAIN ) ),
pwMoves );
setWindowGeometry(WINDOW_HINT);
@@ -5193,7 +5777,7 @@ GTKHint( moverecord *pmr, int hist)
static void SetMouseCursor(GdkCursorType cursorType)
{
- if (!GDK_IS_WINDOW(pwMain->window))
+ if (!GDK_IS_WINDOW(gtk_widget_get_window( pwMain ) ) )
{
g_print("no window\n");
return;
@@ -5202,11 +5786,11 @@ static void SetMouseCursor(GdkCursorType cursorType)
{
GdkCursor *cursor;
cursor = gdk_cursor_new(cursorType);
- gdk_window_set_cursor(pwMain->window, cursor);
+ gdk_window_set_cursor( gtk_widget_get_window( pwMain ), cursor);
gdk_cursor_unref(cursor);
}
else
- gdk_window_set_cursor(pwMain->window, NULL);
+ gdk_window_set_cursor( gtk_widget_get_window( pwMain ), NULL );
}
extern void GTKProgressStart( const char *sz )
@@ -5264,29 +5848,17 @@ extern void GTKProgressEnd( void )
int colWidth;
-static void MoveListIntoView(GtkWidget *pwList, int *row)
-{
- if (gtk_clist_row_is_visible(GTK_CLIST(pwList), (*row-1)) != GTK_VISIBILITY_FULL)
- {
- gtk_clist_moveto(GTK_CLIST(pwList), (*row-1), 0, 0, 0);
- gtk_widget_set_size_request(GTK_WIDGET(pwList), colWidth * 2 + 50, -1);
- }
-}
-
extern void GTKShowScoreSheet( void )
{
GtkWidget *pwDialog, *pwBox;
GtkWidget *hbox;
- GtkWidget *pwList;
+ GtkWidget *view;
GtkWidget* pwScrolled;
- PangoRectangle logical_rect;
- PangoLayout *layout;
- int width1, width2;
- int i;
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+ GtkListStore *store;
int numRows = 0;
char title[100];
- char *titles[2];
- char *data[2];
listOLD *pl;
sprintf(title, _("Score Sheet - "));
@@ -5301,37 +5873,17 @@ extern void GTKShowScoreSheet( void )
gtk_container_add( GTK_CONTAINER( DialogArea( pwDialog, DA_MAIN ) ), pwBox);
- gtk_widget_set_size_request(GTK_WIDGET (pwDialog), -1, 200);
gtk_container_set_border_width(GTK_CONTAINER(DialogArea(pwDialog, DA_MAIN)), 4);
hbox = gtk_hbox_new (FALSE, 0);
gtk_container_add(GTK_CONTAINER(DialogArea(pwDialog, DA_MAIN)), hbox);
- titles[0] = ap[0].szName;
- titles[1] = ap[1].szName;
-
- pwList = gtk_clist_new_with_titles( 2, titles );
- GTK_WIDGET_UNSET_FLAGS(pwList, GTK_CAN_FOCUS);
- gtk_clist_column_titles_passive( GTK_CLIST( pwList ) );
-
- layout = gtk_widget_create_pango_layout(pwList, titles[0]);
- pango_layout_get_pixel_extents (layout, NULL, &logical_rect);
- g_object_unref (layout);
- width1 = logical_rect.width;
-
- layout = gtk_widget_create_pango_layout(pwList, titles[1]);
- pango_layout_get_pixel_extents (layout, NULL, &logical_rect);
- g_object_unref (layout);
- width2 = logical_rect.width;
-
- colWidth = MAX(width1, width2);
-
- data[0] = malloc(10);
- data[1] = malloc(10);
+ store = gtk_list_store_new(2, G_TYPE_INT, G_TYPE_INT);
for (pl = lMatch.plNext; pl->p; pl = pl->plNext )
{
int score[2];
+ GtkTreeIter iter;
listOLD *plGame = pl->plNext->p;
if (plGame)
@@ -5361,35 +5913,30 @@ extern void GTKShowScoreSheet( void )
else
score[pmr->g.fWinner] += pmr->g.nPoints;
}
- sprintf(data[0], "%d", score[0]);
- sprintf(data[1], "%d", score[1]);
- gtk_clist_append(GTK_CLIST(pwList), data);
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter, 0, score[0], 1, score[1], -1);
numRows++;
}
- free(data[0]);
- free(data[1]);
-
- for( i = 0; i < 2; i++ )
- {
- gtk_clist_set_column_justification(GTK_CLIST(pwList), i, GTK_JUSTIFY_CENTER);
- gtk_clist_set_column_width( GTK_CLIST( pwList ), i, colWidth);
- gtk_clist_set_column_resizeable(GTK_CLIST(pwList), i, FALSE);
- }
-
pwScrolled = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(pwScrolled),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- gtk_container_add(GTK_CONTAINER(pwScrolled), pwList);
+ GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
- gtk_widget_set_size_request(GTK_WIDGET(pwList), colWidth * 2 + 20, -1);
+ view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
+ g_object_unref(store);
- gtk_box_pack_start(GTK_BOX(hbox), pwScrolled, TRUE, FALSE, 0);
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes(ap[0].szName, renderer, "text", 0, NULL);
+ gtk_tree_view_column_set_min_width(column, 75);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);
- gtk_clist_select_row(GTK_CLIST(pwList), numRows - 1, 1);
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes(ap[1].szName, renderer, "text", 0, NULL);
+ gtk_tree_view_column_set_min_width(column, 75);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);
- g_signal_connect(G_OBJECT(pwList), "realize",
- G_CALLBACK(MoveListIntoView), &numRows );
+ gtk_container_add(GTK_CONTAINER(pwScrolled), view);
+ gtk_box_pack_start(GTK_BOX(hbox), pwScrolled, TRUE, TRUE, 0);
GTKRunDialog(pwDialog);
}
@@ -5432,37 +5979,37 @@ extern void GTKShowVersion( void )
pwButtonBox = gtk_vbox_new( FALSE, 0 );
gtk_box_pack_start( GTK_BOX(DialogArea(pwDialog, DA_MAIN)), pwButtonBox, FALSE, FALSE, 8 );
- gtk_box_pack_start( GTK_BOX( pwButtonBox ),
+ gtk_box_pack_start( GTK_BOX( pwButtonBox ),
pwButton = gtk_button_new_with_label(_("Credits") ),
FALSE, FALSE, 8 );
g_signal_connect( G_OBJECT( pwButton ), "clicked",
G_CALLBACK( GTKCommandShowCredits ), pwDialog );
-
- gtk_box_pack_start( GTK_BOX( pwButtonBox ),
+
+ gtk_box_pack_start( GTK_BOX( pwButtonBox ),
pwButton = gtk_button_new_with_label(_("Build Info") ),
FALSE, FALSE, 8 );
g_signal_connect( G_OBJECT( pwButton ), "clicked",
G_CALLBACK( GTKShowBuildInfo ), pwDialog );
-
- gtk_box_pack_start( GTK_BOX( pwButtonBox ),
+
+ gtk_box_pack_start( GTK_BOX( pwButtonBox ),
pwButton = gtk_button_new_with_label(_("Copying conditions") ),
FALSE, FALSE, 8 );
g_signal_connect( G_OBJECT( pwButton ), "clicked",
G_CALLBACK( GtkShowCopying ), pwDialog );
-
- gtk_box_pack_start( GTK_BOX( pwButtonBox ),
+
+ gtk_box_pack_start( GTK_BOX( pwButtonBox ),
pwButton = gtk_button_new_with_label(_("Warranty") ),
FALSE, FALSE, 8 );
g_signal_connect( G_OBJECT( pwButton ), "clicked",
G_CALLBACK( GtkShowWarranty ), NULL );
- gtk_box_pack_start( GTK_BOX( pwButtonBox ),
+ gtk_box_pack_start( GTK_BOX( pwButtonBox ),
pwButton = gtk_button_new_with_label(_("Report Bug") ),
FALSE, FALSE, 8 );
g_signal_connect( G_OBJECT( pwButton ), "clicked",
G_CALLBACK( ReportBug ), NULL );
- gtk_box_pack_start( GTK_BOX( pwButtonBox ),
+ gtk_box_pack_start( GTK_BOX( pwButtonBox ),
pwButton = gtk_button_new_with_label(_("Evaluation Engine") ),
FALSE, FALSE, 8 );
g_signal_connect( G_OBJECT( pwButton ), "clicked",
@@ -5505,7 +6052,7 @@ extern void GTKShowBuildInfo(GtkWidget *pw, GtkWidget *pwParent)
pwPrompt = gtk_label_new( _(intro_string));
gtk_box_pack_start( GTK_BOX( pwBox ), pwPrompt, FALSE, FALSE, 4 );
gtk_label_set_line_wrap( GTK_LABEL( pwPrompt ), TRUE );
-
+
GTKRunDialog(pwDialog);
}
@@ -5521,7 +6068,7 @@ static void AddTitle(GtkWidget* pwBox, char* Title)
ps->font_desc = pango_font_description_new();
pango_font_description_set_family_static( ps->font_desc, "serif" );
- pango_font_description_set_size( ps->font_desc, 16 * PANGO_SCALE );
+ pango_font_description_set_size( ps->font_desc, 16 * PANGO_SCALE );
gtk_widget_modify_style( pwTitle, ps );
g_object_unref( ps );
@@ -5624,7 +6171,7 @@ extern void GTKCommandShowCredits(GtkWidget * pw, GtkWidget * pwParent)
treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
g_object_unref(store);
renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes(_("Contributers"), renderer, "text", 0, NULL);
+ column = gtk_tree_view_column_new_with_attributes(_("Contributors"), renderer, "text", 0, NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
while (names.plNext->p)
@@ -5642,7 +6189,7 @@ extern void GTKCommandShowCredits(GtkWidget * pw, GtkWidget * pwParent)
static void GTKHelpAdd( GtkTreeStore *pts, GtkTreeIter *ptiParent,
command *pc ) {
GtkTreeIter ti;
-
+
for( ; pc->sz; pc++ )
if( pc->szHelp ) {
gtk_tree_store_append( pts, &ti, ptiParent );
@@ -5663,7 +6210,7 @@ static void GTKHelpSelect( GtkTreeSelection *pts, gpointer p ) {
char szCommand[ 128 ], *pchCommand = szCommand,
szUsage[ 128 ], *pchUsage = szUsage, *pLabel;
const char *pch;
-
+
if( gtk_tree_selection_get_selected( pts, &ptm, &ti ) ) {
ptp = gtk_tree_model_get_path( ptm, &ti );
c = gtk_tree_path_get_depth( ptp );
@@ -5688,8 +6235,8 @@ static void GTKHelpSelect( GtkTreeSelection *pts, gpointer p ) {
if( ( pch = apc[ i ]->szUsage ) ) {
while( *pch )
*pchUsage++ = *pch++;
- *pchUsage++ = ' '; *pchUsage = 0;
- }
+ *pchUsage++ = ' '; *pchUsage = 0;
+ }
}
pLabel = g_strdup_printf( _("%s- %s\n\nUsage: %s%s\n"), szCommand,
@@ -5698,7 +6245,7 @@ static void GTKHelpSelect( GtkTreeSelection *pts, gpointer p ) {
" <subcommand>" : "" );
gtk_label_set_text( GTK_LABEL( pwHelpLabel ), pLabel );
g_free( pLabel );
-
+
free( apc );
gtk_tree_path_free( ptp );
} else
@@ -5717,7 +6264,7 @@ extern void GTKHelp( char *sz )
command *pc, *pcTest, *pcStart;
int cch, i, c, *pn;
void ( *pf )( char * );
-
+
if( pw )
{
gtk_window_present( GTK_WINDOW( pw ) );
@@ -5728,7 +6275,7 @@ extern void GTKHelp( char *sz )
G_TYPE_POINTER );
GTKHelpAdd( pts, NULL, acTop );
-
+
pw = GTKCreateDialog(_("Help - command reference"), DT_INFO, NULL, DIALOG_FLAG_NONE, NULL, NULL);
g_object_add_weak_pointer( G_OBJECT( pw ), (void*) &pw );
gtk_window_set_title( GTK_WINDOW( pw ), _("Help - command reference") );
@@ -5763,11 +6310,11 @@ extern void GTKHelp( char *sz )
"text", 1, NULL );
g_signal_connect( G_OBJECT( treeSelection ), "changed",
G_CALLBACK( GTKHelpSelect ), NULL );
-
+
gtk_paned_pack2( GTK_PANED( pwPaned ),
pwHelpLabel = gtk_label_new( NULL ), FALSE, FALSE );
gtk_label_set_selectable( GTK_LABEL( pwHelpLabel ), TRUE );
-
+
gtk_widget_show_all( pw );
gtk_tree_model_get_iter_first( GTK_TREE_MODEL( pts ), &ti );
@@ -5811,7 +6358,7 @@ extern void GTKHelp( char *sz )
} else
break;
}
-
+
ptp = gtk_tree_model_get_path( GTK_TREE_MODEL( pts ), &ti );
pn = gtk_tree_path_get_indices( ptp );
ptpExpand = gtk_tree_path_new();
@@ -5843,7 +6390,7 @@ extern void GTKBearoffProgress( int i ) {
static GtkWidget *pwDialog, *pw, *pwAlign;
gchar *gsz;
-
+
if( !pwDialog ) {
pwDialog = GTKCreateDialog( _("GNU Backgammon"), DT_INFO, NULL, DIALOG_FLAG_MODAL|DIALOG_FLAG_NOTIDY, NULL, NULL );
gtk_window_set_role( GTK_WINDOW( pwDialog ), "progress" );
@@ -5857,7 +6404,7 @@ extern void GTKBearoffProgress( int i ) {
TRUE, TRUE, 8 );
gtk_container_add( GTK_CONTAINER( pwAlign ),
pw = gtk_progress_bar_new() );
-
+
gtk_widget_show_all( pwDialog );
}
@@ -5883,8 +6430,8 @@ static void enable_menu( GtkWidget *pw, int f ) {
GtkMenuItem *pmi = GTK_MENU_ITEM( pw );
- if( pmi->submenu )
- enable_sub_menu( pmi->submenu, f );
+ if( gtk_menu_item_get_submenu ( pmi ) )
+ enable_sub_menu( gtk_menu_item_get_submenu ( pmi ), f );
else
gtk_widget_set_sensitive( pw, f );
}
@@ -5892,40 +6439,71 @@ static void enable_menu( GtkWidget *pw, int f ) {
static void enable_sub_menu( GtkWidget *pw, int f ) {
GtkMenuShell *pms = GTK_MENU_SHELL( pw );
-
- g_list_foreach( pms->children, (GFunc) enable_menu, GINT_TO_POINTER(f) );
+ g_list_foreach( gtk_container_get_children ( GTK_CONTAINER ( pms ) ), (GFunc) enable_menu, GINT_TO_POINTER(f) );
}
/* A global setting has changed; update entry in Settings menu if necessary. */
extern void GTKSet( void *p ) {
-
+
BoardData *bd = BOARD( pwBoard )->board_data;
if( p == ap ) {
/* Handle the player names. */
- gtk_label_set_text( GTK_LABEL( GTK_BIN(
+#if (USE_GTKUIMANAGER)
+ gtk_label_set_text( GTK_LABEL( gtk_bin_get_child ( GTK_BIN(
+ gtk_ui_manager_get_widget (puim, "/MainMenu/GameMenu/SetTurnMenu/SetTurnPlayer0" )
+ ) ) ), (ap[ 0 ].szName) );
+ gtk_label_set_text( GTK_LABEL( gtk_bin_get_child ( GTK_BIN(
+ gtk_ui_manager_get_widget (puim, "/MainMenu/GameMenu/SetTurnMenu/SetTurnPlayer1" )
+ ) ) ), (ap[ 1 ].szName) );
+#else
+ gtk_label_set_text( GTK_LABEL( gtk_bin_get_child ( GTK_BIN(
gtk_item_factory_get_widget_by_action( pif, CMD_SET_TURN_0 )
- )->child ), (ap[ 0 ].szName) );
- gtk_label_set_text( GTK_LABEL( GTK_BIN(
+ ) ) ), (ap[ 0 ].szName) );
+ gtk_label_set_text( GTK_LABEL( gtk_bin_get_child( GTK_BIN(
gtk_item_factory_get_widget_by_action( pif, CMD_SET_TURN_1 )
- )->child ), (ap[ 1 ].szName) );
-
+ ) ) ), (ap[ 1 ].szName) );
+#endif
GL_SetNames();
GTKRegenerateGames();
+
+ } else if( p == &ms.fJacoby ) {
+ bd->jacoby_flag = ms.fJacoby;
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( bd->jacoby ),
+ bd->jacoby_flag );
+ ShowBoard();
+
} else if( p == &ms.fTurn ) {
/* Handle the player on roll. */
fAutoCommand = TRUE;
-
+#if (USE_GTKUIMANAGER)
+ if( ms.fTurn >= 0 ) {
+ if (ms.fTurn)
+ gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(
+ gtk_ui_manager_get_widget (puim,
+ "/MainMenu/GameMenu/SetTurnMenu/SetTurnPlayer0" ) ), TRUE );
+ else
+ gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(
+ gtk_ui_manager_get_widget (puim,
+ "/MainMenu/GameMenu/SetTurnMenu/SetTurnPlayer1" ) ), TRUE );
+ }
+ enable_menu ( gtk_ui_manager_get_widget (puim, "/MainMenu/GameMenu/Roll" ),
+ ms.fMove == ms.fTurn &&
+ ap[ ms.fMove ].pt == PLAYER_HUMAN );
+
+#else
+
if( ms.fTurn >= 0 )
gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(
gtk_item_factory_get_widget_by_action( pif, CMD_SET_TURN_0 +
ms.fTurn ) ), TRUE );
enable_menu ( gtk_item_factory_get_widget ( pif, "/Game/Roll" ),
- ms.fMove == ms.fTurn &&
+ ms.fMove == ms.fTurn &&
ap[ ms.fMove ].pt == PLAYER_HUMAN );
+#endif
fAutoCommand = FALSE;
} else if( p == &ms.gs ) {
/* Handle the game state. */
@@ -5934,14 +6512,120 @@ extern void GTKSet( void *p ) {
board_set_playing( BOARD( pwBoard ), plGame != NULL );
ToolbarSetPlaying( pwToolbar, plGame != NULL );
+#if (USE_GTKUIMANAGER)
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/FileMenu/Save" ), plGame != NULL );
+ enable_menu( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/GameMenu" ), ms.gs == GAME_PLAYING );
+ enable_menu( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/GameMenu/Roll" ),
+ ms.fMove == ms.fTurn &&
+ ap[ ms.fMove ].pt == PLAYER_HUMAN );
+
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/GoMenu/NextRoll" ), plGame != NULL );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/GoMenu/PreviousRoll" ), plGame != NULL );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/GoMenu/NextMarkedMove" ), plGame != NULL );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/GoMenu/PreviousMarkedMove" ), plGame != NULL );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/GoMenu/NextGame" ), plGame != NULL );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/GoMenu/PreviousGame" ), plGame != NULL );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/GoMenu/NextCMarkedMove" ), plGame != NULL );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/GoMenu/PreviousCMarkedMove" ), plGame != NULL );
+
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/FileMenu/MatchInfo" ), !ListEmpty( &lMatch ) );
+ enable_menu( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu" ), ms.gs == GAME_PLAYING );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/BatchAnalyse" ), TRUE );
+
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/AnalyseMove" ),
+ plLastMove && plLastMove->plNext && plLastMove->plNext->p );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/AnalyseGame" ), plGame != NULL );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/AnalyseMatch" ), !ListEmpty( &lMatch ) );
+
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/ClearAnalysisMenu/Move" ),
+ plLastMove && plLastMove->plNext && plLastMove->plNext->p );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/ClearAnalysisMenu/Game" ), plGame != NULL );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/ClearAnalysisMenu/MatchOrSession" ),
+ !ListEmpty( &lMatch ) );
+
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/MatchOrSessionStats" ),
+ !ListEmpty ( &lMatch ) );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/MatchEquityTable" ), TRUE );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/EvaluationSpeed" ), TRUE );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/GameMenu/SwapPlayers" ),
+ !ListEmpty ( &lMatch ) );
+
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/CMarkMenu/CMarkCubeMenu/Clear" ),
+ !ListEmpty ( &lMatch ) );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/CMarkMenu/CMarkCubeMenu/Show" ),
+ !ListEmpty ( &lMatch ) );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/CMarkMenu/CMarkMoveMenu/Clear" ),
+ !ListEmpty ( &lMatch ) );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/CMarkMenu/CMarkMoveMenu/Show" ),
+ !ListEmpty ( &lMatch ) );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/CMarkMenu/CMarkGameMenu/Clear" ),
+ !ListEmpty ( &lMatch ) );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/CMarkMenu/CMarkGameMenu/Show" ),
+ !ListEmpty ( &lMatch ) );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/CMarkMenu/CMarkMatchMenu/Clear" ),
+ !ListEmpty ( &lMatch ) );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/CMarkMenu/CMarkMatchMenu/Show" ),
+ !ListEmpty ( &lMatch ) );
+
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/RolloutMenu/Cube" ),
+ !ListEmpty ( &lMatch ) );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/RolloutMenu/Move" ),
+ !ListEmpty ( &lMatch ) );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/RolloutMenu/Game" ),
+ !ListEmpty ( &lMatch ) );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/RolloutMenu/Match" ),
+ !ListEmpty ( &lMatch ) );
+
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/AddMatchOrSessionStatsToDB" ),
+ !ListEmpty ( &lMatch ) );
+ gtk_widget_set_sensitive( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/AnalyseMenu/ShowRecords" ), TRUE );
+#else
gtk_widget_set_sensitive( gtk_item_factory_get_widget( pif,
"/File/Save..." ), plGame != NULL );
-
+
enable_sub_menu( gtk_item_factory_get_widget( pif, "/Game" ),
ms.gs == GAME_PLAYING );
enable_menu ( gtk_item_factory_get_widget ( pif, "/Game/Roll" ),
- ms.fMove == ms.fTurn &&
+ ms.fMove == ms.fTurn &&
ap[ ms.fMove ].pt == PLAYER_HUMAN );
gtk_widget_set_sensitive( gtk_item_factory_get_widget_by_action(
@@ -5959,7 +6643,7 @@ extern void GTKSet( void *p ) {
gtk_widget_set_sensitive( gtk_item_factory_get_widget(
pif, "/File/Match information..." ),
!ListEmpty( &lMatch ) );
-
+
enable_sub_menu( gtk_item_factory_get_widget( pif, "/Analyse" ),
ms.gs == GAME_PLAYING );
@@ -5967,7 +6651,7 @@ extern void GTKSet( void *p ) {
"/Analyse/Batch analyse..." ), TRUE );
gtk_widget_set_sensitive( gtk_item_factory_get_widget_by_action(
- pif, CMD_ANALYSE_MOVE ),
+ pif, CMD_ANALYSE_MOVE ),
plLastMove && plLastMove->plNext && plLastMove->plNext->p );
gtk_widget_set_sensitive( gtk_item_factory_get_widget_by_action(
pif, CMD_ANALYSE_GAME ), plGame != NULL );
@@ -5975,7 +6659,7 @@ extern void GTKSet( void *p ) {
pif, CMD_ANALYSE_MATCH ), !ListEmpty( &lMatch ) );
gtk_widget_set_sensitive( gtk_item_factory_get_widget_by_action(
- pif, CMD_ANALYSE_CLEAR_MOVE ),
+ pif, CMD_ANALYSE_CLEAR_MOVE ),
plLastMove && plLastMove->plNext && plLastMove->plNext->p );
gtk_widget_set_sensitive( gtk_item_factory_get_widget_by_action(
pif, CMD_ANALYSE_CLEAR_GAME ), plGame != NULL );
@@ -6014,20 +6698,25 @@ extern void GTKSet( void *p ) {
gtk_widget_set_sensitive( gtk_item_factory_get_widget_by_action(
pif, CMD_ANALYSE_ROLLOUT_MATCH), !ListEmpty(&lMatch));
- gtk_widget_set_sensitive(
+ gtk_widget_set_sensitive(
gtk_item_factory_get_widget( pif,
- "/Analyse/Add match or session to database" ),
+ "/Analyse/Add match or session to database" ),
!ListEmpty( &lMatch ) );
- gtk_widget_set_sensitive(
+ gtk_widget_set_sensitive(
gtk_item_factory_get_widget( pif,
- "/Analyse/Show Records" ),
+ "/Analyse/Show Records" ),
TRUE );
-
+#endif
fAutoCommand = FALSE;
- } else if( p == &ms.fCrawford )
+ } else if( p == &ms.fCrawford ) {
+ bd->crawford_game = ms.fCrawford;
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( bd->crawford ),
+ ms.fCrawford );
ShowBoard(); /* this is overkill, but it works */
- else if (IsPanelShowVar(WINDOW_ANNOTATION, p)) {
+ } else if( p == &ms.nCube ) {
+ ShowBoard(); /* this is overkill, but it works */
+ } else if (IsPanelShowVar(WINDOW_ANNOTATION, p)) {
if (PanelShowing(WINDOW_ANNOTATION))
ShowHidePanel(WINDOW_ANNOTATION);
} else if (IsPanelShowVar(WINDOW_GAME, p)) {
@@ -6041,7 +6730,7 @@ extern void GTKSet( void *p ) {
} else if (IsPanelShowVar(WINDOW_COMMAND, p)) {
ShowHidePanel(WINDOW_COMMAND);
} else if( p == &bd->rd->fDiceArea ) {
- if( GTK_WIDGET_REALIZED( pwBoard ) )
+ if( gtk_widget_get_realized( pwBoard ) )
{
#if USE_BOARD3D
/* If in 3d mode may need to update sizes */
@@ -6049,11 +6738,11 @@ extern void GTKSet( void *p ) {
SetupViewingVolume3d(bd, bd->bd3d, bd->rd);
else
#endif
- {
- if( GTK_WIDGET_REALIZED( pwBoard ) ) {
- if( GTK_WIDGET_VISIBLE( bd->dice_area ) && !bd->rd->fDiceArea )
+ {
+ if( gtk_widget_get_realized( pwBoard ) ) {
+ if( gtk_widget_get_visible( bd->dice_area ) && !bd->rd->fDiceArea )
gtk_widget_hide( bd->dice_area );
- else if( ! GTK_WIDGET_VISIBLE( bd->dice_area ) && bd->rd->fDiceArea )
+ else if( ! gtk_widget_get_visible( bd->dice_area ) && bd->rd->fDiceArea )
gtk_widget_show_all( bd->dice_area );
}
}}
@@ -6061,7 +6750,13 @@ extern void GTKSet( void *p ) {
else if( p == &fShowIDs )
{
inCallback = TRUE;
+#if (USE_GTKUIMANAGER)
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM( gtk_ui_manager_get_widget (puim,
+ "/MainMenu/ViewMenu/ShowIDStatusBar" ) ), fShowIDs );
+
+#else
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_widget(pif, "/View/Show ID in status bar" )), fShowIDs);
+#endif
inCallback = FALSE;
if (!fShowIDs)
@@ -6087,40 +6782,34 @@ extern void GTKSet( void *p ) {
#define FORMATGS_ALL -1
#define NUM_STAT_TYPES 4
char *aszStatHeading [ NUM_STAT_TYPES ] = {
- N_("Chequer Play Statistics:"),
+ N_("Chequer Play Statistics:"),
N_("Cube Statistics:"),
N_("Luck Statistics:"),
N_("Overall Statistics:")};
-static GtkWidget* statLists[NUM_STAT_TYPES], *pwList;
-static int numStatGames, curStatGame;
-static GtkWidget* statPom;
+static GtkWidget* statViews[NUM_STAT_TYPES], *statView;
+static int numStatGames;
GtkWidget *pwStatDialog;
int fGUIUseStatsPanel = TRUE;
GtkWidget *pswList;
GtkWidget *pwNotebook;
-static void AddList(char* pStr, GtkCList* pList, const char* pTitle)
+static void AddList(char *pStr, GtkWidget *view, const char *pTitle)
{
- int i;
gchar *sz;
+ GtkTreeIter iter;
+ GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));
- sprintf ( strchr ( pStr, 0 ), "%s\n", pTitle);
-
- for (i = 0; i < pList->rows; i++ )
- {
- sprintf ( strchr ( pStr, 0 ), "%-37s ",
- ( gtk_clist_get_text ( pList, i, 0, &sz ) ) ?
- sz : "" );
-
- sprintf ( strchr ( pStr, 0 ), "%-20s ",
- ( gtk_clist_get_text ( pList, i, 1, &sz ) ) ?
- sz : "" );
-
- sprintf ( strchr ( pStr, 0 ), "%-20s\n",
- ( gtk_clist_get_text ( pList, i, 2, &sz ) ) ?
- sz : "" );
- }
- sprintf ( strchr ( pStr, 0 ), "\n");
+ sprintf(strchr(pStr, 0), "%s\n", pTitle);
+ if (gtk_tree_model_get_iter_first(model, &iter))
+ do {
+ gtk_tree_model_get(model, &iter, 0, &sz, -1);
+ sprintf(strchr(pStr, 0), "%-37s ", sz ? sz : "");
+ gtk_tree_model_get(model, &iter, 1, &sz, -1);
+ sprintf(strchr(pStr, 0), "%-20s ", sz ? sz : "");
+ gtk_tree_model_get(model, &iter, 2, &sz, -1);
+ sprintf(strchr(pStr, 0), "%-20s\n", sz ? sz : "");
+ } while (gtk_tree_model_iter_next(model, &iter));
+ sprintf(strchr(pStr, 0), "\n");
}
static void CopyData(GtkWidget *pwNotebook, int page)
@@ -6130,13 +6819,13 @@ static void CopyData(GtkWidget *pwNotebook, int page)
sprintf(szOutput, "%-37s %-20s %-20s\n", "", ap[ 0 ].szName, ap[ 1 ].szName);
if (page == FORMATGS_CHEQUER || page == FORMATGS_ALL)
- AddList(szOutput, GTK_CLIST(statLists[FORMATGS_CHEQUER]), aszStatHeading[FORMATGS_CHEQUER]);
+ AddList(szOutput, statViews[FORMATGS_CHEQUER], aszStatHeading[FORMATGS_CHEQUER]);
if (page == FORMATGS_LUCK || page == FORMATGS_ALL)
- AddList(szOutput, GTK_CLIST(statLists[FORMATGS_LUCK]), aszStatHeading[FORMATGS_LUCK]);
+ AddList(szOutput, statViews[FORMATGS_LUCK], aszStatHeading[FORMATGS_LUCK]);
if (page == FORMATGS_CUBE || page == FORMATGS_ALL)
- AddList(szOutput, GTK_CLIST(statLists[FORMATGS_CUBE]), aszStatHeading[FORMATGS_CUBE]);
+ AddList(szOutput, statViews[FORMATGS_CUBE], aszStatHeading[FORMATGS_CUBE]);
if (page == FORMATGS_OVERALL || page == FORMATGS_ALL)
- AddList(szOutput, GTK_CLIST(statLists[FORMATGS_OVERALL]), aszStatHeading[FORMATGS_OVERALL]);
+ AddList(szOutput, statViews[FORMATGS_OVERALL], aszStatHeading[FORMATGS_OVERALL]);
TextToClipboard(szOutput);
}
@@ -6166,49 +6855,55 @@ static void CopyAll( GtkWidget *pwWidget, GtkWidget *pwNotebook )
}
static void FillStats(const statcontext *psc, const matchstate *pms,
- const enum _formatgs gs, GtkWidget* statList )
-{
-
- GList *list = formatGS( psc, pms->nMatchTo, gs );
- GList *pl;
-
- for ( pl = g_list_first( list ); pl; pl = g_list_next( pl ) ) {
-
- char **aasz = pl->data;
-
- gtk_clist_append( GTK_CLIST( statList ), aasz );
-
- }
-
- freeGS( list );
-
+ const enum _formatgs gs, GtkWidget *statView)
+{
+
+ GList *list = formatGS(psc, pms->nMatchTo, gs);
+ GList *pl;
+ GtkListStore *store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(statView)));
+
+ for (pl = g_list_first(list); pl; pl = g_list_next(pl)) {
+ GtkTreeIter iter;
+ char **aasz = pl->data;
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter, 0, aasz[0], 1, aasz[1], 2, aasz[2], -1);
+ }
+ freeGS(list);
}
static void SetStats(const statcontext *psc)
{
- char *aszLine[] = { NULL, NULL, NULL };
+ char *aszLine[] = { NULL, NULL, NULL };
int i;
+ GtkListStore *store;
+ GtkTreeIter iter;
- for ( i = 0; i < NUM_STAT_TYPES; ++i )
- gtk_clist_clear(GTK_CLIST(statLists[i]));
-
- for ( i = 0; i < NUM_STAT_TYPES; ++i )
- FillStats( psc, &ms, i, statLists[ i ] );
-
- gtk_clist_clear(GTK_CLIST(pwList));
+ for (i = 0; i < NUM_STAT_TYPES; ++i)
+ {
+ store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+ gtk_tree_view_set_model(GTK_TREE_VIEW(statViews[i]), GTK_TREE_MODEL(store));
+ FillStats(psc, &ms, i, statViews[i]);
+ g_object_unref(store);
+ }
+ store = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+ gtk_tree_view_set_model(GTK_TREE_VIEW(statView), GTK_TREE_MODEL(store));
+ g_object_unref(store);
aszLine[0] = aszStatHeading[FORMATGS_CHEQUER];
- gtk_clist_append( GTK_CLIST( pwList ), aszLine );
- FillStats( psc, &ms, FORMATGS_CHEQUER, pwList );
- FillStats( psc, &ms, FORMATGS_LUCK, pwList );
-
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter, 0, aszLine[0], -1);
+ FillStats(psc, &ms, FORMATGS_CHEQUER, statView);
+ FillStats(psc, &ms, FORMATGS_LUCK, statView);
+
aszLine[0] = aszStatHeading[FORMATGS_CUBE];
- gtk_clist_append( GTK_CLIST( pwList ), aszLine );
- FillStats( psc, &ms, FORMATGS_CUBE, pwList );
-
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter, 0, aszLine[0], -1);
+ FillStats(psc, &ms, FORMATGS_CUBE, statView);
+
aszLine[0] = aszStatHeading[FORMATGS_OVERALL];
- gtk_clist_append( GTK_CLIST( pwList ), aszLine );
- FillStats( psc, &ms, FORMATGS_OVERALL, pwList );
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter, 0, aszLine[0], -1);
+ FillStats(psc, &ms, FORMATGS_OVERALL, statView);
}
static const statcontext *GetStatContext(int game)
@@ -6230,18 +6925,12 @@ static const statcontext *GetStatContext(int game)
}
}
-static void StatsSelectGame(GtkWidget *pw, int i)
+static void StatsSelectGame(GtkWidget *box, int i)
{
- curStatGame = i;
-
- gtk_option_menu_set_history( GTK_OPTION_MENU( statPom ), curStatGame );
-
- if (!curStatGame)
- {
+ int curStatGame = gtk_combo_box_get_active(GTK_COMBO_BOX(box));
+ if (!curStatGame) {
gtk_window_set_title(GTK_WINDOW(pwStatDialog), _("Statistics for all games"));
- }
- else
- {
+ } else {
char sz[100];
strcpy(sz, _("Statistics for game "));
sprintf(sz + strlen(sz), "%d", curStatGame);
@@ -6250,136 +6939,62 @@ static void StatsSelectGame(GtkWidget *pw, int i)
SetStats(GetStatContext(curStatGame));
}
-static void StatsAllGames( GtkWidget *pw, char *szCommand )
-{
- if (curStatGame != 0)
- StatsSelectGame(pw, 0);
-}
-
-static void StatsFirstGame( GtkWidget *pw, char *szCommand )
-{
- if (curStatGame != 1)
- StatsSelectGame(pw, 1);
-}
-
-static void StatsLastGame( GtkWidget *pw, char *szCommand )
+static void StatsPreviousGame( GtkWidget *button, GtkWidget *combo )
{
- if (curStatGame != numStatGames)
- StatsSelectGame(pw, numStatGames);
+ int i = gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
+ if (i > 0)
+ gtk_combo_box_set_active(GTK_COMBO_BOX(combo), i -1 );
}
-static void StatsPreviousGame( GtkWidget *pw, char *szCommand )
+static void StatsNextGame( GtkWidget *button, GtkWidget *combo)
{
- if (curStatGame > 1)
- StatsSelectGame(pw, curStatGame - 1);
+ int i = gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
+ if (i < numStatGames)
+ gtk_combo_box_set_active(GTK_COMBO_BOX(combo), gtk_combo_box_get_active(GTK_COMBO_BOX(combo))+1);
}
-static void StatsNextGame( GtkWidget *pw, char *szCommand )
+static GtkWidget *AddNavigation(GtkWidget *pvbox)
{
- if (curStatGame < numStatGames)
- StatsSelectGame(pw, curStatGame + 1);
-}
-
-extern GtkWidget *StatsPixmapButton(GdkColormap *pcmap, char **xpm,
- void (*fn)(GtkWidget*, char*))
-{
- GdkPixmap *ppm;
- GdkBitmap *pbm;
- GtkWidget *pw, *pwButton;
-
- ppm = gdk_pixmap_colormap_create_from_xpm_d( NULL, pcmap, &pbm, NULL,
- xpm );
- pw = gtk_pixmap_new( ppm, pbm );
- pwButton = gtk_button_new();
- gtk_container_add( GTK_CONTAINER( pwButton ), pw );
-
- g_signal_connect( G_OBJECT( pwButton ), "clicked",
- G_CALLBACK( fn ), 0 );
-
- return pwButton;
-}
+ GtkWidget *phbox, *pw, *box;
+ char sz[128];
+ int anFinalScore[2];
+ listOLD *pl;
-static void AddNavigation(GtkWidget* pvbox)
-{
- GtkWidget *phbox, *pm, *pw;
- GdkColormap *pcmap;
- char sz[128];
- listOLD *pl;
+ box = gtk_combo_box_text_new();
-#include "xpm/prevgame.xpm"
-#include "xpm/prevmove.xpm"
-#include "xpm/nextmove.xpm"
-#include "xpm/nextgame.xpm"
-#include "xpm/allgames.xpm"
-
- pcmap = gtk_widget_get_colormap( pwMain );
-
- phbox = gtk_hbox_new( FALSE, 0 ),
- gtk_box_pack_start( GTK_BOX( pvbox ), phbox, FALSE, FALSE, 4 );
-
- gtk_box_pack_start( GTK_BOX( phbox ),
- pw = StatsPixmapButton(pcmap, allgames_xpm, StatsAllGames),
- FALSE, FALSE, 4 );
- gtk_widget_set_tooltip_text(pw, _("Show all games"));
- gtk_box_pack_start( GTK_BOX( phbox ),
- pw = StatsPixmapButton(pcmap, prevgame_xpm, StatsFirstGame),
- FALSE, FALSE, 4 );
- gtk_widget_set_tooltip_text(pw, _("Move to first game"));
- gtk_box_pack_start( GTK_BOX( phbox ),
- pw = StatsPixmapButton(pcmap, prevmove_xpm, StatsPreviousGame),
- FALSE, FALSE, 0 );
+ if (getFinalScore(anFinalScore))
+ sprintf(sz, _("All games: %s %d, %s %d"), ap[0].szName,
+ anFinalScore[0], ap[1].szName, anFinalScore[1]);
+ else
+ sprintf(sz, _("All games: %s, %s"), ap[0].szName, ap[1].szName);
+ phbox = gtk_hbox_new(FALSE, 0), gtk_box_pack_start(GTK_BOX(pvbox), phbox, FALSE, FALSE, 4);
+ pw = button_from_image(gtk_image_new_from_stock
+ (GNUBG_STOCK_GO_PREV_GAME, GTK_ICON_SIZE_LARGE_TOOLBAR));
+ g_signal_connect(G_OBJECT(pw), "clicked", G_CALLBACK(StatsPreviousGame), box);
+ gtk_box_pack_start(GTK_BOX(phbox), pw, FALSE, FALSE, 0);
gtk_widget_set_tooltip_text(pw, _("Move back to the previous game"));
- gtk_box_pack_start( GTK_BOX( phbox ),
- pw = StatsPixmapButton(pcmap, nextmove_xpm, StatsNextGame),
- FALSE, FALSE, 4 );
- gtk_widget_set_tooltip_text(pw, _("Move ahead to the next game"));
- gtk_box_pack_start( GTK_BOX( phbox ),
- pw = StatsPixmapButton(pcmap, nextgame_xpm, StatsLastGame),
- FALSE, FALSE, 0 );
- gtk_widget_set_tooltip_text(pw, _("Move ahead to last game"));
- pm = gtk_menu_new();
-
- {
- int anFinalScore[ 2 ];
-
- if ( getFinalScore( anFinalScore ) )
- sprintf( sz, _("All games: %s %d, %s %d"), ap[ 0 ].szName,
- anFinalScore[ 0 ], ap[ 1 ].szName, anFinalScore[ 1 ] );
- else
- sprintf( sz, _("All games: %s, %s"), ap[ 0 ].szName,
- ap[ 1 ].szName );
- }
-
- pw = gtk_menu_item_new_with_label(sz);
- gtk_menu_append(GTK_MENU(pm), pw);
- g_signal_connect( G_OBJECT( pw ), "activate",
- G_CALLBACK(StatsSelectGame), 0);
+ pw = button_from_image(gtk_image_new_from_stock
+ (GNUBG_STOCK_GO_NEXT_GAME, GTK_ICON_SIZE_LARGE_TOOLBAR));
+ g_signal_connect(G_OBJECT(pw), "clicked", G_CALLBACK(StatsNextGame), box);
+ gtk_box_pack_start(GTK_BOX(phbox), pw, FALSE, FALSE, 4);
+ gtk_widget_set_tooltip_text(pw, _("Move ahead to the next game"));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(box), sz);
numStatGames = 0;
- curStatGame = 0;
- for (pl = lMatch.plNext; pl->p; pl = pl->plNext )
- {
+ for (pl = lMatch.plNext; pl->p; pl = pl->plNext) {
listOLD *plGame = pl->p;
moverecord *pmr = plGame->plNext->p;
numStatGames++;
- sprintf(sz, _("Game %d: %s %d, %s %d"), pmr->g.i + 1, ap[ 0 ].szName,
- pmr->g.anScore[ 0 ], ap[ 1 ].szName, pmr->g.anScore[ 1 ] );
- pw = gtk_menu_item_new_with_label(sz);
-
- g_signal_connect( G_OBJECT( pw ), "activate",
- G_CALLBACK(StatsSelectGame), GINT_TO_POINTER(numStatGames));
-
- gtk_widget_show( pw );
- gtk_menu_append( GTK_MENU( pm ), pw );
+ sprintf(sz, _("Game %d: %s %d, %s %d"), pmr->g.i + 1, ap[0].szName,
+ pmr->g.anScore[0], ap[1].szName, pmr->g.anScore[1]);
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(box), sz);
}
+ g_signal_connect(G_OBJECT(box), "changed", G_CALLBACK(StatsSelectGame), NULL);
+ gtk_box_pack_start(GTK_BOX(phbox), box, TRUE, TRUE, 4);
- gtk_widget_show_all( pm );
- gtk_option_menu_set_menu( GTK_OPTION_MENU( statPom = gtk_option_menu_new() ), pm );
- gtk_option_menu_set_history( GTK_OPTION_MENU( statPom ), 0 );
-
- gtk_box_pack_start( GTK_BOX( phbox ), statPom, TRUE, TRUE, 4 );
+ return box;
}
static void toggle_fGUIUseStatsPanel(GtkWidget *widget, GtkWidget *pw)
@@ -6398,87 +7013,86 @@ static void toggle_fGUIUseStatsPanel(GtkWidget *widget, GtkWidget *pw)
}
}
-static gint
-compare_func( gconstpointer a, gconstpointer b ) {
+static void StatcontextCopy(GtkWidget *pw, GtkTreeView *view)
+{
+ static char szOutput[4096];
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GList *row;
+ GList *rows;
- gint i = GPOINTER_TO_INT( a );
- gint j = GPOINTER_TO_INT( b );
+ selection = gtk_tree_view_get_selection(view);
- if ( i < j )
- return -1;
- else if ( i == j )
- return 0;
- else
- return 1;
+ if (gtk_tree_selection_count_selected_rows(selection) < 1)
+ return;
-}
+ sprintf(szOutput, "%-37s %-20s %-20s\n", "", ap[0].szName, ap[1].szName);
-static void StatcontextCopy(GtkWidget *pw, GtkWidget *pwList)
-{
- GList *pl;
- GList *plCopy;
- int i;
- static char szOutput[ 4096 ];
- char *pc;
- gchar *sz;
-
- sprintf ( szOutput,
- "%-37s %-20s %-20s\n",
- "", ap[ 0 ].szName, ap[ 1 ].szName );
-
- /* copy list (note that the integers in the list are NOT copied) */
- plCopy = g_list_copy( GTK_CLIST ( pwList )->selection );
-
- /* sort list; otherwise the lines are returned in whatever order the
- user clicked the lines (bug #4160) */
- plCopy = g_list_sort( plCopy, compare_func );
-
- for ( pl = plCopy; pl; pl = pl->next ) {
-
- i = GPOINTER_TO_INT( pl->data );
-
- sprintf ( pc = strchr ( szOutput, 0 ), "%-37s ",
- ( gtk_clist_get_text ( GTK_CLIST ( pwList ), i, 0, &sz ) ) ?
- sz : "" );
-
- sprintf ( pc = strchr ( szOutput, 0 ), "%-20s ",
- ( gtk_clist_get_text ( GTK_CLIST ( pwList ), i, 1, &sz ) ) ?
- sz : "" );
-
- sprintf ( pc = strchr ( szOutput, 0 ), "%-20s\n",
- ( gtk_clist_get_text ( GTK_CLIST ( pwList ), i, 2, &sz ) ) ?
- sz : "" );
-
- }
+ rows = gtk_tree_selection_get_selected_rows(selection, &model);
+
+ for (row = rows ; row; row = row->next) {
+ GtkTreeIter iter;
+ gchar *sz;
+ GtkTreePath *path = row->data;
+ gchar *pc;
+ gtk_tree_model_get_iter(model, &iter, path);
+
+ gtk_tree_model_get(model, &iter, 0, &sz, -1);
+ sprintf(pc = strchr(szOutput, 0), "%-37s ", sz ? sz : "");
+ g_free(sz);
+
+ gtk_tree_model_get(model, &iter, 1, &sz, -1);
+ sprintf(pc = strchr(szOutput, 0), "%-20s ", sz ? sz : "");
+ g_free(sz);
+
+ gtk_tree_model_get(model, &iter, 2, &sz, -1);
+ sprintf(pc = strchr(szOutput, 0), "%-20s\n", sz ? sz : "");
+ g_free(sz);
- /* garbage collect */
- g_list_free(plCopy);
-
- GTKTextToClipboard(szOutput);
+ gtk_tree_path_free(path);
+ }
+ g_list_free(rows);
+ GTKTextToClipboard(szOutput);
}
static GtkWidget *CreateList(void)
{
int i;
- static char *aszEmpty[] = { NULL, NULL, NULL };
- GtkWidget *pwList = gtk_clist_new_with_titles( 3, aszEmpty );
-
- for( i = 0; i < 3; i++ ) {
- gtk_clist_set_column_auto_resize( GTK_CLIST( pwList ), i, TRUE );
- gtk_clist_set_column_justification( GTK_CLIST( pwList ),
- i, GTK_JUSTIFY_RIGHT );
+ GtkWidget *view;
+ GtkWidget *copyMenu;
+ GtkWidget *menu_item;
+
+ view = gtk_tree_view_new();
+
+ for (i=0; i < 3; i++) {
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+ renderer = gtk_cell_renderer_text_new();
+ g_object_set(renderer, "xalign", 1.0, NULL);
+ column = gtk_tree_view_column_new_with_attributes("", renderer, "text", i, NULL);
+ gtk_tree_view_column_set_alignment (column, 0.97);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);
}
+ gtk_tree_view_column_set_title (gtk_tree_view_get_column (GTK_TREE_VIEW(view), 1), ap[0].szName);
+ gtk_tree_view_column_set_title (gtk_tree_view_get_column (GTK_TREE_VIEW(view), 2), ap[1].szName);
+ gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(view)), GTK_SELECTION_MULTIPLE);
+ /* list view (selections) */
+ copyMenu = gtk_menu_new ();
+
+ menu_item = gtk_menu_item_new_with_label ("Copy selection");
+ gtk_menu_shell_append (GTK_MENU_SHELL (copyMenu), menu_item);
+ gtk_widget_show (menu_item);
+ g_signal_connect( G_OBJECT( menu_item ), "activate", G_CALLBACK( StatcontextCopy ), view );
- gtk_clist_column_titles_passive( GTK_CLIST( pwList ) );
-
- gtk_clist_set_column_title( GTK_CLIST( pwList ), 1, (ap[0].szName));
- gtk_clist_set_column_title( GTK_CLIST( pwList ), 2, (ap[1].szName));
+ menu_item = gtk_menu_item_new_with_label ("Copy all");
+ gtk_menu_shell_append (GTK_MENU_SHELL (copyMenu), menu_item);
+ gtk_widget_show (menu_item);
+ g_signal_connect( G_OBJECT( menu_item ), "activate", G_CALLBACK( CopyAll ), pwNotebook );
- gtk_clist_set_selection_mode( GTK_CLIST( pwList ),
- GTK_SELECTION_EXTENDED );
+ g_signal_connect( G_OBJECT( view ), "button-press-event", G_CALLBACK( ContextMenu ), copyMenu );
- return pwList;
+ return view;
}
static void stat_dialog_map(GtkWidget *window, GtkWidget *pwUsePanels)
@@ -6489,6 +7103,7 @@ static void stat_dialog_map(GtkWidget *window, GtkWidget *pwUsePanels)
extern void GTKDumpStatcontext( int game )
{
GtkWidget *copyMenu, *menu_item, *pvbox, *pwUsePanels;
+ GtkWidget *navi_combo;
#if USE_BOARD3D
int i;
GtkWidget *pw;
@@ -6501,35 +7116,31 @@ extern void GTKDumpStatcontext( int game )
gtk_notebook_set_scrollable( GTK_NOTEBOOK( pwNotebook ), TRUE );
gtk_notebook_popup_disable( GTK_NOTEBOOK( pwNotebook ) );
-/* Not sure if this is a good idea...
- gtk_widget_set_tooltip_text(pwNotebook, _("Right click to copy statistics"));
-*/
-
pvbox = gtk_vbox_new( FALSE, 0 ),
gtk_box_pack_start( GTK_BOX( pvbox ), pwNotebook, TRUE, TRUE, 0);
- gtk_notebook_append_page( GTK_NOTEBOOK( pwNotebook ), statLists[FORMATGS_OVERALL] = CreateList(),
+ gtk_notebook_append_page( GTK_NOTEBOOK( pwNotebook ), statViews[FORMATGS_OVERALL] = CreateList(),
gtk_label_new(_("Overall")));
- gtk_notebook_append_page( GTK_NOTEBOOK( pwNotebook ), statLists[FORMATGS_CHEQUER] = CreateList(),
+ gtk_notebook_append_page( GTK_NOTEBOOK( pwNotebook ), statViews[FORMATGS_CHEQUER] = CreateList(),
gtk_label_new(_("Chequer play")));
- gtk_notebook_append_page( GTK_NOTEBOOK( pwNotebook ), statLists[FORMATGS_CUBE] = CreateList(),
+ gtk_notebook_append_page( GTK_NOTEBOOK( pwNotebook ), statViews[FORMATGS_CUBE] = CreateList(),
gtk_label_new(_("Cube decisions")));
- gtk_notebook_append_page( GTK_NOTEBOOK( pwNotebook ), statLists[FORMATGS_LUCK] = CreateList(),
+ gtk_notebook_append_page( GTK_NOTEBOOK( pwNotebook ), statViews[FORMATGS_LUCK] = CreateList(),
gtk_label_new(_("Luck")));
- pwList = CreateList();
+ statView = CreateList();
pswList = gtk_scrolled_window_new( NULL, NULL );
gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( pswList ),
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC );
- gtk_container_add( GTK_CONTAINER( pswList ), pwList );
+ gtk_container_add( GTK_CONTAINER( pswList ), statView );
gtk_box_pack_start (GTK_BOX (pvbox), pswList, TRUE, TRUE, 0);
- AddNavigation(pvbox);
+ navi_combo = AddNavigation(pvbox);
gtk_container_add( GTK_CONTAINER( DialogArea( pwStatDialog, DA_MAIN ) ), pvbox );
#if USE_BOARD3D
@@ -6567,14 +7178,14 @@ extern void GTKDumpStatcontext( int game )
menu_item = gtk_menu_item_new_with_label ("Copy selection");
gtk_menu_shell_append (GTK_MENU_SHELL (copyMenu), menu_item);
gtk_widget_show (menu_item);
- g_signal_connect( G_OBJECT( menu_item ), "activate", G_CALLBACK( StatcontextCopy ), pwList );
+ g_signal_connect( G_OBJECT( menu_item ), "activate", G_CALLBACK( StatcontextCopy ), statView );
menu_item = gtk_menu_item_new_with_label ("Copy all");
gtk_menu_shell_append (GTK_MENU_SHELL (copyMenu), menu_item);
gtk_widget_show (menu_item);
g_signal_connect( G_OBJECT( menu_item ), "activate", G_CALLBACK( CopyAll ), pwNotebook );
- g_signal_connect( G_OBJECT( pwList ), "button-press-event", G_CALLBACK( ContextMenu ), copyMenu );
+ g_signal_connect( G_OBJECT( statView ), "button-press-event", G_CALLBACK( ContextMenu ), copyMenu );
/* dialog size */
if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( pwUsePanels ) ) )
@@ -6600,7 +7211,7 @@ extern void GTKDumpStatcontext( int game )
g_signal_connect( G_OBJECT( pwNotebook ), "button-press-event", G_CALLBACK( ContextMenu ), copyMenu );
- StatsSelectGame(0, game);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(navi_combo), game);
g_signal_connect(pwStatDialog, "map", G_CALLBACK(stat_dialog_map), pwUsePanels);
@@ -6618,331 +7229,18 @@ GTKGetMove ( int anMove[ 8 ] ) {
if ( !bd->valid_move )
return 0;
-
+
memcpy ( anMove, bd->valid_move->anMove, 8 * sizeof ( int ) );
return 1;
}
-typedef struct _recordwindowinfo {
- GtkWidget *pwList, *pwTable, *apwStats[ 22 ];
- int nRow;
-} recordwindowinfo;
-
-static void RecordSelect( GtkCList *pw, gint nRow, gint nCol,
- GdkEventButton *pev, recordwindowinfo *prwi ) {
- char *pch;
- int i;
-
- for( i = 0; i < 22; i++ ) {
- gtk_clist_get_text( pw, nRow, i, &pch );
- gtk_label_set_text( GTK_LABEL( prwi->apwStats[ i ] ), pch );
- }
-
- prwi->nRow = nRow;
-}
-
-static void RecordUnselect( GtkCList *pw, gint nRow, gint nCol,
- GdkEventButton *pev, recordwindowinfo *prwi ) {
- int i;
-
- for( i = 0; i < 22; i++ )
- gtk_label_set_text( GTK_LABEL( prwi->apwStats[ i ] ), NULL );
-}
-
-static void RecordEraseAll( GtkWidget *pw, recordwindowinfo *prwi ) {
-
- FILE *pf;
- char *sz = g_build_filename (szHomeDirectory, "gnubgpr", NULL);
-
- UserCommand( "record eraseall" );
-
- /* FIXME this is a horrible hack to determine whether the records were
- really erased */
-
- if( ( pf = g_fopen( sz, "r" ) ) ) {
- fclose( pf );
- g_free( sz );
- return;
- }
- g_free(sz);
-
- gtk_clist_clear( GTK_CLIST( prwi->pwList ) );
-}
-
-static gint RecordRowCompare( GtkCList *pcl, GtkCListRow *p0,
- GtkCListRow *p1 ) {
-
- return StrCaseCmp( GTK_CELL_TEXT( p0->cell[ pcl->sort_column ] )->text,
- GTK_CELL_TEXT( p1->cell[ pcl->sort_column ] )->text );
-}
-
-/* 0: name [visible]
- 1: chequer (20)
- 2: cube (20)
- 3: combined (20)
- 4: chequer (100)
- 5: cube (100)
- 6: combined (100)
- 7: chequer (500)
- 8: cube (500)
- 9: combined (500)
- 10: chequer (total) [visible]
- 11: cube (total) [visible]
- 12: combined (total) [visible]
- 13: luck (20)
- 14: luck (100)
- 15: luck (500)
- 16: luck (total) [visible]
- 17: games [visible]
- 18: chequer rating
- 19: cube rating
- 20: combined rating
- 21: luck rating */
-
-extern void GTKRecordShow( FILE *pfIn, char *szFile, char *szPlayer ) {
-
- GtkWidget *pw = NULL, *pwList = NULL, *pwScrolled, *pwHbox, *pwVbox,
- *pwEraseAll;
- static int ay[ 22 ] = { 0, 3, 5, 7, 3, 5, 7, 3, 5, 7, 3, 5, 7, 9, 9, 9, 9,
- 1, 4, 6, 8, 10 };
- static int ax[ 22 ] = { 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 1, 2, 3, 4,
- 1, 1, 1, 1, 1 };
- static int axEnd[ 22 ] = { 5, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 2, 3, 4,
- 5, 5, 5, 5, 5, 5 };
- char *asz[ 22 ];
- char sz[ 16 ];
- int i, f = FALSE;
- playerrecord pr;
- recordwindowinfo rwi;
-
- while( !RecordReadItem( pfIn, szFile, &pr ) ) {
- if( !f ) {
- f = TRUE;
- pw = GTKCreateDialog( _("GNU Backgammon - Player records"), DT_INFO,
- NULL, DIALOG_FLAG_MODAL, NULL, NULL );
-
- for( i = 0; i < 22; i++ )
- asz[ i ] = "";
-
- rwi.pwList = pwList = gtk_clist_new_with_titles( 22, asz );
- gtk_clist_set_compare_func(
- GTK_CLIST( pwList ), (GtkCListCompareFunc) RecordRowCompare );
-
- for( i = 0; i < 22; i++ ) {
- gtk_clist_set_column_auto_resize( GTK_CLIST( pwList ), i,
- TRUE );
- gtk_clist_set_column_justification( GTK_CLIST( pwList ), i,
- i ? GTK_JUSTIFY_RIGHT :
- GTK_JUSTIFY_LEFT );
- gtk_clist_set_column_visibility( GTK_CLIST( pwList ), i,
- FALSE );
- }
-
- gtk_clist_set_column_title( GTK_CLIST( pwList ), 0, _("Name") );
- gtk_clist_set_column_visibility( GTK_CLIST( pwList ), 0, TRUE );
- gtk_clist_set_column_title( GTK_CLIST( pwList ), 10,
- _("Chequer") );
- gtk_clist_set_column_visibility( GTK_CLIST( pwList ), 10, TRUE );
- gtk_clist_set_column_title( GTK_CLIST( pwList ), 11, _("Cube") );
- gtk_clist_set_column_visibility( GTK_CLIST( pwList ), 11, TRUE );
- gtk_clist_set_column_title( GTK_CLIST( pwList ), 12,
- _("Overall") );
- gtk_clist_set_column_visibility( GTK_CLIST( pwList ), 12, TRUE );
- gtk_clist_set_column_title( GTK_CLIST( pwList ), 16, _("Luck") );
- gtk_clist_set_column_visibility( GTK_CLIST( pwList ), 16, TRUE );
- gtk_clist_set_column_title( GTK_CLIST( pwList ), 17, _("Games") );
- gtk_clist_set_column_visibility( GTK_CLIST( pwList ), 17, TRUE );
-
- gtk_clist_column_titles_passive( GTK_CLIST( pwList ) );
- g_signal_connect( G_OBJECT( pwList ), "select-row",
- G_CALLBACK( RecordSelect ), &rwi );
- g_signal_connect( G_OBJECT( pwList ), "unselect-row",
- G_CALLBACK( RecordUnselect ), &rwi );
- pwScrolled = gtk_scrolled_window_new( NULL, NULL );
- pwHbox = gtk_hbox_new( FALSE, 0 );
- pwVbox = gtk_vbox_new( FALSE, 0 );
- gtk_container_add( GTK_CONTAINER( DialogArea( pw, DA_MAIN ) ),
- pwHbox );
- gtk_container_add( GTK_CONTAINER( pwHbox ), pwScrolled );
- gtk_container_add( GTK_CONTAINER( pwScrolled ), pwList );
- gtk_container_add( GTK_CONTAINER( pwHbox ), pwVbox );
- rwi.pwTable = gtk_table_new( 11, 5, TRUE );
- gtk_table_attach_defaults( GTK_TABLE( rwi.pwTable ),
- gtk_label_new( _("Name:") ), 0, 1,
- 0, 1 );
- gtk_table_attach_defaults( GTK_TABLE( rwi.pwTable ),
- gtk_label_new( _("Games:") ), 0, 1,
- 1, 2 );
- gtk_table_attach_defaults( GTK_TABLE( rwi.pwTable ),
- gtk_label_new( _("Chequer:") ), 0, 1,
- 3, 5 );
- gtk_table_attach_defaults( GTK_TABLE( rwi.pwTable ),
- gtk_label_new( _("Cube:") ), 0, 1,
- 5, 7 );
- gtk_table_attach_defaults( GTK_TABLE( rwi.pwTable ),
- gtk_label_new( _("Overall:") ), 0, 1,
- 7, 9 );
- gtk_table_attach_defaults( GTK_TABLE( rwi.pwTable ),
- gtk_label_new( _("Luck:") ), 0, 1,
- 9, 11 );
- gtk_table_attach_defaults( GTK_TABLE( rwi.pwTable ),
- gtk_label_new( _("20") ), 1, 2,
- 2, 3 );
- gtk_table_attach_defaults( GTK_TABLE( rwi.pwTable ),
- gtk_label_new( _("100") ), 2, 3,
- 2, 3 );
- gtk_table_attach_defaults( GTK_TABLE( rwi.pwTable ),
- gtk_label_new( _("500") ), 3, 4,
- 2, 3 );
- gtk_table_attach_defaults( GTK_TABLE( rwi.pwTable ),
- gtk_label_new( _("Total") ), 4, 5,
- 2, 3 );
- for( i = 0; i < 22; i++ )
- gtk_table_attach_defaults( GTK_TABLE( rwi.pwTable ),
- rwi.apwStats[ i ] =
- gtk_label_new( NULL ),
- ax[ i ], axEnd[ i ],
- ay[ i ], ay[ i ] + 1 );
- gtk_container_add( GTK_CONTAINER( pwVbox ), rwi.pwTable );
- pwEraseAll = gtk_button_new_with_label( _("Erase All" ) );
- g_signal_connect( G_OBJECT( pwEraseAll ), "clicked",
- G_CALLBACK( RecordEraseAll ), &rwi );
- gtk_box_pack_start( GTK_BOX( pwVbox ), pwEraseAll, FALSE, FALSE,
- 0 );
- }
-
- i = gtk_clist_append( GTK_CLIST( pwList ), asz );
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 0, pr.szName );
-
- if( pr.cGames >= 20 )
- sprintf( sz, "%.4f", -pr.arErrorChequerplay[ EXPAVG_20 ] );
- else
- strcpy( sz, _("n/a") );
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 1, sz );
-
- if( pr.cGames >= 20 )
- sprintf( sz, "%.4f", -pr.arErrorCube[ EXPAVG_20 ] );
- else
- strcpy( sz, _("n/a") );
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 2, sz );
-
- if( pr.cGames >= 20 )
- sprintf( sz, "%.4f", -pr.arErrorCombined[ EXPAVG_20 ] );
- else
- strcpy( sz, _("n/a") );
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 3, sz );
-
- if( pr.cGames >= 100 )
- sprintf( sz, "%.4f", -pr.arErrorChequerplay[ EXPAVG_100 ] );
- else
- strcpy( sz, _("n/a") );
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 4, sz );
-
- if( pr.cGames >= 100 )
- sprintf( sz, "%.4f", -pr.arErrorCube[ EXPAVG_100 ] );
- else
- strcpy( sz, _("n/a") );
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 5, sz );
-
- if( pr.cGames >= 100 )
- sprintf( sz, "%.4f", -pr.arErrorCombined[ EXPAVG_100 ] );
- else
- strcpy( sz, _("n/a") );
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 6, sz );
-
- if( pr.cGames >= 500 )
- sprintf( sz, "%.4f", -pr.arErrorChequerplay[ EXPAVG_500 ] );
- else
- strcpy( sz, _("n/a") );
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 7, sz );
-
- if( pr.cGames >= 500 )
- sprintf( sz, "%.4f", -pr.arErrorCube[ EXPAVG_500 ] );
- else
- strcpy( sz, _("n/a") );
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 8, sz );
-
- if( pr.cGames >= 500 )
- sprintf( sz, "%.4f", -pr.arErrorCombined[ EXPAVG_500 ] );
- else
- strcpy( sz, _("n/a") );
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 9, sz );
-
- sprintf( sz, "%.4f", -pr.arErrorChequerplay[ EXPAVG_TOTAL ] );
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 10, sz );
-
- sprintf( sz, "%.4f", -pr.arErrorCube[ EXPAVG_TOTAL ] );
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 11, sz );
-
- sprintf( sz, "%.4f", -pr.arErrorCombined[ EXPAVG_TOTAL ] );
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 12, sz );
-
- if( pr.cGames >= 20 )
- sprintf( sz, "%.4f", pr.arLuck[ EXPAVG_20 ] );
- else
- strcpy( sz, _("n/a") );
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 13, sz );
-
- if( pr.cGames >= 100 )
- sprintf( sz, "%.4f", pr.arLuck[ EXPAVG_100 ] );
- else
- strcpy( sz, _("n/a") );
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 14, sz );
-
- if( pr.cGames >= 500 )
- sprintf( sz, "%.4f", pr.arLuck[ EXPAVG_500 ] );
- else
- strcpy( sz, _("n/a") );
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 15, sz );
-
- sprintf( sz, "%.4f", pr.arLuck[ EXPAVG_TOTAL ] );
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 16, sz );
-
- sprintf( sz, "%d", pr.cGames );
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 17, sz );
-
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 18,
- Q_ ( aszRating[ GetRating( (float)pr.arErrorChequerplay[
- EXPAVG_TOTAL ] ) ] ) );
-
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 19,
- Q_ ( aszRating[ GetRating( (float)pr.arErrorCube[
- EXPAVG_TOTAL ] ) ] ) );
-
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 20,
- Q_ ( aszRating[ GetRating( (float)pr.arErrorCombined[
- EXPAVG_TOTAL ] ) ] ) );
-
- gtk_clist_set_text( GTK_CLIST( pwList ), i, 21,
- Q_(aszLuckRating[ getLuckRating( (float)pr.arLuck[EXPAVG_TOTAL ] / 20 ) ]) );
-
- if( !CompareNames( pr.szName, szPlayer ) )
- gtk_clist_select_row( GTK_CLIST( pwList ), i, 0 );
- }
-
- if( ferror( pfIn ) )
- outputerr( szFile );
- else if( !f )
- outputl( _("No player records found.") );
-
- fclose( pfIn );
-
- if( f ) {
- gtk_clist_sort( GTK_CLIST( pwList ) );
-
- gtk_window_set_default_size( GTK_WINDOW( pw ), 600, 400 );
-
- GTKRunDialog(pw);
- }
-}
-
static void UpdateMatchinfo( const char *pch, const char *szParam, char **ppch ) {
- char *szCommand;
+ char *szCommand;
const char *pchOld = *ppch ? *ppch : "";
-
+
if( !strcmp( pch, pchOld ) )
/* no change */
return;
@@ -6962,14 +7260,14 @@ static void MatchInfoOK( GtkWidget *pw, int *pf )
GtkTextIter begin, end;
unsigned int nYear, nMonth, nDay;
char *pch;
-
+
outputpostpone();
UpdateMatchinfo( gtk_entry_get_text( GTK_ENTRY( apwRating[ 0 ] ) ),
"rating 0", &mi.pchRating[ 0 ] );
UpdateMatchinfo( gtk_entry_get_text( GTK_ENTRY( apwRating[ 1 ] ) ),
"rating 1", &mi.pchRating[ 1 ] );
-
+
gtk_calendar_get_date( GTK_CALENDAR( pwDate ), &nYear, &nMonth,
&nDay );
nMonth++;
@@ -6982,7 +7280,7 @@ static void MatchInfoOK( GtkWidget *pw, int *pf )
nDay );
UserCommand( sz );
}
-
+
UpdateMatchinfo( gtk_entry_get_text( GTK_ENTRY( pwEvent ) ),
"event", &mi.pchEvent );
UpdateMatchinfo( gtk_entry_get_text( GTK_ENTRY( pwRound ) ),
@@ -7016,7 +7314,7 @@ extern void GTKMatchInfo( void )
int fOK = FALSE;
GtkWidget *pwDialog, *pwTable, *pwComment;
char sz[ 128 ];
-
+
pwDialog = GTKCreateDialog( _("GNU Backgammon - Match information"),
DT_QUESTION, NULL, DIALOG_FLAG_MODAL, G_CALLBACK(MatchInfoOK), &fOK ),
@@ -7045,13 +7343,13 @@ extern void GTKMatchInfo( void )
gtk_entry_set_text( GTK_ENTRY( apwRating[ 0 ] ), mi.pchRating[ 0 ] );
gtk_table_attach_defaults( GTK_TABLE( pwTable ), apwRating[ 0 ], 1, 2,
0, 1 );
-
+
apwRating[ 1 ] = gtk_entry_new();
if( mi.pchRating[ 1 ] )
gtk_entry_set_text( GTK_ENTRY( apwRating[ 1 ] ), mi.pchRating[ 1 ] );
gtk_table_attach_defaults( GTK_TABLE( pwTable ), apwRating[ 1 ], 1, 2,
1, 2 );
-
+
pwDate = gtk_calendar_new();
if( mi.nYear ) {
gtk_calendar_select_month( GTK_CALENDAR( pwDate ), mi.nMonth - 1,
@@ -7065,22 +7363,22 @@ extern void GTKMatchInfo( void )
if( mi.pchEvent )
gtk_entry_set_text( GTK_ENTRY( pwEvent ), mi.pchEvent );
gtk_table_attach_defaults( GTK_TABLE( pwTable ), pwEvent, 1, 2, 3, 4 );
-
+
pwRound = gtk_entry_new();
if( mi.pchRound )
gtk_entry_set_text( GTK_ENTRY( pwRound ), mi.pchRound );
gtk_table_attach_defaults( GTK_TABLE( pwTable ), pwRound, 1, 2, 4, 5 );
-
+
pwPlace = gtk_entry_new();
if( mi.pchPlace )
gtk_entry_set_text( GTK_ENTRY( pwPlace ), mi.pchPlace );
gtk_table_attach_defaults( GTK_TABLE( pwTable ), pwPlace, 1, 2, 5, 6 );
-
+
pwAnnotator = gtk_entry_new();
if( mi.pchAnnotator )
gtk_entry_set_text( GTK_ENTRY( pwAnnotator ), mi.pchAnnotator );
gtk_table_attach_defaults( GTK_TABLE( pwTable ), pwAnnotator, 1, 2, 6, 7 );
-
+
pwComment = gtk_text_view_new() ;
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pwComment));
if( mi.pchComment ) {
@@ -7099,15 +7397,16 @@ static void CalibrationOK( GtkWidget *pw, GtkWidget *ppw ) {
char sz[ 128 ];
GtkAdjustment *padj = gtk_spin_button_get_adjustment(
GTK_SPIN_BUTTON( ppw ) );
-
- if( GTK_WIDGET_IS_SENSITIVE( ppw ) ) {
- if( padj->value != rEvalsPerSec ) {
- sprintf( sz, "set calibration %.0f", padj->value );
+
+ if( gtk_widget_is_sensitive( ppw ) ) {
+ if( gtk_adjustment_get_value( padj ) != rEvalsPerSec ) {
+ sprintf( sz, "set calibration %.0f", gtk_adjustment_get_value( padj ) );
UserCommand( sz );
}
} else if( rEvalsPerSec > 0 )
UserCommand( "set calibration" );
-
+
+ UserCommand("save settings");
gtk_widget_destroy( gtk_widget_get_toplevel( pw ) );
}
@@ -7123,7 +7422,7 @@ static void CalibrationGo( GtkWidget *pw, GtkWidget *apw[ 2 ] )
UserCommand( "calibrate" );
fInterrupt = FALSE;
-
+
if( rEvalsPerSec > 0 ) {
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( apw[ 0 ] ), TRUE );
gtk_adjustment_set_value( gtk_spin_button_get_adjustment(
@@ -7137,7 +7436,7 @@ extern void GTKShowCalibration( void )
GtkAdjustment *padj;
GtkWidget *pwDialog, *pwvbox, *pwhbox, *pwenable, *pwspin, *pwbutton,
*apw[ 2 ];
-
+
padj = GTK_ADJUSTMENT( gtk_adjustment_new( rEvalsPerSec > 0 ?
rEvalsPerSec : 10000,
2, G_MAXFLOAT, 100,
@@ -7156,10 +7455,10 @@ extern void GTKShowCalibration( void )
_("Speed recorded:") ) );
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( pwenable ),
rEvalsPerSec > 0 );
-
+
gtk_container_add( GTK_CONTAINER( pwhbox ), pwspin );
gtk_widget_set_sensitive( pwspin, rEvalsPerSec > 0 );
-
+
gtk_container_add( GTK_CONTAINER( pwhbox ), gtk_label_new(
_("static evaluations/second") ) );
@@ -7173,7 +7472,7 @@ extern void GTKShowCalibration( void )
g_signal_connect( G_OBJECT( pwenable ), "toggled",
G_CALLBACK( CalibrationEnable ), pwspin );
-
+
GTKRunDialog(pwDialog);
}
@@ -7187,7 +7486,7 @@ static gboolean CalibrationCancel( GtkObject *po, gpointer p ) {
extern void *GTKCalibrationStart( void ) {
GtkWidget *pwDialog, *pwhbox, *pwResult;
-
+
pwDialog = GTKCreateDialog( _("GNU Backgammon - Calibration"), DT_INFO,
NULL, DIALOG_FLAG_MODAL | DIALOG_FLAG_NOTIDY, G_CALLBACK( CalibrationCancel ), NULL );
gtk_container_add( GTK_CONTAINER( DialogArea( pwDialog, DA_MAIN ) ),
@@ -7199,19 +7498,19 @@ extern void *GTKCalibrationStart( void ) {
pwResult = gtk_label_new( _(" (n/a) ") ) );
gtk_container_add( GTK_CONTAINER( pwhbox ),
gtk_label_new( _("static evaluations/second") ) );
-
+
pwOldGrab = pwGrab;
pwGrab = pwDialog;
-
+
g_signal_connect( G_OBJECT( pwDialog ), "delete_event",
G_CALLBACK( CalibrationCancel ), NULL );
-
+
gtk_widget_show_all( pwDialog );
ProcessEvents();
- gtk_widget_ref( pwResult );
-
+ g_object_unref( pwResult );
+
return pwResult;
}
@@ -7221,14 +7520,14 @@ extern void GTKCalibrationUpdate( void *context, float rEvalsPerSec ) {
sprintf( sz, "%.0f", rEvalsPerSec );
gtk_label_set_text( GTK_LABEL( context ), sz );
-
+
ProcessEvents();
}
extern void GTKCalibrationEnd( void *context ) {
- gtk_widget_unref( GTK_WIDGET( context ) );
-
+ g_object_unref( GTK_WIDGET( context ) );
+
gtk_widget_destroy( gtk_widget_get_toplevel( GTK_WIDGET( context ) ) );
pwGrab = pwOldGrab;
@@ -7240,27 +7539,23 @@ static void CallbackResign(GtkWidget *pw, gpointer data)
const char *asz[3]= { "normal", "gammon", "backgammon" };
char sz[20];
+ ms.anDice[0] = ms.anDice[1] = 0;
sprintf(sz, "resign %s", asz[i]);
gtk_widget_destroy( gtk_widget_get_toplevel( pw ) );
UserCommand(sz);
return;
}
-
+
extern void GTKResign(gpointer p, guint n, GtkWidget * pw)
{
GtkWidget *pwDialog, *pwVbox, *pwHbox, *pwButtons;
int i;
- char **apXPM[3];
const char *asz[3] = { N_("Resign normal"),
N_("Resign gammon"),
N_("Resign backgammon")
};
-
-#include "xpm/resigns.xpm"
- apXPM[0] = resign_n_xpm;
- apXPM[1] = resign_g_xpm;
- apXPM[2] = resign_bg_xpm;
+ const char *resign_stocks[3] = {GNUBG_STOCK_RESIGNSN, GNUBG_STOCK_RESIGNSG, GNUBG_STOCK_RESIGNSB};
if (ap[ !ms.fTurn ].pt != PLAYER_HUMAN && check_resigns(NULL) != -1
&& GTKShowWarning(WARN_RESIGN, NULL))
@@ -7279,7 +7574,7 @@ extern void GTKResign(gpointer p, guint n, GtkWidget * pw)
pwButtons = gtk_button_new();
pwHbox = gtk_hbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(pwButtons), pwHbox);
- gtk_box_pack_start(GTK_BOX(pwHbox), image_from_xpm_d(apXPM[i], pwButtons), FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(pwHbox), gtk_image_new_from_stock(resign_stocks[i], GTK_ICON_SIZE_LARGE_TOOLBAR), FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(pwHbox), gtk_label_new(_(asz[i])), TRUE, TRUE, 10);
gtk_container_add(GTK_CONTAINER(pwVbox), pwButtons);
g_signal_connect(G_OBJECT(pwButtons), "clicked", G_CALLBACK(CallbackResign), GINT_TO_POINTER(i));