GtkWidget *create_server_type_menu (int active_type, gboolean (*filterfunc)(enum server_type), GtkSignalFunc callback) { GtkWidget *option_menu = NULL; GtkWidget *menu = NULL; GtkWidget *menu_item = NULL; GtkWidget *first_menu_item = NULL; int i; int j = 0; int menu_type = 0; option_menu = gtk_option_menu_new (); menu = gtk_menu_new (); for (i = 0; i < GAMES_TOTAL; ++i) { if (filterfunc && !filterfunc (i)) continue; menu_item = gtk_menu_item_new (); if (i == active_type) { first_menu_item = menu_item; menu_type = j; } else if (!first_menu_item) first_menu_item = menu_item; gtk_menu_append (GTK_MENU (menu), menu_item); gtk_container_add (GTK_CONTAINER (menu_item), game_pixmap_with_label (i)); if (callback) gtk_signal_connect (GTK_OBJECT (menu_item), "activate", GTK_SIGNAL_FUNC (callback), GINT_TO_POINTER (i)); gtk_widget_show (menu_item); ++j; // must be here in case the continue was used } gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), menu); // initiates callback to set servertype to first configured game if (active_type != -1 && first_menu_item) { gtk_menu_item_activate (GTK_MENU_ITEM (first_menu_item)); gtk_option_menu_set_history (GTK_OPTION_MENU (option_menu), menu_type); } return option_menu; }
static GtkWidget *server_stats_page (void) { GtkWidget *page_vbox; GtkWidget *alignment; GtkWidget *table; GtkWidget *game_label; GtkWidget *scrollwin; int i; int row = 0; page_vbox = gtk_vbox_new (FALSE, 4); gtk_container_set_border_width (GTK_CONTAINER (page_vbox), 8); scrollwin = gtk_scrolled_window_new (NULL, NULL); gtk_box_pack_start (GTK_BOX (page_vbox), scrollwin, TRUE, TRUE, 0); alignment = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollwin), alignment); table = gtk_table_new (GAMES_TOTAL + 2, 7, FALSE); gtk_container_add (GTK_CONTAINER (alignment), table); gtk_container_set_border_width (GTK_CONTAINER (table), 6); gtk_table_set_row_spacings (GTK_TABLE (table), 4); gtk_table_set_col_spacings (GTK_TABLE (table), 8); gtk_table_set_col_spacing (GTK_TABLE (table), 0, 20); gtk_table_set_col_spacing (GTK_TABLE (table), 1, 20); gtk_table_set_col_spacing (GTK_TABLE (table), 5, 20); gtk_table_set_row_spacing (GTK_TABLE (table), 0, 12); gtk_table_set_row_spacing (GTK_TABLE (table), GAMES_TOTAL, 12); for (i = 0; i < 6; i++) put_label_to_table (table, _(srv_headers[i]), 1.0, i + 1, 0); for (i = 0, row = 1; i < GAMES_TOTAL; i++) { // Skip a game if it's not configured and show only configured is enabled if (!games[i].cmd && default_show_only_configured_games) continue; game_label = game_pixmap_with_label (i); gtk_table_attach_defaults (GTK_TABLE (table), game_label, 0, 1, row, row+1); put_server_stats (table, i, row); { srv_stats[GAMES_TOTAL].servers += srv_stats[i].servers; srv_stats[GAMES_TOTAL].ok += srv_stats[i].ok; srv_stats[GAMES_TOTAL].timeout += srv_stats[i].timeout; srv_stats[GAMES_TOTAL].down += srv_stats[i].down; srv_stats[GAMES_TOTAL].na += srv_stats[i].na; srv_stats[GAMES_TOTAL].players += srv_stats[i].players; } row++; } put_label_to_table (table, _("Total"), 0.0, 0, row + 1); put_server_stats (table, GAMES_TOTAL, row + 1); gtk_widget_show (table); gtk_widget_show (scrollwin); gtk_widget_show (alignment); gtk_widget_show (page_vbox); return page_vbox; }