Ejemplo n.º 1
0
/* 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 ();
}
Ejemplo n.º 2
0
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);
	}
}