2 * Initial main.c file generated by Glade. Edit as required.
3 * Glade will not overwrite this file.
12 #include <lttv/lttv.h>
13 #include <lttv/attribute.h>
14 #include <lttv/hook.h>
15 #include <lttv/option.h>
16 #include <lttv/module.h>
17 #include <lttv/processTrace.h>
18 #include <lttv/state.h>
19 #include <lttv/stats.h>
20 #include <lttv/menu.h>
21 #include <lttv/toolbar.h>
23 #include "interface.h"
25 #include <lttv/mainWindow.h>
26 #include "callbacks.h"
29 static WindowCreationData win_creation_data
;
31 /** Array containing instanced objects. */
32 GSList
* g_main_window_list
= NULL
;
37 /* Initial trace from command line */
38 LttvTrace
*g_init_trace
= NULL
;
42 void lttv_trace_option(void *hook_data
)
46 trace
= ltt_trace_open(a_trace
);
47 if(trace
== NULL
) g_critical("cannot open trace %s", a_trace
);
48 g_init_trace
= lttv_trace_new(trace
);
51 /*****************************************************************************
52 * Functions for module loading/unloading *
53 *****************************************************************************/
55 * plugin's init function
57 * This function initializes the GUI.
60 static gboolean
window_creation_hook(void *hook_data
, void *call_data
)
62 WindowCreationData
* window_creation_data
= (WindowCreationData
*)hook_data
;
64 g_critical("GUI window_creation_hook()");
66 bindtextdomain (GETTEXT_PACKAGE
, PACKAGE_LOCALE_DIR
);
67 bind_textdomain_codeset (GETTEXT_PACKAGE
, "UTF-8");
68 textdomain (GETTEXT_PACKAGE
);
72 gtk_init (&(window_creation_data
->argc
), &(window_creation_data
->argv
));
74 add_pixmap_directory (PACKAGE_DATA_DIR
"/" PACKAGE
"/pixmaps");
75 add_pixmap_directory ("pixmaps");
76 add_pixmap_directory ("modules/gui/mainWin/pixmaps");
78 construct_main_window(NULL
, window_creation_data
, TRUE
);
85 G_MODULE_EXPORT
void init(LttvModule
*self
, int argc
, char *argv
[]) {
87 LttvAttributeValue value
;
89 // Global attributes only used for interaction with main() here.
90 LttvIAttribute
*attributes
= LTTV_IATTRIBUTE(lttv_global_attributes());
92 g_critical("GUI init()");
94 lttv_option_add("trace", 't',
95 "add a trace to the trace set to analyse",
96 "pathname of the directory containing the trace",
97 LTTV_OPT_STRING
, &a_trace
, lttv_trace_option
, NULL
);
99 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/main/before",
100 LTTV_POINTER
, &value
));
101 g_assert((main_hooks
= *(value
.v_pointer
)) != NULL
);
103 win_creation_data
.argc
= argc
;
104 win_creation_data
.argv
= argv
;
106 lttv_hooks_add(main_hooks
, window_creation_hook
, &win_creation_data
);
111 main_window_free(MainWindow
* mw
)
113 guint i
, nb
, ref_count
;
118 g_critical("begin remove");
119 lttv_hooks_destroy(mw
->traceset_info
->before_traceset
);
120 lttv_hooks_destroy(mw
->traceset_info
->after_traceset
);
121 lttv_hooks_destroy(mw
->traceset_info
->before_trace
);
122 lttv_hooks_destroy(mw
->traceset_info
->after_trace
);
123 lttv_hooks_destroy(mw
->traceset_info
->before_tracefile
);
124 lttv_hooks_destroy(mw
->traceset_info
->after_tracefile
);
125 lttv_hooks_destroy(mw
->traceset_info
->before_event
);
126 lttv_hooks_destroy(mw
->traceset_info
->after_event
);
127 g_critical("end remove");
129 if(mw
->traceset_info
->path
!= NULL
)
130 g_free(mw
->traceset_info
->path
);
131 if(mw
->traceset_info
->traceset_context
!= NULL
){
132 lttv_context_fini(LTTV_TRACESET_CONTEXT(mw
->traceset_info
->traceset_context
));
133 g_object_unref(mw
->traceset_info
->traceset_context
);
135 if(mw
->traceset_info
->traceset
!= NULL
) {
136 nb
= lttv_traceset_number(mw
->traceset_info
->traceset
);
137 for(i
= 0 ; i
< nb
; i
++) {
138 trace
= lttv_traceset_get(mw
->traceset_info
->traceset
, i
);
139 ref_count
= lttv_trace_get_ref_number(trace
);
141 ltt_trace_close(lttv_trace(trace
));
145 lttv_traceset_destroy(mw
->traceset_info
->traceset
);
147 g_object_unref(mw
->attributes
);
149 g_free(mw
->traceset_info
);
150 mw
->traceset_info
= NULL
;
152 g_main_window_list
= g_slist_remove(g_main_window_list
, mw
);
154 g_hash_table_destroy(mw
->hash_menu_item
);
155 g_hash_table_destroy(mw
->hash_toolbar_item
);
163 main_window_destructor(MainWindow
* mw
)
165 if(GTK_IS_WIDGET(mw
->mwindow
)){
166 gtk_widget_destroy(mw
->mwindow
);
167 // gtk_widget_destroy(mw->HelpContents);
168 // gtk_widget_destroy(mw->AboutBox);
171 //main_window_free called when the object mw in the widget is unref.
172 //main_window_free(mw);
176 void main_window_destroy_walk(gpointer data
, gpointer user_data
)
178 main_window_destructor((MainWindow
*)data
);
184 * plugin's destroy function
186 * This function releases the memory reserved by the module and unregisters
187 * everything that has been registered in the gtkTraceSet API.
189 G_MODULE_EXPORT
void destroy() {
191 LttvAttributeValue value
;
194 lttv_option_remove("trace");
196 lttv_hooks_remove_data(main_hooks
, window_creation_hook
, &win_creation_data
);
198 g_critical("GUI destroy()");
200 if(g_main_window_list
){
201 g_slist_foreach(g_main_window_list
, main_window_destroy_walk
, NULL
);
202 g_slist_free(g_main_window_list
);