diff --git a/pandatool/src/win-stats/winStatsGraph.cxx b/pandatool/src/win-stats/winStatsGraph.cxx index dc991eafbd..c0288e9040 100644 --- a/pandatool/src/win-stats/winStatsGraph.cxx +++ b/pandatool/src/win-stats/winStatsGraph.cxx @@ -58,6 +58,8 @@ WinStatsGraph(WinStatsMonitor *monitor, int thread_index) : _drag_mode = DM_none; _potential_drag_mode = DM_none; _drag_scale_start = 0.0f; + + _pause = false; } //////////////////////////////////////////////////////////////////// @@ -163,6 +165,18 @@ void WinStatsGraph:: set_scroll_speed(float scroll_speed) { } +//////////////////////////////////////////////////////////////////// +// Function: WinStatsGraph::set_pause +// Access: Public +// Description: Changes the pause flag for the graph. When this flag +// is true, the graph does not update in response to new +// data. +//////////////////////////////////////////////////////////////////// +void WinStatsGraph:: +set_pause(bool pause) { + _pause = pause; +} + //////////////////////////////////////////////////////////////////// // Function: WinStatsGraph::user_guide_bars_changed // Access: Public diff --git a/pandatool/src/win-stats/winStatsGraph.h b/pandatool/src/win-stats/winStatsGraph.h index 67c02b7fa0..7695fe490f 100644 --- a/pandatool/src/win-stats/winStatsGraph.h +++ b/pandatool/src/win-stats/winStatsGraph.h @@ -58,6 +58,8 @@ public: virtual void set_time_units(int unit_mask); virtual void set_scroll_speed(float scroll_speed); + void set_pause(bool pause); + void user_guide_bars_changed(); virtual void clicked_label(int collector_index); @@ -112,6 +114,8 @@ protected: float _drag_scale_start; int _drag_guide_bar; + bool _pause; + private: void setup_bitmap(int xsize, int ysize); void release_bitmap(); diff --git a/pandatool/src/win-stats/winStatsMenuId.h b/pandatool/src/win-stats/winStatsMenuId.h index 065f7681cd..23351f0684 100755 --- a/pandatool/src/win-stats/winStatsMenuId.h +++ b/pandatool/src/win-stats/winStatsMenuId.h @@ -36,6 +36,7 @@ enum WinStatsMenuId { MI_speed_3, MI_speed_6, MI_speed_12, + MI_pause, // This one is last and represents the beginning of the range for // the various "new chart" menu options. diff --git a/pandatool/src/win-stats/winStatsMonitor.cxx b/pandatool/src/win-stats/winStatsMonitor.cxx index 9d207fae27..03a55f14b3 100644 --- a/pandatool/src/win-stats/winStatsMonitor.cxx +++ b/pandatool/src/win-stats/winStatsMonitor.cxx @@ -40,9 +40,10 @@ WinStatsMonitor(WinStatsServer *server) : PStatMonitor(server) { _menu_bar = 0; _options_menu = 0; - // This is filled in later when the menu is created. + // These will be filled in later when the menu is created. _time_units = 0; _scroll_speed = 0.0; + _pause = false; } //////////////////////////////////////////////////////////////////// @@ -295,6 +296,7 @@ open_strip_chart(int thread_index, int collector_index) { graph->set_time_units(_time_units); graph->set_scroll_speed(_scroll_speed); + graph->set_pause(_pause); } //////////////////////////////////////////////////////////////////// @@ -309,6 +311,7 @@ open_piano_roll(int thread_index) { graph->set_time_units(_time_units); graph->set_scroll_speed(_scroll_speed); + graph->set_pause(_pause); } //////////////////////////////////////////////////////////////////// @@ -430,6 +433,33 @@ set_scroll_speed(float scroll_speed) { SetMenuItemInfo(_speed_menu, MI_speed_12, FALSE, &mii); } +//////////////////////////////////////////////////////////////////// +// Function: WinStatsMonitor::set_pause +// Access: Public +// Description: Called when the user selects a pause on or pause off +// option from the menu. +//////////////////////////////////////////////////////////////////// +void WinStatsMonitor:: +set_pause(bool pause) { + _pause = pause; + + // First, change all of the open graphs appropriately. + Graphs::iterator gi; + for (gi = _graphs.begin(); gi != _graphs.end(); ++gi) { + WinStatsGraph *graph = (*gi); + graph->set_pause(_pause); + } + + // Now change the checkmark on the pulldown menu. + MENUITEMINFO mii; + memset(&mii, 0, sizeof(mii)); + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_STATE; + + mii.fState = _pause ? MFS_CHECKED : MFS_UNCHECKED; + SetMenuItemInfo(_speed_menu, MI_pause, FALSE, &mii); +} + //////////////////////////////////////////////////////////////////// // Function: WinStatsMonitor::add_graph // Access: Private @@ -587,7 +617,18 @@ setup_speed_menu() { mii.dwTypeData = "12"; InsertMenuItem(_speed_menu, GetMenuItemCount(_speed_menu), TRUE, &mii); + mii.fMask = MIIM_FTYPE; + mii.fType = MFT_SEPARATOR; + InsertMenuItem(_speed_menu, GetMenuItemCount(_speed_menu), TRUE, &mii); + + mii.fMask = MIIM_STRING | MIIM_FTYPE | MIIM_ID | MIIM_CHECKMARKS | MIIM_STATE; + mii.fType = MFT_STRING; + mii.wID = MI_pause; + mii.dwTypeData = "pause"; + InsertMenuItem(_speed_menu, GetMenuItemCount(_speed_menu), TRUE, &mii); + set_scroll_speed(3); + set_pause(false); } //////////////////////////////////////////////////////////////////// @@ -727,6 +768,10 @@ handle_menu_command(int menu_id) { set_scroll_speed(12); break; + case MI_pause: + set_pause(!_pause); + break; + default: if (menu_id >= MI_new_chart) { const MenuDef &menu_def = lookup_menu(menu_id); diff --git a/pandatool/src/win-stats/winStatsMonitor.h b/pandatool/src/win-stats/winStatsMonitor.h index 7107423c8d..aba1c82357 100644 --- a/pandatool/src/win-stats/winStatsMonitor.h +++ b/pandatool/src/win-stats/winStatsMonitor.h @@ -76,6 +76,7 @@ public: void set_time_units(int unit_mask); void set_scroll_speed(float scroll_speed); + void set_pause(bool pause); private: void add_graph(WinStatsGraph *graph); @@ -109,6 +110,7 @@ private: string _window_title; int _time_units; float _scroll_speed; + bool _pause; static bool _window_class_registered; static const char * const _window_class_name; diff --git a/pandatool/src/win-stats/winStatsPianoRoll.cxx b/pandatool/src/win-stats/winStatsPianoRoll.cxx index 74dad4b2d7..c8be9fe9ec 100755 --- a/pandatool/src/win-stats/winStatsPianoRoll.cxx +++ b/pandatool/src/win-stats/winStatsPianoRoll.cxx @@ -70,7 +70,9 @@ WinStatsPianoRoll:: //////////////////////////////////////////////////////////////////// void WinStatsPianoRoll:: new_data(int thread_index, int frame_number) { - update(); + if (!_pause) { + update(); + } } //////////////////////////////////////////////////////////////////// diff --git a/pandatool/src/win-stats/winStatsStripChart.cxx b/pandatool/src/win-stats/winStatsStripChart.cxx index 3f1104b0ca..4b6d969a29 100644 --- a/pandatool/src/win-stats/winStatsStripChart.cxx +++ b/pandatool/src/win-stats/winStatsStripChart.cxx @@ -91,7 +91,9 @@ new_collector(int collector_index) { //////////////////////////////////////////////////////////////////// void WinStatsStripChart:: new_data(int thread_index, int frame_number) { - update(); + if (!_pause) { + update(); + } } ////////////////////////////////////////////////////////////////////