48 #define INV_TABLE_AT(x, y, cols) inv_table_children[cols*y + x]
57 "inv_magical",
"inv_cursed",
"inv_unpaid",
"inv_locked",
"inv_applied"
68 #define NUM_INV_LISTS 11
69 #define INV_SHOW_ITEM 0x1
70 #define INV_SHOW_COLOR 0x2
86 int(*show_func) (
item *it);
98 guint page_num, gpointer user_data);
190 if (it->
env == NULL) {
219 GtkWidget *menu = gtk_menu_new();
220 GtkWidget *mi_examine = gtk_menu_item_new_with_mnemonic(
"_Examine");
221 GtkWidget *mi_apply = gtk_menu_item_new_with_mnemonic(
"_Apply");
222 GtkWidget *mi_mark = gtk_menu_item_new_with_mnemonic(
"_Mark");
225 mi_lock = gtk_menu_item_new_with_mnemonic(
"Un_lock");
227 mi_lock = gtk_menu_item_new_with_mnemonic(
"_Lock");
230 gchar *drop_action = tmp->
env ==
cpl.
ob ?
"_Drop" :
"_Pick Up";
233 drop_label = g_strdup_printf(
"%s %d", drop_action,
cpl.
count);
234 mi_drop = gtk_menu_item_new_with_mnemonic(drop_label);
237 mi_drop = gtk_menu_item_new_with_mnemonic(drop_action);
240 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi_examine);
241 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi_apply);
244 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi_mark);
245 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi_lock);
247 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi_drop);
248 g_signal_connect(mi_examine,
"activate", G_CALLBACK(
ma_examine), tmp);
249 g_signal_connect(mi_apply,
"activate", G_CALLBACK(
ma_apply), tmp);
250 g_signal_connect(mi_mark,
"activate", G_CALLBACK(
ma_mark), tmp);
251 g_signal_connect(mi_lock,
"activate", G_CALLBACK(
ma_lock), tmp);
252 g_signal_connect(mi_drop,
"activate", G_CALLBACK(
ma_drop), tmp);
253 gtk_widget_show_all(menu);
254 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, event->button, event->time);
266 if (event->button == 1) {
267 if (event->state & GDK_SHIFT_MASK) {
276 }
else if (event->button == 2) {
280 if (event->state & GDK_SHIFT_MASK) {
285 }
else if (event->button == 3) {
286 if (event->state & GDK_SHIFT_MASK) {
288 }
else if (event->state & GDK_CONTROL_MASK) {
304 "This item is locked. To drop it, first unlock by shift+leftclicking on it.");
347 GtkTreeModel *model, GtkTreePath *path,
348 gboolean path_currently_selected, gpointer userdata) {
350 GdkEventButton *event;
353 event = (GdkEventButton*)gtk_get_current_event();
355 LOG(
LOG_ERROR,
"inventory.c::list_selection_func",
"Unable to get event structure\n");
359 if (gtk_tree_model_get_iter(model, &iter, path)) {
362 gtk_tree_model_get(model, &iter,
LIST_OBJECT, &tmp, -1);
365 LOG(
LOG_ERROR,
"inventory.c::list_selection_func",
"Unable to get item structure\n");
387 GtkTreePath *path, gpointer user_data) {
391 model = gtk_tree_view_get_model(treeview);
393 gtk_tree_model_get(GTK_TREE_MODEL(model), iter,
LIST_OBJECT, &tmp, -1);
402 GtkCellRenderer *renderer;
403 GtkTreeViewColumn *column;
404 GtkTreeSelection *selection;
414 renderer = gtk_cell_renderer_text_new();
415 column = gtk_tree_view_column_new_with_attributes(
"", renderer,
418 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
419 gtk_tree_view_column_set_visible(column, FALSE);
420 gtk_tree_view_set_expander_column(GTK_TREE_VIEW(treeview), column);
423 renderer = gtk_cell_renderer_pixbuf_new();
431 g_object_set(G_OBJECT(renderer),
"xalign", 0.0, NULL);
432 column = gtk_tree_view_column_new_with_attributes(
"?", renderer,
436 gtk_tree_view_column_set_min_width(column,
image_size);
437 gtk_tree_view_column_set_sort_column_id(column,
LIST_TYPE);
438 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
440 renderer = gtk_cell_renderer_text_new();
441 column = gtk_tree_view_column_new_with_attributes(
"Name", renderer,
443 gtk_tree_view_column_set_expand(column, TRUE);
444 gtk_tree_view_column_set_sort_column_id(column,
LIST_BASENAME);
446 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
447 gtk_tree_view_column_add_attribute(column, renderer,
"background-gdk",
LIST_BACKGROUND);
448 gtk_tree_view_column_add_attribute(column, renderer,
"foreground-gdk",
LIST_FOREGROUND);
449 gtk_tree_view_column_add_attribute(column, renderer,
"font-desc",
LIST_FONT);
450 gtk_tree_view_set_expander_column(GTK_TREE_VIEW(treeview), column);
451 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
453 renderer = gtk_cell_renderer_text_new();
454 column = gtk_tree_view_column_new_with_attributes(
"Weight", renderer,
464 gtk_tree_view_column_set_min_width(column, 64);
465 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
467 gtk_tree_view_column_set_sort_column_id(column,
LIST_WEIGHT);
468 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
469 gtk_tree_view_column_add_attribute(column, renderer,
"background-gdk",
LIST_BACKGROUND);
470 gtk_tree_view_column_add_attribute(column, renderer,
"foreground-gdk",
LIST_FOREGROUND);
471 gtk_tree_view_column_add_attribute(column, renderer,
"font-desc",
LIST_FONT);
478 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
499 tmp_style = gtk_rc_get_style_by_paths(gtk_settings_get_default(), NULL,
Style_Names[i],
504 LOG(
LOG_INFO,
"inventory.c::inventory_get_styles",
"Unable to find style for %s",
527 "label_stat_encumbrance_current"));
529 "label_stat_encumbrance_max"));
550 PANGO_TYPE_FONT_DESCRIPTION);
562 PANGO_TYPE_FONT_DESCRIPTION);
578 GtkWidget *swindow, *image;
581 swindow = gtk_scrolled_window_new(NULL, NULL);
582 gtk_widget_show(swindow);
583 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swindow),
584 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
585 image = gtk_image_new_from_pixbuf(
586 gdk_pixbuf_new_from_resource(
inv_notebooks[i].icon_resource, NULL));
591 eb = gtk_event_box_new();
594 gtk_container_add(GTK_CONTAINER(eb), image);
595 gtk_widget_show(image);
598 gtk_widget_set_tooltip_text(image,
inv_notebooks[i].tooltip);
601 gtk_notebook_insert_page(GTK_NOTEBOOK(
inv_notebook), swindow, image, i);
606 g_signal_connect((gpointer)
inv_notebooks[i].treeview,
"row_collapsed",
611 gtk_container_add(GTK_CONTAINER(swindow),
inv_notebooks[i].treeview);
617 gtk_notebook_set_current_page(GTK_NOTEBOOK(
inv_notebook), 0);
622 "num_inv_notebook_pages (%d) does not match NUM_INV_LISTS(%d)\n",
656 if (gtk_notebook_get_current_page(GTK_NOTEBOOK(
inv_notebook)) ==
658 gtk_notebook_set_current_page(GTK_NOTEBOOK(
inv_notebook), 0);
666 if (!strncmp(params,
inv_notebooks[i].name, strlen(params))) {
667 gtk_notebook_set_current_page(GTK_NOTEBOOK(
inv_notebook), i);
671 snprintf(buf,
sizeof (buf),
"Unknown notebook page %s\n", params);
737 gboolean valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter);
740 gtk_tree_model_get(GTK_TREE_MODEL(store), &iter,
LIST_OBJECT, &curr_item, -1);
741 if (curr_item == it) {
742 gtk_tree_store_remove(store, &iter);
745 valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter);
782 GtkTreeIter *
new, GtkTreeIter *parent,
int color) {
783 char buf[256], buf1[256];
784 GdkColor *foreground = NULL, *background = NULL;
785 PangoFontDescription *font = NULL;
791 snprintf(buf,
sizeof (buf),
"%6.1f", it->
nrof * it->
weight);
793 snprintf(buf1, 255,
"%s %s", it->
d_name, it->
flags);
801 foreground = &row_style->text[GTK_STATE_NORMAL];
802 background = &row_style->base[GTK_STATE_NORMAL];
803 font = row_style->font_desc;
807 gtk_tree_store_append(store,
new, parent);
808 gtk_tree_store_set(store,
new,
843 for (tmp2 = tmp->
inv; tmp2; tmp2 = tmp2->
next) {
846 path = gtk_tree_model_get_path(GTK_TREE_MODEL(
store_look), &iter);
847 gtk_tree_view_expand_row(GTK_TREE_VIEW(
treeview_look), path, FALSE);
848 gtk_tree_path_free(path);
885 for (tmp2 = tmp->
inv; tmp2; tmp2 = tmp2->
next) {
904 path = gtk_tree_model_get_path(GTK_TREE_MODEL(
treestore), &iter);
905 gtk_tree_view_expand_row(GTK_TREE_VIEW(
inv_notebooks[tab].treeview), path, FALSE);
906 gtk_tree_path_free(path);
919 GtkWidget *widget, GdkEventButton *event, gpointer user_data) {
925 cairo_t *cr = gdk_cairo_create(dst);
927 gdk_window_clear(dst);
928 gdk_cairo_set_source_pixbuf(cr, (GdkPixbuf *) image, 0, 0);
941 GdkEventExpose *event, gpointer user_data) {
968 int x, y, rows, columns, num_items, i;
969 static int max_drawn = 0;
980 LOG(
LOG_ERROR,
"draw_inv_table",
"Too many items in inventory!");
985 gtk_widget_get_allocation(
inv_table, &size);
997 if (num_items > columns * rows) {
998 rows = num_items / columns;
999 if (num_items % columns) {
1004 gtk_table_resize(GTK_TABLE(
inv_table), rows, columns);
1015 x, x + 1, y, y + 1, GTK_FILL, GTK_FILL, 0, 0);
1043 handler = g_signal_handler_find((gpointer)
INV_TABLE_AT(x, y, columns),
1044 G_SIGNAL_MATCH_FUNC, 0, 0, NULL,
1049 g_signal_handler_disconnect((gpointer)
INV_TABLE_AT(x, y, columns), handler);
1052 handler = g_signal_handler_find((gpointer)
INV_TABLE_AT(x, y, columns),
1053 G_SIGNAL_MATCH_FUNC, 0, 0, NULL,
1057 g_signal_handler_disconnect((gpointer)
INV_TABLE_AT(x, y, columns), handler);
1064 gtk_widget_add_events(
INV_TABLE_AT(x, y, columns), GDK_ALL_EVENTS_MASK);
1066 g_signal_connect((gpointer)
INV_TABLE_AT(x, y, columns),
"button_press_event",
1070 g_signal_connect((gpointer)
INV_TABLE_AT(x, y, columns),
"expose_event",
1084 GTK_STATE_NORMAL, NULL);
1093 snprintf(buf, 255,
"%s %s", tmp->
d_name, tmp->
flags);
1094 gtk_widget_set_tooltip_text(
INV_TABLE_AT(x, y, columns), buf);
1111 for (i = num_items; i <= max_drawn; i++) {
1122 max_drawn = num_items;
1136 snprintf(buf,
sizeof (buf),
"%6.1f",
cpl.
ob->
weight);
1185 guint page_num, gpointer user_data) {
1188 oldpage = gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook));
1203 GtkTreeStore *store;
1205 page = gtk_notebook_get_current_page(GTK_NOTEBOOK(
inv_notebook));
1216 valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter);
1219 gtk_tree_model_get(GTK_TREE_MODEL(store), &iter,
1238 gtk_tree_store_set(store, &iter,
1243 valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter);
1256 valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(
store_look), &iter);
1259 gtk_tree_model_get(GTK_TREE_MODEL(
store_look), &iter,
1282 valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(
store_look), &iter);