Project

General

Profile

Feature #981 ยป 0044-gtk4x-Add-implemention-for-actiondlg-lists-as-GListS.patch

Marko Lindqvist, 10/18/2024 10:10 PM

View differences:

client/gui-gtk-5.0/action_dialog.c
/**********************************************************************//**
FcActionRow creation method
**************************************************************************/
#if 0
static FcActionRow *fc_action_row_new(void)
{
FcActionRow *result;
......
return result;
}
#endif
/**********************************************************************//**
Create a new action data structure that can be stored in the
......
/**********************************************************************//**
User selected entry in steal advances dialog
**************************************************************************/
static void spy_advances_callback(GtkTreeSelection *select,
gpointer data)
static void spy_advances_callback_depr(GtkTreeSelection *select,
gpointer data)
{
struct action_data *args = (struct action_data *)data;
......
}
}
/**********************************************************************//**
User selected entry in steal advances dialog
**************************************************************************/
static void spy_advances_callback(GtkSelectionModel *self,
guint position,
guint n_items,
gpointer data)
{
struct action_data *args = (struct action_data *)data;
FcActionRow *row = gtk_single_selection_get_selected_item(
GTK_SINGLE_SELECTION(self));
if (row != NULL) {
args->target_tech_id = row->id;
gtk_dialog_set_response_sensitive(GTK_DIALOG(spy_tech_shell),
GTK_RESPONSE_ACCEPT, TRUE);
} else {
args->target_tech_id = 0;
gtk_dialog_set_response_sensitive(GTK_DIALOG(spy_tech_shell),
GTK_RESPONSE_ACCEPT, FALSE);
}
}
/**********************************************************************//**
Action table cell bind function
**************************************************************************/
......
struct action_data *args)
{
GtkWidget *sw, *frame, *label, *vgrid, *view;
GtkListStore *store;
GtkListStore *store_depr;
GListStore *store;
GtkCellRenderer *rend;
GtkTreeViewColumn *col;
GtkWidget *list;
GtkColumnViewColumn *column;
GtkListItemFactory *factory;
GtkSingleSelection *selection;
struct unit *actor_unit = game_unit_by_number(args->actor_unit_id);
......
gtk_grid_set_row_spacing(GTK_GRID(vgrid), 6);
gtk_frame_set_child(GTK_FRAME(frame), vgrid);
store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
store_depr = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
store = g_list_store_new(FC_TYPE_ACTION_ROW);
selection = gtk_single_selection_new(G_LIST_MODEL(store));
list = gtk_column_view_new(GTK_SELECTION_MODEL(selection));
factory = gtk_signal_list_item_factory_new();
g_signal_connect(factory, "bind", G_CALLBACK(action_factory_bind),
......
g_signal_connect(factory, "setup", G_CALLBACK(action_factory_setup),
nullptr);
view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
column = gtk_column_view_column_new(_("Tech"), factory);
gtk_column_view_append_column(GTK_COLUMN_VIEW(list), column);
view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store_depr));
gtk_widget_set_hexpand(view, TRUE);
gtk_widget_set_vexpand(view, TRUE);
g_object_unref(store);
g_object_unref(store_depr);
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), FALSE);
rend = gtk_cell_renderer_text_new();
......
game.info.tech_steal_allow_holes)
&& research_invention_state(vresearch, i) == TECH_KNOWN
&& research_invention_state(presearch, i) != TECH_KNOWN) {
gtk_list_store_append(store, &it);
gtk_list_store_append(store_depr, &it);
g_value_init(&value, G_TYPE_STRING);
g_value_set_static_string(&value, research_advance_name_translation
(presearch, i));
gtk_list_store_set_value(store, &it, 0, &value);
gtk_list_store_set_value(store_depr, &it, 0, &value);
g_value_unset(&value);
gtk_list_store_set(store, &it, 1, i, -1);
gtk_list_store_set(store_depr, &it, 1, i, -1);
FcActionRow *row = fc_action_row_new();
row->name = research_advance_name_translation(presearch, i);
row->id = i;
g_list_store_append(store, row);
g_object_unref(row);
}
} advance_index_iterate_end;
if (action_prob_possible(actor_unit->client.act_prob_cache[
get_non_targeted_action_id(args->act_id)])) {
gtk_list_store_append(store, &it);
FcActionRow *row = fc_action_row_new();
gtk_list_store_append(store_depr, &it);
g_value_init(&value, G_TYPE_STRING);
{
struct astring str = ASTRING_INIT;
/* TRANS: %s is a unit name, e.g., Spy */
astr_set(&str, _("At %s's Discretion"),
unit_name_translation(actor_unit));
g_value_set_string(&value, astr_str(&str));
row->name = astr_str(&str);
astr_free(&str);
}
gtk_list_store_set_value(store, &it, 0, &value);
gtk_list_store_set_value(store_depr, &it, 0, &value);
g_value_unset(&value);
gtk_list_store_set(store, &it, 1, A_UNSET, -1);
gtk_list_store_set(store_depr, &it, 1, A_UNSET, -1);
row->id = A_UNSET;
g_list_store_append(store, row);
g_object_unref(row);
}
}
......
TRUE);
g_signal_connect(gtk_tree_view_get_selection(GTK_TREE_VIEW(view)), "changed",
G_CALLBACK(spy_advances_callback_depr), args);
g_signal_connect(selection, "selection-changed",
G_CALLBACK(spy_advances_callback), args);
g_signal_connect(spy_tech_shell, "response",
G_CALLBACK(spy_advances_response), args);
......
/**********************************************************************//**
User has selected new building from spy's sabotage dialog
**************************************************************************/
static void spy_improvements_callback(GtkTreeSelection *select, gpointer data)
static void spy_improvements_callback_depr(GtkTreeSelection *select,
gpointer data)
{
struct action_data *args = (struct action_data *)data;
......
}
}
/**********************************************************************//**
User has selected new building from spy's sabotage dialog
**************************************************************************/
static void spy_improvements_callback(GtkSelectionModel *self,
guint position,
guint n_items,
gpointer data)
{
struct action_data *args = (struct action_data *)data;
FcActionRow *row = gtk_single_selection_get_selected_item(
GTK_SINGLE_SELECTION(self));
if (row != NULL) {
args->target_building_id = row->id;
gtk_dialog_set_response_sensitive(GTK_DIALOG(spy_sabotage_shell),
GTK_RESPONSE_ACCEPT, TRUE);
} else {
args->target_building_id = -2;
gtk_dialog_set_response_sensitive(GTK_DIALOG(spy_sabotage_shell),
GTK_RESPONSE_ACCEPT, FALSE);
}
}
/**********************************************************************//**
Creates spy's building sabotaging dialog
**************************************************************************/
......
struct action_data *args)
{
GtkWidget *sw, *frame, *label, *vgrid, *view;
GtkListStore *store;
GtkListStore *store_depr;
GListStore *store;
GtkCellRenderer *rend;
GtkTreeViewColumn *col;
GtkTreeIter it;
GtkWidget *list;
GtkColumnViewColumn *column;
GtkListItemFactory *factory;
GtkSingleSelection *selection;
struct unit *actor_unit = game_unit_by_number(args->actor_unit_id);
......
gtk_grid_set_row_spacing(GTK_GRID(vgrid), 6);
gtk_frame_set_child(GTK_FRAME(frame), vgrid);
store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
store_depr = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
store = g_list_store_new(FC_TYPE_ACTION_ROW);
view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
selection = gtk_single_selection_new(G_LIST_MODEL(store));
list = gtk_column_view_new(GTK_SELECTION_MODEL(selection));
factory = gtk_signal_list_item_factory_new();
g_signal_connect(factory, "bind", G_CALLBACK(action_factory_bind),
nullptr);
g_signal_connect(factory, "setup", G_CALLBACK(action_factory_setup),
nullptr);
column = gtk_column_view_column_new(_("Improvement"), factory);
gtk_column_view_append_column(GTK_COLUMN_VIEW(list), column);
view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store_depr));
gtk_widget_set_hexpand(view, TRUE);
gtk_widget_set_vexpand(view, TRUE);
g_object_unref(store);
g_object_unref(store_depr);
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), FALSE);
rend = gtk_cell_renderer_text_new();
......
if (action_prob_possible(actor_unit->client.act_prob_cache[
get_production_targeted_action_id(
args->act_id)])) {
gtk_list_store_append(store, &it);
gtk_list_store_set(store, &it, 0, _("City Production"), 1, -1, -1);
gtk_list_store_append(store_depr, &it);
gtk_list_store_set(store_depr, &it, 0, _("City Production"), 1, -1, -1);
FcActionRow *row = fc_action_row_new();
row->name = _("City Production");
row->id = -1;
g_list_store_append(store, row);
g_object_unref(row);
}
city_built_iterate(pcity, pimprove) {
if (pimprove->sabotage > 0) {
gtk_list_store_append(store, &it);
gtk_list_store_set(store, &it,
gtk_list_store_append(store_depr, &it);
gtk_list_store_set(store_depr, &it,
0, city_improvement_name_translation(pcity, pimprove),
1, improvement_number(pimprove),
-1);
FcActionRow *row = fc_action_row_new();
row->name = city_improvement_name_translation(pcity, pimprove);
row->id = improvement_number(pimprove);
g_list_store_append(store, row);
g_object_unref(row);
}
} city_built_iterate_end;
if (action_prob_possible(actor_unit->client.act_prob_cache[
get_non_targeted_action_id(args->act_id)])) {
struct astring str = ASTRING_INIT;
FcActionRow *row = fc_action_row_new();
gtk_list_store_append(store, &it);
gtk_list_store_append(store_depr, &it);
/* TRANS: %s is a unit name, e.g., Spy */
astr_set(&str, _("At %s's Discretion"),
unit_name_translation(actor_unit));
gtk_list_store_set(store, &it, 0, astr_str(&str), 1, B_LAST, -1);
gtk_list_store_set(store_depr, &it, 0, astr_str(&str), 1, B_LAST, -1);
row->name = astr_str(&str);
row->id = B_LAST;
g_list_store_append(store, row);
g_object_unref(row);
astr_free(&str);
}
......
TRUE);
g_signal_connect(gtk_tree_view_get_selection(GTK_TREE_VIEW(view)), "changed",
G_CALLBACK(spy_improvements_callback_depr), args);
g_signal_connect(selection, "selection-changed",
G_CALLBACK(spy_improvements_callback), args);
g_signal_connect(spy_sabotage_shell, "response",
G_CALLBACK(spy_improvements_response), args);
    (1-1/1)