Mercurial > hg > svgui
comparison layer/TimeValueLayer.cpp @ 79:19bf27e4fb29
* Replace crash with warning when a transform could not be automatically
re-run
* More sensible default paths for Vamp plugin lookup (at least on Linux and
OS/X)
* A start to making the y coords for time value layers etc align
* Set sensible y coords for text labels in time instant and value layers
author | Chris Cannam |
---|---|
date | Thu, 13 Apr 2006 18:29:10 +0000 |
parents | 45ba0b381c5d |
children | 01f27a282c90 |
comparison
equal
deleted
inserted
replaced
78:967193b6c7aa | 79:19bf27e4fb29 |
---|---|
214 | 214 |
215 QPoint discard; | 215 QPoint discard; |
216 return !v->shouldIlluminateLocalFeatures(this, discard); | 216 return !v->shouldIlluminateLocalFeatures(this, discard); |
217 } | 217 } |
218 | 218 |
219 bool | |
220 TimeValueLayer::getValueExtents(float &min, float &max, QString &unit) const | |
221 { | |
222 min = m_model->getValueMinimum(); | |
223 max = m_model->getValueMaximum(); | |
224 unit = m_model->getScaleUnits(); | |
225 return true; | |
226 } | |
227 | |
219 SparseTimeValueModel::PointList | 228 SparseTimeValueModel::PointList |
220 TimeValueLayer::getLocalPoints(View *v, int x) const | 229 TimeValueLayer::getLocalPoints(View *v, int x) const |
221 { | 230 { |
222 if (!m_model) return SparseTimeValueModel::PointList(); | 231 if (!m_model) return SparseTimeValueModel::PointList(); |
223 | 232 |
371 } | 380 } |
372 | 381 |
373 int | 382 int |
374 TimeValueLayer::getYForValue(View *v, float val) const | 383 TimeValueLayer::getYForValue(View *v, float val) const |
375 { | 384 { |
385 float min = 0.0, max = 0.0; | |
386 int h = v->height(); | |
387 | |
388 if (!v->getValueExtents(m_model->getScaleUnits(), min, max)) { | |
389 min = m_model->getValueMinimum(); | |
390 max = m_model->getValueMaximum(); | |
391 } | |
392 | |
393 if (max == min) max = min + 1.0; | |
394 | |
395 /*!!! | |
376 float min = m_model->getValueMinimum(); | 396 float min = m_model->getValueMinimum(); |
377 float max = m_model->getValueMaximum(); | 397 float max = m_model->getValueMaximum(); |
378 if (max == min) max = min + 1.0; | 398 if (max == min) max = min + 1.0; |
379 | 399 |
380 int h = v->height(); | 400 int h = v->height(); |
399 | 419 |
400 } else if (m_verticalScale == PlusMinusOneScale) { | 420 } else if (m_verticalScale == PlusMinusOneScale) { |
401 min = -1.0; | 421 min = -1.0; |
402 max = 1.0; | 422 max = 1.0; |
403 } | 423 } |
424 */ | |
404 | 425 |
405 return int(h - ((val - min) * h) / (max - min)); | 426 return int(h - ((val - min) * h) / (max - min)); |
406 } | 427 } |
407 | 428 |
408 float | 429 float |
490 | 511 |
491 paint.save(); | 512 paint.save(); |
492 | 513 |
493 QPainterPath path; | 514 QPainterPath path; |
494 int pointCount = 0; | 515 int pointCount = 0; |
516 | |
517 int textY = 0; | |
518 if (m_plotStyle == PlotSegmentation) { | |
519 textY = v->getTextLabelHeight(this, paint); | |
520 } | |
495 | 521 |
496 for (SparseTimeValueModel::PointList::const_iterator i = points.begin(); | 522 for (SparseTimeValueModel::PointList::const_iterator i = points.begin(); |
497 i != points.end(); ++i) { | 523 i != points.end(); ++i) { |
498 | 524 |
499 const SparseTimeValueModel::Point &p(*i); | 525 const SparseTimeValueModel::Point &p(*i); |
500 | 526 |
501 int x = v->getXForFrame(p.frame); | 527 int x = v->getXForFrame(p.frame); |
502 int y = getYForValue(v, p.value); | 528 int y = getYForValue(v, p.value); |
529 | |
530 if (m_plotStyle != PlotSegmentation) { | |
531 textY = y - paint.fontMetrics().height() | |
532 + paint.fontMetrics().ascent(); | |
533 } | |
503 | 534 |
504 bool haveNext = false; | 535 bool haveNext = false; |
505 int nx = v->getXForFrame(v->getModelsEndFrame()); | 536 int nx = v->getXForFrame(v->getModelsEndFrame()); |
506 // m_model->getEndFrame()); | 537 // m_model->getEndFrame()); |
507 int ny = y; | 538 int ny = y; |
574 | 605 |
575 if (haveNext) { | 606 if (haveNext) { |
576 | 607 |
577 if (m_plotStyle == PlotConnectedPoints) { | 608 if (m_plotStyle == PlotConnectedPoints) { |
578 | 609 |
610 paint.save(); | |
579 paint.setPen(brushColour); | 611 paint.setPen(brushColour); |
580 paint.drawLine(x + w, y, nx, ny); | 612 paint.drawLine(x + w, y, nx, ny); |
613 paint.restore(); | |
581 | 614 |
582 } else if (m_plotStyle == PlotLines) { | 615 } else if (m_plotStyle == PlotLines) { |
583 | 616 |
584 paint.drawLine(x + w/2, y, nx + w/2, ny); | 617 paint.drawLine(x + w/2, y, nx + w/2, ny); |
585 | 618 |
624 | 657 |
625 paint.drawRect(x, -1, nx - x, v->height() + 1); | 658 paint.drawRect(x, -1, nx - x, v->height() + 1); |
626 } | 659 } |
627 | 660 |
628 if (p.label != "") { | 661 if (p.label != "") { |
629 paint.drawText(x + 5, y - paint.fontMetrics().height() + paint.fontMetrics().ascent(), p.label); | 662 if (!haveNext || nx > x + 6 + paint.fontMetrics().width(p.label)) { |
663 paint.drawText(x + 5, textY, p.label); | |
664 } | |
630 } | 665 } |
631 } | 666 } |
632 | 667 |
633 if (m_plotStyle == PlotCurve && !path.isEmpty()) { | 668 if (m_plotStyle == PlotCurve && !path.isEmpty()) { |
634 paint.setRenderHint(QPainter::Antialiasing, pointCount <= v->width()); | 669 paint.setRenderHint(QPainter::Antialiasing, pointCount <= v->width()); |