DELTA 31194 3534 25
SVN  ƒ¨rƒ©H š{ €H ƒQ›!"window-close", _("Close"),
                        GTK_RESPONSE_CLOSE);ENDREP
DELTA 31194 4261 22
SVN  ôoõ
3 á ³ “Eá*"window-close", _("Close"),
                       ENDREP
DELTA 31194 4376 24
SVN  Ic ¾# € Â=¿"window-close", _("Close"),
                        GTK_RESPONSE_CLOSE);

  gui_dialog_add_button(pdialog->shell, "document-open",
ENDREP
DELTA 31219 0 29
SVN  ò(òE4 ïT ´ ‚=ïk "window-close", _("Close"),
                       ENDREP
DELTA 31194 4477 22
SVN  Å+Å` ³c € `´K "window-close", _("Close"),
                        GTK_RESPONSE_CLOSE);
  gui_dialog_add_button(pdialog->shell, NULL, _("_Launch"),
                       ENDREP
DELTA 4313 104917 2577
SVN  ±0´:>¨M …8 €†= V‹W€• G ® I¥@€„ Q®   I¥@€ƒy R­˜ I¥@€	 Q® ¦ I¥@€‚s
#ifdef HAVE_CONFIG_H
#include <fc_config.h>
#endif

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <gtk/gtk.h>

/* utility */
#include "fcintl.h"
#include "log.h"

/* common */
#include "game.h"
#include "player.h"

/* client */
#include "options.h"

/* client/gui-gtk-3.x */
#include "dialogs.h"
#include "gui_main.h"
#include "gui_stuff.h"
#include "mapview.h"

#include "finddlg.h"

static struct gui_dialog *find_dialog_shell;
static GtkWidget *find_view;

static void update_find_dialog(GtkListStore *store);

static void find_response(struct gui_dialog *dlg, int response, gpointer data);
static void find_destroy_callback(GtkWidget *w, gpointer data);
static void find_selection_callback(GtkTreeSelection *selection,
                                    GtkTreeModel *model);

static struct tile *posif (!find_dialog_shell) {
    GtkWidget         *label;
    GtkWidget         *sw;
    GtkListStore      *store;
    GtkTreeSelection  *selection;
    GtkCellRenderer   *renderer;
    GtkTreeViewColumn *column;

    pos = get_center_tile_mapcanvas();

    gui_dialog_new(&find_dialog_shell, GTK_NOTEBOOK(bottom_notebook), NULL,
                   TRUE);
    gui_dialog_set_title(find_dialog_shell, _("Find City"));
    gui_dialog_set_default_size(find_dialog_shell, -1, 240);

    gui_dialog_add_button(find_dialog_shell, "edit-find", _("Find"),
                          GTK_RESPONSE_ACCEPT);
    gui_dialog_add_button(find_dialog_shell, NULL, _("Cancel"),
                          GTK_RESPONSE_CANCEL);

    gui_dialog_set_default_response(find_dialog_shell, GTK_RESPONSE_ACCEPT);

    gui_dialog_response_set_callback(find_dialog_shell, find_response);

    g_signal_connect(find_dialog_shell->vbox, "destroy",
	G_CALLBACK(find_destroy_callback), NULL);

    store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_POINTER);
    gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store),
	0, GTK_SORT_ASCENDING);

    find_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(find_view));
    g_object_unref(store);
    gtk_tree_view_columns_autosize(GTK_TREE_VIEW(find_view));
    gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(find_view), FALSE);

    renderer = gtk_cell_renderer_text_new();
    column = gtk_tree_view_column_new_with_attributes(NULL, renderer,
	"text", 0, NULL);
    gtk_tree_view_column_set_sort_order(column, GTK_SORT_ASCENDING);
    gtk_tree_view_append_column(GTK_TREE_VIEW(find_view), column);

    sw = gtk_scrolled_window_new(NULL, NULL);
    g_object_set(sw, "margin", 2, NULL);
    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw),
	GTK_SHADOW_ETCHED_IN);
    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
	GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
    gtk_container_add(GTK_CONTAINER(sw), find_view);

    gtk_widget_set_hexpand(GTK_WIDGET(find_view), TRUE);
    gtk_widget_set_vexpand(GTK_WIDGET(find_view), TRUE);

    label = g_object_new(GTK_TYPE_LABEL,
	"use-underline", TRUE,
	"mnemonic-widget", find_view,
	"label", _("Ci_ties:"),
	"xalign", 0.0, "yalign", 0.5, NULL);
    gtk_container_add(GTK_CONTAINER(find_dialog_shell->vbox), label);
    gtk_container_add(GTK_CONTAINER(find_dialog_shell->vbox), sw);

    g_signal_connect(selection, "changed",
	G_CALLBACK(find_selection_callback), store);

    update_find_dialog(store);
    gtk_tree_view_focus(GTK_TREE_VIEW(find_view));

    gui_dialog_show_all(find_dialog_shell);
  }

  gui_dialog_raise(find_dialog_shell);
}



****
  Update find dialog with current cities
