mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-18 16:27:34 +01:00
[apps] Replace BannerView::set(Legend|Message)AtIndex by getters
This commit is contained in:
committed by
Émilie Feral
parent
205ae8fec5
commit
355e42734d
@@ -8,6 +8,9 @@ namespace Graph {
|
||||
class BannerView : public Shared::XYBannerView {
|
||||
public:
|
||||
BannerView();
|
||||
BufferTextView * derivativeView() { return &m_derivativeView; }
|
||||
BufferTextView * aView() { return &m_aView; }
|
||||
BufferTextView * bView() { return &m_bView; }
|
||||
void setNumberOfSubviews(int numberOfSubviews) { m_numberOfSubviews = numberOfSubviews; }
|
||||
private:
|
||||
int numberOfSubviews() const override { return m_numberOfSubviews; }
|
||||
|
||||
@@ -30,7 +30,8 @@ void GraphControllerHelper::reloadDerivativeInBannerViewForCursorOnFunction(Shar
|
||||
double y = function->approximateDerivative(cursor->x(), app->localContext());
|
||||
numberOfChar += PoincareHelpers::ConvertFloatToText<double>(y, buffer + numberOfChar, bufferSize-numberOfChar, Constant::ShortNumberOfSignificantDigits);
|
||||
strlcpy(buffer+numberOfChar, space, bufferSize-numberOfChar);
|
||||
bannerView()->setLegendAtIndex(buffer, 2);
|
||||
bannerView()->derivativeView()->setText(buffer);
|
||||
bannerView()->reload();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -33,7 +33,8 @@ void IntersectionGraphController::reloadBannerView() {
|
||||
numberOfChar += strlcpy(buffer+numberOfChar, legend, bufferSize-numberOfChar);
|
||||
numberOfChar += PoincareHelpers::ConvertFloatToText<double>(m_cursor->y(), buffer+numberOfChar, bufferSize-numberOfChar, Constant::MediumNumberOfSignificantDigits);
|
||||
strlcpy(buffer+numberOfChar, space, bufferSize-numberOfChar);
|
||||
bannerView()->setLegendAtIndex(buffer, 1);
|
||||
bannerView()->ordinateView()->setText(buffer);
|
||||
bannerView()->reload();
|
||||
}
|
||||
|
||||
Poincare::Expression::Coordinate2D IntersectionGraphController::computeNewPointOfInterest(double start, double step, double max, Poincare::Context * context) {
|
||||
|
||||
@@ -49,13 +49,14 @@ void TangentGraphController::reloadBannerView() {
|
||||
ExpiringPointer<CartesianFunction> function = myApp->functionStore()->modelForRecord(m_record);
|
||||
double y = function->approximateDerivative(m_cursor->x(), myApp->localContext());
|
||||
PoincareHelpers::ConvertFloatToText<double>(y, buffer + legendLength, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::MediumNumberOfSignificantDigits), Constant::MediumNumberOfSignificantDigits);
|
||||
m_bannerView->setLegendAtIndex(buffer, 4);
|
||||
m_bannerView->aView()->setText(buffer);
|
||||
|
||||
legend = "b=";
|
||||
legendLength = strlcpy(buffer, legend, bufferSize);
|
||||
y = -y*m_cursor->x()+function->evaluateAtAbscissa(m_cursor->x(), myApp->localContext());
|
||||
PoincareHelpers::ConvertFloatToText<double>(y, buffer + legendLength, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::MediumNumberOfSignificantDigits), Constant::MediumNumberOfSignificantDigits);
|
||||
m_bannerView->setLegendAtIndex(buffer, 5);
|
||||
m_bannerView->bView()->setText(buffer);
|
||||
m_bannerView->reload();
|
||||
}
|
||||
|
||||
bool TangentGraphController::moveCursorHorizontally(int direction) {
|
||||
|
||||
@@ -10,14 +10,20 @@ BannerView::BannerView() :
|
||||
Shared::XYBannerView(),
|
||||
m_dotNameView(k_font, 0.0f, 0.5f, k_textColor, k_backgroundColor),
|
||||
m_regressionTypeView(k_font, (I18n::Message)0, 0.0f, 0.5f, k_textColor,k_backgroundColor),
|
||||
m_subText0(k_font, 0.5f, 0.5f, k_textColor, k_backgroundColor),
|
||||
m_subText1(k_font, 0.5f, 0.5f, k_textColor, k_backgroundColor),
|
||||
m_subText2(k_font, 0.5f, 0.5f, k_textColor, k_backgroundColor),
|
||||
m_subText3(k_font, 0.5f, 0.5f, k_textColor, k_backgroundColor),
|
||||
m_subText4(k_font, 0.5f, 0.5f, k_textColor, k_backgroundColor),
|
||||
m_subText5(k_font, 0.5f, 0.5f, k_textColor, k_backgroundColor)
|
||||
m_subText4(k_font, 0.5f, 0.5f, k_textColor, k_backgroundColor)
|
||||
{
|
||||
}
|
||||
|
||||
BufferTextView * BannerView::subTextAtIndex(int index) {
|
||||
assert(0 <= index && index < numberOfsubTexts());
|
||||
BufferTextView * subTexts[numberOfsubTexts()] = {&m_subText0, &m_subText1, &m_subText2, &m_subText3, &m_subText4};
|
||||
return subTexts[index];
|
||||
}
|
||||
|
||||
View * BannerView::subviewAtIndex(int index) {
|
||||
assert(0 <= index && index < numberOfSubviews());
|
||||
if (index == 0) {
|
||||
@@ -28,8 +34,10 @@ View * BannerView::subviewAtIndex(int index) {
|
||||
return Shared::XYBannerView::subviewAtIndex(index);
|
||||
}
|
||||
index -= Shared::XYBannerView::k_numberOfSubviews;
|
||||
View * subviews[] = {&m_regressionTypeView, &m_subText1, &m_subText2, &m_subText3, &m_subText4, &m_subText5};
|
||||
return subviews[index];
|
||||
if (index == 0) {
|
||||
return &m_regressionTypeView;
|
||||
}
|
||||
return subTextAtIndex(index - 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -8,7 +8,10 @@ namespace Regression {
|
||||
class BannerView : public Shared::XYBannerView {
|
||||
public:
|
||||
BannerView();
|
||||
int numberOfTextviews() const { return k_numberOfSubviews; }
|
||||
BufferTextView * dotNameView() { return &m_dotNameView; }
|
||||
MessageTextView * regressionTypeView() { return &m_regressionTypeView; }
|
||||
BufferTextView * subTextAtIndex(int index);
|
||||
static constexpr int numberOfsubTexts() { return 5; }
|
||||
const KDFont * font() const { return k_font; }
|
||||
private:
|
||||
static constexpr const KDFont * k_font = KDFont::SmallFont;
|
||||
@@ -19,11 +22,11 @@ private:
|
||||
View * subviewAtIndex(int index) override;
|
||||
BufferTextView m_dotNameView;
|
||||
MessageTextView m_regressionTypeView;
|
||||
BufferTextView m_subText0;
|
||||
BufferTextView m_subText1;
|
||||
BufferTextView m_subText2;
|
||||
BufferTextView m_subText3;
|
||||
BufferTextView m_subText4;
|
||||
BufferTextView m_subText5;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -113,7 +113,7 @@ void GraphController::reloadBannerView() {
|
||||
legend = ") ";
|
||||
strlcpy(buffer+numberOfChar, legend, bufferSize - numberOfChar);
|
||||
buffer[k_maxLegendLength] = 0;
|
||||
m_bannerView.setLegendAtIndex(buffer, 0);
|
||||
m_bannerView.dotNameView()->setText(buffer);
|
||||
|
||||
// Set "x=..." or "xmean=..."
|
||||
numberOfChar = 0;
|
||||
@@ -132,7 +132,7 @@ void GraphController::reloadBannerView() {
|
||||
buffer[numberOfChar++] = ' ';
|
||||
}
|
||||
buffer[k_maxLegendLength] = 0;
|
||||
m_bannerView.setLegendAtIndex(buffer, 1);
|
||||
m_bannerView.abscissaView()->setText(buffer);
|
||||
|
||||
// Set "y=..." or "ymean=..."
|
||||
numberOfChar = 0;
|
||||
@@ -149,12 +149,12 @@ void GraphController::reloadBannerView() {
|
||||
buffer[numberOfChar++] = ' ';
|
||||
}
|
||||
buffer[k_maxLegendLength] = 0;
|
||||
m_bannerView.setLegendAtIndex(buffer, 2);
|
||||
m_bannerView.ordinateView()->setText(buffer);
|
||||
|
||||
// Set formula
|
||||
Model * model = m_store->modelForSeries(selectedSeriesIndex());
|
||||
I18n::Message formula = model->formulaMessage();
|
||||
m_bannerView.setMessageAtIndex(formula, 3);
|
||||
m_bannerView.regressionTypeView()->setMessage(formula);
|
||||
|
||||
// Get the coefficients
|
||||
double * coefficients = m_store->coefficientsForSeries(selectedSeriesIndex(), globalContext());
|
||||
@@ -173,13 +173,12 @@ void GraphController::reloadBannerView() {
|
||||
buffer[numberOfChar++] = ' ';
|
||||
}
|
||||
buffer[numberOfChar] = 0;
|
||||
m_bannerView.setLegendAtIndex(buffer, 4);
|
||||
m_bannerView.subTextAtIndex(0)->setText(buffer);
|
||||
|
||||
const char * dataNotSuitableMessage = I18n::translate(I18n::Message::DataNotSuitableForRegression);
|
||||
m_bannerView.setLegendAtIndex(const_cast<char *>(dataNotSuitableMessage), 5);
|
||||
for (int i = 6; i < m_bannerView.numberOfTextviews(); i++) {
|
||||
char empty[] = {0};
|
||||
m_bannerView.setLegendAtIndex(empty, i);
|
||||
m_bannerView.subTextAtIndex(1)->setText(const_cast<char *>(dataNotSuitableMessage));
|
||||
for (int i = 2; i < m_bannerView.numberOfsubTexts(); i++) {
|
||||
m_bannerView.subTextAtIndex(i)->setText("");
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -191,7 +190,7 @@ void GraphController::reloadBannerView() {
|
||||
numberOfChar += strlcpy(buffer, legend, bufferSize);
|
||||
numberOfChar += PoincareHelpers::ConvertFloatToText<double>(coefficients[i], buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits);
|
||||
buffer[k_maxLegendLength] = 0;
|
||||
m_bannerView.setLegendAtIndex(buffer, 4 + i);
|
||||
m_bannerView.subTextAtIndex(i)->setText(buffer);
|
||||
coefficientName++;
|
||||
}
|
||||
|
||||
@@ -203,7 +202,7 @@ void GraphController::reloadBannerView() {
|
||||
numberOfChar += strlcpy(buffer, legend, bufferSize);
|
||||
numberOfChar += PoincareHelpers::ConvertFloatToText<double>(r, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits);
|
||||
buffer[k_maxLegendLength+10] = 0;
|
||||
m_bannerView.setLegendAtIndex(buffer, 6);
|
||||
m_bannerView.subTextAtIndex(2)->setText(buffer);
|
||||
|
||||
// Set "r2=..."
|
||||
numberOfChar = 0;
|
||||
@@ -212,19 +211,20 @@ void GraphController::reloadBannerView() {
|
||||
numberOfChar += strlcpy(buffer, legend, bufferSize);
|
||||
numberOfChar += PoincareHelpers::ConvertFloatToText<double>(r2, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits);
|
||||
buffer[k_maxLegendLength] = 0;
|
||||
m_bannerView.setLegendAtIndex(buffer, 7);
|
||||
m_bannerView.subTextAtIndex(3)->setText(buffer);
|
||||
|
||||
// Clean the last subview
|
||||
buffer[0] = 0;
|
||||
m_bannerView.setLegendAtIndex(buffer, 8);
|
||||
m_bannerView.subTextAtIndex(4)->setText(buffer);
|
||||
|
||||
} else {
|
||||
// Empty all non used subviews
|
||||
for (int i = 4+model->numberOfCoefficients(); i < m_bannerView.numberOfTextviews(); i++) {
|
||||
for (int i = model->numberOfCoefficients(); i < m_bannerView.numberOfsubTexts(); i++) {
|
||||
buffer[0] = 0;
|
||||
m_bannerView.setLegendAtIndex(buffer, i);
|
||||
m_bannerView.subTextAtIndex(i)->setText(buffer);
|
||||
}
|
||||
}
|
||||
m_bannerView.reload();
|
||||
}
|
||||
|
||||
bool GraphController::moveCursorHorizontally(int direction) {
|
||||
|
||||
@@ -7,22 +7,6 @@ KDCoordinate BannerView::HeightGivenNumberOfLines(int linesCount) {
|
||||
return KDFont::SmallFont->glyphSize().height()*linesCount;
|
||||
}
|
||||
|
||||
void BannerView::setLegendAtIndex(char * text, int index) {
|
||||
/* The layout of the banner's subviews depends on their content.
|
||||
* Indeed, we're using a "centered text" algorithm to layout the subviews.
|
||||
* So changing a legend implies two things
|
||||
* - First, we need to update the textView to ensure it has the new content
|
||||
* - Second, we need to relayout *all* of our subviews. */
|
||||
TextView * textView = static_cast<TextView *>(subviewAtIndex(index));
|
||||
textView->setText(text);
|
||||
layoutSubviews();
|
||||
}
|
||||
|
||||
void BannerView::setMessageAtIndex(I18n::Message text, int index) {
|
||||
static_cast<MessageTextView *>(subviewAtIndex(index))->setMessage(text);
|
||||
layoutSubviews();
|
||||
}
|
||||
|
||||
KDSize BannerView::minimalSizeForOptimalDisplay() const {
|
||||
return KDSize(0, HeightGivenNumberOfLines(numberOfLines()));
|
||||
}
|
||||
|
||||
@@ -8,9 +8,8 @@ namespace Shared {
|
||||
class BannerView : public View {
|
||||
public:
|
||||
static KDCoordinate HeightGivenNumberOfLines(int linesCount);
|
||||
void setLegendAtIndex(char * text, int index);
|
||||
void setMessageAtIndex(I18n::Message text, int index);
|
||||
KDSize minimalSizeForOptimalDisplay() const override;
|
||||
void reload() { layoutSubviews(); }
|
||||
private:
|
||||
int numberOfSubviews() const override = 0;
|
||||
View * subviewAtIndex(int index) override = 0;
|
||||
|
||||
@@ -19,7 +19,7 @@ void FunctionBannerDelegate::reloadBannerViewForCursorOnFunction(CurveViewCursor
|
||||
buffer[0] = symbol;
|
||||
numberOfChar += PoincareHelpers::ConvertFloatToText<double>(cursor->x(), buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::MediumNumberOfSignificantDigits), Constant::MediumNumberOfSignificantDigits);
|
||||
strlcpy(buffer+numberOfChar, space, bufferSize - numberOfChar);
|
||||
bannerView()->setLegendAtIndex(buffer, 0);
|
||||
bannerView()->abscissaView()->setText(buffer);
|
||||
|
||||
numberOfChar = 0;
|
||||
numberOfChar += function->nameWithArgument(buffer, bufferSize, symbol);
|
||||
@@ -27,7 +27,9 @@ void FunctionBannerDelegate::reloadBannerViewForCursorOnFunction(CurveViewCursor
|
||||
numberOfChar += strlcpy(buffer+numberOfChar, legend, bufferSize-numberOfChar);
|
||||
numberOfChar += PoincareHelpers::ConvertFloatToText<double>(cursor->y(), buffer+numberOfChar, bufferSize-numberOfChar, Constant::MediumNumberOfSignificantDigits);
|
||||
strlcpy(buffer+numberOfChar, space, bufferSize-numberOfChar);
|
||||
bannerView()->setLegendAtIndex(buffer, 1);
|
||||
bannerView()->ordinateView()->setText(buffer);
|
||||
|
||||
bannerView()->reload();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -8,6 +8,8 @@ namespace Shared {
|
||||
class XYBannerView : public BannerView {
|
||||
public:
|
||||
XYBannerView();
|
||||
BufferTextView * abscissaView() { return &m_abscissaView; }
|
||||
BufferTextView * ordinateView() { return &m_ordinateView; }
|
||||
static constexpr int k_numberOfSubviews = 2;
|
||||
protected:
|
||||
View * subviewAtIndex(int index) override;
|
||||
|
||||
@@ -10,6 +10,9 @@ namespace Statistics {
|
||||
class BoxBannerView : public Shared::BannerView {
|
||||
public:
|
||||
BoxBannerView();
|
||||
BufferTextView * seriesName() { return &m_seriesName; }
|
||||
MessageTextView * calculationName() { return &m_calculationName; }
|
||||
BufferTextView * calculationValue() { return &m_calculationValue; }
|
||||
private:
|
||||
static constexpr int k_numberOfSubviews = 3;
|
||||
int numberOfSubviews() const override { return k_numberOfSubviews; }
|
||||
|
||||
@@ -43,12 +43,11 @@ void BoxController::reloadBannerView() {
|
||||
// Set series name
|
||||
char seriesChar = '0' + selectedSeriesIndex() + 1;
|
||||
char bufferName[] = {' ', 'V', seriesChar, '/', 'N', seriesChar, 0};
|
||||
m_view.bannerView()->setLegendAtIndex(bufferName, 0);
|
||||
|
||||
m_view.bannerView()->seriesName()->setText(bufferName);
|
||||
|
||||
// Set calculation name
|
||||
I18n::Message calculationName[5] = {I18n::Message::Minimum, I18n::Message::FirstQuartile, I18n::Message::Median, I18n::Message::ThirdQuartile, I18n::Message::Maximum};
|
||||
m_view.bannerView()->setMessageAtIndex(calculationName[selectedQuantile], 1);
|
||||
m_view.bannerView()->calculationName()->setMessage(calculationName[selectedQuantile]);
|
||||
|
||||
// Set calculation result
|
||||
assert(UTF8Decoder::CharSizeOfCodePoint(' ') == 1);
|
||||
@@ -60,7 +59,9 @@ void BoxController::reloadBannerView() {
|
||||
int numberOfChar = PoincareHelpers::ConvertFloatToText<double>(calculation, buffer, bufferSize - 1, Constant::LargeNumberOfSignificantDigits);
|
||||
buffer[numberOfChar++] = ' ';
|
||||
buffer[numberOfChar] = 0;
|
||||
m_view.bannerView()->setLegendAtIndex(buffer, 2);
|
||||
m_view.bannerView()->calculationValue()->setText(buffer);
|
||||
|
||||
m_view.bannerView()->reload();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -10,6 +10,9 @@ namespace Statistics {
|
||||
class HistogramBannerView : public Shared::BannerView {
|
||||
public:
|
||||
HistogramBannerView();
|
||||
BufferTextView * intervalView() { return &m_intervalView; }
|
||||
BufferTextView * sizeView() { return &m_sizeView; }
|
||||
BufferTextView * frequencyView() { return &m_frequencyView; }
|
||||
private:
|
||||
static constexpr int k_numberOfSubviews = 6;
|
||||
int numberOfSubviews() const override { return k_numberOfSubviews; }
|
||||
|
||||
@@ -124,7 +124,7 @@ void HistogramController::reloadBannerView() {
|
||||
numberOfChar+= UTF8Decoder::CodePointToChars(' ', buffer + numberOfChar, bufferSize - numberOfChar);
|
||||
}
|
||||
buffer[k_maxIntervalLegendLength] = 0;
|
||||
m_view.bannerView()->setLegendAtIndex(buffer, 1);
|
||||
m_view.bannerView()->intervalView()->setText(buffer);
|
||||
|
||||
// Add Size Data
|
||||
numberOfChar = 0;
|
||||
@@ -142,7 +142,7 @@ void HistogramController::reloadBannerView() {
|
||||
numberOfChar+= UTF8Decoder::CodePointToChars(' ', buffer + numberOfChar, bufferSize - numberOfChar);
|
||||
}
|
||||
buffer[k_maxLegendLength] = 0;
|
||||
m_view.bannerView()->setLegendAtIndex(buffer, 3);
|
||||
m_view.bannerView()->sizeView()->setText(buffer);
|
||||
|
||||
// Add Frequency Data
|
||||
numberOfChar = 0;
|
||||
@@ -159,7 +159,9 @@ void HistogramController::reloadBannerView() {
|
||||
numberOfChar+= UTF8Decoder::CodePointToChars(' ', buffer + numberOfChar, bufferSize - numberOfChar);
|
||||
}
|
||||
buffer[k_maxLegendLength] = 0;
|
||||
m_view.bannerView()->setLegendAtIndex(buffer, 5);
|
||||
m_view.bannerView()->frequencyView()->setText(buffer);
|
||||
|
||||
m_view.bannerView()->reload();
|
||||
}
|
||||
|
||||
bool HistogramController::moveSelectionHorizontally(int deltaIndex) {
|
||||
|
||||
Reference in New Issue
Block a user