add png
[lttv.git] / ltt / branches / poly / lttv / modules / gui / controlflow / module.c
CommitLineData
ce0214a6 1/* This file is part of the Linux Trace Toolkit viewer
2 * Copyright (C) 2003-2004 Mathieu Desnoyers
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License Version 2 as
6 * published by the Free Software Foundation;
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
16 * MA 02111-1307, USA.
17 */
18
19
20
f0d936c0 21/*! \defgroup guiEvents libguiControlFlow: The GUI ControlFlow display plugin */
22/*\@{*/
23
24/*! \file guiControlFlow.c
25 * \brief Graphical plugin for showing control flow of a trace.
26 *
27 * This plugin adds a Control Flow Viewer functionnality to Linux TraceToolkit
28 * GUI when this plugin is loaded. The init and destroy functions add the
5ac76b22 29 * viewer's insertion menu item and toolbar icon by calling viewer.h's
f0d936c0 30 * API functions. Then, when a viewer's object is created, the constructor
31 * creates ans register through API functions what is needed to interact
32 * with the TraceSet window.
33 *
34 * This plugin uses the gdk library to draw the events and gtk to interact
35 * with the user.
36 *
37 * Author : Mathieu Desnoyers, June 2003
38 */
39
4e4d11b3 40#ifdef HAVE_CONFIG_H
41#include <config.h>
42#endif
43
558aa013 44#include <glib.h>
2a2fa4f0 45#include <lttv/lttv.h>
f0d936c0 46#include <lttv/module.h>
2d262115 47#include <lttvwindow/lttvwindow.h>
558aa013 48
d66666fe 49#include "cfv.h"
50#include "eventhooks.h"
558aa013 51
0c56e138 52#include "hGuiControlFlowInsert.xpm"
0de51231 53#include "hLegendInsert.xpm"
558aa013 54
2c82c4dc 55GQuark LTT_NAME_CPU;
56
558aa013 57/** Array containing instanced objects. Used when module is unloaded */
68997a22 58GSList *g_control_flow_data_list = NULL ;
558aa013 59
0de51231 60GSList *g_legend_list = NULL ;
558aa013 61
f0d936c0 62/*****************************************************************************
63 * Functions for module loading/unloading *
64 *****************************************************************************/
65/**
66 * plugin's init function
67 *
68 * This function initializes the Control Flow Viewer functionnality through the
69 * gtkTraceSet API.
70 */
08b1c66e 71static void init() {
558aa013 72
a56a1ba4 73 g_info("GUI ControlFlow Viewer init()");
74
ca0f8a8e 75 /* Register the toolbar insert button and menu entry*/
e025a729 76 lttvwindow_register_constructor("guicontrolflow",
77 "/",
ca0f8a8e 78 "Insert Control Flow Viewer",
79 hGuiControlFlowInsert_xpm,
80 "Insert Control Flow Viewer",
81 h_guicontrolflow);
0de51231 82
83 lttvwindow_register_constructor("guicontrolflowlegend",
84 "/",
85 "Popup Control Flow Viewer Legend",
86 hLegendInsert_xpm,
87 "Popup Control Flow Viewer Legend",
88 h_legend);
89
2c82c4dc 90
91 LTT_NAME_CPU = g_quark_from_string("/cpu");
f0d936c0 92}
93
94void destroy_walk(gpointer data, gpointer user_data)
95{
a56a1ba4 96 g_info("Walk destroy GUI Control Flow Viewer");
97 guicontrolflow_destructor_full((ControlFlowData*)data);
f0d936c0 98}
99
0de51231 100void destroy_legend_walk(gpointer data, gpointer user_data)
101{
102 g_info("Walk destroy GUI Control Flow Viewer");
103 legend_destructor((GtkWindow*)data);
104}
105
f0d936c0 106
107
108/**
109 * plugin's destroy function
110 *
111 * This function releases the memory reserved by the module and unregisters
112 * everything that has been registered in the gtkTraceSet API.
113 */
08b1c66e 114static void destroy() {
a56a1ba4 115 g_info("GUI Control Flow Viewer destroy()");
f0d936c0 116
68997a22 117 g_slist_foreach(g_control_flow_data_list, destroy_walk, NULL );
a56a1ba4 118
68997a22 119 g_slist_free(g_control_flow_data_list);
f7afe191 120
0de51231 121 g_slist_foreach(g_legend_list, destroy_legend_walk, NULL );
122
123 g_slist_free(g_control_flow_data_list);
124
ca0f8a8e 125 /* Unregister the toolbar insert button and menu entry */
126 lttvwindow_unregister_constructor(h_guicontrolflow);
0de51231 127 lttvwindow_unregister_constructor(h_legend);
558aa013 128}
08b1c66e 129
130
131LTTV_MODULE("guicontrolflow", "Control flow viewer", \
132 "Graphical module to view processes state and control flow", \
db2c9c14 133 init, destroy, "lttvwindow")
This page took 0.047502 seconds and 4 git commands to generate.