+++ /dev/null
-/* This file is part of the Linux Trace Toolkit viewer
- * Copyright (C) 2006 Parisa heidari (inspired from CFV by Mathieu Desnoyers)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License Version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib.h>
-#include <gtk/gtk.h>
-#include <gdk/gdk.h>
-#include <lttv/lttv.h>
-#include <lttvwindow/lttvwindow.h>
-
-#include "histocfv.h"
-#include "histodrawing.h"
-#include "histobuttonwidget.h"
-#include "histoeventhooks.h"
-
-#define PREDEFINED_HEIGHT 5000
-
-extern GSList *g_histo_control_flow_data_list;
-
-static gboolean
-header_size_allocate(GtkWidget *widget,
- GtkAllocation *allocation,
- gpointer user_data)
-{
- histoDrawing_t *drawing = (histoDrawing_t*)user_data;
-
- gtk_widget_set_size_request(drawing->ruler, -1, allocation->height);
- //gtk_widget_queue_resize(drawing->padding);
- //gtk_widget_queue_resize(drawing->ruler);
- gtk_container_check_resize(GTK_CONTAINER(drawing->ruler_hbox));
- return 0;
-}
-
-
-/*****************************************************************************
- * Histo Control Flow Viewer class implementation *
- *****************************************************************************/
-/**
- * Histo Control Flow Viewer's constructor
- *
- * This constructor is given as a parameter to the menuitem and toolbar button
- * registration. It creates the drawing widget.
- * @param ParentWindow A pointer to the parent window.
- * @return The widget created.
- */
-HistoControlFlowData *
-guihistocontrolflow(LttvPluginTab *ptab)
-{
- GtkWidget *button_widget, *drawing_widget, *drawing_area;
- GtkWidget *buttonP,*buttonM;
- histoDrawing_t *drawing;
- HistoControlFlowData* histo_control_flow_data = g_new(HistoControlFlowData,1) ;
-
- histo_control_flow_data->ptab = ptab;
- histo_control_flow_data->tab = ptab->tab;
- histo_control_flow_data->max_height = PREDEFINED_HEIGHT;
-
- /*histo_control_flow_data->v_adjust =
- GTK_ADJUSTMENT(gtk_adjustment_new( 0.0, // Value
- 0.0, // Lower
- 0.0, // Upper
- 0.0, // Step inc.
- 0.0, // Page inc.
- 0.0)); // page size */
-
- // Create the drawing
- histo_control_flow_data->drawing = histo_drawing_construct(histo_control_flow_data);
-
- drawing = histo_control_flow_data->drawing;
- drawing_widget = histo_drawing_get_widget(drawing);
-
- drawing_area = histo_drawing_get_drawing_area(drawing);
-
- histo_control_flow_data->number_of_process = 0;
-
- ///histo_control_flow_data->background_info_waiting = 0;
-
- // Create the Button widget
- histo_control_flow_data->buttonwidget = histo_buttonwidget_construct(histo_control_flow_data);
-
- button_widget = histo_buttonwidget_get_widget( histo_control_flow_data-> buttonwidget);
- buttonP =histo_control_flow_data-> buttonwidget->buttonP;
- buttonM =histo_control_flow_data-> buttonwidget->buttonM;
-
- //set the size of ruler fix
- gtk_widget_set_size_request(histo_control_flow_data->drawing->ruler, -1, 25);
- gtk_container_check_resize(GTK_CONTAINER(histo_control_flow_data->drawing->ruler_hbox));
-
-/*//or set the size of ruler by button P
- g_signal_connect (G_OBJECT(buttonP),
- "size-allocate",
- G_CALLBACK(header_size_allocate),
- (gpointer)histo_control_flow_data->drawing);*/
-
-
- ///histo_control_flow_data->h_paned = gtk_hpaned_new();
-
- ///changed for histogram
- histo_control_flow_data->box = gtk_hbox_new(FALSE, 0);
- histo_control_flow_data->ev_box = gtk_event_box_new();
-
- /// histo_control_flow_data->top_widget =gtk_event_box_new();
- gtk_container_add(GTK_CONTAINER(histo_control_flow_data->ev_box),
- drawing_widget);
- ///Now add button widget and drawing area on the top_widget.
- gtk_box_pack_start (GTK_BOX (histo_control_flow_data->box),
- button_widget,FALSE,FALSE, 10);
- gtk_box_pack_end (GTK_BOX (histo_control_flow_data->box),
- histo_control_flow_data->ev_box,TRUE,TRUE, 0);
- histo_control_flow_data->top_widget = histo_control_flow_data->box;
-
- /*gtk_container_add(GTK_CONTAINER(histo_control_flow_data->box),
- histo_control_flow_data->h_paned);
-
- gtk_paned_pack1(GTK_PANED(histo_control_flow_data->h_paned),
- button_widget->vbox1, FALSE, TRUE);
- gtk_paned_pack2(GTK_PANED(histo_control_flow_data->h_paned),
- drawing_widget, TRUE, TRUE);
- */
- gtk_container_set_border_width(GTK_CONTAINER(histo_control_flow_data->ev_box), 1);
-
- // Set the size of the drawing area
- //drawing_Resize(drawing, h, w);
-
- // Get trace statistics
- //histo_control_flow_data->Trace_Statistics = get_trace_statistics(Trace);
-
- gtk_widget_show(drawing_widget);
- gtk_widget_show(button_widget);
- /*gtk_widget_show(histo_control_flow_data->h_paned);*/
- gtk_widget_show(histo_control_flow_data->box);
- gtk_widget_show(histo_control_flow_data->ev_box);
- gtk_widget_show(histo_control_flow_data->top_widget);
- g_object_set_data_full(
- G_OBJECT(histo_control_flow_data->top_widget),
- "histo_control_flow_data",
- histo_control_flow_data,
- (GDestroyNotify)guihistocontrolflow_destructor);
-
- g_object_set_data(
- G_OBJECT(drawing_area),
- "histo_control_flow_data",
- histo_control_flow_data);
-
- g_histo_control_flow_data_list = g_slist_append(
- g_histo_control_flow_data_list,
- histo_control_flow_data);
- histo_control_flow_data->number_of_process =g_array_new (FALSE,
- TRUE,
- sizeof(guint));
- g_array_set_size (histo_control_flow_data->number_of_process,
- drawing_area->allocation.width);
-
- //WARNING : The widget must be
- //inserted in the main window before the drawing area
- //can be configured (and this must happend before sending
- //data)
-
- return histo_control_flow_data;
-
-}
-
-/* Destroys widget also */
-void guihistocontrolflow_destructor_full(HistoControlFlowData *histo_control_flow_data)
-{
- g_info("HISTOCFV.c : guihistocontrolflow_destructor_full, %p", histo_control_flow_data);
- /* May already have been done by GTK window closing */
- if(GTK_IS_WIDGET(guihistocontrolflow_get_widget(histo_control_flow_data)))
- gtk_widget_destroy(guihistocontrolflow_get_widget(histo_control_flow_data));
- //histo_control_flow_data->mw = NULL;
- //FIXME guihistocontrolflow_destructor(histo_control_flow_data);
-}
-
-/* When this destructor is called, the widgets are already disconnected */
-void guihistocontrolflow_destructor(HistoControlFlowData *histo_control_flow_data)
-{
- Tab *tab = histo_control_flow_data->tab;
-
- g_info("HISTOCFV.c : guihistocontrolflow_destructor, %p", histo_control_flow_data);
- g_info("%p, %p, %p", histo_update_time_window_hook, histo_control_flow_data, tab);
- if(GTK_IS_WIDGET(guihistocontrolflow_get_widget(histo_control_flow_data)))
- g_info("widget still exists");
-
- /* ButtonWidget is removed with it's widget */
- //buttonwidget_destroy(histo_control_flow_data->buttonwidget);
- if(tab != NULL)
- {
- // Delete reading hooks
- lttvwindow_unregister_traceset_notify(tab,
- histo_traceset_notify,
- histo_control_flow_data);
-
- lttvwindow_unregister_time_window_notify(tab,
- histo_update_time_window_hook,
- histo_control_flow_data);
-
- lttvwindow_unregister_current_time_notify(tab,
- histo_update_current_time_hook,
- histo_control_flow_data);
-
- lttvwindow_unregister_redraw_notify(tab, histo_redraw_notify, histo_control_flow_data);
- lttvwindow_unregister_continue_notify(tab,
- histo_continue_notify,
- histo_control_flow_data);
-
- lttvwindow_events_request_remove_all(histo_control_flow_data->tab,
- histo_control_flow_data);
-
- lttvwindow_unregister_filter_notify(tab,
- histo_filter_changed, histo_control_flow_data);
-
- }
- lttvwindowtraces_background_notify_remove(histo_control_flow_data);
- g_histo_control_flow_data_list =
- g_slist_remove(g_histo_control_flow_data_list,histo_control_flow_data);
-
- g_array_free(histo_control_flow_data->number_of_process, TRUE);
-
- g_info("HISTOCFV.c : guihistocontrolflow_destructor end, %p", histo_control_flow_data);
- g_free(histo_control_flow_data);
-
-}
-
-