Mercurial > hg > svgui
comparison view/View.cpp @ 944:78c152e4db95
Merge from branch tonioni
author | Chris Cannam |
---|---|
date | Mon, 20 Apr 2015 09:12:17 +0100 |
parents | 4a578a360011 |
children | 59e51842cf39 |
comparison
equal
deleted
inserted
replaced
896:78e041e45ff0 | 944:78c152e4db95 |
---|---|
162 } | 162 } |
163 | 163 |
164 int | 164 int |
165 View::getPropertyContainerCount() const | 165 View::getPropertyContainerCount() const |
166 { | 166 { |
167 return m_fixedOrderLayers.size() + 1; // the 1 is for me | 167 return int(m_fixedOrderLayers.size()) + 1; // the 1 is for me |
168 } | 168 } |
169 | 169 |
170 const PropertyContainer * | 170 const PropertyContainer * |
171 View::getPropertyContainer(int i) const | 171 View::getPropertyContainer(int i) const |
172 { | 172 { |
180 if (i == 0) return m_propertyContainer; | 180 if (i == 0) return m_propertyContainer; |
181 return m_fixedOrderLayers[i-1]; | 181 return m_fixedOrderLayers[i-1]; |
182 } | 182 } |
183 | 183 |
184 bool | 184 bool |
185 View::getValueExtents(QString unit, float &min, float &max, bool &log) const | 185 View::getValueExtents(QString unit, double &min, double &max, bool &log) const |
186 { | 186 { |
187 bool have = false; | 187 bool have = false; |
188 | 188 |
189 for (LayerList::const_iterator i = m_layerStack.begin(); | 189 for (LayerList::const_iterator i = m_layerStack.begin(); |
190 i != m_layerStack.end(); ++i) { | 190 i != m_layerStack.end(); ++i) { |
191 | 191 |
192 QString layerUnit; | 192 QString layerUnit; |
193 float layerMin = 0.0, layerMax = 0.0; | 193 double layerMin = 0.0, layerMax = 0.0; |
194 float displayMin = 0.0, displayMax = 0.0; | 194 double displayMin = 0.0, displayMax = 0.0; |
195 bool layerLog = false; | 195 bool layerLog = false; |
196 | 196 |
197 if ((*i)->getValueExtents(layerMin, layerMax, layerLog, layerUnit) && | 197 if ((*i)->getValueExtents(layerMin, layerMax, layerLog, layerUnit) && |
198 layerUnit.toLower() == unit.toLower()) { | 198 layerUnit.toLower() == unit.toLower()) { |
199 | 199 |
296 View::zoomWheelsEnabledChanged() | 296 View::zoomWheelsEnabledChanged() |
297 { | 297 { |
298 // subclass might override this | 298 // subclass might override this |
299 } | 299 } |
300 | 300 |
301 int | 301 sv_frame_t |
302 View::getStartFrame() const | 302 View::getStartFrame() const |
303 { | 303 { |
304 return getFrameForX(0); | 304 return getFrameForX(0); |
305 } | 305 } |
306 | 306 |
307 int | 307 sv_frame_t |
308 View::getEndFrame() const | 308 View::getEndFrame() const |
309 { | 309 { |
310 return getFrameForX(width()) - 1; | 310 return getFrameForX(width()) - 1; |
311 } | 311 } |
312 | 312 |
313 void | 313 void |
314 View::setStartFrame(int f) | 314 View::setStartFrame(sv_frame_t f) |
315 { | 315 { |
316 setCentreFrame(f + m_zoomLevel * (width() / 2)); | 316 setCentreFrame(f + m_zoomLevel * (width() / 2)); |
317 } | 317 } |
318 | 318 |
319 bool | 319 bool |
320 View::setCentreFrame(int f, bool e) | 320 View::setCentreFrame(sv_frame_t f, bool e) |
321 { | 321 { |
322 bool changeVisible = false; | 322 bool changeVisible = false; |
323 | 323 |
324 if (m_centreFrame != f) { | 324 if (m_centreFrame != f) { |
325 | 325 |
326 int formerPixel = m_centreFrame / m_zoomLevel; | 326 int formerPixel = int(m_centreFrame / m_zoomLevel); |
327 | 327 |
328 m_centreFrame = f; | 328 m_centreFrame = f; |
329 | 329 |
330 int newPixel = m_centreFrame / m_zoomLevel; | 330 int newPixel = int(m_centreFrame / m_zoomLevel); |
331 | 331 |
332 if (newPixel != formerPixel) { | 332 if (newPixel != formerPixel) { |
333 | 333 |
334 #ifdef DEBUG_VIEW_WIDGET_PAINT | 334 #ifdef DEBUG_VIEW_WIDGET_PAINT |
335 cout << "View(" << this << ")::setCentreFrame: newPixel " << newPixel << ", formerPixel " << formerPixel << endl; | 335 cout << "View(" << this << ")::setCentreFrame: newPixel " << newPixel << ", formerPixel " << formerPixel << endl; |
338 | 338 |
339 changeVisible = true; | 339 changeVisible = true; |
340 } | 340 } |
341 | 341 |
342 if (e) { | 342 if (e) { |
343 int rf = alignToReference(f); | 343 sv_frame_t rf = alignToReference(f); |
344 #ifdef DEBUG_VIEW | 344 #ifdef DEBUG_VIEW |
345 cerr << "View[" << this << "]::setCentreFrame(" << f | 345 cerr << "View[" << this << "]::setCentreFrame(" << f |
346 << "): emitting centreFrameChanged(" | 346 << "): emitting centreFrameChanged(" |
347 << rf << ")" << endl; | 347 << rf << ")" << endl; |
348 #endif | 348 #endif |
352 | 352 |
353 return changeVisible; | 353 return changeVisible; |
354 } | 354 } |
355 | 355 |
356 int | 356 int |
357 View::getXForFrame(int frame) const | 357 View::getXForFrame(sv_frame_t frame) const |
358 { | 358 { |
359 return (frame - getStartFrame()) / m_zoomLevel; | 359 return int((frame - getStartFrame()) / m_zoomLevel); |
360 } | 360 } |
361 | 361 |
362 int | 362 sv_frame_t |
363 View::getFrameForX(int x) const | 363 View::getFrameForX(int x) const |
364 { | 364 { |
365 int z = m_zoomLevel; | 365 int z = m_zoomLevel; |
366 int frame = m_centreFrame - (width()/2) * z; | 366 sv_frame_t frame = m_centreFrame - (width()/2) * z; |
367 | 367 |
368 #ifdef DEBUG_VIEW_WIDGET_PAINT | 368 #ifdef DEBUG_VIEW_WIDGET_PAINT |
369 SVDEBUG << "View::getFrameForX(" << x << "): z = " << z << ", m_centreFrame = " << m_centreFrame << ", width() = " << width() << ", frame = " << frame << endl; | 369 SVDEBUG << "View::getFrameForX(" << x << "): z = " << z << ", m_centreFrame = " << m_centreFrame << ", width() = " << width() << ", frame = " << frame << endl; |
370 #endif | 370 #endif |
371 | 371 |
372 frame = (frame / z) * z; // this is start frame | 372 frame = (frame / z) * z; // this is start frame |
373 return frame + x * z; | 373 return frame + x * z; |
374 } | 374 } |
375 | 375 |
376 float | 376 double |
377 View::getYForFrequency(float frequency, | 377 View::getYForFrequency(double frequency, |
378 float minf, | 378 double minf, |
379 float maxf, | 379 double maxf, |
380 bool logarithmic) const | 380 bool logarithmic) const |
381 { | 381 { |
382 Profiler profiler("View::getYForFrequency"); | 382 Profiler profiler("View::getYForFrequency"); |
383 | 383 |
384 int h = height(); | 384 int h = height(); |
385 | 385 |
386 if (logarithmic) { | 386 if (logarithmic) { |
387 | 387 |
388 static float lastminf = 0.0, lastmaxf = 0.0; | 388 static double lastminf = 0.0, lastmaxf = 0.0; |
389 static float logminf = 0.0, logmaxf = 0.0; | 389 static double logminf = 0.0, logmaxf = 0.0; |
390 | 390 |
391 if (lastminf != minf) { | 391 if (lastminf != minf) { |
392 lastminf = (minf == 0.0 ? 1.0 : minf); | 392 lastminf = (minf == 0.0 ? 1.0 : minf); |
393 logminf = log10f(minf); | 393 logminf = log10(minf); |
394 } | 394 } |
395 if (lastmaxf != maxf) { | 395 if (lastmaxf != maxf) { |
396 lastmaxf = (maxf < lastminf ? lastminf : maxf); | 396 lastmaxf = (maxf < lastminf ? lastminf : maxf); |
397 logmaxf = log10f(maxf); | 397 logmaxf = log10(maxf); |
398 } | 398 } |
399 | 399 |
400 if (logminf == logmaxf) return 0; | 400 if (logminf == logmaxf) return 0; |
401 return h - (h * (log10f(frequency) - logminf)) / (logmaxf - logminf); | 401 return h - (h * (log10(frequency) - logminf)) / (logmaxf - logminf); |
402 | 402 |
403 } else { | 403 } else { |
404 | 404 |
405 if (minf == maxf) return 0; | 405 if (minf == maxf) return 0; |
406 return h - (h * (frequency - minf)) / (maxf - minf); | 406 return h - (h * (frequency - minf)) / (maxf - minf); |
407 } | 407 } |
408 } | 408 } |
409 | 409 |
410 float | 410 double |
411 View::getFrequencyForY(int y, | 411 View::getFrequencyForY(int y, |
412 float minf, | 412 double minf, |
413 float maxf, | 413 double maxf, |
414 bool logarithmic) const | 414 bool logarithmic) const |
415 { | 415 { |
416 int h = height(); | 416 int h = height(); |
417 | 417 |
418 if (logarithmic) { | 418 if (logarithmic) { |
419 | 419 |
420 static float lastminf = 0.0, lastmaxf = 0.0; | 420 static double lastminf = 0.0, lastmaxf = 0.0; |
421 static float logminf = 0.0, logmaxf = 0.0; | 421 static double logminf = 0.0, logmaxf = 0.0; |
422 | 422 |
423 if (lastminf != minf) { | 423 if (lastminf != minf) { |
424 lastminf = (minf == 0.0 ? 1.0 : minf); | 424 lastminf = (minf == 0.0 ? 1.0 : minf); |
425 logminf = log10f(minf); | 425 logminf = log10(minf); |
426 } | 426 } |
427 if (lastmaxf != maxf) { | 427 if (lastmaxf != maxf) { |
428 lastmaxf = (maxf < lastminf ? lastminf : maxf); | 428 lastmaxf = (maxf < lastminf ? lastminf : maxf); |
429 logmaxf = log10f(maxf); | 429 logmaxf = log10(maxf); |
430 } | 430 } |
431 | 431 |
432 if (logminf == logmaxf) return 0; | 432 if (logminf == logmaxf) return 0; |
433 return pow(10.f, logminf + ((logmaxf - logminf) * (h - y)) / h); | 433 return pow(10.0, logminf + ((logmaxf - logminf) * (h - y)) / h); |
434 | 434 |
435 } else { | 435 } else { |
436 | 436 |
437 if (minf == maxf) return 0; | 437 if (minf == maxf) return 0; |
438 return minf + ((h - y) * (maxf - minf)) / h; | 438 return minf + ((h - y) * (maxf - minf)) / h; |
578 this, SLOT(modelChanged())); | 578 this, SLOT(modelChanged())); |
579 connect(layer, SIGNAL(modelCompletionChanged()), | 579 connect(layer, SIGNAL(modelCompletionChanged()), |
580 this, SLOT(modelCompletionChanged())); | 580 this, SLOT(modelCompletionChanged())); |
581 connect(layer, SIGNAL(modelAlignmentCompletionChanged()), | 581 connect(layer, SIGNAL(modelAlignmentCompletionChanged()), |
582 this, SLOT(modelAlignmentCompletionChanged())); | 582 this, SLOT(modelAlignmentCompletionChanged())); |
583 connect(layer, SIGNAL(modelChangedWithin(int, int)), | 583 connect(layer, SIGNAL(modelChangedWithin(sv_frame_t, sv_frame_t)), |
584 this, SLOT(modelChangedWithin(int, int))); | 584 this, SLOT(modelChangedWithin(sv_frame_t, sv_frame_t))); |
585 connect(layer, SIGNAL(modelReplaced()), | 585 connect(layer, SIGNAL(modelReplaced()), |
586 this, SLOT(modelReplaced())); | 586 this, SLOT(modelReplaced())); |
587 | 587 |
588 update(); | 588 update(); |
589 | 589 |
634 this, SLOT(modelChanged())); | 634 this, SLOT(modelChanged())); |
635 disconnect(layer, SIGNAL(modelCompletionChanged()), | 635 disconnect(layer, SIGNAL(modelCompletionChanged()), |
636 this, SLOT(modelCompletionChanged())); | 636 this, SLOT(modelCompletionChanged())); |
637 disconnect(layer, SIGNAL(modelAlignmentCompletionChanged()), | 637 disconnect(layer, SIGNAL(modelAlignmentCompletionChanged()), |
638 this, SLOT(modelAlignmentCompletionChanged())); | 638 this, SLOT(modelAlignmentCompletionChanged())); |
639 disconnect(layer, SIGNAL(modelChangedWithin(int, int)), | 639 disconnect(layer, SIGNAL(modelChangedWithin(sv_frame_t, sv_frame_t)), |
640 this, SLOT(modelChangedWithin(int, int))); | 640 this, SLOT(modelChangedWithin(sv_frame_t, sv_frame_t))); |
641 disconnect(layer, SIGNAL(modelReplaced()), | 641 disconnect(layer, SIGNAL(modelReplaced()), |
642 this, SLOT(modelReplaced())); | 642 this, SLOT(modelReplaced())); |
643 | 643 |
644 update(); | 644 update(); |
645 | 645 |
690 | 690 |
691 void | 691 void |
692 View::setViewManager(ViewManager *manager) | 692 View::setViewManager(ViewManager *manager) |
693 { | 693 { |
694 if (m_manager) { | 694 if (m_manager) { |
695 m_manager->disconnect(this, SLOT(globalCentreFrameChanged(int))); | 695 m_manager->disconnect(this, SLOT(globalCentreFrameChanged(sv_frame_t))); |
696 m_manager->disconnect(this, SLOT(viewCentreFrameChanged(View *, int))); | 696 m_manager->disconnect(this, SLOT(viewCentreFrameChanged(View *, sv_frame_t))); |
697 m_manager->disconnect(this, SLOT(viewManagerPlaybackFrameChanged(int))); | 697 m_manager->disconnect(this, SLOT(viewManagerPlaybackFrameChanged(sv_frame_t))); |
698 m_manager->disconnect(this, SLOT(viewZoomLevelChanged(View *, int, bool))); | 698 m_manager->disconnect(this, SLOT(viewZoomLevelChanged(View *, int, bool))); |
699 m_manager->disconnect(this, SLOT(toolModeChanged())); | 699 m_manager->disconnect(this, SLOT(toolModeChanged())); |
700 m_manager->disconnect(this, SLOT(selectionChanged())); | 700 m_manager->disconnect(this, SLOT(selectionChanged())); |
701 m_manager->disconnect(this, SLOT(overlayModeChanged())); | 701 m_manager->disconnect(this, SLOT(overlayModeChanged())); |
702 m_manager->disconnect(this, SLOT(zoomWheelsEnabledChanged())); | 702 m_manager->disconnect(this, SLOT(zoomWheelsEnabledChanged())); |
703 disconnect(m_manager, SLOT(viewCentreFrameChanged(int, bool, PlaybackFollowMode))); | 703 disconnect(m_manager, SLOT(viewCentreFrameChanged(sv_frame_t, bool, PlaybackFollowMode))); |
704 disconnect(m_manager, SLOT(zoomLevelChanged(int, bool))); | 704 disconnect(m_manager, SLOT(zoomLevelChanged(int, bool))); |
705 } | 705 } |
706 | 706 |
707 m_manager = manager; | 707 m_manager = manager; |
708 | 708 |
709 connect(m_manager, SIGNAL(globalCentreFrameChanged(int)), | 709 connect(m_manager, SIGNAL(globalCentreFrameChanged(sv_frame_t)), |
710 this, SLOT(globalCentreFrameChanged(int))); | 710 this, SLOT(globalCentreFrameChanged(sv_frame_t))); |
711 connect(m_manager, SIGNAL(viewCentreFrameChanged(View *, int)), | 711 connect(m_manager, SIGNAL(viewCentreFrameChanged(View *, sv_frame_t)), |
712 this, SLOT(viewCentreFrameChanged(View *, int))); | 712 this, SLOT(viewCentreFrameChanged(View *, sv_frame_t))); |
713 connect(m_manager, SIGNAL(playbackFrameChanged(int)), | 713 connect(m_manager, SIGNAL(playbackFrameChanged(sv_frame_t)), |
714 this, SLOT(viewManagerPlaybackFrameChanged(int))); | 714 this, SLOT(viewManagerPlaybackFrameChanged(sv_frame_t))); |
715 | 715 |
716 connect(m_manager, SIGNAL(viewZoomLevelChanged(View *, int, bool)), | 716 connect(m_manager, SIGNAL(viewZoomLevelChanged(View *, int, bool)), |
717 this, SLOT(viewZoomLevelChanged(View *, int, bool))); | 717 this, SLOT(viewZoomLevelChanged(View *, int, bool))); |
718 | 718 |
719 connect(m_manager, SIGNAL(toolModeChanged()), | 719 connect(m_manager, SIGNAL(toolModeChanged()), |
727 connect(m_manager, SIGNAL(showCentreLineChanged()), | 727 connect(m_manager, SIGNAL(showCentreLineChanged()), |
728 this, SLOT(overlayModeChanged())); | 728 this, SLOT(overlayModeChanged())); |
729 connect(m_manager, SIGNAL(zoomWheelsEnabledChanged()), | 729 connect(m_manager, SIGNAL(zoomWheelsEnabledChanged()), |
730 this, SLOT(zoomWheelsEnabledChanged())); | 730 this, SLOT(zoomWheelsEnabledChanged())); |
731 | 731 |
732 connect(this, SIGNAL(centreFrameChanged(int, bool, | 732 connect(this, SIGNAL(centreFrameChanged(sv_frame_t, bool, |
733 PlaybackFollowMode)), | 733 PlaybackFollowMode)), |
734 m_manager, SLOT(viewCentreFrameChanged(int, bool, | 734 m_manager, SLOT(viewCentreFrameChanged(sv_frame_t, bool, |
735 PlaybackFollowMode))); | 735 PlaybackFollowMode))); |
736 | 736 |
737 connect(this, SIGNAL(zoomLevelChanged(int, bool)), | 737 connect(this, SIGNAL(zoomLevelChanged(int, bool)), |
738 m_manager, SLOT(viewZoomLevelChanged(int, bool))); | 738 m_manager, SLOT(viewZoomLevelChanged(int, bool))); |
739 | 739 |
761 | 761 |
762 toolModeChanged(); | 762 toolModeChanged(); |
763 } | 763 } |
764 | 764 |
765 void | 765 void |
766 View::setViewManager(ViewManager *vm, int initialCentreFrame) | 766 View::setViewManager(ViewManager *vm, sv_frame_t initialCentreFrame) |
767 { | 767 { |
768 setViewManager(vm); | 768 setViewManager(vm); |
769 setCentreFrame(initialCentreFrame, false); | 769 setCentreFrame(initialCentreFrame, false); |
770 } | 770 } |
771 | 771 |
875 | 875 |
876 update(); | 876 update(); |
877 } | 877 } |
878 | 878 |
879 void | 879 void |
880 View::modelChangedWithin(int startFrame, int endFrame) | 880 View::modelChangedWithin(sv_frame_t startFrame, sv_frame_t endFrame) |
881 { | 881 { |
882 QObject *obj = sender(); | 882 QObject *obj = sender(); |
883 | 883 |
884 int myStartFrame = getStartFrame(); | 884 sv_frame_t myStartFrame = getStartFrame(); |
885 int myEndFrame = getEndFrame(); | 885 sv_frame_t myEndFrame = getEndFrame(); |
886 | 886 |
887 #ifdef DEBUG_VIEW_WIDGET_PAINT | 887 #ifdef DEBUG_VIEW_WIDGET_PAINT |
888 cerr << "View(" << this << ")::modelChangedWithin(" << startFrame << "," << endFrame << ") [me " << myStartFrame << "," << myEndFrame << "]" << endl; | 888 cerr << "View(" << this << ")::modelChangedWithin(" << startFrame << "," << endFrame << ") [me " << myStartFrame << "," << myEndFrame << "]" << endl; |
889 #endif | 889 #endif |
890 | 890 |
891 if (myStartFrame > 0 && endFrame < int(myStartFrame)) { | 891 if (myStartFrame > 0 && endFrame < myStartFrame) { |
892 checkProgress(obj); | 892 checkProgress(obj); |
893 return; | 893 return; |
894 } | 894 } |
895 if (startFrame > myEndFrame) { | 895 if (startFrame > myEndFrame) { |
896 checkProgress(obj); | 896 checkProgress(obj); |
993 Layer *layer = dynamic_cast<Layer *>(sender()); | 993 Layer *layer = dynamic_cast<Layer *>(sender()); |
994 if (layer) emit propertyContainerNameChanged(layer); | 994 if (layer) emit propertyContainerNameChanged(layer); |
995 } | 995 } |
996 | 996 |
997 void | 997 void |
998 View::globalCentreFrameChanged(int rf) | 998 View::globalCentreFrameChanged(sv_frame_t rf) |
999 { | 999 { |
1000 if (m_followPan) { | 1000 if (m_followPan) { |
1001 int f = alignFromReference(rf); | 1001 sv_frame_t f = alignFromReference(rf); |
1002 #ifdef DEBUG_VIEW | 1002 #ifdef DEBUG_VIEW |
1003 cerr << "View[" << this << "]::globalCentreFrameChanged(" << rf | 1003 cerr << "View[" << this << "]::globalCentreFrameChanged(" << rf |
1004 << "): setting centre frame to " << f << endl; | 1004 << "): setting centre frame to " << f << endl; |
1005 #endif | 1005 #endif |
1006 setCentreFrame(f, false); | 1006 setCentreFrame(f, false); |
1007 } | 1007 } |
1008 } | 1008 } |
1009 | 1009 |
1010 void | 1010 void |
1011 View::viewCentreFrameChanged(View *, int ) | 1011 View::viewCentreFrameChanged(View *, sv_frame_t ) |
1012 { | 1012 { |
1013 // We do nothing with this, but a subclass might | 1013 // We do nothing with this, but a subclass might |
1014 } | 1014 } |
1015 | 1015 |
1016 void | 1016 void |
1017 View::viewManagerPlaybackFrameChanged(int f) | 1017 View::viewManagerPlaybackFrameChanged(sv_frame_t f) |
1018 { | 1018 { |
1019 if (m_manager) { | 1019 if (m_manager) { |
1020 if (sender() != m_manager) return; | 1020 if (sender() != m_manager) return; |
1021 } | 1021 } |
1022 | 1022 |
1032 | 1032 |
1033 movePlayPointer(f); | 1033 movePlayPointer(f); |
1034 } | 1034 } |
1035 | 1035 |
1036 void | 1036 void |
1037 View::movePlayPointer(int newFrame) | 1037 View::movePlayPointer(sv_frame_t newFrame) |
1038 { | 1038 { |
1039 #ifdef DEBUG_VIEW | 1039 #ifdef DEBUG_VIEW |
1040 cerr << "View(" << this << ")::movePlayPointer(" << newFrame << ")" << endl; | 1040 cerr << "View(" << this << ")::movePlayPointer(" << newFrame << ")" << endl; |
1041 #endif | 1041 #endif |
1042 | 1042 |
1043 if (m_playPointerFrame == newFrame) return; | 1043 if (m_playPointerFrame == newFrame) return; |
1044 bool visibleChange = | 1044 bool visibleChange = |
1045 (getXForFrame(m_playPointerFrame) != getXForFrame(newFrame)); | 1045 (getXForFrame(m_playPointerFrame) != getXForFrame(newFrame)); |
1046 int oldPlayPointerFrame = m_playPointerFrame; | 1046 sv_frame_t oldPlayPointerFrame = m_playPointerFrame; |
1047 m_playPointerFrame = newFrame; | 1047 m_playPointerFrame = newFrame; |
1048 if (!visibleChange) return; | 1048 if (!visibleChange) return; |
1049 | 1049 |
1050 bool somethingGoingOn = | 1050 bool somethingGoingOn = |
1051 ((QApplication::mouseButtons() != Qt::NoButton) || | 1051 ((QApplication::mouseButtons() != Qt::NoButton) || |
1079 } else { | 1079 } else { |
1080 | 1080 |
1081 int xold = getXForFrame(oldPlayPointerFrame); | 1081 int xold = getXForFrame(oldPlayPointerFrame); |
1082 update(xold - 4, 0, 9, height()); | 1082 update(xold - 4, 0, 9, height()); |
1083 | 1083 |
1084 int w = getEndFrame() - getStartFrame(); | 1084 sv_frame_t w = getEndFrame() - getStartFrame(); |
1085 w -= w/5; | 1085 w -= w/5; |
1086 int sf = (m_playPointerFrame / w) * w - w/8; | 1086 sv_frame_t sf = (m_playPointerFrame / w) * w - w/8; |
1087 | 1087 |
1088 if (m_manager && | 1088 if (m_manager && |
1089 m_manager->isPlaying() && | 1089 m_manager->isPlaying() && |
1090 m_manager->getPlaySelectionMode()) { | 1090 m_manager->getPlaySelectionMode()) { |
1091 MultiSelection::SelectionList selections = m_manager->getSelections(); | 1091 MultiSelection::SelectionList selections = m_manager->getSelections(); |
1092 if (!selections.empty()) { | 1092 if (!selections.empty()) { |
1093 int selectionStart = selections.begin()->getStartFrame(); | 1093 sv_frame_t selectionStart = selections.begin()->getStartFrame(); |
1094 if (sf < selectionStart - w / 10) { | 1094 if (sf < selectionStart - w / 10) { |
1095 sf = selectionStart - w / 10; | 1095 sf = selectionStart - w / 10; |
1096 } | 1096 } |
1097 } | 1097 } |
1098 } | 1098 } |
1122 } else if (somethingGoingOn) { | 1122 } else if (somethingGoingOn) { |
1123 m_followPlayIsDetached = true; | 1123 m_followPlayIsDetached = true; |
1124 } | 1124 } |
1125 | 1125 |
1126 if (!somethingGoingOn && shouldScroll) { | 1126 if (!somethingGoingOn && shouldScroll) { |
1127 int offset = getFrameForX(width()/2) - getStartFrame(); | 1127 sv_frame_t offset = getFrameForX(width()/2) - getStartFrame(); |
1128 int newCentre = sf + offset; | 1128 sv_frame_t newCentre = sf + offset; |
1129 bool changed = setCentreFrame(newCentre, false); | 1129 bool changed = setCentreFrame(newCentre, false); |
1130 if (changed) { | 1130 if (changed) { |
1131 xold = getXForFrame(oldPlayPointerFrame); | 1131 xold = getXForFrame(oldPlayPointerFrame); |
1132 update(xold - 4, 0, 9, height()); | 1132 update(xold - 4, 0, 9, height()); |
1133 } | 1133 } |
1166 m_selectionCached = false; | 1166 m_selectionCached = false; |
1167 } | 1167 } |
1168 update(); | 1168 update(); |
1169 } | 1169 } |
1170 | 1170 |
1171 int | 1171 sv_frame_t |
1172 View::getFirstVisibleFrame() const | 1172 View::getFirstVisibleFrame() const |
1173 { | 1173 { |
1174 int f0 = getStartFrame(); | 1174 sv_frame_t f0 = getStartFrame(); |
1175 int f = getModelsStartFrame(); | 1175 sv_frame_t f = getModelsStartFrame(); |
1176 if (f0 < 0 || f0 < f) return f; | 1176 if (f0 < 0 || f0 < f) return f; |
1177 return f0; | 1177 return f0; |
1178 } | 1178 } |
1179 | 1179 |
1180 int | 1180 sv_frame_t |
1181 View::getLastVisibleFrame() const | 1181 View::getLastVisibleFrame() const |
1182 { | 1182 { |
1183 int f0 = getEndFrame(); | 1183 sv_frame_t f0 = getEndFrame(); |
1184 int f = getModelsEndFrame(); | 1184 sv_frame_t f = getModelsEndFrame(); |
1185 if (f0 > f) return f; | 1185 if (f0 > f) return f; |
1186 return f0; | 1186 return f0; |
1187 } | 1187 } |
1188 | 1188 |
1189 int | 1189 sv_frame_t |
1190 View::getModelsStartFrame() const | 1190 View::getModelsStartFrame() const |
1191 { | 1191 { |
1192 bool first = true; | 1192 bool first = true; |
1193 int startFrame = 0; | 1193 sv_frame_t startFrame = 0; |
1194 | 1194 |
1195 for (LayerList::const_iterator i = m_layerStack.begin(); i != m_layerStack.end(); ++i) { | 1195 for (LayerList::const_iterator i = m_layerStack.begin(); i != m_layerStack.end(); ++i) { |
1196 | 1196 |
1197 if ((*i)->getModel() && (*i)->getModel()->isOK()) { | 1197 if ((*i)->getModel() && (*i)->getModel()->isOK()) { |
1198 | 1198 |
1199 int thisStartFrame = (*i)->getModel()->getStartFrame(); | 1199 sv_frame_t thisStartFrame = (*i)->getModel()->getStartFrame(); |
1200 | 1200 |
1201 if (first || thisStartFrame < startFrame) { | 1201 if (first || thisStartFrame < startFrame) { |
1202 startFrame = thisStartFrame; | 1202 startFrame = thisStartFrame; |
1203 } | 1203 } |
1204 first = false; | 1204 first = false; |
1205 } | 1205 } |
1206 } | 1206 } |
1207 return startFrame; | 1207 return startFrame; |
1208 } | 1208 } |
1209 | 1209 |
1210 int | 1210 sv_frame_t |
1211 View::getModelsEndFrame() const | 1211 View::getModelsEndFrame() const |
1212 { | 1212 { |
1213 bool first = true; | 1213 bool first = true; |
1214 int endFrame = 0; | 1214 sv_frame_t endFrame = 0; |
1215 | 1215 |
1216 for (LayerList::const_iterator i = m_layerStack.begin(); i != m_layerStack.end(); ++i) { | 1216 for (LayerList::const_iterator i = m_layerStack.begin(); i != m_layerStack.end(); ++i) { |
1217 | 1217 |
1218 if ((*i)->getModel() && (*i)->getModel()->isOK()) { | 1218 if ((*i)->getModel() && (*i)->getModel()->isOK()) { |
1219 | 1219 |
1220 int thisEndFrame = (*i)->getModel()->getEndFrame(); | 1220 sv_frame_t thisEndFrame = (*i)->getModel()->getEndFrame(); |
1221 | 1221 |
1222 if (first || thisEndFrame > endFrame) { | 1222 if (first || thisEndFrame > endFrame) { |
1223 endFrame = thisEndFrame; | 1223 endFrame = thisEndFrame; |
1224 } | 1224 } |
1225 first = false; | 1225 first = false; |
1228 | 1228 |
1229 if (first) return getModelsStartFrame(); | 1229 if (first) return getModelsStartFrame(); |
1230 return endFrame; | 1230 return endFrame; |
1231 } | 1231 } |
1232 | 1232 |
1233 int | 1233 sv_samplerate_t |
1234 View::getModelsSampleRate() const | 1234 View::getModelsSampleRate() const |
1235 { | 1235 { |
1236 //!!! Just go for the first, for now. If we were supporting | 1236 //!!! Just go for the first, for now. If we were supporting |
1237 // multiple samplerates, we'd probably want to do frame/time | 1237 // multiple samplerates, we'd probably want to do frame/time |
1238 // conversion in the model | 1238 // conversion in the model |
1307 if (goodModel) return goodModel; | 1307 if (goodModel) return goodModel; |
1308 else if (alignedModel) return alignedModel; | 1308 else if (alignedModel) return alignedModel; |
1309 else return anyModel; | 1309 else return anyModel; |
1310 } | 1310 } |
1311 | 1311 |
1312 int | 1312 sv_frame_t |
1313 View::alignFromReference(int f) const | 1313 View::alignFromReference(sv_frame_t f) const |
1314 { | 1314 { |
1315 if (!m_manager || !m_manager->getAlignMode()) return f; | 1315 if (!m_manager || !m_manager->getAlignMode()) return f; |
1316 Model *aligningModel = getAligningModel(); | 1316 Model *aligningModel = getAligningModel(); |
1317 if (!aligningModel) return f; | 1317 if (!aligningModel) return f; |
1318 return aligningModel->alignFromReference(f); | 1318 return aligningModel->alignFromReference(f); |
1319 } | 1319 } |
1320 | 1320 |
1321 int | 1321 sv_frame_t |
1322 View::alignToReference(int f) const | 1322 View::alignToReference(sv_frame_t f) const |
1323 { | 1323 { |
1324 if (!m_manager->getAlignMode()) return f; | 1324 if (!m_manager->getAlignMode()) return f; |
1325 Model *aligningModel = getAligningModel(); | 1325 Model *aligningModel = getAligningModel(); |
1326 if (!aligningModel) return f; | 1326 if (!aligningModel) return f; |
1327 return aligningModel->alignToReference(f); | 1327 return aligningModel->alignToReference(f); |
1328 } | 1328 } |
1329 | 1329 |
1330 int | 1330 sv_frame_t |
1331 View::getAlignedPlaybackFrame() const | 1331 View::getAlignedPlaybackFrame() const |
1332 { | 1332 { |
1333 if (!m_manager) return 0; | 1333 if (!m_manager) return 0; |
1334 int pf = m_manager->getPlaybackFrame(); | 1334 sv_frame_t pf = m_manager->getPlaybackFrame(); |
1335 if (!m_manager->getAlignMode()) return pf; | 1335 if (!m_manager->getAlignMode()) return pf; |
1336 | 1336 |
1337 Model *aligningModel = getAligningModel(); | 1337 Model *aligningModel = getAligningModel(); |
1338 if (!aligningModel) return pf; | 1338 if (!aligningModel) return pf; |
1339 | 1339 |
1340 int af = aligningModel->alignFromReference(pf); | 1340 sv_frame_t af = aligningModel->alignFromReference(pf); |
1341 | 1341 |
1342 return af; | 1342 return af; |
1343 } | 1343 } |
1344 | 1344 |
1345 bool | 1345 bool |
1490 } | 1490 } |
1491 | 1491 |
1492 void | 1492 void |
1493 View::scroll(bool right, bool lots, bool e) | 1493 View::scroll(bool right, bool lots, bool e) |
1494 { | 1494 { |
1495 int delta; | 1495 sv_frame_t delta; |
1496 if (lots) { | 1496 if (lots) { |
1497 delta = (getEndFrame() - getStartFrame()) / 2; | 1497 delta = (getEndFrame() - getStartFrame()) / 2; |
1498 } else { | 1498 } else { |
1499 delta = (getEndFrame() - getStartFrame()) / 20; | 1499 delta = (getEndFrame() - getStartFrame()) / 20; |
1500 } | 1500 } |
1501 if (right) delta = -delta; | 1501 if (right) delta = -delta; |
1502 | 1502 |
1503 if (int(m_centreFrame) < delta) { | 1503 if (m_centreFrame < delta) { |
1504 setCentreFrame(0, e); | 1504 setCentreFrame(0, e); |
1505 } else if (int(m_centreFrame) - delta >= int(getModelsEndFrame())) { | 1505 } else if (m_centreFrame - delta >= getModelsEndFrame()) { |
1506 setCentreFrame(getModelsEndFrame(), e); | 1506 setCentreFrame(getModelsEndFrame(), e); |
1507 } else { | 1507 } else { |
1508 setCentreFrame(m_centreFrame - delta, e); | 1508 setCentreFrame(m_centreFrame - delta, e); |
1509 } | 1509 } |
1510 } | 1510 } |
1972 paint.setBrush(QColor(150, 150, 255, 80)); | 1972 paint.setBrush(QColor(150, 150, 255, 80)); |
1973 } else { | 1973 } else { |
1974 paint.setBrush(Qt::NoBrush); | 1974 paint.setBrush(Qt::NoBrush); |
1975 } | 1975 } |
1976 | 1976 |
1977 int sampleRate = getModelsSampleRate(); | 1977 sv_samplerate_t sampleRate = getModelsSampleRate(); |
1978 | 1978 |
1979 QPoint localPos; | 1979 QPoint localPos; |
1980 int illuminateFrame = -1; | 1980 sv_frame_t illuminateFrame = -1; |
1981 bool closeToLeft, closeToRight; | 1981 bool closeToLeft, closeToRight; |
1982 | 1982 |
1983 if (shouldIlluminateLocalSelection(localPos, closeToLeft, closeToRight)) { | 1983 if (shouldIlluminateLocalSelection(localPos, closeToLeft, closeToRight)) { |
1984 illuminateFrame = getFrameForX(localPos.x()); | 1984 illuminateFrame = getFrameForX(localPos.x()); |
1985 } | 1985 } |
2143 } | 2143 } |
2144 | 2144 |
2145 int fontHeight = paint.fontMetrics().height(); | 2145 int fontHeight = paint.fontMetrics().height(); |
2146 int fontAscent = paint.fontMetrics().ascent(); | 2146 int fontAscent = paint.fontMetrics().ascent(); |
2147 | 2147 |
2148 float v0, v1; | 2148 double v0, v1; |
2149 QString u0, u1; | 2149 QString u0, u1; |
2150 bool b0 = false, b1 = false; | 2150 bool b0 = false, b1 = false; |
2151 | 2151 |
2152 QString axs, ays, bxs, bys, dxs, dys; | 2152 QString axs, ays, bxs, bys, dxs, dys; |
2153 | 2153 |
2215 bw = std::max(bw, paint.fontMetrics().width(bys)); | 2215 bw = std::max(bw, paint.fontMetrics().width(bys)); |
2216 } | 2216 } |
2217 } | 2217 } |
2218 | 2218 |
2219 bool bd = false; | 2219 bool bd = false; |
2220 float dy = 0.f; | 2220 double dy = 0.f; |
2221 QString du; | 2221 QString du; |
2222 | 2222 |
2223 // dimension, height | 2223 // dimension, height |
2224 | 2224 |
2225 if ((bd = topLayer->getYScaleDifference(this, r.y(), r.y() + r.height(), | 2225 if ((bd = topLayer->getYScaleDifference(this, r.y(), r.y() + r.height(), |
2226 dy, du)) && | 2226 dy, du)) && |
2227 dy != 0) { | 2227 dy != 0) { |
2228 if (du != "") { | 2228 if (du != "") { |
2229 if (du == "Hz") { | 2229 if (du == "Hz") { |
2230 int semis; | 2230 int semis; |
2231 float cents; | 2231 double cents; |
2232 semis = Pitch::getPitchForFrequencyDifference(v0, v1, ¢s); | 2232 semis = Pitch::getPitchForFrequencyDifference(v0, v1, ¢s); |
2233 dys = QString("[%1 %2 (%3)]") | 2233 dys = QString("[%1 %2 (%3)]") |
2234 .arg(dy).arg(du) | 2234 .arg(dy).arg(du) |
2235 .arg(Pitch::getLabelForPitchRange(semis, cents)); | 2235 .arg(Pitch::getLabelForPitchRange(semis, cents)); |
2236 } else { | 2236 } else { |
2331 | 2331 |
2332 paint.restore(); | 2332 paint.restore(); |
2333 } | 2333 } |
2334 | 2334 |
2335 bool | 2335 bool |
2336 View::render(QPainter &paint, int xorigin, int f0, int f1) | 2336 View::render(QPainter &paint, int xorigin, sv_frame_t f0, sv_frame_t f1) |
2337 { | 2337 { |
2338 int x0 = f0 / m_zoomLevel; | 2338 int x0 = int(f0 / m_zoomLevel); |
2339 int x1 = f1 / m_zoomLevel; | 2339 int x1 = int(f1 / m_zoomLevel); |
2340 | 2340 |
2341 int w = x1 - x0; | 2341 int w = x1 - x0; |
2342 | 2342 |
2343 int origCentreFrame = m_centreFrame; | 2343 sv_frame_t origCentreFrame = m_centreFrame; |
2344 | 2344 |
2345 bool someLayersIncomplete = false; | 2345 bool someLayersIncomplete = false; |
2346 | 2346 |
2347 for (LayerList::iterator i = m_layerStack.begin(); | 2347 for (LayerList::iterator i = m_layerStack.begin(); |
2348 i != m_layerStack.end(); ++i) { | 2348 i != m_layerStack.end(); ++i) { |
2438 } | 2438 } |
2439 | 2439 |
2440 QImage * | 2440 QImage * |
2441 View::toNewImage() | 2441 View::toNewImage() |
2442 { | 2442 { |
2443 int f0 = getModelsStartFrame(); | 2443 sv_frame_t f0 = getModelsStartFrame(); |
2444 int f1 = getModelsEndFrame(); | 2444 sv_frame_t f1 = getModelsEndFrame(); |
2445 | 2445 |
2446 return toNewImage(f0, f1); | 2446 return toNewImage(f0, f1); |
2447 } | 2447 } |
2448 | 2448 |
2449 QImage * | 2449 QImage * |
2450 View::toNewImage(int f0, int f1) | 2450 View::toNewImage(sv_frame_t f0, sv_frame_t f1) |
2451 { | 2451 { |
2452 int x0 = f0 / getZoomLevel(); | 2452 int x0 = int(f0 / getZoomLevel()); |
2453 int x1 = f1 / getZoomLevel(); | 2453 int x1 = int(f1 / getZoomLevel()); |
2454 | 2454 |
2455 QImage *image = new QImage(x1 - x0, height(), QImage::Format_RGB32); | 2455 QImage *image = new QImage(x1 - x0, height(), QImage::Format_RGB32); |
2456 | 2456 |
2457 QPainter *paint = new QPainter(image); | 2457 QPainter *paint = new QPainter(image); |
2458 if (!render(*paint, 0, f0, f1)) { | 2458 if (!render(*paint, 0, f0, f1)) { |
2466 } | 2466 } |
2467 | 2467 |
2468 QSize | 2468 QSize |
2469 View::getImageSize() | 2469 View::getImageSize() |
2470 { | 2470 { |
2471 int f0 = getModelsStartFrame(); | 2471 sv_frame_t f0 = getModelsStartFrame(); |
2472 int f1 = getModelsEndFrame(); | 2472 sv_frame_t f1 = getModelsEndFrame(); |
2473 | 2473 |
2474 return getImageSize(f0, f1); | 2474 return getImageSize(f0, f1); |
2475 } | 2475 } |
2476 | 2476 |
2477 QSize | 2477 QSize |
2478 View::getImageSize(int f0, int f1) | 2478 View::getImageSize(sv_frame_t f0, sv_frame_t f1) |
2479 { | 2479 { |
2480 int x0 = f0 / getZoomLevel(); | 2480 int x0 = int(f0 / getZoomLevel()); |
2481 int x1 = f1 / getZoomLevel(); | 2481 int x1 = int(f1 / getZoomLevel()); |
2482 | 2482 |
2483 return QSize(x1 - x0, height()); | 2483 return QSize(x1 - x0, height()); |
2484 } | 2484 } |
2485 | 2485 |
2486 void | 2486 void |