3 #include "VisualizationController.h"
4 #include "Visualization.h"
6 VisualizationController::VisualizationController(Module
*module
, Visualization
*visualization
)
7 : m_module(module
), m_visualization(visualization
) {
8 m_threadPool
= VisualizationThreadPool::singleton();
9 m_visualization
->setController(this);
10 qDebug("Max. threads: %i", m_threadPool
->maxThreadCount());
11 m_totalRange
.beginData() = 1e50
;
12 m_totalRange
.endData() = -1e50
;
13 m_totalRange
.beginTime() = 0;
14 m_totalRange
.endTime() = 0;
17 VisualizationController::~VisualizationController() {
21 void VisualizationController::heartbeat(Timestamp timestamp
) {
22 if(timestamp
> m_totalRange
.endTime()) m_totalRange
.endTime() = timestamp
;
25 void VisualizationController::modifiedPoint(DataCoord point
) {
26 modifiedTime(point
.time());
27 if(point
.data() < m_totalRange
.beginData()) m_totalRange
.beginData() = point
.data();
28 if(point
.data() > m_totalRange
.endData()) m_totalRange
.endData() = point
.data();
31 void VisualizationController::modifiedTime(Timestamp timestamp
) {
32 if(timestamp
< m_totalRange
.beginTime() || m_totalRange
.beginTime() == 0) {
33 qDebug("**** setting beginTime to %li . . .", timestamp
);
34 m_totalRange
.beginTime() = timestamp
;
36 if(timestamp
> m_totalRange
.endTime() || m_totalRange
.endTime() == 0) m_totalRange
.endTime() = timestamp
;
39 void VisualizationController::updateVisualization() {
40 DataRange range
= m_visualization
->range();
41 Timestamp tdiff
= m_module
->latestHeartbeat() - range
.endTime();
43 heartbeat(m_module
->latestHeartbeat());
45 shift(DataCoord(tdiff
, 0.0));
47 qDebug("Update range: %lu %lu", range
.beginTime(), range
.endTime());
50 void VisualizationController::registerRequest(VisualizationRequest
*request
) {
51 if(request
->category() == FullRequest
) {
52 foreach(VisualizationRequest
*request
, m_requestSets
[request
->category()]) {
56 m_requestSets
[request
->category()].insert(request
);
59 void VisualizationController::deregisterRequest(VisualizationRequest
*request
) {
60 m_requestSets
[request
->category()].remove(request
);
63 void VisualizationController::fullVisualization() {
64 VisualizationRequest
*request
= new VisualizationRequest(this, m_visualization
->range(), FullRequest
);
65 /* Full visualization priority: 15. */
66 m_threadPool
->start(request
, 15);
69 void VisualizationController::renderRegion(const DataRange
&range
, RequestType type
) {
70 processRequest(new VisualizationRequest(this, range
, type
));
73 void VisualizationController::shift(QPoint pixels
) {
74 /*qDebug("Asked to shift visualization . . .");*/
75 /* Invert the X value. The Y value is already inverted due to the visualization coordinate system. */
76 pixels
.setX(-pixels
.x());
77 /*pixels.setY(-pixels.y());*/
81 shift(m_visualization
->translateOffset(pixels
));
84 void VisualizationController::shift(DataCoord by
) {
85 /* Save the previous ranges. */
86 DataRange hRange
= m_visualization
->range();
87 DataRange vRange
= m_visualization
->range();
88 m_visualization
->shift(by
);
90 /* Handle the horizontal side . . .*/
92 hRange
.endTime() = hRange
.beginTime();
93 hRange
.beginTime() += by
.time();
94 qDebug("** rendering horizontal region . . .");
95 renderRegion(hRange
, PartialRequest
);
97 else if(by
.time() > 0) {
98 hRange
.beginTime() = hRange
.endTime();
99 hRange
.endTime() += by
.time();
100 qDebug("** rendering horizontal region . . .");
101 renderRegion(hRange
, PartialRequest
);
103 /* Now for the vertical. */
105 vRange
.endData() = vRange
.beginData();
106 vRange
.beginData() += by
.data();
107 qDebug("** rendering vertical region . . .");
108 renderRegion(vRange
, PartialRequest
);
110 else if(by
.data() > 0) {
111 vRange
.beginData() = vRange
.endData();
112 vRange
.endData() += by
.data();
113 qDebug("** rendering vertical region . . .");
114 renderRegion(vRange
, PartialRequest
);
117 /*renderRegion(vRange, PartialRequest);*/
118 /*renderRegion(m_visualization->range(), PartialRequest);*/
121 void VisualizationController::scale(qreal x
, qreal y
) {
122 m_visualization
->scale(x
, y
);
125 void VisualizationController::processRequest(VisualizationRequest
*request
) {
126 /* Default priority: 10. */
127 m_threadPool
->start(request
, 10);