/* create options window and fill it */ G_MODULE_EXPORT void on_options1_activate (GtkMenuItem *menuitem, gpointer user_data) { if (window_options) return; window_options = get_widget ("window_options"); gtk_widget_show (window_options); /* Tab 1: Card display */ GtkWidget *w = get_widget ("show_played_cards"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), win->show_played_cards); w = get_widget (win->hand_display_style == HAND_DISPLAY_STYLE_CARDS ? "show_as_cards" : "show_as_text"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), TRUE); w = get_widget ("svg_file"); if (win->svg) gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (w), win->svg); w = get_widget ("spinbutton_card_width"); GtkAdjustment *adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (w)); gtk_adjustment_configure (adj, win->card_width, 10, 10000, 10, 100, 0); /* Tab 2: Hands */ switch (win->show_hands) { case seat_none: /* not yet implemented - is this useful? */ w = get_widget ("show_hand_none"); break; case east_west: w = get_widget ("show_hand_ew"); break; case north_south: w = get_widget ("show_hand_ns"); break; default: w = get_widget ("show_hand_all"); } gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), TRUE); switch (win->show_dd_scores) { case seat_none: w = get_widget ("show_dd_none"); break; case east_west: w = get_widget ("show_dd_ew"); break; case north_south: w = get_widget ("show_dd_ns"); break; default: w = get_widget ("show_dd_all"); } gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), TRUE); /* Tab 3: Current board */ window_options_board_populate (); /* Tab 4: Board list */ if (! board_store) { board_store = gtk_list_store_new (2, G_TYPE_INT, G_TYPE_STRING); } w = get_widget ("board_list"); gtk_tree_view_set_model (GTK_TREE_VIEW (w), GTK_TREE_MODEL (board_store)); GtkCellRenderer *renderer; GtkTreeViewColumn *column; renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ( _("#"), renderer, "markup", 0, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (w), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ( _("Title"), renderer, "markup", 1, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (w), column); /* Tab 5: Generate */ w = get_widget ("options_generate_number"); adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (w)); gtk_adjustment_configure (adj, 1, 1, 10000, 1, 10, 0); window_options_board_list_populate (); }
void show_board (board *b, redraw_t redraw) { GtkWidget *w; GString *str = g_string_new(NULL); assert (b); if (redraw & REDRAW_BOARD_LIST) { board_window_rebuild_board_menu (win); window_options_board_list_populate (); } if (redraw & (REDRAW_TITLE | REDRAW_CONTRACT)) { g_string_printf(str, "Tenace - %s (%s)", b->name->str, contract_string_asc (b->level, b->trumps, b->declarer, b->doubled)); if (win->title) { g_string_append_printf (str, " - %s", win->title); if (win->subtitle) g_string_append_printf (str, " - %s", win->subtitle); if (win->team1 && win->team2) g_string_append_printf (str, _(" - %s vs. %s"), win->team1, win->team2); } else if (win->filename) { char *fname = win->filename; if (strrchr(fname, '/')) fname = strrchr(fname, '/') + 1; g_string_append_printf (str, " - %s", fname); } gtk_window_set_title(GTK_WINDOW(win->window), str->str); } if (redraw & REDRAW_CONTRACT) { w = get_widget ("label_board"); g_string_printf(str, "%s\n%s\n%s: %s\n%s: %s", b->name->str, contract_string(b->level, b->trumps, b->declarer, b->doubled), _("Dealer"), _(seat_str[b->dealer]), _("Vulnerable"), vuln_string(b)); gtk_label_set_text((GtkLabel*) w, str->str); char *dealermenu[] = { 0, "dealer_west1", "dealer_north1", "dealer_east1", "dealer_south1"}; w = get_widget (dealermenu[b->dealer]); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (w), TRUE); char *declarermenu[] = { 0, "declarer_west1", "declarer_north1", "declarer_east1", "declarer_south1"}; w = get_widget (declarermenu[b->declarer]); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (w), TRUE); char *levelmenu[] = { "level1" /* PASS */, "level1", "level2", "level3", "level4", "level5", "level6", "level7" }; w = get_widget (levelmenu[b->level]); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (w), TRUE); char *suitmenu[] = { "contract_clubs1", "contract_diamonds1", "contract_hearts1", "contract_spades1", "contract_no_trump1" }; w = get_widget (suitmenu[b->trumps]); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (w), TRUE); char *doublemenu[] = { "level_doubled0", "level_doubled1", "level_redoubled1" }; w = get_widget (doublemenu[b->doubled]); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (w), TRUE); char *vulnmenu[] = { "vuln_none", "vuln_ns", "vuln_ew", "vuln_all" }; w = get_widget (vulnmenu[2 * b->vuln[1] + b->vuln[0]]); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (w), TRUE); window_options_board_populate (); } if (redraw & REDRAW_NAMES) { w = get_widget ("label_west"); board_set_player_name (w, west, b->dealer == west, b->vuln[1], b->declarer == west, b->current_turn == west, b->hand_name[0]->str); w = get_widget ("label_north"); board_set_player_name (w, north, b->dealer == north, b->vuln[0], b->declarer == north, b->current_turn == north, b->hand_name[1]->str); w = get_widget ("label_east"); board_set_player_name (w, east, b->dealer == east, b->vuln[1], b->declarer == east, b->current_turn == east, b->hand_name[2]->str); w = get_widget ("label_south"); board_set_player_name (w, south, b->dealer == south, b->vuln[0], b->declarer == south, b->current_turn == south, b->hand_name[3]->str); window_options_board_populate (); } if (redraw & REDRAW_TRICKS) { w = get_widget ("label_tricks"); g_string_printf(str, _("NS: %d\nEW: %d"), b->tricks[0], b->tricks[1]); gtk_label_set_markup((GtkLabel*) w, str->str); } if (redraw & REDRAW_PAR) { w = get_widget ("par_label"); if (b->par_score == -1) { gtk_label_set_text (GTK_LABEL (w), ""); } else { char *par = par_label (b); gtk_label_set_markup(GTK_LABEL (w), par); free (par); } } if (redraw & REDRAW_HANDS) { int i, c; /* hands */ int next_card = b->played_cards[b->n_played_cards]; for (i = west; i <= south; i++) { for (c = 51; c >= 0; c--) { int has = i == b->cards[c]; int had = i == b->dealt_cards[c]; int color; if (seat_mask (i, win->show_hands)) color = has ? (c == next_card ? HAND_DISPLAY_HILIGHT_CARD : HAND_DISPLAY_CARD) : (had && win->show_played_cards ? HAND_DISPLAY_OLD_CARD : HAND_DISPLAY_NO_CARD); else color = HAND_DISPLAY_NO_CARD; hand_display_set_card (win->handdisp[i - 1], c, color); if (has && b->current_dd && b->current_dd->card_score[c] >= 0 && seat_mask (i, win->show_dd_scores)) hand_display_set_card_score (win->handdisp[i - 1], c, card_overtricks(b, c)); else hand_display_set_card_score (win->handdisp[i - 1], c, HAND_DISPLAY_NO_SCORE); } hand_display_set_card_score_neg (win->handdisp[i - 1], i % 2 != b->declarer % 2); hand_display_draw(GTK_WIDGET (win->handdisp[i - 1])); } /* table */ hand_display_table_reset_cards (win->table); if (b->n_played_cards) { int trick_start = b->n_played_cards - seat_mod(b->n_played_cards); for (i = trick_start; i < b->n_played_cards; i++) { card c = b->played_cards[i]; seat s = b->dealt_cards[c]; hand_display_table_set_card (win->table, i - trick_start, s, c); } } hand_display_draw(GTK_WIDGET (win->table)); line_entry_set_from_board(b); } g_string_free(str, TRUE); if (redraw & REDRAW_PLAY) window_play_update(b); if (redraw & REDRAW_BIDDING) { bidding_update (win, b, redraw & REDRAW_BIDDING_SCROLL); } }