27 #include "../../pixmaps/all.xpm"
28 #include "../../pixmaps/coin.xpm"
29 #include "../../pixmaps/hand.xpm"
30 #include "../../pixmaps/hand2.xpm"
31 #include "../../pixmaps/lock.xpm"
32 #include "../../pixmaps/mag.xpm"
33 #include "../../pixmaps/nonmag.xpm"
34 #include "../../pixmaps/skull.xpm"
35 #include "../../pixmaps/unlock.xpm"
36 #include "../../pixmaps/unidentified.xpm"
59 #define INV_TABLE_AT(x, y, cols) inv_table_children[cols*y + x]
68 "inv_magical",
"inv_cursed",
"inv_unpaid",
"inv_locked",
"inv_applied"
79 #define NUM_INV_LISTS 11
80 #define INV_SHOW_ITEM 0x1
81 #define INV_SHOW_COLOR 0x2
96 const char *
const *
xpm;
97 int(*show_func) (
item *it);
109 guint page_num, gpointer user_data);
201 if (it->
env == NULL) {
230 GtkWidget *menu = gtk_menu_new();
231 GtkWidget *mi_examine = gtk_menu_item_new_with_mnemonic(
"_Examine");
232 GtkWidget *mi_apply = gtk_menu_item_new_with_mnemonic(
"_Apply");
233 GtkWidget *mi_mark = gtk_menu_item_new_with_mnemonic(
"_Mark");
236 mi_lock = gtk_menu_item_new_with_mnemonic(
"Un_lock");
238 mi_lock = gtk_menu_item_new_with_mnemonic(
"_Lock");
241 gchar *drop_action = tmp->
env ==
cpl.
ob ?
"_Drop" :
"_Pick Up";
244 drop_label = g_strdup_printf(
"%s %d", drop_action,
cpl.
count);
245 mi_drop = gtk_menu_item_new_with_mnemonic(drop_label);
248 mi_drop = gtk_menu_item_new_with_mnemonic(drop_action);
251 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi_examine);
252 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi_apply);
255 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi_mark);
256 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi_lock);
258 gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi_drop);
259 g_signal_connect(mi_examine,
"activate", G_CALLBACK(
ma_examine), tmp);
260 g_signal_connect(mi_apply,
"activate", G_CALLBACK(
ma_apply), tmp);
261 g_signal_connect(mi_mark,
"activate", G_CALLBACK(
ma_mark), tmp);
262 g_signal_connect(mi_lock,
"activate", G_CALLBACK(
ma_lock), tmp);
263 g_signal_connect(mi_drop,
"activate", G_CALLBACK(
ma_drop), tmp);
264 gtk_widget_show_all(menu);
265 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, event->button, event->time);
277 if (event->button == 1) {
278 if (event->state & GDK_SHIFT_MASK) {
287 }
else if (event->button == 2) {
291 if (event->state & GDK_SHIFT_MASK) {
296 }
else if (event->button == 3) {
297 if (event->state & GDK_SHIFT_MASK) {
299 }
else if (event->state & GDK_CONTROL_MASK) {
315 "This item is locked. To drop it, first unlock by shift+leftclicking on it.");
358 GtkTreeModel *model, GtkTreePath *path,
359 gboolean path_currently_selected, gpointer userdata) {
361 GdkEventButton *event;
364 event = (GdkEventButton*)gtk_get_current_event();
366 LOG(
LOG_ERROR,
"inventory.c::list_selection_func",
"Unable to get event structure\n");
370 if (gtk_tree_model_get_iter(model, &iter, path)) {
373 gtk_tree_model_get(model, &iter,
LIST_OBJECT, &tmp, -1);
376 LOG(
LOG_ERROR,
"inventory.c::list_selection_func",
"Unable to get item structure\n");
398 GtkTreePath *path, gpointer user_data) {
402 model = gtk_tree_view_get_model(treeview);
404 gtk_tree_model_get(GTK_TREE_MODEL(model), iter,
LIST_OBJECT, &tmp, -1);
413 GtkCellRenderer *renderer;
414 GtkTreeViewColumn *column;
415 GtkTreeSelection *selection;
425 renderer = gtk_cell_renderer_text_new();
426 column = gtk_tree_view_column_new_with_attributes(
"", renderer,
429 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
430 gtk_tree_view_column_set_visible(column, FALSE);
431 gtk_tree_view_set_expander_column(GTK_TREE_VIEW(treeview), column);
434 renderer = gtk_cell_renderer_pixbuf_new();
442 g_object_set(G_OBJECT(renderer),
"xalign", 0.0, NULL);
443 column = gtk_tree_view_column_new_with_attributes(
"?", renderer,
447 gtk_tree_view_column_set_min_width(column,
image_size);
448 gtk_tree_view_column_set_sort_column_id(column,
LIST_TYPE);
449 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
451 renderer = gtk_cell_renderer_text_new();
452 column = gtk_tree_view_column_new_with_attributes(
"Name", renderer,
454 gtk_tree_view_column_set_expand(column, TRUE);
455 gtk_tree_view_column_set_sort_column_id(column,
LIST_BASENAME);
457 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
458 gtk_tree_view_column_add_attribute(column, renderer,
"background-gdk",
LIST_BACKGROUND);
459 gtk_tree_view_column_add_attribute(column, renderer,
"foreground-gdk",
LIST_FOREGROUND);
460 gtk_tree_view_column_add_attribute(column, renderer,
"font-desc",
LIST_FONT);
461 gtk_tree_view_set_expander_column(GTK_TREE_VIEW(treeview), column);
462 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
464 renderer = gtk_cell_renderer_text_new();
465 column = gtk_tree_view_column_new_with_attributes(
"Weight", renderer,
475 gtk_tree_view_column_set_min_width(column, 64);
476 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
478 gtk_tree_view_column_set_sort_column_id(column,
LIST_WEIGHT);
479 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
480 gtk_tree_view_column_add_attribute(column, renderer,
"background-gdk",
LIST_BACKGROUND);
481 gtk_tree_view_column_add_attribute(column, renderer,
"foreground-gdk",
LIST_FOREGROUND);
482 gtk_tree_view_column_add_attribute(column, renderer,
"font-desc",
LIST_FONT);
489 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
510 tmp_style = gtk_rc_get_style_by_paths(gtk_settings_get_default(), NULL,
Style_Names[i],
515 LOG(
LOG_INFO,
"inventory.c::inventory_get_styles",
"Unable to find style for %s",
538 "label_stat_encumbrance_current"));
540 "label_stat_encumbrance_max"));
561 PANGO_TYPE_FONT_DESCRIPTION);
573 PANGO_TYPE_FONT_DESCRIPTION);
589 GtkWidget *swindow, *image;
592 swindow = gtk_scrolled_window_new(NULL, NULL);
593 gtk_widget_show(swindow);
594 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swindow),
595 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
596 image = gtk_image_new_from_pixbuf(
597 gdk_pixbuf_new_from_xpm_data((
const char**)
inv_notebooks[i].xpm));
602 eb = gtk_event_box_new();
605 gtk_container_add(GTK_CONTAINER(eb), image);
606 gtk_widget_show(image);
609 gtk_widget_set_tooltip_text(image,
inv_notebooks[i].tooltip);
612 gtk_notebook_insert_page(GTK_NOTEBOOK(
inv_notebook), swindow, image, i);
617 g_signal_connect((gpointer)
inv_notebooks[i].treeview,
"row_collapsed",
622 gtk_container_add(GTK_CONTAINER(swindow),
inv_notebooks[i].treeview);
628 gtk_notebook_set_current_page(GTK_NOTEBOOK(
inv_notebook), 0);
633 "num_inv_notebook_pages (%d) does not match NUM_INV_LISTS(%d)\n",
667 if (gtk_notebook_get_current_page(GTK_NOTEBOOK(
inv_notebook)) ==
669 gtk_notebook_set_current_page(GTK_NOTEBOOK(
inv_notebook), 0);
677 if (!strncmp(params,
inv_notebooks[i].name, strlen(params))) {
678 gtk_notebook_set_current_page(GTK_NOTEBOOK(
inv_notebook), i);
682 snprintf(buf,
sizeof (buf),
"Unknown notebook page %s\n", params);
748 gboolean valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter);
751 gtk_tree_model_get(GTK_TREE_MODEL(store), &iter,
LIST_OBJECT, &curr_item, -1);
752 if (curr_item == it) {
753 gtk_tree_store_remove(store, &iter);
756 valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter);
793 GtkTreeIter *
new, GtkTreeIter *parent,
int color) {
794 char buf[256], buf1[256];
795 GdkColor *foreground = NULL, *background = NULL;
796 PangoFontDescription *font = NULL;
802 snprintf(buf,
sizeof (buf),
"%6.1f", it->
nrof * it->
weight);
804 snprintf(buf1, 255,
"%s %s", it->
d_name, it->
flags);
812 foreground = &row_style->text[GTK_STATE_NORMAL];
813 background = &row_style->base[GTK_STATE_NORMAL];
814 font = row_style->font_desc;
818 gtk_tree_store_append(store,
new, parent);
819 gtk_tree_store_set(store,
new,
854 for (tmp2 = tmp->
inv; tmp2; tmp2 = tmp2->
next) {
857 path = gtk_tree_model_get_path(GTK_TREE_MODEL(
store_look), &iter);
858 gtk_tree_view_expand_row(GTK_TREE_VIEW(
treeview_look), path, FALSE);
859 gtk_tree_path_free(path);
896 for (tmp2 = tmp->
inv; tmp2; tmp2 = tmp2->
next) {
915 path = gtk_tree_model_get_path(GTK_TREE_MODEL(
treestore), &iter);
916 gtk_tree_view_expand_row(GTK_TREE_VIEW(
inv_notebooks[tab].treeview), path, FALSE);
917 gtk_tree_path_free(path);
930 GtkWidget *widget, GdkEventButton *event, gpointer user_data) {
936 cairo_t *cr = gdk_cairo_create(dst);
938 gdk_window_clear(dst);
939 gdk_cairo_set_source_pixbuf(cr, (GdkPixbuf *) image, 0, 0);
952 GdkEventExpose *event, gpointer user_data) {
962 tmp = (
item*) user_data;
982 int x, y, rows, columns, num_items, i;
983 static int max_drawn = 0;
994 LOG(
LOG_ERROR,
"draw_inv_table",
"Too many items in inventory!");
999 gtk_widget_get_allocation(
inv_table, &size);
1011 if (num_items > columns * rows) {
1012 rows = num_items / columns;
1013 if (num_items % columns) {
1018 gtk_table_resize(GTK_TABLE(
inv_table), rows, columns);
1029 x, x + 1, y, y + 1, GTK_FILL, GTK_FILL, 0, 0);
1057 handler = g_signal_handler_find((gpointer)
INV_TABLE_AT(x, y, columns),
1058 G_SIGNAL_MATCH_FUNC, 0, 0, NULL,
1063 g_signal_handler_disconnect((gpointer)
INV_TABLE_AT(x, y, columns), handler);
1066 handler = g_signal_handler_find((gpointer)
INV_TABLE_AT(x, y, columns),
1067 G_SIGNAL_MATCH_FUNC, 0, 0, NULL,
1071 g_signal_handler_disconnect((gpointer)
INV_TABLE_AT(x, y, columns), handler);
1078 gtk_widget_add_events(
INV_TABLE_AT(x, y, columns), GDK_ALL_EVENTS_MASK);
1080 g_signal_connect((gpointer)
INV_TABLE_AT(x, y, columns),
"button_press_event",
1084 g_signal_connect((gpointer)
INV_TABLE_AT(x, y, columns),
"expose_event",
1098 GTK_STATE_NORMAL, NULL);
1107 snprintf(buf, 255,
"%s %s", tmp->
d_name, tmp->
flags);
1108 gtk_widget_set_tooltip_text(
INV_TABLE_AT(x, y, columns), buf);
1125 for (i = num_items; i <= max_drawn; i++) {
1136 max_drawn = num_items;
1150 snprintf(buf,
sizeof (buf),
"%6.1f",
cpl.
ob->
weight);
1199 guint page_num, gpointer user_data) {
1202 oldpage = gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook));
1217 GtkTreeStore *store;
1219 page = gtk_notebook_get_current_page(GTK_NOTEBOOK(
inv_notebook));
1230 valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter);
1233 gtk_tree_model_get(GTK_TREE_MODEL(store), &iter,
1252 gtk_tree_store_set(store, &iter,
1257 valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter);
1270 valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(
store_look), &iter);
1273 gtk_tree_model_get(GTK_TREE_MODEL(
store_look), &iter,
1296 valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(
store_look), &iter);