]> git.cworth.org Git - apitrace/blob - gui/graphing/graphwidget.h
Rewrote profile graph drawing code.
[apitrace] / gui / graphing / graphwidget.h
1 #ifndef GRAPHWIDGET_H
2 #define GRAPHWIDGET_H
3
4 #include "graphview.h"
5 #include "graphaxiswidget.h"
6 #include "graphlabelwidget.h"
7
8 class QScrollBar;
9
10 /**
11  * The generic GraphWidget class which combines the elements of a graph,
12  * the axis, view, scrollbars and label.
13  */
14 class GraphWidget : public QWidget {
15     Q_OBJECT
16 public:
17     enum AxisPosition {
18         AxisTop,
19         AxisLeft,
20         AxisRight,
21         AxisBottom
22     };
23
24 public:
25     GraphWidget(QWidget* parent = 0);
26     virtual ~GraphWidget(){}
27
28     GraphView* view();
29     GraphLabelWidget* label();
30     GraphAxisWidget* axis(AxisPosition pos);
31
32     void setView(GraphView* view);
33     void setLabel(GraphLabelWidget* label);
34     void setAxis(AxisPosition pos, GraphAxisWidget* axis);
35
36     void setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy policy);
37     void setVerticalScrollBarPolicy(Qt::ScrollBarPolicy policy);
38
39     virtual void resizeEvent(QResizeEvent *e);
40
41 protected:
42     /* Used if a selection would be shared between graphs with different axis */
43     virtual SelectionState transformSelectionIn(SelectionState state);
44     virtual SelectionState transformSelectionOut(SelectionState state);
45
46     /* Update the scrollbars based on current view */
47     void updateScrollbars();
48
49     /* Update all signal / slot connections */
50     void updateConnections();
51
52     /* Recalculate child widget layout */
53     void updateLayout();
54
55 public slots:
56     void setSelection(SelectionState state);
57
58     /* Set view areas */
59     void setHorizontalView(qint64 start, qint64 end);
60     void setVerticalView(qint64 start, qint64 end);
61
62 protected slots:
63     /* View changed by translation / zooming */
64     void verticalViewChange(qint64 start, qint64 end);
65     void verticalRangeChange(qint64 start, qint64 end);
66     void horizontalViewChange(qint64 start, qint64 end);
67     void horizontalRangeChange(qint64 start, qint64 end);
68
69     /* User interaction with scroll bars */
70     void horizontalScrollAction(int action);
71     void verticalScrollAction(int action);
72
73     /* Update child elements when selection changes */
74     void updateSelection(bool emitSignal = true);
75
76 signals:
77     void selectionChanged(SelectionState state);
78
79     void verticalViewChanged(qint64 start, qint64 end);
80     void verticalRangeChanged(qint64 start, qint64 end);
81
82     void horizontalViewChanged(qint64 start, qint64 end);
83     void horizontalRangeChanged(qint64 start, qint64 end);
84
85 protected:
86     SelectionState m_selection;
87
88     GraphView* m_view;
89
90     GraphLabelWidget* m_label;
91
92     GraphAxisWidget* m_axisTop;
93     GraphAxisWidget* m_axisLeft;
94     GraphAxisWidget* m_axisRight;
95     GraphAxisWidget* m_axisBottom;
96
97     QScrollBar* m_horizontalScrollbar;
98     qint64 m_horizontalMin;
99     qint64 m_horizontalMax;
100     qint64 m_horizontalStart;
101     qint64 m_horizontalEnd;
102     Qt::ScrollBarPolicy m_horizontalScrollbarPolicy;
103
104     QScrollBar* m_verticalScrollbar;
105     qint64 m_verticalMin;
106     qint64 m_verticalMax;
107     qint64 m_verticalStart;
108     qint64 m_verticalEnd;
109     Qt::ScrollBarPolicy m_verticalScrollbarPolicy;
110 };
111
112 #endif