Project

General

Profile

Feature #1019 ยป 0056-gtk4x-Use-GListStore-implemention-of-citydlg-prod-li.patch

Marko Lindqvist, 10/25/2024 11:19 PM

View differences:

client/gui-gtk-5.0/citydlg.c
struct city_map_canvas map_canvas;
GtkWidget *production_bar;
GtkWidget *production_combo_depr;
GtkWidget *buy_command;
GListStore *improvement_list;
......
GtkWidget *info_label[NUM_INFO_FIELDS];
GtkListStore *change_production_store_depr;
GListStore *change_prod_store;
GtkSingleSelection *change_prod_selection;
} overview;
......
static void draw_map_canvas(struct city_dialog *pdialog);
static void buy_callback(GtkWidget * w, gpointer data);
static void change_production_callback_depr(GtkComboBox *combo,
struct city_dialog *pdialog);
static void change_production_callback(GtkSelectionModel *self,
guint position,
guint n_items,
......
{
GtkWidget *page, *bottom;
GtkWidget *right, *frame, *table;
GtkWidget *label, *sw, *view, *bar, *production_combo_depr;
GtkCellRenderer *rend;
GtkListStore *production_store_depr;
GtkWidget *label, *sw, *view, *bar;
/* TRANS: Overview tab in city dialog */
const char *tab_title = _("_Overview");
int unit_height = tileset_unit_with_upkeep_height(tileset);
......
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10);
gtk_box_append(GTK_BOX(vbox), hbox);
production_store_depr = gtk_list_store_new(4, GDK_TYPE_PIXBUF, G_TYPE_STRING,
G_TYPE_INT, G_TYPE_BOOLEAN);
pdialog->overview.change_production_store_depr = production_store_depr;
pdialog->overview.change_prod_store = g_list_store_new(FC_TYPE_PROD_ROW);
pdialog->overview.change_prod_selection
......
gtk_progress_bar_set_text(GTK_PROGRESS_BAR(bar), _("%d/%d %d turns"));
production_combo_depr
= gtk_combo_box_new_with_model(GTK_TREE_MODEL(production_store_depr));
gtk_widget_set_hexpand(production_combo_depr, TRUE);
pdialog->overview.production_combo_depr = production_combo_depr;
gtk_box_append(GTK_BOX(hbox), production_combo_depr);
g_object_unref(production_store_depr);
g_signal_connect(production_combo_depr, "changed",
G_CALLBACK(change_production_callback_depr), pdialog);
gtk_box_append(GTK_BOX(hbox), list);
g_signal_connect(pdialog->overview.change_prod_selection, "selection-changed",
G_CALLBACK(change_production_callback), pdialog);
gtk_cell_layout_clear(GTK_CELL_LAYOUT(production_combo_depr));
rend = gtk_cell_renderer_pixbuf_new();
gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(production_combo_depr), rend, TRUE);
gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(production_combo_depr),
rend, "pixbuf", 0, NULL);
g_object_set(rend, "xalign", 0.0, NULL);
rend = gtk_cell_renderer_text_new();
gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(production_combo_depr), rend, TRUE);
gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(production_combo_depr),
rend, "text", 1, "strikethrough", 3, NULL);
pdialog->overview.buy_command
= icon_label_button_new("system-run", _("_Buy"));
gtk_box_append(GTK_BOX(hbox), GTK_WIDGET(pdialog->overview.buy_command));
......
} else {
pdialog->overview.buy_command = NULL;
pdialog->overview.production_bar = NULL;
pdialog->overview.production_combo_depr = NULL;
pdialog->overview.change_production_store_depr = NULL;
pdialog->overview.change_prod_store = nullptr;
pdialog->overview.change_prod_selection = nullptr;
}
/* Bottom: info, units */
......
{
char buf[32], buf2[200];
gdouble pct;
GtkListStore *store_depr;
GListStore *store;
GtkTreeIter iter;
struct universal targets[MAX_NUM_PRODUCTION_TARGETS];
struct item items[MAX_NUM_PRODUCTION_TARGETS];
int targets_used, item;
......
GTK_PROGRESS_BAR(pdialog->production.production_bar), pct);
}
store_depr = pdialog->overview.change_production_store_depr;
store = pdialog->overview.change_prod_store;
if (store != nullptr) {
int cur = -1;
int actcount = 0;
if (pdialog->overview.production_combo_depr != NULL) {
gtk_combo_box_set_active(GTK_COMBO_BOX(pdialog->overview.production_combo_depr),
-1);
}
if (pdialog->overview.change_prod_selection != nullptr) {
gtk_selection_model_select_item(GTK_SELECTION_MODEL(pdialog->overview.change_prod_selection),
-1, TRUE);
}
gtk_list_store_clear(store_depr);
g_list_store_remove_all(store);
targets_used
......
useless = is_improvement_redundant(pcity, target->value.building);
}
pix = sprite_get_pixbuf(sprite);
gtk_list_store_append(store_depr, &iter);
gtk_list_store_set(store_depr, &iter, 0, pix,
1, name, 3, useless,
2, (gint)cid_encode(items[item].item), -1);
row->name = name;
row->id = (gint)cid_encode(items[item].item);
......
}
}
if (pdialog->overview.production_combo_depr != NULL) {
gtk_combo_box_set_active(GTK_COMBO_BOX(pdialog->overview.production_combo_depr),
cur);
}
if (pdialog->overview.change_prod_selection != nullptr) {
gtk_selection_model_select_item(GTK_SELECTION_MODEL(pdialog->overview.change_prod_selection),
cur, TRUE);
......
}
}
/***********************************************************************//**
Callback for the dropdown production menu.
***************************************************************************/
static void change_production_callback_depr(GtkComboBox *combo,
struct city_dialog *pdialog)
{
GtkTreeIter iter;
if (can_client_issue_orders()
&& gtk_combo_box_get_active_iter(combo, &iter)) {
cid id;
struct universal univ;
gtk_tree_model_get(gtk_combo_box_get_model(combo), &iter, 2, &id, -1);
univ = cid_production(id);
city_change_production(pdialog->pcity, &univ);
}
}
/***********************************************************************//**
Callback for the production list.
***************************************************************************/
    (1-1/1)