Feature #980 ยป 0043-gtk4x-Implement-bind-create-for-citydlg-prod-list-it.patch
| client/gui-gtk-5.0/citydlg.c | ||
|---|---|---|
| G_DEFINE_TYPE(FcProdRow, fc_prod_row, G_TYPE_OBJECT) | ||
| #define PROD_ROW_PIXBUF 0 | ||
| #define PROD_ROW_NAME   1 | ||
| /**********************************************************************//** | ||
|   Initialization method for FcImprRow class | ||
| **************************************************************************/ | ||
| ... | ... | |
|   return view; | ||
| } | ||
| /**********************************************************************//** | ||
|   Prod table cell bind function | ||
| **************************************************************************/ | ||
| static void prod_factory_bind(GtkSignalListItemFactory *self, | ||
|                               GtkListItem *list_item, | ||
|                               gpointer user_data) | ||
| { | ||
|   FcProdRow *row; | ||
|   GtkWidget *child = gtk_list_item_get_child(list_item); | ||
|   row = gtk_list_item_get_item(list_item); | ||
|   switch (GPOINTER_TO_INT(user_data)) { | ||
|   case PROD_ROW_PIXBUF: | ||
|     gtk_image_set_from_pixbuf(GTK_IMAGE(child), row->sprite); | ||
|     break; | ||
|   case PROD_ROW_NAME: | ||
|     { | ||
|       gtk_label_set_text(GTK_LABEL(child), row->name); | ||
|       if (row->useless) { | ||
|         PangoAttrList *attributes; | ||
|         PangoAttribute *attr; | ||
|         attributes = pango_attr_list_new(); | ||
|         attr = pango_attr_strikethrough_new(TRUE); | ||
|         pango_attr_list_insert(attributes, attr); | ||
|         gtk_label_set_attributes(GTK_LABEL(child), attributes); | ||
|       } | ||
|     } | ||
|     break; | ||
|   } | ||
| } | ||
| /**********************************************************************//** | ||
|   Prod table cell setup function | ||
| **************************************************************************/ | ||
| static void prod_factory_setup(GtkSignalListItemFactory *self, | ||
|                                GtkListItem *list_item, | ||
|                                gpointer user_data) | ||
| { | ||
|   switch (GPOINTER_TO_INT(user_data)) { | ||
|   case PROD_ROW_PIXBUF: | ||
|     gtk_list_item_set_child(list_item, gtk_image_new()); | ||
|     break; | ||
|   case PROD_ROW_NAME: | ||
|     gtk_list_item_set_child(list_item, gtk_label_new("")); | ||
|     break; | ||
|   } | ||
| } | ||
| /***********************************************************************//** | ||
|                   **** Overview page **** | ||
|  +- GtkWidget *page ------------------------------------------+ | ||
| ... | ... | |
|   gtk_notebook_append_page(GTK_NOTEBOOK(pdialog->notebook), page, label); | ||
|   if (!low_citydlg) { | ||
|     GtkListItemFactory *factory; | ||
|     GtkWidget *middle; | ||
|     GtkWidget *vbox; | ||
|     GtkWidget *hbox; | ||
| ... | ... | |
|                                           G_TYPE_INT, G_TYPE_BOOLEAN); | ||
|     pdialog->overview.change_production_store = production_store; | ||
|     factory = gtk_signal_list_item_factory_new(); | ||
|     g_signal_connect(factory, "bind", G_CALLBACK(prod_factory_bind), | ||
|                    GINT_TO_POINTER(PROD_ROW_PIXBUF)); | ||
|     g_signal_connect(factory, "setup", G_CALLBACK(prod_factory_setup), | ||
|                    GINT_TO_POINTER(PROD_ROW_PIXBUF)); | ||
|     bar = gtk_progress_bar_new(); | ||
|     gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(bar), TRUE); | ||
|     pdialog->overview.production_bar = bar; | ||