comparison view/Overview.cpp @ 663:1a0fdad4af4d tonioni

Merge from the default branch
author Chris Cannam
date Fri, 12 Jul 2013 13:25:22 +0100
parents 77fa3fdbfc7e
children 1a0dfcbffaf1
comparison
equal deleted inserted replaced
660:8663a831838f 663:1a0fdad4af4d
19 #include "base/ZoomConstraint.h" 19 #include "base/ZoomConstraint.h"
20 20
21 #include <QPaintEvent> 21 #include <QPaintEvent>
22 #include <QPainter> 22 #include <QPainter>
23 #include <iostream> 23 #include <iostream>
24
25 //#define DEBUG_OVERVIEW 1
24 26
25 using std::cerr; 27 using std::cerr;
26 using std::endl; 28 using std::endl;
27 29
28 Overview::Overview(QWidget *w) : 30 Overview::Overview(QWidget *w) :
88 m_views.erase(view); 90 m_views.erase(view);
89 update(); 91 update();
90 } 92 }
91 93
92 void 94 void
93 Overview::globalCentreFrameChanged(unsigned long) 95 Overview::globalCentreFrameChanged(unsigned long f)
94 { 96 {
97 #ifdef DEBUG_OVERVIEW
98 std::cerr << "Overview::globalCentreFrameChanged: " << f << std::endl;
99 #endif
95 update(); 100 update();
96 } 101 }
97 102
98 void 103 void
99 Overview::viewCentreFrameChanged(View *v, unsigned long) 104 Overview::viewCentreFrameChanged(View *v, unsigned long f)
100 { 105 {
106 #ifdef DEBUG_OVERVIEW
107 std::cerr << "Overview[" << this << "]::viewCentreFrameChanged(" << v << "): " << f << std::endl;
108 #endif
101 if (m_views.find(v) != m_views.end()) { 109 if (m_views.find(v) != m_views.end()) {
102 update(); 110 update();
103 } 111 }
104 } 112 }
105 113
113 } 121 }
114 122
115 void 123 void
116 Overview::viewManagerPlaybackFrameChanged(unsigned long f) 124 Overview::viewManagerPlaybackFrameChanged(unsigned long f)
117 { 125 {
126 #ifdef DEBUG_OVERVIEW
127 std::cerr << "Overview[" << this << "]::viewManagerPlaybackFrameChanged(" << f << "): " << f << std::endl;
128 #endif
129
118 bool changed = false; 130 bool changed = false;
119 131
120 f = getAlignedPlaybackFrame(); 132 f = getAlignedPlaybackFrame();
121 133
122 if (getXForFrame(m_playPointerFrame) != getXForFrame(f)) changed = true; 134 if (getXForFrame(m_playPointerFrame) != getXForFrame(f)) changed = true;
128 void 140 void
129 Overview::paintEvent(QPaintEvent *e) 141 Overview::paintEvent(QPaintEvent *e)
130 { 142 {
131 // Recalculate zoom in case the size of the widget has changed. 143 // Recalculate zoom in case the size of the widget has changed.
132 144
133 // SVDEBUG << "Overview::paintEvent: width is " << width() << ", centre frame " << m_centreFrame << endl; 145 #ifdef DEBUG_OVERVIEW
146 std::cerr << "Overview::paintEvent: width is " << width() << ", centre frame " << m_centreFrame << std::endl;
147 #endif
134 148
135 size_t startFrame = getModelsStartFrame(); 149 size_t startFrame = getModelsStartFrame();
136 size_t frameCount = getModelsEndFrame() - getModelsStartFrame(); 150 size_t frameCount = getModelsEndFrame() - getModelsStartFrame();
137 int zoomLevel = frameCount / width(); 151 int zoomLevel = frameCount / width();
138 if (zoomLevel < 1) zoomLevel = 1; 152 if (zoomLevel < 1) zoomLevel = 1;
146 size_t centreFrame = startFrame + m_zoomLevel * (width() / 2); 160 size_t centreFrame = startFrame + m_zoomLevel * (width() / 2);
147 if (centreFrame > (startFrame + getModelsEndFrame())/2) { 161 if (centreFrame > (startFrame + getModelsEndFrame())/2) {
148 centreFrame = (startFrame + getModelsEndFrame())/2; 162 centreFrame = (startFrame + getModelsEndFrame())/2;
149 } 163 }
150 if (centreFrame != m_centreFrame) { 164 if (centreFrame != m_centreFrame) {
151 // SVDEBUG << "Overview::paintEvent: Centre frame changed from " 165 #ifdef DEBUG_OVERVIEW
152 // << m_centreFrame << " to " << centreFrame << " and thus start frame from " << getStartFrame(); 166 std::cerr << "Overview::paintEvent: Centre frame changed from "
167 << m_centreFrame << " to " << centreFrame << " and thus start frame from " << getStartFrame();
168 #endif
153 m_centreFrame = centreFrame; 169 m_centreFrame = centreFrame;
154 // SVDEBUG << " to " << getStartFrame() << endl; 170 #ifdef DEBUG_OVERVIEW
171 std::cerr << " to " << getStartFrame() << std::endl;
172 #endif
155 emit centreFrameChanged(m_centreFrame, false, PlaybackIgnore); 173 emit centreFrameChanged(m_centreFrame, false, PlaybackIgnore);
156 } 174 }
157 175
158 View::paintEvent(e); 176 View::paintEvent(e);
159 177
257 } 275 }
258 276
259 if (std::max(m_centreFrame, newCentreFrame) - 277 if (std::max(m_centreFrame, newCentreFrame) -
260 std::min(m_centreFrame, newCentreFrame) > size_t(m_zoomLevel)) { 278 std::min(m_centreFrame, newCentreFrame) > size_t(m_zoomLevel)) {
261 size_t rf = alignToReference(newCentreFrame); 279 size_t rf = alignToReference(newCentreFrame);
280 #ifdef DEBUG_OVERVIEW
281 std::cerr << "Overview::mouseMoveEvent: x " << e->x() << " and click x " << m_clickPos.x() << " -> frame " << newCentreFrame << " -> rf " << rf << std::endl;
282 #endif
262 emit centreFrameChanged(rf, true, PlaybackScrollContinuous); 283 emit centreFrameChanged(rf, true, PlaybackScrollContinuous);
263 } 284 }
264 } 285 }
265 286
266 void 287 void
267 Overview::mouseDoubleClickEvent(QMouseEvent *e) 288 Overview::mouseDoubleClickEvent(QMouseEvent *e)
268 { 289 {
269 long frame = getFrameForX(e->x()); 290 long frame = getFrameForX(e->x());
270 size_t rf = 0; 291 size_t rf = 0;
271 if (frame > 0) rf = alignToReference(frame); 292 if (frame > 0) rf = alignToReference(frame);
293 #ifdef DEBUG_OVERVIEW
294 std::cerr << "Overview::mouseDoubleClickEvent: frame " << frame << " -> rf " << rf << std::endl;
295 #endif
296 m_clickedInRange = false; // we're not starting a drag with the second click
272 emit centreFrameChanged(rf, true, PlaybackScrollContinuous); 297 emit centreFrameChanged(rf, true, PlaybackScrollContinuous);
273 } 298 }
274 299
275 void 300 void
276 Overview::enterEvent(QEvent *) 301 Overview::enterEvent(QEvent *)