wxChartDir 2.0.2
wxchartviewer.h
1/*
2** Name: wxchartviewer.h
3** Purpose: wxChartViewer class declaration
4** Author: Ulrich Telle
5** Created: 2018-05-09
6** Copyright: (C) 2018-2025, Ulrich Telle
7** License: LGPL - 3.0 + WITH WxWindows - exception - 3.1
8*/
9
11
131
132#ifndef WXCHARTDIR_WXCHARTVIEWER_H
133#define WXCHARTDIR_WXCHARTVIEWER_H
134
135// wxWidgets headers
136
137// wxChartViewer headers
138#include "wxchartviewer_defs.h"
139#include "wxchartviewer_version.h"
140
141#include <wx/bitmap.h>
142#include <wx/event.h>
143#include <wx/panel.h>
144#include <wx/timer.h>
145#include <wx/graphics.h>
146#include <wx/overlay.h>
147#include <wx/popupwin.h>
148
149#include "chartdir.h"
150
151#ifdef CD_NAMESPACE
152namespace CD_NAMESPACE
153{
154#endif
155
156namespace Chart
157{
158 // Mouse usage mode constants
159 enum
160 {
161 MouseUsageDefault = 0,
162 MouseUsageScroll = 1,
163 MouseUsageZoomIn = 3,
164 MouseUsageZoomOut = 4
165 };
166}
167
168#ifdef CD_NAMESPACE
169}
170#endif
171
172// Forward declarations
173class WXDLLIMPEXP_FWD_WXCHARTVIEWER wxEnhancedTooltip;
174class WXDLLIMPEXP_FWD_WXCHARTVIEWER wxViewPortControl;
175
177
181class WXDLLIMPEXP_WXCHARTVIEWER wxChartViewer : public wxPanel, public ViewPortManager
182{
183public:
185
193 wxChartViewer(wxWindow* parent = 0, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL, const wxString& name = wxPanelNameStr);
194
197
199
221 virtual void setDPI(int dpi);
222
224
227 virtual int getDPI();
228
230
237 virtual void setChart(BaseChart* chart);
238
240
245 virtual BaseChart* getChart();
246
248
262 virtual void setImageMap(const char* imageMap);
263
265
268 virtual ImageMapHandler* getImageMapHandler();
269
271
274 virtual void setDefaultToolTip(const wxString& text);
275
277
291 virtual void setCDMLToolTipPrefix(const wxString& prefix);
292
294
297 virtual void setViewPortControl(wxViewPortControl* vpc);
298
300
304
306
309 virtual void setSelectionBorderWidth(int width);
310
312
315 virtual int getSelectionBorderWidth();
316
318
321 virtual void setSelectionBorderColor(const wxColour& color);
322
324
327 virtual wxColour getSelectionBorderColor();
328
330
333 virtual void setSelectionBorderStyle(wxPenStyle style);
334
336
339 virtual wxPenStyle getSelectionBorderStyle();
340
342
385 virtual void setMouseUsage(int mouseUsage);
386
388
391 virtual int getMouseUsage();
392
394
425 virtual void setZoomDirection(int direction);
426
428
433 virtual int getZoomDirection();
434
436
441 virtual void setScrollDirection(int direction);
442
444
449 virtual int getScrollDirection();
450
452
457 virtual void setZoomInRatio(double ratio);
458
460
465 virtual double getZoomInRatio();
466
468
473 virtual void setZoomOutRatio(double ratio);
474
476
481 virtual double getZoomOutRatio();
482
484
495 virtual void setMouseWheelZoomRatio(double ratio);
496
498
503 virtual double getMouseWheelZoomRatio();
504
506
518 virtual void setMinimumDrag(int offset);
519
521
524 virtual int getMinimumDrag();
525
527
543 virtual void setUpdateInterval(int interval);
544
546
550 virtual int getUpdateInterval();
551
553
562 virtual bool needUpdateChart();
563
565
574 virtual bool needUpdateImageMap();
575
577
582 virtual bool isMouseOnPlotArea();
583
585
588 virtual bool isInMouseMoveEvent();
589
591
619 virtual bool isInViewPortChangedEvent();
620
622
628 virtual bool isMouseDragging();
629
631
653 virtual void updateViewPort(bool needUpdateChart, bool needUpdateImageMap);
654
656 // Request wxChartViewer to redisplay the chart
664 virtual void updateDisplay();
665
667
673 virtual bool onMouseWheelZoom(int x, int y, int zDelta);
674
676
693 virtual void removeDynamicLayer(const wxString& msg);
694
696
701 virtual int getChartMouseX();
702
704
709 virtual int getChartMouseY();
710
712
724 virtual int getPlotAreaMouseX();
725
727
739 virtual int getPlotAreaMouseY();
740
742
748 virtual double getViewPortRight() { return getViewPortLeft() + getViewPortWidth(); }
749
751
757 virtual double getViewPortBottom() { return getViewPortTop() + getViewPortHeight(); }
758
760
769 static double ConvertDateTimeToChartTime(wxDateTime dt);
770
772
781 static wxDateTime ConvertChartTimeToDateTime(double ct);
782
783 DECLARE_EVENT_TABLE()
784
785protected:
786 // wxChartViewer event handlers
787
789
792 void OnMouseMove(wxMouseEvent &evt);
793
795
798 void OnPaint(wxPaintEvent & evt);
799
801
804 void PaintNow(BaseChart* chart);
805
807
811 void Render(wxDC& dc, BaseChart* chart);
812
814
816 virtual void OnDelayedMouseMove();
817
819
822 virtual void OnMouseCaptureLost(wxMouseCaptureLostEvent& evt);
823
825
828 virtual void OnMousePressEvent(wxMouseEvent& evt);
829
831
834 virtual void OnMouseReleaseEvent(wxMouseEvent& evt);
835
837
840 virtual void OnLeaveEvent(wxMouseEvent& evt);
841
843
846 virtual void OnWheelEvent(wxMouseEvent& evt);
847
849
852 virtual void OnHoldTimerEvent (wxTimerEvent& evt);
853
855
858 virtual void OnDelayTimerEvent(wxTimerEvent& evt);
859
861
863 virtual void OnSetCursor();
864
865private:
867 BaseChart* m_currentChart;
868 ImageMapHandler* m_hotSpotTester;
869 BaseChart* m_imageMapChart;
870 wxString m_defaultToolTip;
871 wxColour m_selectBoxLineColor;
872 int m_selectBoxLineWidth;
873 wxPenStyle m_selectBoxLineStyle;
874
875 int m_mouseUsage;
876 int m_zoomDirection;
877 int m_scrollDirection;
878 double m_zoomInRatio;
879 double m_zoomOutRatio;
880 double m_mouseWheelZoomRatio;
881 int m_minDragAmount;
882 int m_updateInterval;
883 bool m_needUpdateChart;
884 bool m_needUpdateImageMap;
885
887
888 int m_currentHotSpot;
889 bool m_isClickable;
890 bool m_isOnPlotArea;
891 bool m_isPlotAreaMouseDown;
892 bool m_isDragScrolling;
893 bool m_isMouseTracking;
894 bool m_isInMouseMove;
895
896 // Dragging support
897
898 int m_plotAreaMouseDownXPos;
899 int m_plotAreaMouseDownYPos;
900
902 bool IsDrag(int direction, wxMouseEvent& event);
903
905 void GetDragZoomRect(int px, int py, int& x, int& y, int& w, int& h);
906
908 void OnPlotAreaMouseDrag(wxMouseEvent& point);
909
910 // Selection rectangle
911
912 bool m_rectVisible;
913 wxRect m_currentRect;
914 wxRect m_previousRect;
915
917 void SetSelectionRect(int x, int y, int width, int height);
918
920 void SetRectVisible(bool b);
921
923 void DrawSelectionRect(wxDC& dc);
924
925 // Chart update rate control
926
927 bool m_holdTimerActive;
928 wxTimer m_holdTimer;
929 bool m_isInViewPortChanged;
930
931 int m_delayUpdateChart;
932 BaseChart* m_delayedChart;
933
935 void CommitUpdateChart();
936
937 unsigned int m_lastMouseMove;
938 wxMouseEvent* m_delayedMouseEvent;
939 wxTimer m_delayedMouseEventTimer;
940 void CommitMouseMove(wxMouseEvent& event);
941
942 bool m_delayImageMapUpdate;
943
944 // Track Cursor support
945 int m_currentMouseX;
946 int m_currentMouseY;
947 int m_isInMouseMovePlotArea;
948
949 // Dynamic Layer support
950 wxString m_autoHideMsg;
951
953 void ApplyAutoHide(const wxString& msg);
954
955 // Enhanced tooltip support
956 wxEnhancedTooltip* m_enhancedToolTip;
957 wxString m_cdmlToolTipPrefix;
958 void ShowToolTip(const wxString& text, const wxPoint& cursorPosition);
959 void ShowEnhancedToolTip(const wxString& text, const wxPoint& cursorPosition = wxPoint(0,0));
960 void MoveEnhancedToolTip(const wxPoint& cursorPosition, const wxRect& rFrom);
961
962 // wxViewPortControl support
963 wxViewPortControl* m_vpControl;
964 bool m_reentrantGuard;
965
966 wxBitmap m_chartBitmap;
967
968 // High DPI support
969 double ToImageX(int x);
970 double ToImageY(int y);
971 int ToDisplayX(double x);
972 int ToDisplayY(double y);
973 int m_dpi;
974 double m_toImageScaleX;
975 double m_toImageScaleY;
976};
977
979
984class wxViewPortControl : public wxPanel, public ViewPortControlBase
985{
986public:
988
996 wxViewPortControl(wxWindow* parent = 0, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL, const wxString& name = wxPanelNameStr);
997
1000
1002
1007 virtual void setChart(BaseChart* chart);
1008
1010
1013 virtual BaseChart* getChart();
1014
1016
1019 virtual void setViewer(wxChartViewer* viewer);
1020
1022
1025 virtual wxChartViewer* getViewer();
1026
1028
1035 virtual void updateDisplay();
1036
1037 DECLARE_EVENT_TABLE()
1038
1039protected:
1041
1044 void OnPaint(wxPaintEvent & evt);
1045
1047
1050 void PaintNow(BaseChart* chart);
1051
1053
1057 void Render(wxDC& dc, BaseChart* chart);
1058
1059 // wxChartViewer event handlers
1061
1064 virtual void OnMouseMoveEvent(wxMouseEvent& evt);
1065
1067
1070 virtual void OnMousePressEvent(wxMouseEvent& evt);
1071
1073
1076 virtual void OnMouseReleaseEvent(wxMouseEvent& evt);
1077
1079
1082 virtual void OnMouseWheelEvent(wxMouseEvent& evt);
1083
1085
1088 virtual void OnMouseCaptureLost(wxMouseCaptureLostEvent& evt);
1089
1090private:
1092 virtual void OnViewPortChanged();
1093
1095 bool IsDrag(wxMouseEvent& event);
1096
1098 void PaintDisplay();
1099
1101 void SyncState();
1102
1104 void UpdateCursor(int position);
1105
1107 void UpdateChartViewerIfNecessary();
1108
1110 double ToImageX(int x);
1111
1113 double ToImageY(int y);
1114
1115 wxChartViewer* m_chartViewer;
1116 BaseChart* m_chart;
1117 bool m_reentrantGuard;
1118
1119 int m_mouseDownX;
1120 int m_mouseDownY;
1121 bool m_isPlotAreaMouseDown;
1122};
1123
1125wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_WXCHARTVIEWER, wxEVT_CHARTVIEWER_CLICKED, wxCommandEvent);
1127wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_WXCHARTVIEWER, wxEVT_CHARTVIEWER_VIEWPORT_CHANGED, wxCommandEvent);
1129wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_WXCHARTVIEWER, wxEVT_CHARTVIEWER_MOUSEMOVE_CHART, wxCommandEvent);
1131wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_WXCHARTVIEWER, wxEVT_CHARTVIEWER_MOUSELEAVE_CHART, wxCommandEvent);
1133wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_WXCHARTVIEWER, wxEVT_CHARTVIEWER_MOUSEMOVE_PLOTAREA, wxCommandEvent);
1135wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_WXCHARTVIEWER, wxEVT_CHARTVIEWER_MOUSELEAVE_PLOTAREA, wxCommandEvent);
1137wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_WXCHARTVIEWER, wxEVT_CHARTVIEWER_MOUSEWHEEL, wxCommandEvent);
1138
1140#define EVT_CHARTVIEWER_CLICKED(winid, fn) \
1141 wx__DECLARE_EVT1(wxEVT_CHARTVIEWER_CLICKED, winid, wxCommandEventHandler(fn))
1143#define EVT_CHARTVIEWER_VIEWPORT_CHANGED(winid, fn) \
1144 wx__DECLARE_EVT1(wxEVT_CHARTVIEWER_VIEWPORT_CHANGED, winid, wxCommandEventHandler(fn))
1146#define EVT_CHARTVIEWER_MOUSEMOVE_CHART(winid, fn) \
1147 wx__DECLARE_EVT1(wxEVT_CHARTVIEWER_MOUSEMOVE_CHART, winid, wxCommandEventHandler(fn))
1149#define EVT_CHARTVIEWER_MOUSELEAVE_CHART(winid, fn) \
1150 wx__DECLARE_EVT1(wxEVT_CHARTVIEWER_MOUSELEAVE_CHART, winid, wxCommandEventHandler(fn))
1152#define EVT_CHARTVIEWER_MOUSEMOVE_PLOTAREA(winid, fn) \
1153 wx__DECLARE_EVT1(wxEVT_CHARTVIEWER_MOUSEMOVE_PLOTAREA, winid, wxCommandEventHandler(fn))
1155#define EVT_CHARTVIEWER_MOUSELEAVE_PLOTAREA(winid, fn) \
1156 wx__DECLARE_EVT1(wxEVT_CHARTVIEWER_MOUSELEAVE_PLOTAREA, winid, wxCommandEventHandler(fn))
1158#define EVT_CHARTVIEWER_MOUSEWHEEL(winid, fn) \
1159 wx__DECLARE_EVT1(wxEVT_CHARTVIEWER_MOUSEWHEEL, winid, wxCommandEventHandler(fn))
1160
1161#endif // WXCHARTDIR_WXCHARTVIEWER_H
Class representing a ChartDirector chart viewer control.
Definition wxchartviewer.h:182
virtual void setMouseWheelZoomRatio(double ratio)
Sets the magnification ratio for each mouse wheel event.
Definition wxchartviewer.cpp:1186
virtual bool needUpdateChart()
Determines if the current wxEVT_CHARTVIEWER_VIEWPORT_CHANGED event requires chart update.
Definition wxchartviewer.cpp:1232
virtual int getChartMouseY()
Gets the mouse y-coordinate in the chart pixel coordinate system.
Definition wxchartviewer.cpp:1254
virtual void setZoomInRatio(double ratio)
Sets the magnification ratio for each zoom in click of the mouse.
Definition wxchartviewer.cpp:1158
virtual int getMinimumDrag()
Gets the minimum mouse drag distance before it is considered as an intentional drag.
Definition wxchartviewer.cpp:1208
virtual int getPlotAreaMouseX()
Gets the mouse x-coordinate on the plot area in the chart pixel coordinate system.
Definition wxchartviewer.cpp:1262
virtual void setViewPortControl(wxViewPortControl *vpc)
Sets the viewport control to be associated with this chart viewer control.
Definition wxchartviewer.cpp:1044
virtual BaseChart * getChart()
Gets the BaseChart pointer provided by the previous wxChartViewer::setChart method call.
Definition wxchartviewer.cpp:993
virtual void setSelectionBorderColor(const wxColour &color)
Sets the border color of the zoom selection box as a wxColour value.
Definition wxchartviewer.cpp:1088
virtual bool isInMouseMoveEvent()
Checks if the current code is executing in a wxEVT_CHARTVIEWER_MOUSEMOVE_CHART or wxEVT_CHARTVIEWER_M...
Definition wxchartviewer.cpp:1308
virtual bool isInViewPortChangedEvent()
Checks if the current code is executing in a ViewPortChanged event.
Definition wxchartviewer.cpp:1315
virtual void setZoomOutRatio(double ratio)
Sets the magnification ratio for each zoom out click of the mouse.
Definition wxchartviewer.cpp:1172
virtual int getScrollDirection()
Gets the scroll direction for mouse scroll actions.
Definition wxchartviewer.cpp:1151
virtual void setMinimumDrag(int offset)
Sets the minimum mouse drag distance before it is considered as an intentional drag.
Definition wxchartviewer.cpp:1201
virtual double getZoomInRatio()
Gets the magnification ratio for each zoom in click of the mouse.
Definition wxchartviewer.cpp:1165
virtual void setScrollDirection(int direction)
Sets the scroll direction for mouse scroll actions.
Definition wxchartviewer.cpp:1144
virtual bool needUpdateImageMap()
Determines if the current viewPortChanged signal requires image map update.
Definition wxchartviewer.cpp:1239
virtual int getPlotAreaMouseY()
Gets the mouse y-coordinate on the plot area in the chart pixel coordinate system.
Definition wxchartviewer.cpp:1278
virtual void updateDisplay()
Updates the display.
Definition wxchartviewer.cpp:1325
virtual int getSelectionBorderWidth()
Gets the border width of the zoom selection box.
Definition wxchartviewer.cpp:1081
virtual double getViewPortBottom()
Gets the position of the bottom side of the viewport.
Definition wxchartviewer.h:757
virtual double getMouseWheelZoomRatio()
Gets the magnification ratio for each mouse wheel event.
Definition wxchartviewer.cpp:1193
virtual bool isMouseOnPlotArea()
Checks if the mouse cursor is on the extended plot area.
Definition wxchartviewer.cpp:1294
virtual wxViewPortControl * getViewPortControl()
Get the viewport control associated with this chart viewer control.
Definition wxchartviewer.cpp:1067
virtual void setUpdateInterval(int interval)
Sets the minimum gap interval between two viewPortChanged signals in milliseconds.
Definition wxchartviewer.cpp:1218
virtual void setMouseUsage(int mouseUsage)
Sets the mouse usage mode.
Definition wxchartviewer.cpp:1116
virtual void removeDynamicLayer(const wxString &msg)
Set the message used to remove the dynamic layer.
Definition wxchartviewer.cpp:1374
virtual int getDPI()
Gets the DPI (scale factor) of the chart on the screen.
Definition wxchartviewer.cpp:149
virtual void setDPI(int dpi)
Sets the DPI (scale factor) of the chart on the screen.
Definition wxchartviewer.cpp:143
virtual bool isMouseDragging()
Checks if the mouse is dragging on the plot area.
Definition wxchartviewer.cpp:1301
virtual wxPenStyle getSelectionBorderStyle()
Gets the border style of the zoom selection box.
Definition wxchartviewer.cpp:1109
virtual void setDefaultToolTip(const wxString &text)
Sets the default tool tip to use when the mouse is over the wxChartViewer but not over any hot spot.
Definition wxchartviewer.cpp:1030
virtual int getChartMouseX()
Gets the mouse x-coordinate in the chart pixel coordinate system.
Definition wxchartviewer.cpp:1246
virtual void setSelectionBorderStyle(wxPenStyle style)
Sets the border style of the zoom selection box.
Definition wxchartviewer.cpp:1102
virtual void setImageMap(const char *imageMap)
Sets the image map that defines the hot spots on the chart image.
Definition wxchartviewer.cpp:1000
wxChartViewer(wxWindow *parent=0, wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxTAB_TRAVERSAL, const wxString &name=wxPanelNameStr)
Constructor for a chart viewer control.
Definition wxchartviewer.cpp:319
virtual void setCDMLToolTipPrefix(const wxString &prefix)
Sets the CDML tooltip prefix.
Definition wxchartviewer.cpp:1037
virtual double getZoomOutRatio()
Gets the magnification ratio for each zoom out click of the mouse.
Definition wxchartviewer.cpp:1179
virtual int getUpdateInterval()
Gets the minimum gap interval between two wxEVT_CHARTVIEWER_VIEWPORT_CHANGED events in milliseconds.
Definition wxchartviewer.cpp:1225
virtual wxColour getSelectionBorderColor()
Gets the border color of the zoom selection box.
Definition wxchartviewer.cpp:1095
virtual bool onMouseWheelZoom(int x, int y, int zDelta)
Handles mouse wheel zooming.
Definition wxchartviewer.cpp:735
virtual void setChart(BaseChart *chart)
Sets a BaseChart object for display.
Definition wxchartviewer.cpp:968
virtual void setSelectionBorderWidth(int width)
Sets the border width of the zoom selection box.
Definition wxchartviewer.cpp:1074
virtual void updateViewPort(bool needUpdateChart, bool needUpdateImageMap)
Triggers the wxEVT_CHARTVIEWER_VIEWPORT_CHANGED event.
Definition wxchartviewer.cpp:1552
virtual double getViewPortRight()
Gets the position of the right side of the viewport.
Definition wxchartviewer.h:748
virtual void setZoomDirection(int direction)
Sets the zoom direction for mouse zoom in/out actions.
Definition wxchartviewer.cpp:1130
virtual int getZoomDirection()
Gets the zoom direction for mouse zoom in/out actions.
Definition wxchartviewer.cpp:1137
virtual int getMouseUsage()
Gets the mouse usage mode.
Definition wxchartviewer.cpp:1123
virtual ImageMapHandler * getImageMapHandler()
Gets the ImageMapHandler object for the current image map.
Definition wxchartviewer.cpp:1023
Class representing a ChartDirector viewport control.
Definition wxchartviewer.h:985
virtual void OnMousePressEvent(wxMouseEvent &evt)
Handles left mouse button down events.
Definition wxchartviewer.cpp:1776
virtual void OnMouseWheelEvent(wxMouseEvent &evt)
Handles mouse wheel events.
Definition wxchartviewer.cpp:1861
void OnPaint(wxPaintEvent &evt)
Handles the OnPaint event.
Definition wxchartviewer.cpp:1714
virtual BaseChart * getChart()
Gets the BaseChart object associated with the wxViewPortControl.
Definition wxchartviewer.cpp:1690
virtual void setChart(BaseChart *chart)
Sets a BaseChart object for displaying in the control.
Definition wxchartviewer.cpp:1681
virtual void setViewer(wxChartViewer *viewer)
Associates a wxChartViewer object with this wxViewPortControl object.
Definition wxchartviewer.cpp:1649
virtual void OnMouseCaptureLost(wxMouseCaptureLostEvent &evt)
Handles mouse capture lost events.
Definition wxchartviewer.cpp:1769
void PaintNow(BaseChart *chart)
Paints a chart immediately on screen.
Definition wxchartviewer.cpp:1725
virtual void OnMouseMoveEvent(wxMouseEvent &evt)
Handles mouse move events.
Definition wxchartviewer.cpp:1808
void Render(wxDC &dc, BaseChart *chart)
Renders the chart on the device context.
Definition wxchartviewer.cpp:1735
wxViewPortControl(wxWindow *parent=0, wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxTAB_TRAVERSAL, const wxString &name=wxPanelNameStr)
Constructor for a ChartDirector viewport.
Definition wxchartviewer.cpp:1630
virtual void updateDisplay()
Requests the viewport control to update its contents.
Definition wxchartviewer.cpp:1910
virtual void OnMouseReleaseEvent(wxMouseEvent &evt)
Handles left mouse button up events.
Definition wxchartviewer.cpp:1835
virtual wxChartViewer * getViewer()
Gets the wxChartViewer object associated with this viewport control.
Definition wxchartviewer.cpp:1674