comparison src/audacious/ui_fileinfo.c @ 4167:7c6b3b6def1a

Populate the raw metadata treeview.
author William Pitcock <nenolod@atheme.org>
date Thu, 10 Jan 2008 07:14:10 -0600
parents 983e6b3e72f3
children e105374c4fc3
comparison
equal deleted inserted replaced
4166:983e6b3e72f3 4167:7c6b3b6def1a
83 GtkWidget *label_bitrate; 83 GtkWidget *label_bitrate;
84 GtkWidget *btn_apply; 84 GtkWidget *btn_apply;
85 GtkWidget *label_mini_status; 85 GtkWidget *label_mini_status;
86 GtkWidget *arrow_rawdata; 86 GtkWidget *arrow_rawdata;
87 GtkWidget *treeview_rawdata; 87 GtkWidget *treeview_rawdata;
88
89 enum {
90 RAWDATA_KEY,
91 RAWDATA_VALUE,
92 RAWDATA_N_COLS
93 };
88 94
89 static gchar *current_file = NULL; 95 static gchar *current_file = NULL;
90 static InputPlugin *current_ip = NULL; 96 static InputPlugin *current_ip = NULL;
91 static gboolean something_changed = FALSE; 97 static gboolean something_changed = FALSE;
92 98
474 GtkWidget *bbox_close; 480 GtkWidget *bbox_close;
475 GtkWidget *btn_close; 481 GtkWidget *btn_close;
476 GtkWidget *alignment; 482 GtkWidget *alignment;
477 GtkWidget *separator; 483 GtkWidget *separator;
478 GtkWidget *scrolledwindow; 484 GtkWidget *scrolledwindow;
485 GtkTreeViewColumn *column;
486 GtkCellRenderer *renderer;
479 gint i; 487 gint i;
480 488
481 fileinfo_win = gtk_window_new(GTK_WINDOW_TOPLEVEL); 489 fileinfo_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
482 gtk_container_set_border_width(GTK_CONTAINER(fileinfo_win), 6); 490 gtk_container_set_border_width(GTK_CONTAINER(fileinfo_win), 6);
483 gtk_window_set_title(GTK_WINDOW(fileinfo_win), _("Track Information")); 491 gtk_window_set_title(GTK_WINDOW(fileinfo_win), _("Track Information"));
709 717
710 treeview_rawdata = gtk_tree_view_new(); 718 treeview_rawdata = gtk_tree_view_new();
711 gtk_container_add(GTK_CONTAINER(scrolledwindow), treeview_rawdata); 719 gtk_container_add(GTK_CONTAINER(scrolledwindow), treeview_rawdata);
712 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(treeview_rawdata), TRUE); 720 gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(treeview_rawdata), TRUE);
713 gtk_tree_view_set_reorderable(GTK_TREE_VIEW(treeview_rawdata), TRUE); 721 gtk_tree_view_set_reorderable(GTK_TREE_VIEW(treeview_rawdata), TRUE);
722
723 column = gtk_tree_view_column_new();
724 gtk_tree_view_column_set_title(column, _("Key"));
725 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
726 gtk_tree_view_column_set_spacing(column, 4);
727 gtk_tree_view_column_set_resizable(column, FALSE);
728 gtk_tree_view_column_set_fixed_width(column, 50);
729
730 renderer = gtk_cell_renderer_text_new();
731 gtk_tree_view_column_pack_start(column, renderer, FALSE);
732 gtk_tree_view_column_set_attributes(column, renderer,
733 "text", RAWDATA_KEY, NULL);
734 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview_rawdata), column);
735
736 column = gtk_tree_view_column_new();
737 gtk_tree_view_column_set_title(column, _("Value"));
738 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
739 gtk_tree_view_column_set_spacing(column, 4);
740 gtk_tree_view_column_set_resizable(column, FALSE);
741 gtk_tree_view_column_set_fixed_width(column, 50);
742
743 renderer = gtk_cell_renderer_text_new();
744 gtk_tree_view_column_pack_start(column, renderer, FALSE);
745 gtk_tree_view_column_set_attributes(column, renderer,
746 "text", RAWDATA_VALUE, NULL);
747 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview_rawdata), column);
714 748
715 hbox_status_and_bbox = gtk_hbox_new(FALSE, 0); 749 hbox_status_and_bbox = gtk_hbox_new(FALSE, 0);
716 gtk_box_pack_start (GTK_BOX (vbox0), hbox_status_and_bbox, FALSE, FALSE, 0); 750 gtk_box_pack_start (GTK_BOX (vbox0), hbox_status_and_bbox, FALSE, FALSE, 0);
717 751
718 label_mini_status = gtk_label_new("<span size=\"small\"></span>"); 752 label_mini_status = gtk_label_new("<span size=\"small\"></span>");
741 void 775 void
742 fileinfo_show_for_tuple(Tuple *tuple, gboolean updating_enabled) 776 fileinfo_show_for_tuple(Tuple *tuple, gboolean updating_enabled)
743 { 777 {
744 gchar *tmp, *tmp_utf = NULL; 778 gchar *tmp, *tmp_utf = NULL;
745 GdkPixbuf *icon = NULL; 779 GdkPixbuf *icon = NULL;
780 GtkTreeIter iter;
781 GtkListStore *store;
782 mowgli_dictionary_iteration_state_t state;
783 TupleValue *tvalue;
784 gint i;
746 785
747 if (tuple == NULL) 786 if (tuple == NULL)
748 return; 787 return;
749 788
750 if(!updating_enabled) { 789 if(!updating_enabled) {
809 848
810 if (label_mini_status != NULL) { 849 if (label_mini_status != NULL) {
811 gtk_label_set_text(GTK_LABEL(label_mini_status), "<span size=\"small\"></span>"); 850 gtk_label_set_text(GTK_LABEL(label_mini_status), "<span size=\"small\"></span>");
812 gtk_label_set_use_markup(GTK_LABEL(label_mini_status), TRUE); 851 gtk_label_set_use_markup(GTK_LABEL(label_mini_status), TRUE);
813 } 852 }
814 853
854 store = gtk_list_store_new(RAWDATA_N_COLS, G_TYPE_STRING, G_TYPE_STRING);
855
856 for (i = 0; i < FIELD_LAST; i++) {
857 gchar *key, *value;
858
859 if (!tuple->values[i])
860 continue;
861
862 if (tuple->values[i]->type != TUPLE_INT && tuple->values[i]->value.string)
863 value = g_strdup(tuple->values[i]->value.string);
864 else if (tuple->values[i]->type == TUPLE_INT)
865 value = g_strdup_printf("%d", tuple->values[i]->value.integer);
866 else
867 continue;
868
869 key = g_strdup(tuple_fields[i].name);
870
871 gtk_list_store_append(store, &iter);
872 gtk_list_store_set(store, &iter,
873 RAWDATA_KEY, key,
874 RAWDATA_VALUE, value, -1);
875
876 g_free(key);
877 g_free(value);
878 }
879
880 /* non-standard values are stored in a dictionary. */
881 MOWGLI_DICTIONARY_FOREACH(tvalue, &state, tuple->dict) {
882 gchar *key, *value;
883
884 if (tvalue->type != TUPLE_INT && tvalue->value.string)
885 value = g_strdup(tvalue->value.string);
886 else if (tvalue->type == TUPLE_INT)
887 value = g_strdup_printf("%d", tvalue->value.integer);
888 else
889 continue;
890
891 key = g_strdup(state.cur->key);
892
893 gtk_list_store_append(store, &iter);
894 gtk_list_store_set(store, &iter,
895 RAWDATA_KEY, key,
896 RAWDATA_VALUE, value, -1);
897
898 g_free(key);
899 g_free(value);
900 }
901
902 gtk_tree_view_set_model(GTK_TREE_VIEW(treeview_rawdata), GTK_TREE_MODEL(store));
903 g_object_unref(store);
904
815 if (!GTK_WIDGET_VISIBLE(fileinfo_win)) 905 if (!GTK_WIDGET_VISIBLE(fileinfo_win))
816 gtk_widget_show(fileinfo_win); 906 gtk_widget_show(fileinfo_win);
817 } 907 }
818 908
819 void 909 void