static GtkWidget *build_roll_menu(void) { GtkWidget *menu; gint i; gchar buffer[128]; MapTheme *theme = theme_get_current(); THEME_COLOR tcolor; GdkColor *color; GtkWidget *item; GtkWidget *label; menu = gtk_menu_new(); for (i = 2; i <= 12; i++) { if (i == 7) continue; tcolor = (i == 6 || i == 8) ? TC_CHIP_H_FG : TC_CHIP_FG; color = &theme->colors[tcolor].color; sprintf(buffer, "<span foreground=\"#%04x%04x%04x\">%d</span>", color->red, color->green, color->blue, i); item = gtk_check_menu_item_new(); label = gtk_label_new(""); gtk_label_set_markup(GTK_LABEL(label), buffer); gtk_container_add(GTK_CONTAINER(item), label); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); g_signal_connect(G_OBJECT(item), "toggled", G_CALLBACK(select_roll_cb), GINT_TO_POINTER(i)); gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM (item), TRUE); roll_numbers[i] = item; } gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtk_separator_menu_item_new()); /* Menu item */ item = gtk_check_menu_item_new_with_label(_("Shuffle")); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); g_signal_connect(G_OBJECT(item), "toggled", G_CALLBACK(select_shuffle_cb), NULL); shuffle_tile = GTK_CHECK_MENU_ITEM(item); gtk_widget_show_all(menu); return menu; }
static GtkWidget *build_terrain_menu(void) { gint i; GtkWidget *menu; GtkWidget *item; GdkPixbuf *pixbuf; GtkWidget *image; gint width; gint height; MapTheme *theme = theme_get_current(); menu = gtk_menu_new(); for (i = 0; i <= LAST_TERRAIN; i++) { item = gtk_image_menu_item_new_with_mnemonic(gettext (terrain_names [i])); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(select_terrain_cb), GINT_TO_POINTER(i)); if (i == LAST_TERRAIN) continue; /* Use the default size, or smaller */ gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height); if (height > width / theme->scaledata[i].aspect) { height = width / theme->scaledata[i].aspect; } else if (width > height * theme->scaledata[i].aspect) { width = height * theme->scaledata[i].aspect; } pixbuf = gdk_pixbuf_scale_simple(theme-> scaledata[i].native_image, width, height, GDK_INTERP_BILINEAR); image = gtk_image_new_from_pixbuf(pixbuf); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image); } gtk_widget_show_all(menu); return menu; }
static void theme_change_cb(GtkWidget * widget, G_GNUC_UNUSED void *data) { gint index = gtk_combo_box_get_active(GTK_COMBO_BOX(widget)); MapTheme *theme = g_list_nth_data(theme_get_list(), index); if (theme != theme_get_current()) { config_set_string("settings/theme", theme->name); theme_set_current(theme); if (gmap->pixmap != NULL) { g_object_unref(gmap->pixmap); gmap->pixmap = NULL; } theme_rescale(2 * gmap->x_point); } }
static GtkWidget *build_port_menu(void) { gint i; GtkWidget *item; GdkPixmap *pixmap; GtkWidget *image; GtkWidget *menu; MapTheme *theme = theme_get_current(); menu = gtk_menu_new(); for (i = 0; i <= ANY_RESOURCE; i++) { item = gtk_image_menu_item_new_with_mnemonic(gettext (port_names[i])); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(select_port_resource_cb), GINT_TO_POINTER(i)); pixmap = theme->port_tiles[i]; if (i >= NO_RESOURCE || pixmap == NULL) continue; image = gtk_image_new_from_pixmap(pixmap, NULL); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image); } gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtk_separator_menu_item_new()); for (i = 0; i < 6; i++) { item = gtk_check_menu_item_new_with_label(Q_ (port_direction_names [i])); gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM (item), TRUE); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); g_signal_connect(G_OBJECT(item), "toggled", G_CALLBACK(select_port_direction_cb), GINT_TO_POINTER(i)); port_directions[i] = item; } gtk_widget_show_all(menu); return menu; }
static void preferences_cb(void) { GtkWidget *silent_mode_widget; GtkWidget *widget; GtkWidget *dlg_vbox; GtkWidget *theme_label; GtkWidget *theme_list; GtkWidget *layout; guint row; gint color_summary; GList *theme_elt; int i; if (preferences_dlg != NULL) { gtk_window_present(GTK_WINDOW(preferences_dlg)); return; }; /* Caption of preferences dialog */ preferences_dlg = gtk_dialog_new_with_buttons(_("" "Pioneers Preferences"), GTK_WINDOW (app_window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); gtk_dialog_set_default_response(GTK_DIALOG(preferences_dlg), GTK_RESPONSE_CLOSE); g_signal_connect(G_OBJECT(preferences_dlg), "destroy", G_CALLBACK(gtk_widget_destroyed), &preferences_dlg); g_signal_connect(G_OBJECT(preferences_dlg), "response", G_CALLBACK(gtk_widget_destroy), NULL); gtk_widget_show(preferences_dlg); dlg_vbox = GTK_DIALOG(preferences_dlg)->vbox; gtk_widget_show(dlg_vbox); layout = gtk_table_new(6, 2, FALSE); gtk_widget_show(layout); gtk_box_pack_start(GTK_BOX(dlg_vbox), layout, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(layout), 5); row = 0; theme_list = gtk_combo_box_new_text(); /* Label for changing the theme, in the preferences dialog */ theme_label = gtk_label_new(_("Theme:")); gtk_misc_set_alignment(GTK_MISC(theme_label), 0, 0.5); gtk_widget_show(theme_list); gtk_widget_show(theme_label); for (i = 0, theme_elt = theme_get_list(); theme_elt != NULL; ++i, theme_elt = g_list_next(theme_elt)) { MapTheme *theme = theme_elt->data; gtk_combo_box_append_text(GTK_COMBO_BOX(theme_list), theme->name); if (theme == theme_get_current()) gtk_combo_box_set_active(GTK_COMBO_BOX(theme_list), i); } g_signal_connect(G_OBJECT(theme_list), "changed", G_CALLBACK(theme_change_cb), NULL); gtk_table_attach_defaults(GTK_TABLE(layout), theme_label, 0, 1, row, row + 1); gtk_table_attach_defaults(GTK_TABLE(layout), theme_list, 1, 2, row, row + 1); gtk_widget_set_tooltip_text(theme_list, /* Tooltip for changing the theme in the preferences dialog */ _("Choose one of the themes")); row++; /* Label for the option to show the legend */ widget = gtk_check_button_new_with_label(_("Show legend")); gtk_widget_show(widget); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), legend_page_enabled); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(show_legend_cb), NULL); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); gtk_widget_set_tooltip_text(widget, /* Tooltip for the option to show the legend */ _("" "Show the legend as a page beside the map")); row++; /* Label for the option to display log messages in color */ widget = gtk_check_button_new_with_label(_("Messages with color")); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), color_messages_enabled); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(message_color_cb), NULL); gtk_widget_set_tooltip_text(widget, /* Tooltip for the option to display log messages in color */ _("Show new messages with color")); row++; widget = gtk_check_button_new_with_label( /* Label for the option to display chat in color of player */ _("" "Chat in color of player")); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), color_chat_enabled); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(chat_color_cb), NULL); gtk_widget_set_tooltip_text(widget, /* Tooltip for the option to display chat in color of player */ _("" "Show new chat messages in the color of the player")); row++; /* Label for the option to display the summary with colors */ widget = gtk_check_button_new_with_label(_("Summary with color")); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); color_summary = config_get_int_with_default("settings/color_summary", TRUE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), color_summary); /* @todo RC use correct variable */ g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(summary_color_cb), NULL); gtk_widget_set_tooltip_text(widget, /* Tooltip for the option to display the summary with colors */ _("Use colors in the player summary")); row++; widget = /* Label for the option to display keyboard accelerators in the toolbar */ gtk_check_button_new_with_label(_("Toolbar with shortcuts")); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), toolbar_show_accelerators); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(toolbar_shortcuts_cb), NULL); gtk_widget_set_tooltip_text(widget, /* Tooltip for the option to display keyboard accelerators in the toolbar */ _("" "Show keyboard shortcuts in the toolbar")); row++; silent_mode_widget = /* Label for the option to disable all sounds */ gtk_check_button_new_with_label(_("Silent mode")); gtk_widget_show(silent_mode_widget); gtk_table_attach_defaults(GTK_TABLE(layout), silent_mode_widget, 0, 2, row, row + 1); gtk_widget_set_tooltip_text(silent_mode_widget, /* Tooltip for the option to disable all sounds */ _("" "In silent mode no sounds are made")); row++; widget = /* Label for the option to announce when players/viewers enter */ gtk_check_button_new_with_label(_("Announce new players")); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), get_announce_player()); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(announce_player_cb), NULL); gtk_widget_set_tooltip_text(widget, /* Tooltip for the option to use sound when players/viewers enter */ _("" "Make a sound when a new player or viewer enters the game")); row++; /* Silent mode widget is connected an initialized after the announce button */ g_signal_connect(G_OBJECT(silent_mode_widget), "toggled", G_CALLBACK(silent_mode_cb), widget); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(silent_mode_widget), get_silent_mode()); /* Label for the option to use the 16:9 layout. */ widget = gtk_check_button_new_with_label(_("Use 16:9 layout")); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), get_16_9_layout()); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(toggle_16_9_cb), NULL); gtk_widget_set_tooltip_text(widget, /* Tooltip for 16:9 option. */ _("" "Use a 16:9 friendly layout for the window")); row++; }