[apps/regession] Improve graph banner view

Change-Id: Ifceb03d33b796efd55f65a6249d49254450e5c35
This commit is contained in:
Émilie Feral
2017-06-07 15:28:32 +02:00
parent 731461e35e
commit 09b484c62d
6 changed files with 71 additions and 43 deletions

View File

@@ -25,7 +25,7 @@ constexpr static char deviationSpanishDefinition[] = {Ion::Charset::SmallSigma,
constexpr static char deviationGermanDefinition[] = {Ion::Charset::SmallSigma, ' ', ':', ' ', 'S', 't', 'a', 'n', 'd', 'a', 'r', 'd', 'a', 'b', 'w', 'e', 'i', 'c', 'h', 'u', 'n', 'g', 0};
constexpr static char deviationPortugueseDefinition[] = {Ion::Charset::SmallSigma, ' ', ':', ' ', 'D', 'e','s','v','i','o',' ','p','a','d','r','a','o', 0};
const char * messages[222][5] {
const char * messages[223][5] {
{"Attention", "Warning", "Cuidado", "Achtung", "Atencao"},
{"Valider", "Confirm", "Confirmar", "Bestatigen", "Confirmar"},
{"Annuler", "Cancel", "Cancelar", "Abbrechen", "Cancelar"},
@@ -239,6 +239,7 @@ const char * messages[222][5] {
{"REGRESSIONS", "REGRESSION", "REGRESION", "REGRESSION", "REGRESSAO"},
{"Pas assez de donnees pour une regression", "Not enough data for regerssion", "Escasez de datos para la regresion", "Nicht genug Daten fur eine Regression", "Nao ha dados suficientes para uma regressao"},
{"reg", "reg", "reg", "reg", "reg"},
{"Droite de regression", "Regression line", "Recta de regresion", "Regressionsgerade", "Linha de regressao"},
{"Prediction sachant X", "Prediction given X", "Prediccion dado X", "Berechne Y", "Predicao dado X"},
{"Prediction sachant Y", "Prediction given Y", "Prediccion dado Y", "Berechne X", "Predicao dado Y"},
@@ -331,7 +332,7 @@ const char * universalMessages[244] {
")=",
finiteIntegralLegend,
" y=ax+b ",
" D: y=ax+b ",
"Francais ",
"English ",

View File

@@ -205,6 +205,7 @@ namespace I18n {
RegressionApp,
RegressionAppCapital,
NoEnoughDataForRegression,
Reg,
RegressionSlope,
XPrediction,
YPrediction,

View File

@@ -3,27 +3,28 @@
namespace Regression {
BannerView::BannerView() :
m_regressionTypeView(KDText::FontSize::Small, (I18n::Message)0, 0.5f, 0.5f, KDColorBlack, Palette::GreyMiddle),
m_slopeView(KDText::FontSize::Small, 0.5f, 0.5f, KDColorBlack, Palette::GreyMiddle),
m_yInterceptView(KDText::FontSize::Small, 0.5f, 0.5f, KDColorBlack, Palette::GreyMiddle),
m_dotNameView(KDText::FontSize::Small, 0.0f, 0.5f, KDColorBlack, Palette::GreyMiddle),
m_xView(KDText::FontSize::Small, 0.5f, 0.5f, KDColorBlack, Palette::GreyMiddle),
m_yView(KDText::FontSize::Small, 0.5f, 0.5f, KDColorBlack, Palette::GreyMiddle),
m_regressionTypeView(KDText::FontSize::Small, (I18n::Message)0, 0.0f, 0.5f, KDColorBlack, Palette::GreyMiddle),
m_slopeView(KDText::FontSize::Small, 0.5f, 0.5f, KDColorBlack, Palette::GreyMiddle),
m_yInterceptView(KDText::FontSize::Small, 0.5f, 0.5f, KDColorBlack, Palette::GreyMiddle),
m_rView(KDText::FontSize::Small, 0.5f, 0.5f, KDColorBlack, Palette::GreyMiddle),
m_r2View(KDText::FontSize::Small, 0.5f, 0.5f, KDColorBlack, Palette::GreyMiddle)
{
}
int BannerView::numberOfSubviews() const {
return 7;
return 8;
}
TextView * BannerView::textViewAtIndex(int i) const {
const TextView * textViews[7] = {&m_regressionTypeView, &m_slopeView, &m_yInterceptView, &m_xView, &m_yView, &m_rView, &m_r2View};
const TextView * textViews[8] = {&m_dotNameView, &m_xView, &m_yView, &m_regressionTypeView, &m_slopeView, &m_yInterceptView, &m_rView, &m_r2View};
return (TextView *)textViews[i];
}
MessageTextView * BannerView::messageTextViewAtIndex(int i) const {
if (i == 0) {
if (i == 3) {
return (MessageTextView *)&m_regressionTypeView;
}
return nullptr;

View File

@@ -13,11 +13,12 @@ private:
int numberOfSubviews() const override;
TextView * textViewAtIndex(int i) const override;
MessageTextView * messageTextViewAtIndex(int i) const override;
BufferTextView m_dotNameView;
BufferTextView m_xView;
BufferTextView m_yView;
MessageTextView m_regressionTypeView;
BufferTextView m_slopeView;
BufferTextView m_yInterceptView;
BufferTextView m_xView;
BufferTextView m_yView;
BufferTextView m_rView;
BufferTextView m_r2View;
};

View File

@@ -58,36 +58,35 @@ bool GraphController::handleEnter() {
}
void GraphController::reloadBannerView() {
m_bannerView.setMessageAtIndex(I18n::Message::RegressionFormula, 0);
m_bannerView.setMessageAtIndex(I18n::Message::RegressionFormula, 3);
char buffer[k_maxNumberOfCharacters + Complex::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits)];
int numberOfChar = 0;
const char * legend = " a=";
float slope = m_store->slope();
const char * legend = " P(";
int legendLength = strlen(legend);
strlcpy(buffer, legend, legendLength+1);
numberOfChar += legendLength;
numberOfChar += Complex::convertFloatToText(slope, buffer+numberOfChar, Complex::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits);
legend = " ";
if (m_selectedDotIndex == m_store->numberOfPairs()) {
legend = I18n::translate(I18n::Message::Mean);
legendLength = strlen(legend);
strlcpy(buffer+numberOfChar, legend, legendLength+1);
numberOfChar += legendLength;
} else if (m_selectedDotIndex < 0) {
legend = I18n::translate(I18n::Message::Reg);
legendLength = strlen(legend);
strlcpy(buffer+numberOfChar, legend, legendLength+1);
numberOfChar += legendLength;
} else {
numberOfChar += Complex::convertFloatToText((float)m_selectedDotIndex, buffer+numberOfChar, Complex::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits, Expression::FloatDisplayMode::Decimal);
}
legend = ") ";
legendLength = strlen(legend);
strlcpy(buffer+numberOfChar, legend, legendLength+1);
buffer[k_maxLegendLength] = 0;
m_bannerView.setLegendAtIndex(buffer, 1);
m_bannerView.setLegendAtIndex(buffer, 0);
numberOfChar = 0;
legend = " b=";
float yIntercept = m_store->yIntercept();
legendLength = strlen(legend);
strlcpy(buffer, legend, legendLength+1);
numberOfChar += legendLength;
numberOfChar += Complex::convertFloatToText(yIntercept, buffer+numberOfChar, Complex::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits);
legend = " ";
legendLength = strlen(legend);
strlcpy(buffer+numberOfChar, legend, legendLength+1);
buffer[k_maxLegendLength] = 0;
m_bannerView.setLegendAtIndex(buffer, 2);
numberOfChar = 0;
legend = " x=";
legend = "x=";
float x = m_cursor->x();
// Display a specific legend if the mean dot is selected
if (m_selectedDotIndex == m_store->numberOfPairs()) {
@@ -99,14 +98,14 @@ void GraphController::reloadBannerView() {
strlcpy(buffer, legend, legendLength+1);
numberOfChar += legendLength;
numberOfChar += Complex::convertFloatToText(x, buffer+numberOfChar, Complex::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits);
legend = " ";
legend = " ";
legendLength = strlen(legend);
strlcpy(buffer+numberOfChar, legend, legendLength+1);
buffer[k_maxLegendLength] = 0;
m_bannerView.setLegendAtIndex(buffer, 3);
m_bannerView.setLegendAtIndex(buffer, 1);
numberOfChar = 0;
legend = " y=";
legend = "y=";
float y = m_cursor->y();
if (m_selectedDotIndex == m_store->numberOfPairs()) {
constexpr static char legY[] = {Ion::Charset::YBar, '=', 0};
@@ -117,38 +116,63 @@ void GraphController::reloadBannerView() {
strlcpy(buffer, legend, legendLength+1);
numberOfChar += legendLength;
numberOfChar += Complex::convertFloatToText(y, buffer+numberOfChar, Complex::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits);
legend = " ";
legend = " ";
legendLength = strlen(legend);
strlcpy(buffer+numberOfChar, legend, legendLength+1);
buffer[k_maxLegendLength] = 0;
m_bannerView.setLegendAtIndex(buffer, 2);
numberOfChar = 0;
legend = " a=";
float slope = m_store->slope();
legendLength = strlen(legend);
strlcpy(buffer, legend, legendLength+1);
numberOfChar += legendLength;
numberOfChar += Complex::convertFloatToText(slope, buffer+numberOfChar, Complex::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits);
legend = " ";
legendLength = strlen(legend);
strlcpy(buffer+numberOfChar, legend, legendLength+1);
buffer[k_maxLegendLength] = 0;
m_bannerView.setLegendAtIndex(buffer, 4);
numberOfChar = 0;
legend = " r=";
float r = m_store->correlationCoefficient();
legend = " b=";
float yIntercept = m_store->yIntercept();
legendLength = strlen(legend);
strlcpy(buffer, legend, legendLength+1);
numberOfChar += legendLength;
numberOfChar += Complex::convertFloatToText(r, buffer+numberOfChar, Complex::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits);
legend = " ";
numberOfChar += Complex::convertFloatToText(yIntercept, buffer+numberOfChar, Complex::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits);
legend = " ";
legendLength = strlen(legend);
strlcpy(buffer+numberOfChar, legend, legendLength+1);
buffer[k_maxLegendLength] = 0;
m_bannerView.setLegendAtIndex(buffer, 5);
numberOfChar = 0;
legend = " r^2=";
legend = " r=";
float r = m_store->correlationCoefficient();
legendLength = strlen(legend);
strlcpy(buffer, legend, legendLength+1);
numberOfChar += legendLength;
numberOfChar += Complex::convertFloatToText(r, buffer+numberOfChar, Complex::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits);
legend = " ";
legendLength = strlen(legend);
strlcpy(buffer+numberOfChar, legend, legendLength+1);
buffer[k_maxLegendLength+10] = 0;
m_bannerView.setLegendAtIndex(buffer, 6);
numberOfChar = 0;
legend = " r2=";
float r2 = m_store->squaredCorrelationCoefficient();
legendLength = strlen(legend);
strlcpy(buffer, legend, legendLength+1);
numberOfChar += legendLength;
numberOfChar += Complex::convertFloatToText(r2, buffer+numberOfChar, Complex::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits);
legend = " ";
legend = " ";
legendLength = strlen(legend);
strlcpy(buffer+numberOfChar, legend, legendLength+1);
buffer[k_maxLegendLength] = 0;
m_bannerView.setLegendAtIndex(buffer, 6);
m_bannerView.setLegendAtIndex(buffer, 7);
}
void GraphController::initRangeParameters() {

View File

@@ -26,7 +26,7 @@ private:
constexpr static float k_cursorBottomMarginRatio = 0.3f; // (cursorHeight/2+bannerHeigh)/graphViewHeight
constexpr static float k_cursorLeftMarginRatio = 0.04f; // (cursorWidth/2)/graphViewWidth
constexpr static int k_maxLegendLength = 16;
constexpr static int k_maxNumberOfCharacters = 20;
constexpr static int k_maxNumberOfCharacters = 50;
BannerView * bannerView() override;
Shared::CurveView * curveView() override;
Shared::InteractiveCurveViewRange * interactiveCurveViewRange() override;