Panda3D
|
00001 // Filename: winStatsGraph.h 00002 // Created by: drose (03Dec03) 00003 // 00004 //////////////////////////////////////////////////////////////////// 00005 // 00006 // PANDA 3D SOFTWARE 00007 // Copyright (c) Carnegie Mellon University. All rights reserved. 00008 // 00009 // All use of this software is subject to the terms of the revised BSD 00010 // license. You should have received a copy of this license along 00011 // with this source code in a file named "LICENSE." 00012 // 00013 //////////////////////////////////////////////////////////////////// 00014 00015 #ifndef WINSTATSGRAPH_H 00016 #define WINSTATSGRAPH_H 00017 00018 #include "pandatoolbase.h" 00019 #include "winStatsLabelStack.h" 00020 #include "pmap.h" 00021 00022 #include <windows.h> 00023 00024 class WinStatsMonitor; 00025 00026 //////////////////////////////////////////////////////////////////// 00027 // Class : WinStatsGraph 00028 // Description : This is just an abstract base class to provide a 00029 // common pointer type for the various kinds of graphs 00030 // that may be created for a WinStatsMonitor. 00031 //////////////////////////////////////////////////////////////////// 00032 class WinStatsGraph { 00033 public: 00034 // What is the user adjusting by dragging the mouse in a window? 00035 enum DragMode { 00036 DM_none, 00037 DM_scale, 00038 DM_left_margin, 00039 DM_right_margin, 00040 DM_guide_bar, 00041 DM_new_guide_bar, 00042 DM_sizing, 00043 }; 00044 00045 public: 00046 WinStatsGraph(WinStatsMonitor *monitor); 00047 virtual ~WinStatsGraph(); 00048 00049 virtual void new_collector(int collector_index); 00050 virtual void new_data(int thread_index, int frame_number); 00051 virtual void force_redraw(); 00052 virtual void changed_graph_size(int graph_xsize, int graph_ysize); 00053 00054 virtual void set_time_units(int unit_mask); 00055 virtual void set_scroll_speed(double scroll_speed); 00056 void set_pause(bool pause); 00057 00058 void user_guide_bars_changed(); 00059 virtual void clicked_label(int collector_index); 00060 00061 protected: 00062 void close(); 00063 00064 void setup_label_stack(); 00065 void move_label_stack(); 00066 00067 HBRUSH get_collector_brush(int collector_index); 00068 00069 LONG window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); 00070 virtual LONG graph_window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); 00071 00072 virtual void additional_window_paint(HDC hdc); 00073 virtual void additional_graph_window_paint(HDC hdc); 00074 virtual DragMode consider_drag_start(int mouse_x, int mouse_y, 00075 int width, int height); 00076 virtual void set_drag_mode(DragMode drag_mode); 00077 00078 virtual void move_graph_window(int graph_left, int graph_top, 00079 int graph_xsize, int graph_ysize); 00080 00081 protected: 00082 // Table of brushes for our various collectors. 00083 typedef pmap<int, HBRUSH> Brushes; 00084 Brushes _brushes; 00085 00086 WinStatsMonitor *_monitor; 00087 HWND _window; 00088 HWND _graph_window; 00089 WinStatsLabelStack _label_stack; 00090 00091 HCURSOR _sizewe_cursor; 00092 HCURSOR _hand_cursor; 00093 00094 HBITMAP _bitmap; 00095 HDC _bitmap_dc; 00096 00097 int _graph_left, _graph_top; 00098 int _bitmap_xsize, _bitmap_ysize; 00099 int _left_margin, _right_margin; 00100 int _top_margin, _bottom_margin; 00101 00102 COLORREF _dark_color; 00103 COLORREF _light_color; 00104 COLORREF _user_guide_bar_color; 00105 HPEN _dark_pen; 00106 HPEN _light_pen; 00107 HPEN _user_guide_bar_pen; 00108 00109 DragMode _drag_mode; 00110 DragMode _potential_drag_mode; 00111 int _drag_start_x, _drag_start_y; 00112 double _drag_scale_start; 00113 int _drag_guide_bar; 00114 00115 bool _pause; 00116 00117 private: 00118 void setup_bitmap(int xsize, int ysize); 00119 void release_bitmap(); 00120 void create_graph_window(); 00121 static void register_graph_window_class(HINSTANCE application); 00122 00123 static LONG WINAPI static_graph_window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); 00124 00125 static bool _graph_window_class_registered; 00126 static const char * const _graph_window_class_name; 00127 00128 protected: 00129 static DWORD graph_window_style; 00130 }; 00131 00132 #endif 00133