From 49535b9535fc67b3a320fc67eac535e1b64d80b0 Mon Sep 17 00:00:00 2001 From: SeeLook <945374+SeeLook@users.noreply.github.com> Date: Thu, 4 Jun 2015 13:16:44 +0200 Subject: [PATCH] Fixed chart issues when melodies are analyzing --- TODO | 4 +-- changes | 1 + src/plugins/charts/tchart.cpp | 2 +- src/plugins/charts/tlinearchart.cpp | 2 +- src/plugins/charts/tmainline.cpp | 43 +++++++++++++++-------------- src/plugins/charts/tmainline.h | 5 +++- 6 files changed, 30 insertions(+), 27 deletions(-) diff --git a/TODO b/TODO index 9374d6088..516308464 100644 --- a/TODO +++ b/TODO @@ -12,10 +12,8 @@ ============================================================================ ====== BUGS AND ISSUES =============================================== - +- melody tip may display result text for every attempt - played note in single mode wrongly shows enharmonic -- key signatures chart is wrongly scaled when Y axis is different -- Y axis in empty chart has to be adjusted to window height (it has fixed size) - remove some console debug messages - clean tartini unused code diff --git a/changes b/changes index ba19ee69a..5a2905c3d 100644 --- a/changes +++ b/changes @@ -5,6 +5,7 @@ BUGS FIXES - checking intonation properly respects level accuracy setting - fixed determining mistake types for melodies + - fixed chart issues when melodies are analyzing 1.1.7 rc2 - improvements/fixes related to low latency and real-time audio diff --git a/src/plugins/charts/tchart.cpp b/src/plugins/charts/tchart.cpp index 0f9330c63..b532cb0b0 100644 --- a/src/plugins/charts/tchart.cpp +++ b/src/plugins/charts/tchart.cpp @@ -40,7 +40,7 @@ Tchart::Tchart(QWidget* parent) : yAxis = new TYaxis(); scene->addItem(yAxis); - yAxis->setLength(400); + yAxis->setLength(300); yAxis->setMaxValue(3); yAxis->setPos(45, 0); yAxis->setZValue(55); diff --git a/src/plugins/charts/tlinearchart.cpp b/src/plugins/charts/tlinearchart.cpp index a7ae0011f..ac12719c2 100644 --- a/src/plugins/charts/tlinearchart.cpp +++ b/src/plugins/charts/tlinearchart.cpp @@ -138,7 +138,7 @@ TlinearChart::TlinearChart(Texam* exam, Tchart::Tsettings& settings, QWidget* pa for (int i = 0; i < sortedLists.size(); i++) ln += sortedLists[i].size(); prepareChart(ln); - m_mainLine = new TmainLine(sortedLists, this); + m_mainLine = new TmainLine(sortedLists, this, settings.yValue); int goodOffset = 0; // 0 when not unrelated question list inside if (hasListUnrelated) diff --git a/src/plugins/charts/tmainline.cpp b/src/plugins/charts/tmainline.cpp index cebf39d73..eee9b9fd1 100644 --- a/src/plugins/charts/tmainline.cpp +++ b/src/plugins/charts/tmainline.cpp @@ -30,6 +30,25 @@ // #include <QDebug> +inline qreal TmainLine::yValue(TQAunit* question, TmainLine::EyValue valType) { + switch (valType) { + case e_playedCount: + return m_chart->yAxis->mapValue(question->totalPlayBacks()); + case e_prepareTime: + return m_chart->yAxis->mapValue((double)question->attempt(0)->prepareTime() / 10.0); + case e_attemptsCount: + return m_chart->yAxis->mapValue(question->attemptsCount()); + case e_effectiveness: + return m_chart->yAxis->mapValue(question->effectiveness()); + default: + return m_chart->yAxis->mapValue(question->getTime()); // default - answer time + } +} + +//################################################################################################# +//################### PUBLIC ############################################ +//################################################################################################# + TmainLine::TmainLine(QList<TQAunit*>* answers, Tchart* chart, TmainLine::EyValue yVal) : m_answers(answers), m_chart(chart) @@ -42,25 +61,7 @@ TmainLine::TmainLine(QList<TQAunit*>* answers, Tchart* chart, TmainLine::EyValue m_points << new TquestionPoint(tmpQA); m_chart->scene->addItem(m_points[i]); m_points[i]->setZValue(50); - qreal yy; - switch (yVal) { - case e_playedCount: - yy = m_chart->yAxis->mapValue(m_answers->operator[](i)->totalPlayBacks()); - break; - case e_prepareTime: - yy = m_chart->yAxis->mapValue((double)m_answers->operator[](i)->attempt(0)->prepareTime() / 10.0); - break; - case e_attemptsCount: - yy = m_chart->yAxis->mapValue(m_answers->operator[](i)->attemptsCount()); - break; - case e_effectiveness: - yy = m_chart->yAxis->mapValue(m_answers->operator[](i)->effectiveness()); - break; - default: - yy = m_chart->yAxis->mapValue(m_answers->operator[](i)->getTime()); // default - answer time - break; - } - m_points[i]->setPos(xPos, yy); + m_points[i]->setPos(xPos, yValue(m_answers->operator[](i), yVal)); if (i) { TstaffLineChart *line = new TstaffLineChart(); m_chart->scene->addItem(line); @@ -72,7 +73,7 @@ TmainLine::TmainLine(QList<TQAunit*>* answers, Tchart* chart, TmainLine::EyValue } -TmainLine::TmainLine(QList<TgroupedQAunit>& listOfLists, Tchart* chart) : +TmainLine::TmainLine(QList< TgroupedQAunit >& listOfLists, Tchart* chart, TmainLine::EyValue yVal) : m_chart(chart) { int ln = 0, cnt = 0; @@ -86,7 +87,7 @@ TmainLine::TmainLine(QList<TgroupedQAunit>& listOfLists, Tchart* chart) : m_points << new TquestionPoint(listOfLists[i].operator[](j)); m_chart->scene->addItem(m_points[cnt]); m_points[cnt]->setZValue(50); - m_points[cnt]->setPos(xPos, m_chart->yAxis->mapValue(listOfLists[i].operator[](j).qaPtr->getTime())); + m_points[cnt]->setPos(xPos, yValue(listOfLists[i].operator[](j).qaPtr, yVal)); if (cnt) { TstaffLineChart *line = new TstaffLineChart(); m_chart->scene->addItem(line); diff --git a/src/plugins/charts/tmainline.h b/src/plugins/charts/tmainline.h index dcabf9528..ba7586988 100644 --- a/src/plugins/charts/tmainline.h +++ b/src/plugins/charts/tmainline.h @@ -54,9 +54,12 @@ public: }; TmainLine(QList<TQAunit*> *answers, Tchart *chart, EyValue yVal = e_questionTime); - TmainLine(QList<TgroupedQAunit> &listOfLists, Tchart *chart); + TmainLine(QList<TgroupedQAunit> &listOfLists, Tchart *chart, EyValue yVal = e_questionTime); virtual ~TmainLine(); +protected: + /** Returns answer result (Y value) depend on chart type, mapped to Y axis */ + inline qreal yValue(TQAunit* question, EyValue valType); private: QList<TQAunit*> *m_answers; -- GitLab