From 5e4fd3368e4d270161e1067afc3603845b081a40 Mon Sep 17 00:00:00 2001 From: ehouse Date: Mon, 5 Sep 2005 05:31:11 +0000 Subject: [PATCH] add role to newgame dialog --- xwords4/linux/gtknewgame.c | 40 ++++++++++++++++++++++++++++++++++++++ xwords4/linux/gtknewgame.h | 3 +++ 2 files changed, 43 insertions(+) diff --git a/xwords4/linux/gtknewgame.c b/xwords4/linux/gtknewgame.c index 1599153e2..55e02f523 100644 --- a/xwords4/linux/gtknewgame.c +++ b/xwords4/linux/gtknewgame.c @@ -83,6 +83,19 @@ nplayers_menu_select( GtkWidget* item, GtkNewGameState* state ) state->nPlayers = newNPlayers; } /* nplayers_menu_select */ +static void +role_menu_select( GtkWidget* item, GtkNewGameState* state ) +{ + int i; + for ( i = 0; i < 3; ++i ) { + if ( item == state->roleMenuItems[i] ) { + break; + } + } + XP_ASSERT( i < 3 ); /* did we not find it? */ + state->role = (Connectedness)i; +} /* role_menu_select */ + static void size_menu_select( GtkWidget* item, GtkNewGameState* state ) { @@ -210,17 +223,44 @@ makeNewGameDialog( GtkNewGameState* state ) GtkWidget* vbox; GtkWidget* hbox; GtkWidget* item; + GtkWidget* roleMenu; GtkWidget* nPlayersMenu; GtkWidget* boardSizeMenu; GtkWidget* opt; CurGameInfo* gi; short i; + char* roles[] = { "Standalone", "Host", "Guest" }; dialog = gtk_dialog_new(); gtk_window_set_modal( GTK_WINDOW( dialog ), TRUE ); vbox = gtk_vbox_new( FALSE, 0 ); + /* Role menu */ + state->role = state->globals->cGlobals.params->serverRole; + + hbox = gtk_hbox_new( FALSE, 0 ); + gtk_box_pack_start( GTK_BOX(hbox), gtk_label_new("Role:"), + FALSE, TRUE, 0 ); + opt = gtk_option_menu_new(); + roleMenu = gtk_menu_new(); + + for ( i = 0; i < sizeof(roles)/sizeof(roles[0]); ++i ) { + item = make_menu_item( roles[i], GTK_SIGNAL_FUNC(role_menu_select), + state ); + state->roleMenuItems[i] = item; + gtk_menu_append( GTK_MENU(roleMenu), item ); + if ( i == state->role ) { + gtk_menu_set_active( GTK_MENU(roleMenu), i ); + } + } + + gtk_option_menu_set_menu( GTK_OPTION_MENU(opt), roleMenu ); + gtk_widget_show( opt ); + gtk_box_pack_start( GTK_BOX(hbox), opt, FALSE, TRUE, 0 ); + gtk_box_pack_start( GTK_BOX(vbox), hbox, FALSE, TRUE, 0 ); + + /* NPlayers menu */ hbox = gtk_hbox_new( FALSE, 0 ); gtk_box_pack_start( GTK_BOX(hbox), gtk_label_new("Number of players"), FALSE, TRUE, 0 ); diff --git a/xwords4/linux/gtknewgame.h b/xwords4/linux/gtknewgame.h index a9df979bd..e4a4cb354 100644 --- a/xwords4/linux/gtknewgame.h +++ b/xwords4/linux/gtknewgame.h @@ -30,8 +30,11 @@ typedef struct GtkNewGameState { GtkWidget* playerEntries[MAX_NUM_PLAYERS]; gboolean revert; gboolean cancelled; + Connectedness role; short nPlayers; short nCols; + + GtkWidget* roleMenuItems[3]; } GtkNewGameState; gboolean newGameDialog( GtkAppGlobals* globals/* , GtkGameInfo* gameInfo */ );