aboutsummaryrefslogtreecommitdiffstats
path: root/trace-view.c
diff options
context:
space:
mode:
Diffstat (limited to 'trace-view.c')
-rw-r--r--trace-view.c109
1 files changed, 109 insertions, 0 deletions
diff --git a/trace-view.c b/trace-view.c
index 59e7e1a..8d121d1 100644
--- a/trace-view.c
+++ b/trace-view.c
@@ -870,3 +870,112 @@ void trace_view_search_setup(GtkBox *box, GtkTreeView *treeview)
870 G_CALLBACK (search_tree), 870 G_CALLBACK (search_tree),
871 (gpointer) info); 871 (gpointer) info);
872} 872}
873
874int trace_view_save_filters(struct tracecmd_xml_handle *handle,
875 GtkTreeView *trace_tree)
876{
877 struct event_filter *event_filter;
878 GtkTreeModel *model;
879 TraceViewStore *store;
880 gboolean all_events;
881
882 model = gtk_tree_view_get_model(trace_tree);
883 if (!model)
884 return -1;
885
886 store = TRACE_VIEW_STORE(model);
887
888 tracecmd_xml_start_system(handle, "TraceView");
889
890 all_events = trace_view_store_get_all_events_enabled(store);
891 event_filter = trace_view_store_get_event_filter(store);
892
893 tracecmd_xml_start_sub_system(handle, "EventFilter");
894
895 if (all_events || !event_filter)
896 tracecmd_xml_write_element(handle, "FilterType", "all events");
897 else {
898 tracecmd_xml_write_element(handle, "FilterType", "filter");
899 trace_filter_save_events(handle, event_filter);
900 }
901
902 tracecmd_xml_end_sub_system(handle);
903
904 tracecmd_xml_end_system(handle);
905
906 return 0;
907}
908
909static int load_event_filter(TraceViewStore *store,
910 struct tracecmd_xml_handle *handle,
911 struct tracecmd_xml_system_node *node)
912{
913 struct tracecmd_xml_system_node *child;
914 struct event_filter *event_filter;
915 const char *name;
916 const char *value;
917
918 event_filter = trace_view_store_get_event_filter(store);
919
920 child = tracecmd_xml_node_child(node);
921 name = tracecmd_xml_node_type(child);
922 if (strcmp(name, "FilterType") != 0)
923 return -1;
924
925 value = tracecmd_xml_node_value(handle, child);
926 /* Do nothing with all events enabled */
927 if (strcmp(value, "all events") == 0)
928 return 0;
929
930 node = tracecmd_xml_node_next(child);
931 if (!node)
932 return -1;
933
934 trace_view_store_clear_all_events_enabled(store);
935
936 trace_filter_load_events(event_filter, handle, node);
937
938 return 0;
939}
940
941int trace_view_load_filters(struct tracecmd_xml_handle *handle,
942 GtkTreeView *trace_tree)
943{
944 struct tracecmd_xml_system *system;
945 struct tracecmd_xml_system_node *syschild;
946 GtkTreeModel *model;
947 TraceViewStore *store;
948 const char *name;
949
950 model = gtk_tree_view_get_model(trace_tree);
951 if (!model)
952 return -1;
953
954 store = TRACE_VIEW_STORE(model);
955
956 system = tracecmd_xml_find_system(handle, "TraceView");
957 if (!system)
958 return -1;
959
960 syschild = tracecmd_xml_system_node(system);
961 if (!syschild)
962 goto out_free_sys;
963
964 do {
965 name = tracecmd_xml_node_type(syschild);
966
967 if (strcmp(name, "EventFilter") == 0)
968 load_event_filter(store, handle, syschild);
969
970 syschild = tracecmd_xml_node_next(syschild);
971 } while (syschild);
972
973 tracecmd_xml_free_system(system);
974
975 update_rows(trace_tree, store);
976 return 0;
977
978 out_free_sys:
979 tracecmd_xml_free_system(system);
980 return -1;
981}