From b902d7d1c16f1326c6698c5e3dc8927ce0a0ee94 Mon Sep 17 00:00:00 2001 From: David Rose Date: Tue, 17 Jan 2006 23:37:43 +0000 Subject: [PATCH] menus, double-clicks hooked up properly --- pandatool/src/gtk-stats/gtkStatsGraph.cxx | 7 ++++-- pandatool/src/gtk-stats/gtkStatsGraph.h | 3 ++- pandatool/src/gtk-stats/gtkStatsLabel.cxx | 5 ++++ pandatool/src/gtk-stats/gtkStatsMonitor.cxx | 11 ++++++--- .../src/gtk-stats/gtkStatsStripChart.cxx | 24 +++++++++---------- pandatool/src/gtk-stats/gtkStatsStripChart.h | 3 ++- 6 files changed, 34 insertions(+), 19 deletions(-) diff --git a/pandatool/src/gtk-stats/gtkStatsGraph.cxx b/pandatool/src/gtk-stats/gtkStatsGraph.cxx index 35fba7bd93..2ab915992a 100755 --- a/pandatool/src/gtk-stats/gtkStatsGraph.cxx +++ b/pandatool/src/gtk-stats/gtkStatsGraph.cxx @@ -339,7 +339,8 @@ set_drag_mode(GtkStatsGraph::DragMode drag_mode) { // window, or any nested window. //////////////////////////////////////////////////////////////////// gboolean GtkStatsGraph:: -handle_button_press(GtkWidget *widget, int graph_x, int graph_y) { +handle_button_press(GtkWidget *widget, int graph_x, int graph_y, + bool double_click) { if (_potential_drag_mode != DM_none) { set_drag_mode(_potential_drag_mode); _drag_start_x = graph_x; @@ -497,7 +498,9 @@ button_press_event_callback(GtkWidget *widget, GdkEventButton *event, (int)event->x, (int)event->y, &graph_x, &graph_y); - return self->handle_button_press(widget, graph_x, graph_y); + bool double_click = (event->type == GDK_2BUTTON_PRESS); + + return self->handle_button_press(widget, graph_x, graph_y, double_click); } //////////////////////////////////////////////////////////////////// diff --git a/pandatool/src/gtk-stats/gtkStatsGraph.h b/pandatool/src/gtk-stats/gtkStatsGraph.h index 15ea508731..419e4dcb41 100755 --- a/pandatool/src/gtk-stats/gtkStatsGraph.h +++ b/pandatool/src/gtk-stats/gtkStatsGraph.h @@ -70,7 +70,8 @@ protected: virtual DragMode consider_drag_start(int graph_x, int graph_y); virtual void set_drag_mode(DragMode drag_mode); - virtual gboolean handle_button_press(GtkWidget *widget, int graph_x, int graph_y); + virtual gboolean handle_button_press(GtkWidget *widget, int graph_x, int graph_y, + bool double_click); virtual gboolean handle_button_release(GtkWidget *widget, int graph_x, int graph_y); virtual gboolean handle_motion(GtkWidget *widget, int graph_x, int graph_y); diff --git a/pandatool/src/gtk-stats/gtkStatsLabel.cxx b/pandatool/src/gtk-stats/gtkStatsLabel.cxx index 0780dbaf41..97bdc59f6e 100644 --- a/pandatool/src/gtk-stats/gtkStatsLabel.cxx +++ b/pandatool/src/gtk-stats/gtkStatsLabel.cxx @@ -229,5 +229,10 @@ leave_notify_event_callback(GtkWidget *widget, GdkEventCrossing *event, gboolean GtkStatsLabel:: button_press_event_callback(GtkWidget *widget, GdkEventButton *event, gpointer data) { + GtkStatsLabel *self = (GtkStatsLabel *)data; + bool double_click = (event->type == GDK_2BUTTON_PRESS); + if (double_click) { + self->_graph->clicked_label(self->_collector_index); + } return TRUE; } diff --git a/pandatool/src/gtk-stats/gtkStatsMonitor.cxx b/pandatool/src/gtk-stats/gtkStatsMonitor.cxx index 30cd297bad..9bcaa84d78 100644 --- a/pandatool/src/gtk-stats/gtkStatsMonitor.cxx +++ b/pandatool/src/gtk-stats/gtkStatsMonitor.cxx @@ -525,15 +525,20 @@ create_window() { // Pack the menu into the window. GtkWidget *main_vbox = gtk_vbox_new(FALSE, 1); - // gtk_container_set_border_width(GTK_CONTAINER(main_vbox), 1); gtk_container_add(GTK_CONTAINER(_window), main_vbox); gtk_box_pack_start(GTK_BOX(main_vbox), menubar, FALSE, TRUE, 0); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item(_item_factory, "/Speed/3")), + TRUE); + set_scroll_speed(3); + + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item(_item_factory, "/Options/Units/ms")), + TRUE); + set_time_units(PStatGraph::GBU_ms); + gtk_widget_show_all(_window); gtk_widget_show(_window); - set_time_units(PStatGraph::GBU_ms); - set_scroll_speed(3); set_pause(false); } diff --git a/pandatool/src/gtk-stats/gtkStatsStripChart.cxx b/pandatool/src/gtk-stats/gtkStatsStripChart.cxx index 7ab345e9e3..b8c98ff441 100644 --- a/pandatool/src/gtk-stats/gtkStatsStripChart.cxx +++ b/pandatool/src/gtk-stats/gtkStatsStripChart.cxx @@ -169,16 +169,7 @@ set_time_units(int unit_mask) { unit_mask |= (old_unit_mask & GBU_show_units); set_guide_bar_units(unit_mask); - /* - RECT rect; - GetClientRect(_window, &rect); - rect.left = _right_margin; - InvalidateRect(_window, &rect, TRUE); - - GetClientRect(_window, &rect); - rect.bottom = _top_margin; - InvalidateRect(_window, &rect, TRUE); - */ + gtk_widget_queue_draw(_scale_area); } } @@ -461,7 +452,15 @@ set_drag_mode(GtkStatsGraph::DragMode drag_mode) { // graph window. //////////////////////////////////////////////////////////////////// gboolean GtkStatsStripChart:: -handle_button_press(GtkWidget *widget, int graph_x, int graph_y) { +handle_button_press(GtkWidget *widget, int graph_x, int graph_y, + bool double_click) { + if (double_click) { + // Double-clicking on a color bar in the graph is the same as + // double-clicking on the corresponding label. + clicked_label(get_collector_under_pixel(graph_x, graph_y)); + return TRUE; + } + if (_potential_drag_mode == DM_none) { set_drag_mode(DM_scale); _drag_scale_start = pixel_to_height(graph_y); @@ -475,7 +474,8 @@ handle_button_press(GtkWidget *widget, int graph_x, int graph_y) { return TRUE; } - return GtkStatsGraph::handle_button_press(widget, graph_x, graph_y); + return GtkStatsGraph::handle_button_press(widget, graph_x, graph_y, + double_click); } //////////////////////////////////////////////////////////////////// diff --git a/pandatool/src/gtk-stats/gtkStatsStripChart.h b/pandatool/src/gtk-stats/gtkStatsStripChart.h index 5e8c088923..0e2c6ac99d 100644 --- a/pandatool/src/gtk-stats/gtkStatsStripChart.h +++ b/pandatool/src/gtk-stats/gtkStatsStripChart.h @@ -64,7 +64,8 @@ protected: virtual DragMode consider_drag_start(int graph_x, int graph_y); virtual void set_drag_mode(DragMode drag_mode); - virtual gboolean handle_button_press(GtkWidget *widget, int graph_x, int graph_y); + virtual gboolean handle_button_press(GtkWidget *widget, int graph_x, int graph_y, + bool double_click); virtual gboolean handle_button_release(GtkWidget *widget, int graph_x, int graph_y); virtual gboolean handle_motion(GtkWidget *widget, int graph_x, int graph_y);