mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[apps/regession] Improve graph banner view
Change-Id: Ifceb03d33b796efd55f65a6249d49254450e5c35
This commit is contained in:
@@ -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 ",
|
||||
|
||||
@@ -205,6 +205,7 @@ namespace I18n {
|
||||
RegressionApp,
|
||||
RegressionAppCapital,
|
||||
NoEnoughDataForRegression,
|
||||
Reg,
|
||||
RegressionSlope,
|
||||
XPrediction,
|
||||
YPrediction,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user