15 #include "gtkStatsChartMenu.h"
16 #include "gtkStatsMonitor.h"
26 _thread_index(thread_index)
28 _menu = gtk_menu_new();
29 gtk_widget_show(_menu);
39 ~GtkStatsChartMenu() {
62 if (_thread_index == 0) {
64 thread_name =
"Graphs";
69 GtkWidget *menu_item = gtk_menu_item_new_with_label(thread_name.c_str());
70 gtk_widget_show(menu_item);
71 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), _menu);
73 gtk_menu_shell_insert(GTK_MENU_SHELL(menu_bar), menu_item, position);
103 gtk_container_foreach(GTK_CONTAINER(_menu), remove_menu_child, _menu);
110 bool needs_separator =
true;
115 for (
int tc = 0; tc < num_toplevel_collectors; tc++) {
122 if (needs_separator) {
123 GtkWidget *sep = gtk_separator_menu_item_new();
124 gtk_widget_show(sep);
125 gtk_menu_shell_append(GTK_MENU_SHELL(_menu), sep);
127 needs_separator =
false;
136 GtkWidget *sep = gtk_separator_menu_item_new();
137 gtk_widget_show(sep);
138 gtk_menu_shell_append(GTK_MENU_SHELL(_menu), sep);
143 GtkWidget *menu_item = gtk_menu_item_new_with_label(
"Piano Roll");
144 gtk_widget_show(menu_item);
145 gtk_menu_shell_append(GTK_MENU_SHELL(_menu), menu_item);
147 g_signal_connect_swapped(G_OBJECT(menu_item),
"activate",
148 G_CALLBACK(handle_menu), (
void *)(
const void *)menu_def);
157 void GtkStatsChartMenu::
158 add_view(GtkWidget *parent_menu,
const PStatViewLevel *view_level,
168 GtkWidget *menu_item = gtk_menu_item_new_with_label(collector_name.c_str());
169 gtk_widget_show(menu_item);
170 gtk_menu_shell_append(GTK_MENU_SHELL(parent_menu), menu_item);
172 g_signal_connect_swapped(G_OBJECT(menu_item),
"activate",
173 G_CALLBACK(handle_menu), (
void *)(
const void *)menu_def);
176 if (num_children > 1) {
179 string submenu_name = collector_name +
" components";
181 GtkWidget *submenu_item = gtk_menu_item_new_with_label(submenu_name.c_str());
182 gtk_widget_show(submenu_item);
183 gtk_menu_shell_append(GTK_MENU_SHELL(parent_menu), submenu_item);
185 GtkWidget *submenu = gtk_menu_new();
186 gtk_widget_show(submenu);
187 gtk_menu_item_set_submenu(GTK_MENU_ITEM(submenu_item), submenu);
192 for (
int c = num_children - 1; c >= 0; c--) {
193 add_view(submenu, view_level->
get_child(c), show_level);
203 void GtkStatsChartMenu::
204 handle_menu(gpointer data) {
208 if (monitor == NULL) {
212 if (menu_def->_collector_index < 0) {
216 menu_def->_collector_index,
217 menu_def->_show_level);
226 void GtkStatsChartMenu::
227 remove_menu_child(GtkWidget *widget, gpointer data) {
228 GtkWidget *menu = (GtkWidget *)data;
229 gtk_container_remove(GTK_CONTAINER(menu), widget);
string get_thread_name(int index) const
Returns the name of the indicated thread.
int get_level_index() const
Returns an index number that can be used to determine when the set of known levels has changed...
const PStatViewLevel * get_top_level()
Returns a pointer to the level that corresponds to the Collector we've constrained to...
const PStatViewLevel * get_child(int n) const
Returns the nth child of this Level/Collector.
string get_collector_name(int index) const
Returns the name of the indicated collector.
void open_piano_roll(int thread_index)
Opens a new piano roll showing the indicated data.
PStatView & get_level_view(int collector_index, int thread_index)
Returns a view on the level value (as opposed to elapsed time) for the given collector over the given...
The data associated with a particular client, but not with any one particular frame or thread: the li...
bool has_collector(int index) const
Returns true if the indicated collector has been defined by the client already, false otherwise...
This is a single level value, or band of color, within a View.
A View boils down the frame data to a linear list of times spent in a number of different Collectors...
PStatView & get_view(int thread_index)
Returns a view on the given thread index.
int get_toplevel_collector(int index) const
Returns the collector index of the nth toplevel collector.
const MenuDef * add_menu(const MenuDef &menu_def)
Adds a new MenuDef to the monitor, or returns an existing one if there is already one just like it...
This class represents a connection to a PStatsClient and manages the data exchange with the client...
void open_strip_chart(int thread_index, int collector_index, bool show_level)
Opens a new strip chart showing the indicated data.
const PStatClientData * get_client_data() const
Returns the client data associated with this monitor.
bool get_collector_has_level(int index, int thread_index) const
Returns whether the given collector has level data (and consequently, whether it should appear on the...
int get_num_children() const
Returns the number of children of this Level/Collector.
int get_num_toplevel_collectors() const
Returns the total number of collectors that are toplevel collectors.
int get_collector() const
Returns the Collector index associated with this level.