*/
static void update_find_dialog(GtkListStore *store)
{
  GtkTreeIter it;

  gtk_list_store_clear(store);

  players_iterate(pplayer) {
    city_list_iterate(pplayer->cities, pcity) {
	GValue value = { 0, };

	gtk_list_store_append(store, &it);

	g_value_init(&value, G_TYPE_STRING);
	g_value_set_static_string(&value, city_name(pcity));
	gtk_list_store_set_value(store, &it, 0, &value);
	g_value_unset(&value);

	gtk_list_store_set(store, &it, 1, pcity, -1);
    } city_list_iterate_end;
  } players_iterate_end  User responded to find dialog
*/
static void find_response(struct gui_dialog *dlg, int response, gpointer data)
{
  if (response == GTK_RESPONSE_ACCEPT) {
    GtkTreeSelection *selection;
    GtkTreeModel *model;
    GtkTreeIter it;

    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(find_view));

    if (gtk_tree_selection_get_selected(selection, &model, &it)) {
      struct city *pcity;

      gtk_tree_model_get(model, &it, 1, &pcity, -1);

      if (pcity) {
	pos = pcity->tile;
      }
    }
  }
  gui_dialog_destroy(dlg  Find dialog destroyed
*/
static void find_destroy_callback(GtkWidget *w, gpointer data)
{
  can_slide = FALSE;
  center_tile_mapcanvas(pos);
  can_slide = TRUE  User selected city from find dialog
*/
static void find_selection_callback(GtkTreeSelection *selection,
				    GtkTreeModel *model)
{
  GtkTreeIter it;
  struct city *pcity;

  if (!gtk_tree_selection_get_selected(selection, NULL, &it))
    return;

  gtk_tree_model_get(model, &it, 1, &pcity, -1);

  if (pcity) {
    can_slide = FALSE;
    center_tile_mapcanvas(pcity->tile);
    can_slide = TRUE;
  }
}
ENDREP
DELTA 31194 4680 25
SVN  ÓÒ1 ·  ˜4·!¯ fÐw° ¤Ó¯ Ûd÷;icon_label_button_new("document-new", _("Ne_w")icon_label_button_new("edit-delete", _("Delete")icon_label_button_new("help-browser", _("Help")ENDREP
DELTA 31219 56 26
SVN  ‚f‚–„P “)   Må@€‚s ¡J’D€= Ûv´preate new icon button with labelGtkWidget *icon_label_button_new(const gchar *icon_name,
                                 const gchar *label_text)
{
  GtkWidget *button;
  GtkWidget *image;

  button = gtk_button_new_with_mnemonic(label_text);

  if (icon_name != NULL) {
    image = gtk_image_new_from_icon_name(icon_name, GTK_ICON_SIZE_BUTTON);
    gtk_button_set_image(GTK_BUTTON(button), image);
  }                                 const char *icon_name,
                                 const char *text, int response)
{
  GtkWidget *button;

  button = icon_label_button_new(icon_name, ENDREP
DELTA 31194 0 22
SVN  º1º3Q ‘# €Q ¨?‘rNULL, _("OK"), GTK_RESPONSE_OK);
  gui_dialog_add_button(shell, NULL, _("Cancel")ENDREP
DELTA 31194 2880 62
SVN  †  †  (j ÖT ³ …‹Ö|€G œ;…â5¯ ~…ÿŸ W†=¢ œ$†ƒ9icon_label_button_new("application-exit", _("Exit")icon_label_button_new("preferences-system",
                           icon_label_button_new("document-properties",
  icon_label_button_new("zoom-in"icon_label_button_new("system-run"†  ‹jŒ#£ ‹j , GTK_ALIGN_CENTER);
  gtk_orientabENDREP
DELTA 15813 1586 43934
SVN  ƒO„šA†XƒÁD …X ” …}€‚u Š2¾ e‰[´ D¾>½ @£ €’ C¾?± C¿@€‚3 E‚“ ´ C¿@€„H E‚“ ¯ C¿@€„ E‚“ ¯ C¿@€„f E‚“ ¶ Iî@€„i °€^ ‚±P V³e¾ ^µm€… t·t E‚“ € D¿?€„; E‚“ ¤ C¿@€  ¼† c½$€‚ E‚“ €A C¿@€ˆd K‚’zµ C¿@€„T E‚“ ¥ D¿? #ì]€^ E‚“ Ÿ Pî9€‹ pS€‰v pS€„ E‚“ ¼ C¿@€… E‚“ ­ C¿@€q E‚“ ¼ C¿@€„h E‚“ © D¿?€Ÿm  ‚Ô€ƒl E‚“ £ D¿?€e E‚“ ² C¿@€ƒa K‚’z¡ Pî9€3 K‚’z¡ Pî9€ K‚’zµ C¿@€ L§|¹ @£ €„m C¾?µ C¿@€…j E‚“ » C¿@€„O E‚“ ¡ Pî9€™/ E‚“ ³ D¿?€¡A L‚’y¯ h¿€o E‚“ © D¿?€„) e‚Ó€h lûU€ ;‚X€ˆM t‚Š¤ D¿?€e E‚“ ² C¿@€u K‚’zŽ b¡€ K‚’z¡ Pî9€ L§|¼ @£ €X C¾?³ C¿@€‚' E‚“ ¥ D¿?€£z K‚’z¸ C¿@€ˆQ T‚’q» C¿@ K‚” €…W ^‚˜{¡ C¿@€† ‚Ÿ-€‚	 g‚¢%€Œ
 r‚¨e£ D¿?€„$ e‚Ó€f lûU€• q‚Š"¢ D¿?€a E‚“ ° C¿@€i K‚’zŽ aî(€) K‚’z• Zî/€ L§|º @£ €‚F C¾?» C¿@€‚3 E‚“ § ^‚Ã;€Ž0 E‚“ €A C¿@€‡ K‚’z¤ D¿?€‚C ‚k‚ÒT€ƒ E‚“ €H C¿@€dfc_config.h>
#endif
utility */
#include "fcintl.h"
#include "log.h"
#include "shared.h"
#include "support.h"

/* common */
#include "fc_types.h" /* LINE_BREAK */
#include "game.h"
#include "government.h"
#include "packets.h"
#include "research.h"
#include "tech.h"
#include "unitlist.h"

/* client */
#include "chatline_common.h"
#include "client_main.h"
#include "climisc.h"
#include "control/* client/gui-gtk-3.x */
#include "canvas.h"
#include "cityrepplrdlg.h"
#include "sprite.h"

#include "repodlgs.h"************
                         RESEARCH REPORT DIALOG
************/
struct science_report {
  struct gui_dialog *shell;
  GtkComboBox *reachable_techs;
  GtkComboBox *reachable_goals;
  GtkWidget *button_show_all;
  GtkLabel *main_label;         /* Gets science_dialog_text(). */
  GtkProgressBar *progress_bar;
  GtkLabel *goal_label;
  GtkLayout *drawing_area;
};

static GtkListStore *science_report_store_new(void);
static inline void science_report_store_set(GtkListStore *store,
                                            GtkTreeIter *iter,
                                            Tech_type_id tech);
static bool science_report_combo_get_active(GtkComboBox *combo,
                                            Tech_type_id *tech,
                                            const char **name);
static void science_report_combo_set_active(GtkComboBox *combo,
                                            Tech_type_id tech);
static gboolean science_diagram_button_release_callback(GtkWidget *widget,
    GdkEventButton *event, gpointer data);
static gboolean science_diagram_update(GtkWidget *widget,
                                       cairo_t *cr,
                                       gpointer data);
static GtkWidget *science_diagram_new(void);
static void science_diagram_data(GtkWidget *widget, bool show_all);
static void science_diagram_center(GtkWidget *diagram, Tech_type_id tech);
static void science_report_redraw(struct science_report *preport);
static gint cmp_func(gconstpointer a_p, gconstpointer b_p);
static void science_report_update(struct science_report *preport);
static void science_report_current_callback(GtkComboBox *combo,
                                            gpointer data);
static void science_report_show_all_callback(GtkComboBox *combo,
                                             gpointer data);
static void science_report_goal_callback(GtkComboBox *combo, gpointer data);
static void science_report_init(struct science_report *preport);
static void science_report_free(struct science_report *preport);

static struct science_report science_report = { NULL, };
static bool science_report_no_combo_callback = FALSE;

/* Those values must match the function science_report_store_new(). */
enum science_report_columns {
  SRD_COL_NAME,
  SRD_COL_STEPS,

  /* Not visible. */
  SRD_COL_ID,           /* Tech_type_id */

  SRD_COL_NUM
};************
  Create a science report list store***********/
static GtkListStore *science_report_store_new(void)
{
  return gtk_list_store_new(SRD_COL_NUM,
                            G_TYPE_STRING,      /* SRD_COL_NAME */
                            G_TYPE_INT,         /* SRD_COL_STEPS */
                            G_TYPE_INT);        /* SRD_COL_ID */************
  Append a technology to the list store***********/
static inline void science_report_store_set(GtkListStore *store,
                                            GtkTreeIter *iter,
                                            Tech_type_id tech)
{
  const struct research *presearch = research_get(client_player());

  gtk_list_store_set(store, iter,
                     SRD_COL_NAME,
                     research_advance_name_translation(presearch, tech),
                     SRD_COL_STEPS,
                     research_goal_unknown_techs(presearch, tech),
                     SRD_COL_ID, tech,
                     -1);************
  Get the active tech of the combo***********/
static bool science_report_combo_get_active(GtkComboBox *combo,
                                            Tech_type_id *tech,
                                            const char **name)
{
  GtkTreeIter iter;

  if (science_report_no_combo_callback
      || !gtk_combo_box_get_active_iter(combo, &iter)) {
    return FALSE;
  }

  gtk_tree_model_get(gtk_combo_box_get_model(combo), &iter,
                     SRD_COL_NAME, name,
                     SRD_COL_ID, tech,
                     -1);
  return TRUE;************
  Set the active tech of the combo***********/
static void science_report_combo_set_active(GtkComboBox *combo,
                                            Tech_type_id tech)
{
  ITree iter;
  Tech_type_id iter_tech;

  for (itree_begin(gtk_combo_box_get_model(combo), &iter);
       !itree_end(&iter); itree_next(&iter)) {
    itree_get(&iter, SRD_COL_ID, &iter_tech, -1);
    if (iter_tech == tech) {
      science_report_no_combo_callback = TRUE;
      gtk_combo_box_set_active_iter(combo, &iter.it);
      science_report_no_combo_callback = FALSE;
      return;
    }
  }
  log_error("%s(): Tech %d not found in the combo.", __FUNCTION__, tech);************
  Change tech goal, research or open help************/
static gboolean science_diagram_button_release_callback(GtkWidget *widget,
    GdkEventButton *event, gpointer data)
{
  const struct research *presearch = research_get(client_player());
  struct reqtree *reqtree = g_object_get_data(G_OBJECT(widget), "reqtree");
  Tech_type_id tech = get_tech_on_reqtree(reqtree, event->x, event->y);

  if (tech == A_NONE) {
    return TRUE;
  }

  if (event->button == 3) {
    /* RMB: get help */
    popup_help_dialog_typed(research_advance_name_translation(presearch,
                                                              tech),
                           research_invention_state(research_get(client_player()),
                                      
  return TRUE;gboolean science_diagram_update(GtkWidget *widget, cairo_t *crFC_STATIC_CANVAS_INIT;
  struct reqtree *reqtree = g_object_get_data(G_OBJECT(widget), "reqtree");
  int width, height;
  GtkAdjustment *hadjustment;
  GtkAdjustment *vadjustment;
  gint hadjustment_value;
  gint vadjustment_value;

  if (!tileset_is_fully_loaded()) {
    return TRUE;
  }

  hadjustment = gtk_scrollable_get_hadjustment(GTK_SCROLLABLE(widget));
  vadjustment = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(widget));

  hadjustment_value = (gint)gtk_adjustment_get_value(hadjustment);
  vadjustment_value = (gint)gtk_adjustment_get_value(vadjustment);

  cairo_translate(cr, -hadjustment_value, -vadjustment_value);

  canvas.drawable = cr
  return TRUE;************
  Return the drawing area widget of new technology diagram. Set in 'x' the
  position of the current tech to center to i***********/
static GtkWidget *science_diagram_new(void)
{
  GtkWidget *diagram;

  diagram = gtk_layout_new(NULL, NULL);
  gtk_widget_add_events(diagram,
                        GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
                        | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK);
  g_signal_connect(diagram, "draw",
                   G_CALLBACK(science_diagram_update), NULL);
  g_signal_connect(diagram, "button-release-event",
                   G_CALLBACK(science_diagram_button_release_callback),
                   NULL);

  return diagram;************
  Recreate the req tree***********/
static void science_diagram_data(GtkWidget *widget, bool show_all)
{
  struct reqtree *reqtree;
  int width, height, TRUE_player(), show_all);
  }

  get_reqtree_dimensions(reqtree, &width, &height);
  gtk_layout_set_size(GTK_LAYOUT(widget), width, height);
  g_object_set_data_full(G_OBJECT(widget), "reqtree", reqtree,
                         (GDestroyNotify) destroy_reqtree);************
  Set the diagram parent to point to 'tech' location***********/
static void science_diagram_center(GtkWidget *diagram, Tech_type_id tech)
{
  GtkScrolledWindow *sw = GTK_SCROLLED_WINDOW(gtk_widget_get_parent(diagram));
  struct reqtree *reqtree;
  int x, y, width, height;

  if (!GTK_IS_SCROLLED_WINDOW(sw)) {
    return;
  }

  reqtree = g_object_get_data(G_OBJECT(diagram), "reqtree");
  get_reqtree_dimensions(reqtree, &width, &height);
  if (find_tech_on_reqtree(reqtree, tech, &x, &y, NULL, NULL)) {
    GtkAdjustment *adjust = NULL;
    gdouble value;

    adjust = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(sw));
    value = (gtk_adjustment_get_lower(adjust)
      + gtk_adjustment_get_upper(adjust)
      - gtk_adjustment_get_page_size(adjust)) / width * x;
    gtk_adjustment_set_value(adjust, value);
    gtk_adjustment_value_changed(adjust);

    adjust = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(sw));
    value = (gtk_adjustment_get_lower(adjust)
      + gtk_adjustment_get_upper(adjust)
      - gtk_adjustment_get_page_size(adjust)) / height * y;
    gtk_adjustment_set_value(adjust, value);
    gtk_adjustment_value_changed(adjust************
  Resize and redraw the requirement tree***********/
static void science_report_redraw(struct science_report *preport)
{
  Tech_type_id researching;

  fc_assert_ret(NULL != preport);

  science_diagram_data(GTK_WIDGET(preport->drawing_area),
                       gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(
                         preport->button_show_all)));

  if (client_has_player()) {
    researching = research_get(client_player())->researching;
  } else {
    researching = A_UNSET;
  }
  science_diagram_center(GTK_WIDGET(preport->drawing_area), researching);

  gtk_widget_queue_draw(GTK_WIDGET(preport->drawing_area));************
  Utility for g_list_sor  const struct research *presearch = research_get(client_player());

  a_str = research_advance_name_translation(presearch, a);
  b_str = research_advance_name_translation(presearch, b);

  return fc_strcoll(a_str, b_str);************
  Update a science************/
static void science_report_update(struct science_report *preport)
{
  GtkListStore *store;
  GtkTreeIter iter;
  GList *sorting_list, *item;
  struct research *presearch = research_get(client_player());
  const char *text;
  double pct;
  Tech_type_id tech;

  fc_assert_ret(NULL != preport);
  fc_assert_ret(NULL != presearch);

  /* Disable callbacks. */
  science_report_no_combo_callback = TRUE;

  gtk_widget_queue_draw(GTK_WIDGET(preport->drawing_area));

  gtk_label_set_text(preport->main_label, science_dialog_text());

  /* Update the progress bar. */
  text = get_science_target_text(&pct);
  gtk_progress_bar_set_text(preport->progress_bar, text);
  gtk_progress_bar_set_fraction(preport->progress_bar, pct);
  /* Work around GTK+ refresh bug? */
  gtk_widget_queue_resize(GTK_WIDGET(preport->progress_bar));

  /* Update reachable techs. */
  store = GTK_LIST_STORE(gtk_combo_box_get_model(preport->reachable_techs));
  gtk_list_store_clear(store);
  sorting_list = NULL;
  if (A_UNSET == presearch->researching
      || is_future_tech(presearch->researching)) {
    gtk_list_store_append(store, &iter);
    science_report_store_set(store, &iter, presearch->researching);
    gtk_combo_box_set_active_iter(preport->reachable_techs, &iter);
  }

  /* Collect all techs which are reachable in the next step. */
  advance_index_iterate(A_FIRST, i) {
    if (TECH_PREREQS_KNOWN == presearch->inventions[i].state) {/* Sort the list, append it to the store. */
  sorting_list = g_list_sort(sorting_list, cmp_func);
  for (item = sorting_list; NULL != item; item = g_list_next(item)) {
    tech = GPOINTER_TO_INT(item->data);
    gtk_list_store_append(store, &iter);
    science_report_store_set(store, &iter, tech);
    if (tech == presearch->researching) {
      gtk_combo_box_set_active_iter(preport->reachable_techs, &iter);
    }
  }

  /* Free, re-init. */
  g_list_free(sorting_list);
  sorting_list = NULL;
  store = GTK_LIST_STORE(gtk_combo_box_get_model(preport->reachable_goals));
  gtk_list_store_clear(store);

  /* Update the tech goal. */
  gtk_label_set_text(preport->goal_label,
                     get_science_goal_text(presearch->tech_goal));

  if (A_UNSET == presearch->tech_goal) {
    gtk_list_store_append(store, &iter);
    science_report_store_set(store, &iter, A_UNSET);
    gtk_combo_box_set_active_iter(preport->reachable_goals, &iter);
  }

  /* Collect all techs which are reachable in next 10 steps. */
  advance_index_iterate(A_FIRST, i) {
    if (research_invention_reachable(presearch, i)
        && TECH_KNOWN != presearch->inventions[i].state
        && (i == presearch->tech_goal
            || 10 >= presearch->inventions[i].num_required_techs)) {/* Sort the list, append it to the store. */
  sorting_list = g_list_sort(sorting_list, cmp_func);
  for (item = sorting_list; NULL != item; item = g_list_next(item)) {
    tech = GPOINTER_TO_INT(item->data);
    gtk_list_store_append(store, &iter);
    science_report_store_set(store, &iter, tech);
    if (tech == presearch->tech_goal) {
      gtk_combo_box_set_active_iter(preport->reachable_goals, &iter);
    }
  }

  /* Free. */
  g_list_free(sorting_list);

  /* Re-enable callbacks. */
  science_report_no_combo_callback = FALSE;************
  Actived item in the reachable techs combo box***********/
static void science_report_current_callback(GtkComboBox *combo,
                                            gpointer data)
{
  Tech_type_id tech;
  const char *tech_name;

  if (!science_report_combo_get_active(combo, &tech, &tech_name)) {
    return;
  }

  if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data))) {
    popup_help_dialog_typed(tech_name, HELP_TECH);
  } else if (can_client_issue_orders()) {
    dsend_packet_player_research(&client.conn, tech);
  }
  /* Revert, or we will be not synchron with the server. */
  science_report_combo_set_active(combo, research_get
                                  (client_player())->researching);************
  Show or hide unreachable techs***********/
static void science_report_show_all_callback(GtkComboBox *combo,
                                             gpointer data)
{
  struct science_report *preport = (struct science_report *) data;

  science_report_redraw(preport);************
  Actived item in the reachable goals combo box***********/
static void science_report_goal_callback(GtkComboBox *combo, gpointer data)
{
  Tech_type_id tech;
  const char *tech_name;

  if (!science_report_combo_get_active(combo, &tech, &tech_name)) {
    return;
  }

  if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data))) {
    popup_help_dialog_typed(tech_name, HELP_TECH);
  } else if (can_client_issue_orders()) {
    dsend_packet_player_tech_goal(&client.conn, tech);
  }
  /* Revert, or we will be not synchron with the server. */
  science_report_combo_set_active(combo, research_get
                                  (client_player())->tech_goal);************
  Initialize a science repor***********/
static void science_report_init(struct science_report *preport)
{
  GtkWidget *frame, *table, *help_button, *show_all_button, *sw, *w;
  GtkSizeGroup *group;
  GtkContainer *vbox;
  GtkListStore *store;
  GtkCellRenderer *renderer;

  fc_assert_ret(NULL != preport);

  gui_dialog_new(&preport->shell, GTK_NOTEBOOK(top_notebook), NULL, TRUE);
  /* TRANS: Research report title */
  gui_dialog_set_title(preport->shell, _("Research"));

  gui_dialog_add_button(preport->shell, "window-close", _("Close"),
                        GTK_RESPONSE_CLOSE);
  gui_dialog_set_default_response(preport->shell, GTK_RESPONSE_CLOSE);

  vbox = GTK_CONTAINER(preport->shell->vbox);
  group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);

  w = gtk_label_new(NULL);
  gtk_container_add(vbox, w);
  preport->main_label = GTK_LABEL(w);

  /* Current research target line. */
  frame = gtk_frame_new(_("Researching"));
  gtk_container_add(vbox, frame);

  table = gtk_grid_new();
  gtk_grid_set_column_spacing(GTK_GRID(table), 4);
  gtk_container_add(GTK_CONTAINER(frame), table);

  help_button = gtk_check_button_new_with_label(_("Help"));
  gtk_grid_attach(GTK_GRID(table), help_button, 5, 0, 1, 1);

  store = science_report_store_new();
  w = gtk_combo_box_new_with_model(GTK_TREE_MODEL(store));
  gtk_size_group_add_widget(group, w);
  g_object_unref(G_OBJECT(store));
  renderer = gtk_cell_renderer_text_new();
  gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(w), renderer, TRUE);
  gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(w), renderer, "text",
                                 SRD_COL_NAME, NULL);
  gtk_widget_set_sensitive(w, can_client_issue_orders());
  g_signal_connect(w, "changed", G_CALLBACK(science_report_current_callback),
                   help_button);
  gtk_grid_attach(GTK_GRID(table), w, 0, 0, 1, 1);
  preport->reachable_techs = GTK_COMBO_BOX(w);

  w = gtk_progress_bar_new();
  gtk_widget_set_hexpand(w, TRUE);
  gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(w), TRUE);
  gtk_grid_attach(GTK_GRID(table), w, 2, 0, 1, 1);
  gtk_widget_set_size_request(w, -1, 25);
  preport->progress_bar = GTK_PROGRESS_BAR(w);

  /* Research goal line. */
  frame = gtk_frame_new( _("Goal"));
  gtk_container_add(vbox, frame);

  table = gtk_grid_new();
  gtk_grid_set_column_spacing(GTK_GRID(table), 4);
  gtk_container_add(GTK_CONTAINER(frame),table);

  store = science_report_store_new();
  w = gtk_combo_box_new_with_model(GTK_TREE_MODEL(store));
  gtk_size_group_add_widget(group, w);
  g_object_unref(G_OBJECT(store));
  renderer = gtk_cell_renderer_text_new();
  gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(w), renderer, TRUE);
  gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(w), renderer, "text",
                                 SRD_COL_NAME, NULL);
  renderer = gtk_cell_renderer_text_new();
  gtk_cell_layout_pack_end(GTK_CELL_LAYOUT(w), renderer, FALSE);
  gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(w), renderer, "text",
                                 SRD_COL_STEPS, NULL);
  gtk_widget_set_sensitive(w, can_client_issue_orders());
  g_signal_connect(w, "changed", G_CALLBACK(science_report_goal_callback),
                   help_button);
  gtk_grid_attach(GTK_GRID(table), w, 0, 0, 1, 1);
  preport->reachable_goals = GTK_COMBO_BOX(w);

  w = gtk_label_new(NULL);
  gtk_widget_set_hexpand(w, TRUE);
  gtk_grid_attach(GTK_GRID(table), w, 2, 0, 1, 1);
  gtk_widget_set_size_request(w, -1, 25);
  preport->goal_label = GTK_LABEL(w);

  /* Toggle "Show All" button. */
  /* TRANS: As in 'Show all (even not reachable) techs'. */
  show_all_button = gtk_toggle_button_new_with_label(_("Show all"));
  gtk_grid_attach(GTK_GRID(table), show_all_button, 5, 0, 1, 1);
  g_signal_connect(show_all_button, "toggled",
                   G_CALLBACK(science_report_show_all_callback), preport);
  gtk_widget_set_sensitive(show_all_button, can_client_issue_orders()
                                             && !client_is_global_observer());
  preport->button_show_all = show_all_button;

  /* Science diagram. */
  sw = gtk_scrolled_window_new(NULL, NULLUTOMATIC);
  gtk_container_add(vbox, sw);

  w = science_diagram_new();
  gtk_widget_set_hexpand(w, TRUE);
  gtk_widget_set_vexpand(w, TRUE);
  gtk_container_add(GTK_CONTAINER(sw), w);
  preport->drawing_area = GTK_LAYOUT(w);

  science_report_update(preport);
  gui_dialog_show_all(preport->shell);
  gtk_widget_queue_draw(GTK_WIDGET(preport->drawing_area));
  g_object_unref(group);

  /* This must be _after_ the dialog is drawn to really center it ... */
  science_report_redraw(preport);************
  Free a science repor***********/
static void science_report_free(struct science_report *preport)
{
  fc_assert_ret(NULL != preport);

  gui_dialog_destroy(preport->shell);
  fc_assert(NULL == preport->shell);

  memset(preport, 0, sizeof(*preport));************
  Create the science report is needed***********/
void science_report_dialog_popup(bool raise)
{
  struct research *presearch = research_get(client_player());

  if (NULL == science_report.shell) {
    science_report_init(&science_report);
  }

  if (NULL != presearch
      && A_UNSET == presearch->tech_goal
      && A_UNSET == presearch->researching) {
    gui_dialog_alert(science_report.shell);
  } else {
    gui_dialog_present(science_report.shell);
  }

  if (raise) {
    gui_dialog_raise(science_report.shell************
  Closes the science************/
void science_report_dialog_popdown(void)
{
  if (NULL != science_report.shell) {
    science_report_free(&science_report);
    fc_assert(NULL == science_report.shell************
  Update the science************/
void real_science_report_dialog_update(void)
{
  if (NULL != science_report.shell) {
    science_report_update(&science_report************
  Resize and redraw the requirement tree***********/
void science_report_dialog_redraw(void)
{
  if (NULL != science_report.shell) {
    science_report_redraw(&science_report************
                      ECONOMY REPORT DIALOG
************/
struct economy_report {
  struct gui_dialog *shell;
  GtkTreeView *tree_view;
  GtkLabel *label;
};

static struct economy_report economy_report = { NULL, NULL, NULL };

enum economy_report_response {
  ERD_RES_SELL_REDUNDANT = 1,
  ERD_RES_SELL_ALL,
  ERD_RES_DISBAND_UNITS
};

/* Those values must match the functions economy_report_store_new() and
 * economy_report_column_name(). */
enum economy_report_columns {
  ERD_COL_SPRITE,
  ERD_COL_NAME,
  ERD_COL_REDUNDANT,
  ERD_COL_COUNT,
  ERD_COL_COST,
  ERD_COL_TOTAL_COST,

  /* Not visible. */
  ERD_COL_IS_IMPROVEMENT,
  ERD_COL_CID,

  ERD_COL_NUM
};************
  Create a new economy report list store***********/
static GtkListStore *economy_report_store_new(void)
{
  return gtk_list_store_new(ERD_COL_NUM,
                            GDK_TYPE_PIXBUF,    /* ERD_COL_SPRITE */
                            G_TYPE_STRING,      /* ERD_COL_NAME */
                            G_TYPE_INT,         /* ERD_COL_REDUNDANT */
                            G_TYPE_INT,         /* ERD_COL_COUNT */
                            G_TYPE_INT,         /* ERD_COL_COST */
                            G_TYPE_INT,         /* ERD_COL_TOTAL_COST */
                            G_TYPE_BOOLEAN,     /* ERD_COL_IS_IMPROVEMENT */
                            G_TYPE_INT,         /* ERD_COL_UNI_KIND */
                            G_TYPE_INT);        /* ERD_COL_UNI_VALUE_ID */************
  Returns the title of the column (translated)***********/
static const char *
economy_report_column_name(enum economy_report_columns col)
{
  switch (col) {
  case ERD_COL_SPRITE:
    /* TRANS: Image header */
    return _("Type");
  case ERD_COL_NAME:
    return Q_("?Building or Unit type:Name");
  case ERD_COL_REDUNDANT:
    return _("Redundant");
  case ERD_COL_COUNT:
    return _("Count");
  case ERD_COL_COST:
    return _("Cost");
  case ERD_COL_TOTAL_COST:
    /* TRANS: Upkeep total, count*cost. */
    return _("U Total");
  case ERD_COL_IS_IMPROVEMENT:
  case ERD_COL_CID:
  case ERD_COL_NUM:
    break;
  }

  return NULL;************
  Update the economy************/
static void economy_report_update(struct economy_report *preport)
{
  GtkTreeSelection *selection;
  GtkTreeModel *model;
  GtkListStore *store;
  GtkTreeIter iter;
  GdkPixbuf *pix;
  struct improvement_entry building_entries[B_LAST];
  struct unit_entry unit_entries[U_LAST];
  int entries_used, building_total, unit_total, tax, i;
  char buf[256];
  cid selected;

  fc_assert_ret(NULL != preport);

  /* Save the selection. */
  selection = gtk_tree_view_get_selection(preport->tree_view);
  if (gtk_tree_selection_get_selected(selection, &model, &iter)) {
    gtk_tree_model_get(model, &iter, ERD_COL_CID, &selected, -1);
  } else {
    selected = -1;
  }

  model = gtk_tree_view_get_model(preport->tree_view);
  store = GTK_LIST_STORE(model);
  gtk_list_store_clear(store);

  /* Buildings. */
  get_economy_report_data(building_entries, &entries_used,
                          &building_total, &tax);
  for (i = 0; i < entries_used; i++) {
    struct improvement_entry *pentry = building_entries + i;
    struct impr_type *pimprove = pentry->type;
    struct sprite *sprite = get_building_sprite(tileset, pimprove);
    cid id = cid_encode_building(pimprove);

    pix = sprite_get_pixbuf(sprite);
    gtk_list_store_append(store, &iter);
    gtk_list_store_set(store, &iter,
                       ERD_COL_SPRITE, pix,
                       ERD_COL_NAME, improvement_name_translation(pimprove),
                       ERD_COL_REDUNDANT, pentry->redundant,
                       ERD_COL_COUNT, pentry->count,
                       ERD_COL_COST, pentry->cost,
                       ERD_COL_TOTAL_COST, pentry->total_cost,
                       ERD_COL_IS_IMPROVEMENT, TRUE,
                       ERD_COL_CID, id,
                       -1);
    g_object_unref(G_OBJECT(pix));
    if (selected == id) {
      /* Restore the selection. */
      gtk_tree_selection_select_iter(selection, &iter);
    }
  }

  /* Units. */
  get_economy_report_units_data(unit_entries, &entries_used, &unit_total);
  for (i = 0; i < entries_used; i++) {
    struct unit_entry *pentry = unit_entries + i;
    struct unit_type *putype = pentry->type;
    struct sprite *sprite = get_unittype_sprite(tileset, putype,
                                                direction8_invalid(), TRUE);
    cid id = cid_encode_unit(putype);

    pix = sprite_get_pixbuf(sprite);
    gtk_list_store_append(store, &iter);
    gtk_list_store_set(store, &iter,
                       ERD_COL_SPRITE, pix,
                       ERD_COL_NAME, utype_name_translation(putype),
                       ERD_COL_REDUNDANT, 0,
                       ERD_COL_COUNT, pentry->count,
                       ERD_COL_COST, pentry->cost,
                       ERD_COL_TOTAL_COST, pentry->total_cost,
                       ERD_COL_IS_IMPROVEMENT, FALSE,
                       ERD_COL_CID, id,
                       -1);
    g_object_unref(G_OBJECT(pix));
    if (selected == id) {
      /* Restore the selection. */
      gtk_tree_selection_select_iter(selection, &iter);
    }
  }

  /* Update the label. */
  fc_snprintf(buf, sizeof(buf), _("Income: %d    Total Costs: %d"),
              tax, building_total + unit_total);
  gtk_label_set_text(preport->label, buf);************
  Issue a command on the economy repor***********/
static void economy_report_command_callback(struct gui_dialog *pdialog,
                                            int response,
                                            gpointer data)
{
  struct economy_report *preport = data;
  GtkTreeSelection *selection = gtk_tree_view_get_selection(preport->tree_view);
  GtkTreeModel *model;
  GtkTreeIter iter;
  GtkWidget *shell;
  struct universal selected;
  cid id;
  char buf[256] = "";

  switch (response) {
  case ERD_RES_SELL_REDUNDANT:
  case ERD_RES_SELL_ALL:
  case ERD_RES_DISBAND_UNITS:
    break;
  default:
    gui_dialog_destroy(pdialog);
    return;
  }

  if (!can_client_issue_orders()
      || !gtk_tree_selection_get_selected(selection, &model, &iter)) {
    return;
  }

  gtk_tree_model_get(model, &iter, ERD_COL_CID, &id, -1);
  selected = cid_decode(id);

  switch (selected.kind) {
  case VUT_IMPROVEMENT:
    {
      struct impr_type *pimprove = selected.value.building;

      if (can_sell_building(pimprove)
          && (ERD_RES_SELL_ALL == response
              || (ERD_RES_SELL_REDUNDANT == response))) {
        bool redundant = (ERD_RES_SELL_REDUNDANT == response);
        gint count;
        gtk_tree_model_get(model, &iter,
                           redundant ? ERD_COL_REDUNDANT : ERD_COL_COUNT,
                           &count, -1);
        if (count == 0) {
          break;
        }
        shell = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL
                                       | GTK_DIALOG_DESTROY_WITH_PARENT,
                                       GTK_MESSAGE_QUESTION,
                                       GTK_BUTTONS_YES_NO,
                                       redundant
                                       /* TRANS: %s is an improvement */
                                       ? _("Do you really wish to sell "
                                           "every redundant %s (%d total)?")
                                       /* TRANS: %s is an improvement */
                                       : _("Do you really wish to sell "
                                           "every %s (%d total)?"),
                                       improvement_name_translation(pimprove),
                                       count);
        setup_dialog(shell, gui_dialog_get_toplevel(pdialog));
        gtk_window_set_title(GTK_WINDOW(shell), _("Sell Improvements"));

        if (GTK_RESPONSE_YES == gtk_dialog_run(GTK_DIALOG(shell))) {
          sell_all_improvements(pimprove, redundant, buf, sizeof(buf));
        }
        gtk_widget_destroy(shell);
      }
    }
    break;
  case VUT_UTYPE:
    {
      if (ERD_RES_DISBAND_UNITS == response) {
        struct unit_type *putype = selected.value.utype;
        gint count;
        gtk_tree_model_get(model, &iter, ERD_COL_COUNT, &count, -1);

        shell = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL
                                       | GTK_DIALOG_DESTROY_WITH_PARENT,
                                       GTK_MESSAGE_QUESTION,
                                       GTK_BUTTONS_YES_NO,
                                       /* TRANS: %s is a unit */
                                       _("Do you really wish to disband "
                                         "every %s (%d total)?"),
                                       utype_name_translation(putype),
                                       count);
        setup_dialog(shell, gui_dialog_get_toplevel(pdialog));
        gtk_window_set_title(GTK_WINDOW(shell), _("Disband Units"));

        if (GTK_RESPONSE_YES == gtk_dialog_run(GTK_DIALOG(shell))) {
          disband_all_units(putype, FALSE, buf, sizeof(buf));
        }
        gtk_widget_destroy(shell);
      }
    }
    break;
  default:
    log_error("Not supported type: %d.", selected.kind);
  }

  if ('\0' != buf[0]) {
    shell = gtk_message_dialog_new(NULL, GTK_DIALOG_DESTROY_WITH_PARENT,
                                   GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,
                                   "%s", buf);
    setup_dialog(shell, gui_dialog_get_toplevel(pdialog));
    g_signal_connect(shell, "response", G_CALLBACK(gtk_widget_destroy),
                     NULL);
    gtk_window_set_title(GTK_WINDOW(shell), _("Sell-Off: Results"));
    gtk_window_present(GTK_WINDOW(shell************
  Called when a building or a unit***********/
static void economy_report_selection_callback(GtkTreeSelection *selection,
                                              gpointer data)
{
  struct gui_dialog *pdialog = ((struct economy_report *)data)->shell;
  GtkTreeModel *model;
  GtkTreeIter iter;

  if (can_client_issue_orders()
      && gtk_tree_selection_get_selected(selection, &model, &iter)) {
    struct universal selected;
    cid id;

    gtk_tree_model_get(model, &iter, ERD_COL_CID, &id, -1);
    selected = cid_decode(id);
    switch (selected.kind) {
    case VUT_IMPROVEMENT:
      {
        bool can_sell = can_sell_building(selected.value.building);
        gint redundant;
        gtk_tree_model_get(model, &iter, ERD_COL_REDUNDANT, &redundant, -1);

        gui_dialog_set_response_sensitive(pdialog, ERD_RES_SELL_REDUNDANT,
                                          can_sell && redundant > 0);
        gui_dialog_set_response_sensitive(pdialog, ERD_RES_SELL_ALL, can_sell);
        gui_dialog_set_response_sensitive(pdialog, ERD_RES_DISBAND_UNITS,
                                          FALSE);
      }
      return;
    case VUT_UTYPE:
      gui_dialog_set_response_sensitive(pdialog, ERD_RES_SELL_REDUNDANT,
                                        FALSE);
      gui_dialog_set_response_sensitive(pdialog, ERD_RES_SELL_ALL, FALSE);
      gui_dialog_set_response_sensitive(pdialog, ERD_RES_DISBAND_UNITS,
                                        TRUE);
      return;
    default:
      log_error("Not supported type: %d.", selected.kind);
      break;
    }
  }

  gui_dialog_set_response_sensitive(pdialog, ERD_RES_SELL_REDUNDANT, FALSE);
  gui_dialog_set_response_sensitive(pdialog, ERD_RES_SELL_ALL, FALSE);
  gui_dialog_set_response_sensitive(pdialog, ERD_RES_DISBAND_UNITS, FALSE);************
  Create a new economy repor***********/
static void economy_report_init(struct economy_report *preport)
{
  GtkWidget *view, *sw, *label, *button;
  GtkListStore *store;
  GtkTreeSelection *selection;
  GtkContainer *vbox;
  const char *title;
  enum economy_report_columns i;

  fc_assert_ret(NULL != preport);

  gui_dialog_new(&preport->shell, GTK_NOTEBOOK(top_notebook), preport, TRUE);
  gui_dialog_set_title(preport->shell, _("Economy"));
  vbox = GTK_CONTAINER(preport->shell->vbox);

  sw = gtk_scrolled_window_new(NULL, NULL);
  gtk_widget_set_halign(sw, GTK_ALIGN_CENTERNEVER, GTK_POLICY_AUTOMATIC);
  gtk_container_add(GTK_CONTAINER(vbox), sw);

  store = economy_report_store_new();
  view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
  gtk_widget_set_vexpand(view, TRUE);
  g_object_unref(gtk_container_add(GTK_CONTAINER(sw), view);
  preport->tree_view = GTK_TREE_VIEW(view);

  selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
  g_signal_connect(selection, "changed",
                   G_CALLBACK(economy_report_selection_callback), preport);

  for (i = 0; (title = economy_report_column_name(i)); i++) {
    GtkCellRenderer *renderer;
    GtkTreeViewColumn *col;
    GType type = gtk_tree_model_get_column_type(GTK_TREE_MODEL(store), i);

    if (GDK_TYPE_PIXBUF == type) {
      renderer = gtk_cell_renderer_pixbuf_new();
      col = gtk_tree_view_column_new_with_attributes(title, renderer,
                                                     "pixbuf", i, NULL);
#if 0
    } else if (G_TYPE_BOOLEAN == type) {
      renderer = gtk_cell_renderer_toggle_new();
      col = gtk_tree_view_column_new_with_attributes(title, renderer,
                                                     "active", i, NULL);
#endif
    } else {
      bool is_redundant = (i == ERD_COL_REDUNDANT);
      renderer = gtk_cell_renderer_text_new();
      if (is_redundant) {
        /* Special treatment: hide "Redundant" column for units */
        col = gtk_tree_view_column_new_with_attributes(title, renderer,
                                                       "text", i,
                                                       "visible",
                                                       ERD_COL_IS_IMPROVEMENT,
                                                       NULL);
      } else {
        col = gtk_tree_view_column_new_with_attributes(title, renderer,
                                                       "text", i, NULL);
      }
    }

    if (i > 1
  label = gtk_label_new(NULL);
  gtk_container_add(vbox, label);
  gtk_misc_set_padding(GTK_MISC(label), 5, 5);
  preport->label = GTK_LABEL(label);

  gui_dialog_add_button(preport->shell, "window-close", _("Close"),
                        GTK_RESPONSE_CLOSE);

  button = gui_dialog_add_button(preport->shell, NULL, _("_Disband"),
                                 ERD_RES_DISBAND_UNITS);
  gtk_widget_set_sensitive(button, FALSE);

  button = gui_dialog_add_button(preport->shell, NULL, _("Sell _All"),
                                 ERD_RES_SELL_ALL);
  gtk_widget_set_sensitive(button, FALSE);

  button = gui_dialog_add_button(preport->shell, NULL, _("Sell _Redundant"),
                                 ERD_RES_SELL_REDUNDANT);
  gtk_widget_set_sensitive(button, FALSE);

  gui_dialog_set_default_response(preport->shell, GTK_RESPONSE_CLOSE);
  gui_dialog_response_set_callback(preport->shell,
                                   economy_report_command_callback);

  gui_dialog_set_default_size(preport->shell, -1, 350);
  gui_dialog_show_all(preport->shell);

  economy_report_update(preport************
  Free an economy repor***********/
static void economy_report_free(struct economy_report *preport)
{
  fc_assert_ret(NULL != preport);

  gui_dialog_destroy(preport->shell);
  fc_assert(NULL == preport->shell);

  memset(preport, 0, sizeof(*preport));************
  Create the economy report if needed***********/
void economy_report_dialog_popup(bool raise)
{
  if (NULL == economy_report.shell) {
    economy_report_init(&economy_report);
  }

  gui_dialog_present(economy_report.shell);
  if (raise) {
    gui_dialog_raise(economy_report.shell************
 ************/
void economy_report_dialog_popdown(void)
{
  if (NULL != economy_report.shell) {
    economy_report_free(&economy_report************
  Update the economy************/
void real_economy_report_dialog_update(void)
{
  if (NULL != economy_report.shell) {
    economy_report_update(&economy_report************
                           UNITS REPORT DIALOG
************/
struct units_report {
  struct gui_dialog *shell;
  GtkTreeView *tree_view;
};

static struct units_report units_report = { NULL, NULL };

enum units_report_response {
  URD_RES_NEAREST = 1,
  URD_RES_UPGRADE
};

/* Those values must match the order of unit_report_columns[]. */
enum units_report_columns {
  URD_COL_UTYPE_NAME,
  URD_COL_UPGRADABLE,
  URD_COL_N_UPGRADABLE,
  URD_COL_IN_PROGRESS,
  URD_COL_ACTIVE,
  URD_COL_SHIELD,
  URD_COL_FOOD,
  URD_COL_GOLD,

  /* Not visible. */
  URD_COL_TEXT_WEIGHT,
  URD_COL_UPG_VISIBLE,
  URD_COL_NUPG_VISIBLE,
  URD_COL_UTYPE_ID,

  URD_COL_NUM
};

static const struct {
  GType type;
  const char *title;
  const char *tooltip;
  bool rightalign;
  int visible_col;
} unit_report_columns[] = {
  { /* URD_COL_UTYPE_NAME */   G_TYPE_STRING,  N_("Unit Type"),
    NULL,                         FALSE,  -1 },
  { /* URD_COL_UPGRADABLE */   G_TYPE_BOOLEAN, N_("?Upgradable unit [short]:U"),
    N_("Upgradable"),             TRUE,   URD_COL_UPG_VISIBLE },
  { /* URD_COL_N_UPGRADABLE */ G_TYPE_INT,     "" /* merge with previous col */,
    NULL,                         TRUE,   URD_COL_NUPG_VISIBLE },
  /* TRANS: "In progress" abbreviation. */
  { /* URD_COL_IN_PROGRESS */  G_TYPE_INT,     N_("In-Prog"),
    N_("In progress"),            TRUE,   -1 },
  { /* URD_COL_ACTIVE */       G_TYPE_INT,     N_("Active"),
    NULL,                         TRUE,   -1 },
  { /* URD_COL_SHIELD */       G_TYPE_INT,     N_("Shield"),
    N_("Total shield upkeep"),    TRUE,   -1 },
  { /* URD_COL_FOOD */         G_TYPE_INT,     N_("Food"),
    N_("Total food upkeep"),      TRUE,   -1 },
  { /* URD_COL_GOLD */         G_TYPE_INT,     N_("Gold"),
    N_("Total gold upkeep"),      TRUE,   -1 },
  { /* URD_COL_TEXT_WEIGHT */  G_TYPE_INT,     NULL /* ... */ },
  { /* URD_COL_UPG_VISIBLE */  G_TYPE_BOOLEAN, NULL /* ... */ },
  { /* URD_COL_NUPG_VISIBLE */ G_TYPE_BOOLEAN, NULL /* ... */ },
  { /* URD_COL_UTYPE_ID */     G_TYPE_INT,     NULL /* ... */ }
};************
  Create a new units report list store***********/
static GtkListStore *units_report_store_new(void)
{
  int i;
  GType cols[URD_COL_NUM];
  fc_assert(ARRAY_SIZE(unit_report_columns) == URD_COL_NUM);

  for (i=0; i<URD_COL_NUM; i++) {
    cols[i] = unit_report_columns[i].type;
  }
  
  return gtk_list_store_newv(URD_COL_NUM, cols);************
  Update the units repor***********/
static void units_report_update(struct units_report *preport)
{
  struct urd_info {
    int active_count;
    int building_count;
    int upkeep[O_LAST];
  };

  struct urd_info unit_array[utype_count()];
  struct urd_info unit_totals;
  struct urd_info *info;
  int total_upgradable_count = 0;
  GtkTreeSelection *selection;
  GtkTreeModel *model;
  GtkListStore *store;
  GtkTreeIter iter;
  Unit_type_id selected, utype_id;

  fc_assert_ret(NULL != preport);

  memset(unit_array, '\0', sizeof(unit_array));
  memset(&unit_totals, '\0', sizeof(unit_totals));

  /* Count units. */
  players_iterate(pplayer) {
    if (client_has_player() && pplayer != client_player()) {
      continue;
    }

    unit_list_iterate(pplayer->units, punit) {
      info = unit_array + utype_index(unit_type_get(punit));

      if (0 != punit->homecity) {
        output_type_iterate(o) {
          info->upkeep[o] += punit->upkeep[o];
        } output_type_iterate_end;
      }
      info->active_count++;
    } unit_list_iterate_end;
    city_list_iterate(pplayer->cities, pcity) {
      if (VUT_UTYPE == pcity->production.kind) {
        int num_units;
        info = unit_array + utype_index(pcity->production.value.utype);
        /* Account for build slots in city */
        (void) city_production_build_units(pcity, TRUE, &num_units);
        /* Unit is in progress even if it won't be done this turn */
        num_units = MAX(num_units, 1);
        info->building_count += num_units;
      }
    } city_list_iterate_end;
  } players_iterate_end;

  /* Save selection. */
  selection = gtk_tree_view_get_selection(preport->tree_view);
  if (gtk_tree_selection_get_selected(selection, &model, &iter)) {
    gtk_tree_model_get(model, &iter, URD_COL_UTYPE_ID, &selected, -1);
  } else {
    selected = -1;
  }

  /* Make the store. */
  model = gtk_tree_view_get_model(preport->tree_view);
  store = GTK_LIST_STORE(model);
  gtk_list_store_clear(store);

  unit_type_iterate(utype) {
    bool upgradable;

    utype_id = utype_index(utype);
    info = unit_array + utype_id;

    if (0 == info->active_count && 0 == info->building_count) {
      continue;         /* We don't need a row for this type. */
    }

    upgradable = client_has_player()
                 && NULL != can_upgrade_unittype(client_player(), utype);
    
    gtk_list_store_append(store, &iter);
    gtk_list_store_set(store, &iter,
                       URD_COL_UTYPE_NAME, utype_name_translation(utype),
                       URD_COL_UPGRADABLE, upgradable,
                       URD_COL_N_UPGRADABLE, 0, /* never displayed */
                       URD_COL_IN_PROGRESS, info->building_count,
                       URD_COL_ACTIVE, info->active_count,
                       URD_COL_SHIELD, info->upkeep[O_SHIELD],
                       URD_COL_FOOD, info->upkeep[O_FOOD],
                       URD_COL_GOLD, info->upkeep[O_GOLD],
                       URD_COL_TEXT_WEIGHT, PANGO_WEIGHT_NORMAL,
                       URD_COL_UPG_VISIBLE, TRUE,
                       URD_COL_NUPG_VISIBLE, FALSE,
                       URD_COL_UTYPE_ID, utype_id,
                       -1);
    if (selected == utype_id) {
      /* Restore the selection. */
      gtk_tree_selection_select_iter(selection, &iter);
    }

    /* Update totals. */
    unit_totals.active_count += info->active_count;
    output_type_iterate(o) {
      unit_totals.upkeep[o] += info->upkeep[o];
    } output_type_iterate_end;
    unit_totals.building_count += info->building_count;
    if (upgradable) {
      total_upgradable_count += info->active_count;
    }
  } unit_type_iterate_end;

  /* Add the total row. */
  gtk_list_store_append(store, &iter);
  gtk_list_store_set(store, &iter,
                     URD_COL_UTYPE_NAME, _("Totals:"),
                     URD_COL_UPGRADABLE, FALSE, /* never displayed */
                     URD_COL_N_UPGRADABLE, total_upgradable_count,
                     URD_COL_IN_PROGRESS, unit_totals.building_count,
                     URD_COL_ACTIVE, unit_totals.active_count,
                     URD_COL_SHIELD, unit_totals.upkeep[O_SHIELD],
                     URD_COL_FOOD, unit_totals.upkeep[O_FOOD],
                     URD_COL_GOLD, unit_totals.upkeep[O_GOLD],
                     URD_COL_TEXT_WEIGHT, PANGO_WEIGHT_BOLD,
                     URD_COL_UPG_VISIBLE, FALSE,
                     URD_COL_NUPG_VISIBLE, TRUE,
                     URD_COL_UTYPE_ID, U_LAST,
                     -1);
  if (selected == U_LAST) {
    /* Restore the selection. */
    gtk_tree_selection_select_iter(selection, &iter************
  GtkTreeSelection "changed" signal handler***********/
static void units_report_selection_callback(GtkTreeSelection *selection,
                                            gpointer data)
{
  struct units_report *preport = data;
  GtkTreeModel *model;
  GtkTreeIter it;
  int active_count;
  struct unit_type *utype = NULL;

  if (gtk_tree_selection_get_selected(selection, &model, &it)) {
    int ut;

    gtk_tree_model_get(model, &it,
                       URD_COL_ACTIVE, &active_count,
                       URD_COL_UTYPE_ID, &ut,
                       -1);
    if (0 < active_count) {
      utype = utype_by_number(ut);
    }
  }

  if (NULL == utype) {
    gui_dialog_set_response_sensitive(preport->shell, URD_RES_NEAREST,
                                      FALSE);
    gui_dialog_set_response_sensitive(preport->shell, URD_RES_UPGRADE,
                                      FALSE);
  } else {
    gui_dialog_set_response_sensitive(preport->shell, URD_RES_NEAREST, TRUE);
    gui_dialog_set_response_sensitive(preport->shell, URD_RES_UPGRADE,
        (can_client_issue_orders()
         && NULL != can_upgrade_unittype(client_player()************
  Returns the nearest unit of the type 'utype'utype,
                                      struct tile *ptile)
{
  struct unit *best_candidate = NULL;
  int best_dist = FC_INFINITY, dist;

  players_iterate(pplayer) {
    if (client_has_player() && pplayer != client_player()) {
      continue;
    }

    unit_list_iterate(pplayer->units, punit) {
      if (utype == unit_type_get(punit)
          && FOCUS_AVAIL == punit->client.focus_status
          && 0 < punit->moves_left
          && !punit->done_moving
          && !punit->ai_controlled) {
        dist = sq_map_distance(unit_tile(punit), ptile);
        if (dist < best_dist) {
          best_candidate = punit;
          best_dist = dist;
        }
      }
    } unit_list_iterate_end;
  } players_iterate_end;
************
  Gui dialog handler***********/
static void units_report_command_callback(struct gui_dialog *pdialog,
                                          int response,
                                          gpointer data)
{
  struct units_report *preport = data;
  struct unit_type *utype = NULL;
  GtkTreeSelection *selection;
  GtkTreeModel *model;
  GtkTreeIter it;

  switch (response) {
  case URD_RES_NEAREST:
  case URD_RES_UPGRADE:
    break;
  default:
    gui_dialog_destroy(pdialog);
    return;
  }

  /* Nearest & upgrade commands. */
  selection = gtk_tree_view_get_selection(preport->tree_view);
  if (gtk_tree_selection_get_selected(selection, &model, &it)) {
    int ut;

    gtk_tree_model_get(model, &it, URD_COL_UTYPE_ID, &ut, -1);
    utype = utype_by_number(ut);
  }

  if (response == URD_RE, ptile))) {
      center_tile_mapcanvas(unit_tile(punit));

      if (ACTIVITY_IDLE == punit->activity
          || ACTIVITY_SENTRY == punit->activity) {
        if (can_unit_do_activity(punit, ACTIVITY_IDLE)) {
          unit_focus_set_and_select(punit);
        pgrade = can_upgrade_unittype(client_player(), utype);
    char buf[1024];
    int price = unit_upgrade_price(client_player(), utype, upgrade);

    fc_snprintf(buf, ARRAY_SIZE(buf), PL_("Treasury contains %d gold.",
                                          "Treasury contains %d gold.",
                                          client_player()->economic.gold),
                client_player()->economic.gold);

    shell = gtk_message_dialog_new(NULL,
                                   GTK_DIALOG_MODAL
                                   | GTK_DIALOG_DESTROY_WITH_PARENT,
                                   GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO,
                                   /* TRANS: Last %s is pre-pluralised
                                    * "Treasury contains %d gold." */
                                   PL_("Upgrade as many %s to %s as possible "
                                       "for %d gold each?\n%s",
                                       "Upgrade as many %s to %s as possible "
                                       "for %d gold each?\n%s", price),
                                   utype_name_translation(utype),
                                   utype_name_translation(upgrade),
                                   price, buf);
    setup_dialog(shell, gui_dialog_get_toplevel(preport->shell));

    gtk_window_set_title(GTK_WINDOW(shell), _("Upgrade Obsolete Units"));

    if (GTK_RESPONSE_YES == gtk_dialog_run(GTK_DIALOG(shell))) {
      dsend_packet_unit_type_upgrade(&client.conn, utype_number(utype************
  Create a units repor***********/
static void units_report_init(struct units_report *preport)
{
  GtkWidget *view, *sw, *button;
  GtkListStore *store;
  GtkTreeSelection *selection;
  GtkContainer *vbox;
  GtkTreeViewColumn *col = NULL;
  enum units_report_columns i;

  fc_assert_ret(NULL != preport);

  gui_dialog_new(&preport->shell, GTK_NOTEBOOK(top_notebook), preport, TRUE);
  gui_dialog_set_title(preport->shell, _("Units"));
  vbox = GTK_CONTAINER(preport->shell->vbox);

  sw = gtk_scrolled_window_new(NULL,NULL);
  gtk_widget_set_halign(sw, GTK_ALIGN_CENTERNEVER, GTK_POLICY_AUTOMATIC);
  gtk_container_add(GTK_CONTAINER(vbox), sw);

  store = units_report_store_new();
  view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
  gtk_widget_set_vexpand(view, TRUE);
  g_object_unref(gtk_container_add(GTK_CONTAINER(sw), view);
  preport->tree_view = GTK_TREE_VIEW(view);

  selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
  g_signal_connect(selection, "changed",
                   G_CALLBACK(units_report_selection_callback), preport);

  for (i = 0; unit_report_columns[i].title != NULL; i++) {
    GtkCellRenderer *renderer;

    if (strlen(unit_report_columns[i].title) > 0) {
      GtkWidget *header = gtk_label_new(Q_(unit_report_columns[i].title));
      if (unit_report_columns[i].tooltip) {
        gtk_widget_set_tooltip_text(header,
                                    Q_(unit_report_columns[i].tooltip));
      }
      gtk_widget_show(header);
      col = gtk_tree_view_column_new();
      gtk_tree_view_column_set_widget(col, header);
      if (unit_report_columns[i].rightalign) {
        gtk_tree_view_column_set_alignment(col, 1.0);
      }
      gtk_tree_view_append_column(GTK_TREE_VIEW(view), col);
    } /* else add new renderer to previous TreeViewColumn */

    fc_assert(col != NULL);
    if (G_TYPE_BOOLEAN == unit_report_columns[i].type) {
      renderer = gtk_cell_renderer_toggle_new();
      gtk_tree_view_column_pack_start(col, renderer, FALSE);
      gtk_tree_view_column_add_attribute(col, renderer, "active", i);
    } else {
      renderer = gtk_cell_renderer_text_new();
      gtk_tree_view_column_pack_start(col, renderer, TRUE);
      gtk_tree_view_column_add_attribute(col, renderer, "text", i);
      gtk_tree_view_column_add_attribute(col, renderer,
                                         "weight", URD_COL_TEXT_WEIGHT);
    }

    if (unit_report_columns[i].visible_col >= 0) {
      gtk_tree_view_column_add_attribute(col, renderer, "visible",
                                         unit_report_columns[i].visible_col);
    }

    if (unit_report_columns[i].rightalign) {
      g_object_set(G_OBJECT(renderer), "xalign", 1.0, NULL);
    }
  }

  gui_dialog_add_button(preport->shell, "window-close", _("Close"),
                        GTK_RESPONSE_CLOSE);

  button = gui_dialog_add_button(preport->shell, NULL, _("_Upgrade"),
                                 URD_RES_UPGRADE);
  gtk_widget_set_sensitive(button, FALSE);

  button = gui_dialog_add_stockbutton(preport->shell, GTK_STOCK_FIND,
                                      _("Find _Nearest"), URD_RES_NEAREST);
  gtk_widget_set_sensitive(button, FALSE);

  gui_dialog_set_default_response(preport->shell, GTK_RESPONSE_CLOSE);
  gui_dialog_response_set_callback(preport->shell,
                                   units_report_command_callback);

  gui_dialog_set_default_size(preport->shell, -1, 350);
  gui_dialog_show_all(preport->shell);

  units_report_update(preport);************
  Free an units repor***********/
static void units_report_free(struct units_report *preport)
{
  fc_assert_ret(NULL != preport);

  gui_dialog_destroy(preport->shell);
  fc_assert(NULL == preport->shell);

  memset(preport, 0, sizeof(*preport));************
  Create the units report if needed***********/
void units_report_dialog_popup(bool raise)
{
  if (NULL == units_report.shell) {
    units_report_init(&units_report);
  }

  gui_dialog_present(units_report.shell);
  if (raise) {
    gui_dialog_raise(units_report.shell************
 ************/
void units_report_dialog_popdown(void)
{
  if (NULL != units_report.shell) {
    units_report_free(&units_report);
    fc_assert(NULL == units_report.shell************
  Update************/
void real_units_report_dialog_update(void)
{
  if (NULL != units_report.shell) {
    units_report_update(&units_report************
                         FINAL REPORT DIALOG
************/
struct endgame_report {
  struct gui_dialog *shell;
  GtkTreeView *tree_view;
  GtkListStore *store;
  int player_count;
  int players_received;
};

enum endgame_report_columns {
  FRD_COL_PLAYER,
  FRD_COL_NATION,
  FRD_COL_SCORE,

  FRD_COL_NUM
};

static struct endgame_report endgame_report = { NULL, NULL };************
  Returns the title of the column (translated)***********/
static const char *
endgame_report_column_name(enum endgame_report_columns col)
{
  switch (col) {
  case FRD_COL_PLAYER:
    return _("Player\n");
  case FRD_COL_NATION:
    return _("Nation\n");
  case FRD_COL_SCORE:
    return _("Score\n");
  case FRD_COL_NUM:
    break;
  }

  return NULL;************
  Fill a final report with***********/
static void endgame_report_update(struct endgame_report *preport,
                                  const struct packet_endgame_report *packet)
{
  const size_t col_num = packet->category_num + FRD_COL_NUM;
  GType col_types[col_num];
  GtkListStore *store;
  GtkTreeViewColumn *col;
  int i;

  fc_assert_ret(NULL != preport);

  /* Remove the old columns. */
  while ((col = gtk_tree_view_get_column(preport->tree_view, 0))) {
    gtk_tree_view_remove_column(preport->tree_view, col);
  }

  /* Create the new model. */
  col_types[FRD_COL_PLAYER] = G_TYPE_STRING;
  col_types[FRD_COL_NATION] = GDK_TYPE_PIXBUF;
  col_types[FRD_COL_SCORE] = G_TYPE_INT;
  for (i = FRD_COL_NUM; (guint)i < col_num; i++) {
    col_types[i] = G_TYPE_INT;
  }
  store = gtk_list_store_newv(col_num, col_types);
  gtk_tree_view_set_model(preport->tree_view, GTK_TREE_MODEL(store));
  g_object_unref(G_OBJECT(store));

  /* Create the new columns. */
  for (i = 0; (guint)i < col_num; i++) {
    GtkCellRenderer *renderer;
    const char *title;
    const char *attribute;

    if (GDK_TYPE_PIXBUF == col_types[i]) {
      renderer = gtk_cell_renderer_pixbuf_new();
      attribute = "pixbuf";
    } else {
      renderer = gtk_cell_renderer_text_new();
      attribute = "text";
    }

    if (i < FRD_COL_NUM) {
      title = endgame_report_column_name(i);
    } else {
      title = packet->category_name[i - FRD_COL_NUM];
    }

    col = gtk_tree_view_column_new_with_attributes(Q_(title), renderer,
                                                   attribute, i, NULL);
    gtk_tree_view_append_column(preport->tree_view, col);
    if (GDK_TYPE_PIXBUF != col_types[i]) {
      gtk_tree_view_column_set_sort_column_id(col, i);
    }
  }

  preport->store = store;
  preport->player_count = packet->player_num;
  preport->players_received = 0;************
  Handle endgame report information about one player***********/
void endgame_report_dialog_player(const struct packet_endgame_player *packet)
{
  /* Fill the model with player stats. */
  struct endgame_report *preport = &endgame_report;
  const struct player *pplayer = player_by_number(packet->player_id);
  GtkTreeIter iter;
  int i;

  gtk_list_store_append(preport->store, &iter);
  gtk_list_store_set(preport->store, &iter,
                     FRD_COL_PLAYER, player_name(pplayer),
                     FRD_COL_NATION, get_flag(nation_of_player(pplayer)),
                     FRD_COL_SCORE, packet->score,
                     -1);
  for (i = 0; i < packet->category_num; i++) {
    gtk_list_store_set(preport->store, &iter,
                       i + FRD_COL_NUM, packet->category_score[i],
                       -1);
  }

  preport->players_received++;

  if (preport->players_received == preport->player_count) {
    gui_dialog_present(preport->shell************
  Prepare a final repor***********/
static void endgame_report_init(struct endgame_report *preport)
{
  GtkWidget *sw, *view;

  fc_assert_ret(NULL != preport);

  gui_dialog_new(&preport->shell, GTK_NOTEBOOK(top_notebook), NULL, TRUE);
  gui_dialog_set_title(preport->shell, _("Score"));

  gui_dialog_set_default_size(preport->shell, 700, 420);preport->shell->vbox), sw);

  view = gtk_tree_view_new();
  gtk_widget_set_name(view, "small_font");
  gtk_container_add(GTK_CONTAINER(sw), view);
  preport->tree_view = GTK_TREE_VIEW(view);

  if (preport->shell->type == GUI_DIALOG_TAB) {
    gtk_widget_set_hexpand(GTK_WIDGET(view), TRUE);
    gtk_widget_set_vexpand(GTK_WIDGET(view), TRUE);
  }

  gui_dialog_show_all(preport->shell);************
  Start building a dialog with player statistics at endgame***********/
void endgame_report_dialog_start(const struct packet_endgame_report *packet)
{
  if (NULL == endgame_report.shell) {
    endgame_report_init(&endgame_report);
  }
  endgame_report_update(&endgame_report, packet);
}
ENDREP
DELTA 30126 0 84
SVN  ˆˆ
 ‚Z ‚ …*‚[10ENDREP
DELTA 30413 3265 34
SVN  ¢£\* †o €Y ‘†T€Q Š4—_GtkWidget *icon_label_button_new(const gchar *icon_name,
                                                             const char *icon_name,
                             ENDREP
id: 102.5u2.r31242/66095
type: file
pred: 102.5u2.r31194/6677
count: 61
text: 31242 6016 183 26929 639026d2dd6729f7a7cda838cca5b788
props: 9773 10560 111 0 23629f8214b2309975780a037517e920
cpath: /trunk/client/gui-gtk-3.x/cma_fe.c
copyroot: 31104 /trunk/client/gui-gtk-3.x

id: 108.5u2.r31242/66369
type: file
pred: 108.5u2.r31194/7221
count: 228
text: 31242 0 97 54420 de603b727845e8b981834f90512f5a55
props: 11088 8070 112 0 858133ad234580a5fc7c24a791c3b702
cpath: /trunk/client/gui-gtk-3.x/dialogs.c
copyroot: 31104 /trunk/client/gui-gtk-3.x

id: 10c.5u2.r31242/66641
type: file
pred: 10c.5u2.r31194/8318
count: 32
text: 31242 715 5271 6714 d130337ef9f5227233ff92846dead1b5
props: 10731 5240 111 0 5515c59917848b493fbf45ffb42836b3
cpath: /trunk/client/gui-gtk-3.x/finddlg.c
copyroot: 31104 /trunk/client/gui-gtk-3.x

id: 10m.5u2.r31242/66915
type: file
pred: 10m.5u2.r31219/109
count: 70
text: 31242 6226 634 35590 d9d363267e40b668c03ea659a3d85de2
props: 10967 1745 111 0 05a46e497021c8716b647ee1425e21a2
cpath: /trunk/client/gui-gtk-3.x/gui_stuff.c
copyroot: 31104 /trunk/client/gui-gtk-3.x

id: 10n.5u2.r31242/67191
type: file
pred: 10n.5g7.r30413/10299
count: 29
text: 31242 65868 200 4572 4e02e2276c087a30388d089fce44f808
props: 10967 2110 111 0 433ca8234d38d2ba821c9aa09a03d731
cpath: /trunk/client/gui-gtk-3.x/gui_stuff.h
copyroot: 31104 /trunk/client/gui-gtk-3.x

id: 76e.5u2.r31242/67469
type: file
pred: 76e.5u2.r31194/11893
count: 18
text: 31242 223 157 16611 10a4d4e146162a8cb7fe8ad080e50c89
props: 26905 70963 34 0 25e6c2f7558b7484000d4d090dea5b92
cpath: /trunk/client/gui-gtk-3.x/luaconsole.c
copyroot: 31104 /trunk/client/gui-gtk-3.x

id: 111.5u2.r31242/67747
type: file
pred: 111.5u2.r31194/13269
count: 34
text: 31242 6885 103 7475 10ab1d9fab8152d6a42907591de8456e
props: 10731 6341 111 0 227f1557f5d66bc46d32e4db301b2671
cpath: /trunk/client/gui-gtk-3.x/messagedlg.c
copyroot: 31104 /trunk/client/gui-gtk-3.x

id: 112.5u2.r31242/68025
type: file
pred: 112.5u2.r31194/13543
count: 59
text: 31242 124 72 14994 980730729a7d42a8f3e4a92113b0b9fb
props: 10731 3775 111 0 9b377c828b4ca1827963af8e19878787
cpath: /trunk/client/gui-gtk-3.x/messagewin.c
copyroot: 31104 /trunk/client/gui-gtk-3.x

id: 2pi.5u5.r31242/68302
type: file
pred: 2pi.5u5.r31194/14097
count: 195
text: 31242 7012 340 120333 ca62bbfe99b3955cbd3c8a6a98c6cb99
props: 11100 16432 111 0 622f1432038f91cce287c1d90e4f7964
cpath: /trunk/client/gui-gtk-3.x/pages.c
copyroot: 19694 /trunk/client/gui-gtk-3.0/pages.c

id: 115.5u2.r31242/68587
type: file
pred: 115.5u2.r31219/382
count: 121
text: 31242 407 76 31045 e7df5f0b9cfcd995ac5de3e5a0720f37
props: 11057 41078 111 0 3f70303ff9ea148b5e232db96a904e98
cpath: /trunk/client/gui-gtk-3.x/plrdlg.c
copyroot: 31104 /trunk/client/gui-gtk-3.x

id: 118.5u2.r31242/68860
type: file
pred: 118.5u2.r31194/14657
count: 192
text: 31242 7379 58412 68929 f3e96b2fd043b869be58adf9bf12b059
props: 11057 38502 111 0 89e24921275908e1dbda216a065c4859
cpath: /trunk/client/gui-gtk-3.x/repodlgs.c
copyroot: 31104 /trunk/client/gui-gtk-3.x

id: 11c.5u2.r31242/69141
type: file
pred: 11c.5u2.r31194/15213
count: 39
text: 31242 507 181 8928 90e5404e5cc8d8e8566ee1cb960ae331
props: 10731 5970 111 0 df9f31216c5039327c376b7fe82756f5
cpath: /trunk/client/gui-gtk-3.x/spaceshipdlg.c
copyroot: 31104 /trunk/client/gui-gtk-3.x

PLAIN
K 11
Makefile.am
V 23
file zu.5u2.r31157/1075
K 15
action_dialog.c
V 24
file 36n.5u3.r31194/4732
K 8
canvas.c
V 24
file 2y6.5u2.r31194/5029
K 8
canvas.h
V 25
file 2y7.5g7.r31100/19103
K 10
chatline.c
V 23
file zw.5u2.r31194/5303
K 10
chatline.h
V 23
file zx.5g7.r25812/5717
K 15
choice_dialog.c
V 24
file 377.5u2.r31194/5576
K 15
choice_dialog.h
V 24
file 378.5g7.r31040/7614
K 14
citizensinfo.c
V 24
file 6n1.5u2.r31194/5854
K 14
citizensinfo.h
V 24
file 6n2.5g7.r31040/7889
K 9
citydlg.c
V 23
file zy.5u2.r31194/6131
K 9
citydlg.h
V 20
file zz.0.r5493/6351
K 9
cityrep.c
V 24
file 100.5u2.r31194/6402
K 9
cityrep.h
V 25
file 101.5ck.r18101/91562
K 8
cma_fe.c
V 25
file 102.5u2.r31242/66095
K 8
cma_fe.h
V 25
file 103.5g7.r28713/21190
K 8
colors.c
V 24
file 104.5u2.r31194/6949
K 8
colors.h
V 25
file 105.5g7.r21920/14399
K 12
connectdlg.c
V 25
file 106.5g7.r27275/44221
K 12
connectdlg.h
V 25
file 107.5ck.r19154/49180
K 9
dialogs.c
V 25
file 108.5u2.r31242/66369
K 9
dialogs.h
V 24
file 109.5g7.r31040/8710
K 10
diplodlg.c
V 24
file 10a.5u2.r31194/7495
K 10
diplodlg.h
V 23
file 10b.0.r9577/108261
K 9
editgui.c
V 24
file 4ej.5u2.r31194/7768
K 9
editgui.h
V 24
file 4ek.5g7.r31040/8982
K 10
editprop.c
V 24
file 4el.5u2.r31194/8042
K 10
editprop.h
V 25
file 3bj.5jh.r21141/57145
K 9
finddlg.c
V 25
file 10c.5u2.r31242/66641
K 9
finddlg.h
V 22
file 2d0.0.r5989/22356
K 10
gamedlgs.c
V 24
file 10d.5u2.r31194/8590
K 10
gamedlgs.h
V 26
file 197l.5g7.r26905/69711
K 9
gotodlg.c
V 24
file 10e.5u2.r31194/8864
K 9
gotodlg.h
V 25
file 10f.5ck.r19505/20989
K 10
graphics.c
V 24
file 10g.5u2.r31194/9137
K 10
graphics.h
V 24
file 10h.5u2.r31194/9412
K 12
gtkpixcomm.c
V 24
file 10i.5u2.r31194/9686
K 12
gtkpixcomm.h
V 25
file 10j.5g7.r31100/20488
K 10
gui_main.c
V 24
file 10k.5u2.r31194/9962
K 10
gui_main.h
V 24
file 10l.5u2.r31105/1353
K 11
gui_stuff.c
V 25
file 10m.5u2.r31242/66915
K 11
gui_stuff.h
V 25
file 10n.5u2.r31242/67191
K 11
happiness.c
V 25
file 10o.5u2.r31194/10515
K 11
happiness.h
V 25
file 10p.5u2.r31194/10794
K 9
helpdlg.c
V 25
file 10q.5u2.r31194/11070
K 9
helpdlg.h
V 23
file 10r.0.r4313/267882
K 10
inputdlg.c
V 25
file 10s.5u2.r31194/11346
K 10
inputdlg.h
V 24
file 10t.5ck.r19651/6762
K 10
inteldlg.c
V 25
file 10u.5u2.r31194/11619
K 10
inteldlg.h
V 23
file 2d1.0.r9577/108626
K 12
luaconsole.c
V 25
file 76e.5u2.r31242/67469
K 12
luaconsole.h
V 25
file 76f.5g7.r26905/71334
K 9
mapctrl.c
V 25
file 10v.5u2.r31194/12171
K 9
mapctrl.h
V 23
file 10w.5g7.r21978/547
K 9
mapview.c
V 25
file 10x.5u2.r31194/12446
K 9
mapview.h
V 25
file 10y.5u2.r31194/12722
K 6
menu.c
V 25
file 10z.5u2.r31194/12995
K 6
menu.h
V 25
file 110.5ck.r16067/65085
K 12
messagedlg.c
V 25
file 111.5u2.r31242/67747
K 12
messagedlg.h
V 22
file 2d2.0.r5989/22693
K 12
messagewin.c
V 25
file 112.5u2.r31242/68025
K 12
messagewin.h
V 25
file 113.5ck.r18082/27153
K 11
optiondlg.c
V 25
file 4js.5u2.r31194/13821
K 11
optiondlg.h
V 25
file 114.5ck.r17037/29773
K 7
pages.c
V 25
file 2pi.5u5.r31242/68302
K 7
pages.h
V 25
file 2pj.5g7.r31040/11459
K 8
plrdlg.c
V 25
file 115.5u2.r31242/68587
K 8
plrdlg.h
V 25
file 116.5u2.r31190/13628
K 10
ratesdlg.h
V 22
file 2d3.0.r5989/22018
K 10
repodlgs.c
V 25
file 118.5u2.r31242/68860
K 10
repodlgs.h
V 24
file 119.5ck.r18439/2365
K 14
soundset_dlg.c
V 25
file cku.5u2.r31194/14935
K 14
spaceshipdlg.c
V 25
file 11c.5u2.r31242/69141
K 14
spaceshipdlg.h
V 23
file 11d.0.r9577/110090
K 8
sprite.c
V 25
file 2y8.5u2.r31194/15492
K 8
sprite.h
V 25
file 2y9.5g7.r31040/12823
K 11
theme_dlg.c
V 25
file 47d.5u2.r31194/15767
K 8
themes.c
V 25
file 34x.5u2.r31194/16043
K 13
tileset_dlg.c
V 25
file 45i.5u2.r31194/16316
K 12
unitselect.c
V 25
file 6pa.5u2.r31194/16593
K 12
unitselect.h
V 25
file 6pb.5g7.r26905/70360
K 14
voteinfo_bar.c
V 25
file 4h8.5u2.r31194/16872
K 14
voteinfo_bar.h
V 25
file 4h9.5g7.r26905/71982
K 7
wldlg.c
V 25
file 11e.5u2.r31194/17150
K 7
wldlg.h
V 25
file 11f.5g7.r31040/13371
END
ENDREP
id: zs.5u2.r31242/73362
type: dir
pred: zs.5u2.r31219/4588
count: 2066
text: 31242 69420 3929 0 3ffff8eb65d3b143e4411b060a77b048
props: 11108 11912 79 0 480bb3268560e84c2d6c8376c422c65e
cpath: /trunk/client/gui-gtk-3.x
copyroot: 31104 /trunk/client/gui-gtk-3.x

PLAIN
K 11
Makefile.am
V 22
file 5f.5ck.r31157/833
K 6
agents
V 23
dir zf.5ck.r29743/51739
K 11
attribute.c
V 24
file xh.5ck.r28218/30713
K 11
attribute.h
V 24
file xi.5ck.r18863/23649
K 7
audio.c
V 24
file 139.5ck.r30672/2762
K 7
audio.h
V 24
file 13a.5ck.r30672/3003
K 12
audio_none.c
V 25
file 13d.5ck.r24916/15731
K 12
audio_none.h
V 25
file 13e.5ck.r18863/20841
K 11
audio_sdl.c
V 25
file 13f.5ck.r31053/46875
K 11
audio_sdl.h
V 25
file 13g.5ck.r18863/23885
K 17
chatline_common.c
V 25
file 14q.5ck.r30210/33588
K 17
chatline_common.h
V 24
file 14r.5ck.r24892/5917
K 16
citydlg_common.c
V 22
file z4.5ck.r31093/538
K 16
citydlg_common.h
V 24
file z5.5ck.r29743/52224
K 13
cityrepdata.c
V 24
file mb.5ck.r30210/34092
K 13
cityrepdata.h
V 24
file mc.5ck.r18863/19121
K 13
client_main.c
V 22
file 2f.5cp.r31072/459
K 13
client_main.h
V 23
file hz.5cq.r29333/6077
K 8
climap.c
V 24
file 197.5ck.r20232/3008
K 8
climap.h
V 25
file 198.5ck.r30221/38191
K 9
climisc.c
V 22
file d5.5ck.r30946/120
K 9
climisc.h
V 22
file i0.5ck.r30695/915
K 8
clinet.c
V 24
file hc.5ck.r30614/19320
K 8
clinet.h
V 24
file i1.5ck.r18863/24866
K 15
colors_common.c
V 24
file 33a.5ck.r31147/4200
K 15
colors_common.h
V 24
file 33b.5ck.r31147/4444
K 19
connectdlg_common.c
V 24
file 2fw.5ck.r30359/2327
K 19
connectdlg_common.h
V 25
file 2fx.5ck.r19154/53802
K 9
control.c
V 24
file gz.5ck.r31192/11699
K 9
control.h
V 23
file i2.5ck.r31152/6123
K 7
dummy.c
V 26
file 4f9.5ck.r26905/141682
K 12
dummycxx.cpp
V 26
file 6kr.5ck.r26905/106211
K 8
editor.c
V 25
file 3bg.5ck.r30974/54323
K 8
editor.h
V 24
file 3bh.5ck.r26198/2592
K 17
global_worklist.c
V 26
file 4i6.5ck.r26905/117850
K 17
global_worklist.h
V 26
file 4i7.5ck.r26905/126022
K 6
goto.c
V 23
file vu.5ck.r31160/1568
K 6
goto.h
V 24
file vv.5ck.r27871/19506
K 11
gui-gtk-2.0
V 22
dir zs.5ck.r31190/7786
K 11
gui-gtk-3.0
V 23
dir zs.5g7.r31190/12804
K 11
gui-gtk-3.x
V 23
dir zs.5u2.r31242/73362
K 6
gui-qt
V 24
dir 6ie.5ck.r31241/47150
K 8
gui-sdl2
V 24
dir 16t.5l8.r31152/28616
K 8
gui-stub
V 23
dir mh.5ck.r31090/34697
K 14
gui_cbsetter.c
V 26
file a3c.5ck.r27417/165161
K 14
gui_cbsetter.h
V 25
file a3d.5ck.r26905/69091
K 15
gui_interface.c
V 26
file 6jm.5ir.r27417/187983
K 15
gui_interface.h
V 26
file 6jn.5is.r27417/193557
K 10
helpdata.c
V 22
file h1.5ck.r31129/580
K 10
helpdata.h
V 22
file i3.5ck.r30004/950
K 7
include
V 23
dir b8.5ck.r31090/36802
K 19
luaconsole_common.c
V 26
file 75z.5ck.r26905/100821
K 19
luaconsole_common.h
V 26
file 760.5ck.r26905/106500
K 9
luascript
V 24
dir 761.5ck.r29743/54308
K 16
mapctrl_common.c
V 22
file 15m.5ck.r30622/70
K 16
mapctrl_common.h
V 24
file 15n.5ck.r27397/5459
K 16
mapview_common.c
V 24
file z2.5ck.r31090/37040
K 16
mapview_common.h
V 23
file z3.5ck.r30296/1376
K 19
messagewin_common.c
V 25
file 14s.5ck.r30328/72999
K 19
messagewin_common.h
V 25
file 14t.5ck.r18863/21579
K 7
music.c
V 25
file zmc.5ck.r30210/64954
K 7
music.h
V 25
file zme.5ck.r27127/11513
K 9
options.c
V 24
file dc.5ck.r31200/24594
K 9
options.h
V 24
file i4.5ck.r31007/18621
K 17
overview_common.c
V 25
file 2yk.5ck.r30221/52672
K 17
overview_common.h
V 24
file 2yl.5ck.r29833/4964
K 10
packhand.c
V 21
file n.5ck.r31196/401
K 10
packhand.h
V 24
file i5.5ck.r18863/20596
K 15
plrdlg_common.c
V 25
file 14u.5ck.r30328/73502
K 15
plrdlg_common.h
V 25
file 14v.5ck.r18863/21328
K 17
repodlgs_common.c
V 25
file 11i.5ck.r30568/61953
K 17
repodlgs_common.h
V 25
file 11j.5ck.r19589/11861
K 9
reqtree.c
V 25
file 2ym.5ck.r30210/66179
K 9
reqtree.h
V 24
file 2yn.5ck.r24150/6004
K 9
servers.c
V 25
file 33x.5ck.r30614/24902
K 9
servers.h
V 25
file 33y.5ck.r20478/36372
K 6
text.c
V 25
file 2g3.5ck.r30568/62207
K 6
text.h
V 25
file 2g4.5ck.r24459/13284
K 15
themes_common.c
V 22
file 352.5ck.r26465/95
K 15
themes_common.h
V 25
file 353.5ck.r18863/22710
K 10
tilespec.c
V 23
file hl.5ck.r31147/4936
K 10
tilespec.h
V 24
file i6.5ck.r30974/68684
K 19
unitselect_common.c
V 26
file 76v.5ck.r30060/143258
K 19
unitselect_common.h
V 26
file 76w.5ck.r26905/117548
K 14
update_queue.c
V 25
file 4jw.5ck.r29054/20297
K 14
update_queue.h
V 26
file 4jx.5ck.r26905/141966
K 10
voteinfo.c
V 25
file 4fe.5ck.r30210/66670
K 10
voteinfo.h
V 26
file 4ff.5ck.r26905/142263
K 6
zoom.c
V 25
file 2120.5ck.r30913/1673
K 6
zoom.h
V 25
file 2122.5ck.r30913/1856
END
ENDREP
id: d.5ck.r31242/77938
type: dir
pred: d.5ck.r31241/51703
count: 7053
text: 31242 73624 4301 0 6b323b7c1df57ed73b74f01f7718074a
props: 28036 11094 400 0 bbe1d6769a94f3af2a54f7dc91fc9c71
cpath: /trunk/client
copyroot: 15280 /trunk

id: 1yeo.5ck.r31242/78169
type: file
pred: 1yeo.5ck.r30126/111
count: 2
text: 31242 65821 23 1030 1c7c5ad4685240b658d8ffacf869e444
cpath: /trunk/m4/gtk3x-client.m4
copyroot: 15280 /trunk

PLAIN
K 8
c++11.m4
V 24
file 18ql.5ck.r28662/655
K 6
c11.m4
V 26
file 17mb.5ck.r25768/35598
K 6
c99.m4
V 24
file 2ez.5ck.r28882/2757
K 10
codeset.m4
V 25
file 4es.5ck.r25335/14690
K 11
compiler.m4
V 23
file 4dr.5ck.r30723/200
K 8
debug.m4
V 22
file 158.5ck.r30492/44
K 12
expanddir.m4
V 24
file 1v1u.5ck.r29297/956
K 13
fcdb-mysql.m4
V 25
file 6kl.5ck.r25193/13434
K 16
fcdb-postgres.m4
V 23
file 6km.5ck.r29035/112
K 15
fcdb-sqlite3.m4
V 25
file 6kn.5ck.r25193/14225
K 11
features.m4
V 22
file ug2.5ck.r30002/46
K 12
freetype2.m4
V 23
file 2e2.5ck.r30043/160
K 10
gettext.m4
V 26
file 19jq.5ck.r25866/39558
K 15
gettimeofday.m4
V 25
file 16o.5ck.r19659/29370
K 8
gprof.m4
V 25
file 4jy.5ck.r24590/11309
K 10
gtk-2.0.m4
V 23
file 12w.5ck.r29529/148
K 14
gtk2-client.m4
V 25
file 19f.5ck.r25193/12590
K 14
gtk3-client.m4
V 24
file 6zj.5ck.r29567/1200
K 15
gtk3x-client.m4
V 26
file 1yeo.5ck.r31242/78169
K 8
iconv.m4
V 24
file 12y.5ck.r28824/9665
K 9
lib-ld.m4
V 25
file 4e4.5ck.r25335/15243
K 11
lib-link.m4
V 25
file 4e5.5ck.r25335/14871
K 13
lib-prefix.m4
V 25
file 4e6.5ck.r25335/15056
K 9
locale.m4
V 23
file 2cp.5ck.r25389/467
K 13
magickwand.m4
V 23
file 6nb.5ck.r30014/110
K 20
mapimg-magickwand.m4
V 23
file 6nc.5ck.r25643/168
K 8
mysql.m4
V 23
file 6ko.5ck.r25662/384
K 6
nls.m4
V 26
file 19js.5ck.r25866/39403
K 12
no-client.m4
V 25
file 2cq.5ck.r15640/16763
K 6
pkg.m4
V 24
file 45j.5ck.r30022/6016
K 5
po.m4
V 25
file 19jt.5ck.r28824/9899
K 11
postgres.m4
V 25
file 6kp.5ck.r25193/14829
K 11
progtest.m4
V 26
file 19ju.5ck.r25866/39091
K 12
qt-client.m4
V 23
file 6k7.5ck.r26897/857
K 13
qt5-darwin.m4
V 25
file 1toz.5ck.r29104/3330
K 6
qt5.m4
V 23
file tqz.5ck.r29626/750
K 11
readline.m4
V 23
file 133.5ck.r25028/237
K 6
sdl.m4
V 25
file 22fr.5ck.r30425/6822
K 14
sdl2-client.m4
V 25
file qkc.5ck.r31053/84232
K 7
sdl2.m4
V 23
file qwv.5ck.r26294/661
K 8
sound.m4
V 23
file 14o.5ck.r31061/132
K 10
sqlite3.m4
V 23
file 6kq.5ck.r25662/794
K 12
testmatic.m4
V 26
file 20pi.5ck.r30173/11657
K 12
vsnprintf.m4
V 25
file 134.5ck.r21754/19854
K 13
web-client.m4
V 23
file n5w.5ck.r29083/641
END
ENDREP
id: 12p.5ck.r31242/80467
type: dir
pred: 12p.5ck.r31061/2474
count: 276
text: 31242 78357 2097 0 b8786ecafe1ef52077dae1f19cb9bf5c
props: 17175 0 94 0 b7d1f67a2107948335edc0c95b3e2bf5
cpath: /trunk/m4
copyroot: 15280 /trunk

PLAIN
K 9
ABOUT-NLS
V 24
file fu.5ck.r27270/69307
K 7
AUTHORS
V 24
file 5u.5ck.r22143/14016
K 7
COPYING
V 22
file 1h.5ck.r29454/952
K 9
ChangeLog
V 26
file 6l.5ck.r27473/7455495
K 7
INSTALL
V 21
file 6.5ck.r30188/957
K 11
Makefile.am
V 23
file 59.5ck.r30425/6590
K 4
NEWS
V 24
file 6m.5ck.r25634/30702
K 6
README
V 20
file 7.0.r4421/96382
K 2
ai
V 21
dir 8.5ck.r31224/8908
K 10
autogen.sh
V 23
file 12o.5ck.r30654/414
K 9
bootstrap
V 23
dir 2p5.5ck.r30188/3443
K 6
client
V 22
dir d.5ck.r31242/77938
K 6
common
V 21
dir p.5ck.r31220/5840
K 12
configure.ac
V 25
file 149.5ck.r31157/10368
K 4
data
V 21
dir w.5ck.r31202/6975
K 12
dependencies
V 24
dir 2yu.5ck.r30959/62392
K 3
doc
V 23
dir k7.5ck.r30969/25575
K 10
fc_version
V 25
file 2lo.5en.r31198/57100
K 11
gen_headers
V 25
dir 1hsw.5ck.r30614/36927
K 2
m4
V 24
dir 12p.5ck.r31242/80467
K 7
scripts
V 23
dir 2yo.5ck.r28716/5421
K 6
server
V 22
dir z.5ck.r31224/15067
K 5
tests
V 23
dir 2g9.5ck.r27783/1363
K 5
tools
V 23
dir 4pj.5js.r31144/8635
K 12
translations
V 26
dir t0a.5ck.r31069/1649911
K 7
utility
V 23
dir 1c.5ck.r31200/39154
K 5
win32
V 23
dir 2eu.5ck.r30584/1753
END
ENDREP
id: 3.5ck.r31242/81830
type: dir
pred: 3.5ck.r31241/53072
count: 20590
text: 31242 80691 1126 0 2b5f28d612366d4c43398d459b63f972
props: 28036 14655 292 0 9e1d5de0253c723466868990c52c129f
cpath: /trunk
copyroot: 15280 /trunk

PLAIN
K 8
branches
V 20
dir 1.0.r31240/53780
K 4
tags
V 19
dir 2.0.r29519/6475
K 5
trunk
V 22
dir 3.5ck.r31242/81830
K 7
website
V 20
dir 3ge.0.r30613/922
END
ENDREP
id: 0.0.r31242/82221
type: dir
pred: 0.0.r31241/53463
count: 31242
text: 31242 82055 153 0 c5d17f48f739837549a0926563f62f48
cpath: /
copyroot: 0 /

102.5u2.t31241-1 modify true false /trunk/client/gui-gtk-3.x/cma_fe.c

108.5u2.t31241-1 modify true false /trunk/client/gui-gtk-3.x/dialogs.c

10c.5u2.t31241-1 modify true false /trunk/client/gui-gtk-3.x/finddlg.c

10m.5u2.t31241-1 modify true false /trunk/client/gui-gtk-3.x/gui_stuff.c

10n.5u2.t31241-1 modify true false /trunk/client/gui-gtk-3.x/gui_stuff.h

76e.5u2.t31241-1 modify true false /trunk/client/gui-gtk-3.x/luaconsole.c

111.5u2.t31241-1 modify true false /trunk/client/gui-gtk-3.x/messagedlg.c

112.5u2.t31241-1 modify true false /trunk/client/gui-gtk-3.x/messagewin.c

2pi.5u5.t31241-1 modify true false /trunk/client/gui-gtk-3.x/pages.c

115.5u2.t31241-1 modify true false /trunk/client/gui-gtk-3.x/plrdlg.c

118.5u2.t31241-1 modify true false /trunk/client/gui-gtk-3.x/repodlgs.c

11c.5u2.t31241-1 modify true false /trunk/client/gui-gtk-3.x/spaceshipdlg.c

1yeo.5ck.t31241-1 modify true false /trunk/m4/gtk3x-client.m4


82221 82369
