[apps] Replace BannerView::set(Legend|Message)AtIndex by getters

This commit is contained in:
Ruben Dashyan
2019-03-05 09:51:57 +01:00
committed by Émilie Feral
parent 205ae8fec5
commit 355e42734d
15 changed files with 65 additions and 52 deletions

View File

@@ -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; }

View File

@@ -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();
}
}

View File

@@ -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) {

View File

@@ -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) {

View File

@@ -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);
}
}

View File

@@ -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;
};
}

View File

@@ -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) {

View File

@@ -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()));
}

View File

@@ -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;

View File

@@ -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();
}
}

View File

@@ -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;

View File

@@ -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; }

View File

@@ -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();
}
}

View File

@@ -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; }

View File

@@ -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) {