From 355e42734d200e5f3a111a6498ace23e6351811b Mon Sep 17 00:00:00 2001 From: Ruben Dashyan Date: Tue, 5 Mar 2019 09:51:57 +0100 Subject: [PATCH] [apps] Replace BannerView::set(Legend|Message)AtIndex by getters --- apps/graph/graph/banner_view.h | 3 ++ apps/graph/graph/graph_controller_helper.cpp | 3 +- .../graph/intersection_graph_controller.cpp | 3 +- apps/graph/graph/tangent_graph_controller.cpp | 5 ++-- apps/regression/banner_view.cpp | 16 +++++++--- apps/regression/banner_view.h | 7 +++-- apps/regression/graph_controller.cpp | 30 +++++++++---------- apps/shared/banner_view.cpp | 16 ---------- apps/shared/banner_view.h | 3 +- apps/shared/function_banner_delegate.cpp | 6 ++-- apps/shared/xy_banner_view.h | 2 ++ apps/statistics/box_banner_view.h | 3 ++ apps/statistics/box_controller.cpp | 9 +++--- apps/statistics/histogram_banner_view.h | 3 ++ apps/statistics/histogram_controller.cpp | 8 +++-- 15 files changed, 65 insertions(+), 52 deletions(-) diff --git a/apps/graph/graph/banner_view.h b/apps/graph/graph/banner_view.h index 6d502b39a..d9a3f3416 100644 --- a/apps/graph/graph/banner_view.h +++ b/apps/graph/graph/banner_view.h @@ -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; } diff --git a/apps/graph/graph/graph_controller_helper.cpp b/apps/graph/graph/graph_controller_helper.cpp index 6928bf865..65d3ac8b4 100644 --- a/apps/graph/graph/graph_controller_helper.cpp +++ b/apps/graph/graph/graph_controller_helper.cpp @@ -30,7 +30,8 @@ void GraphControllerHelper::reloadDerivativeInBannerViewForCursorOnFunction(Shar double y = function->approximateDerivative(cursor->x(), app->localContext()); numberOfChar += PoincareHelpers::ConvertFloatToText(y, buffer + numberOfChar, bufferSize-numberOfChar, Constant::ShortNumberOfSignificantDigits); strlcpy(buffer+numberOfChar, space, bufferSize-numberOfChar); - bannerView()->setLegendAtIndex(buffer, 2); + bannerView()->derivativeView()->setText(buffer); + bannerView()->reload(); } } diff --git a/apps/graph/graph/intersection_graph_controller.cpp b/apps/graph/graph/intersection_graph_controller.cpp index bb28f6076..1994430b8 100644 --- a/apps/graph/graph/intersection_graph_controller.cpp +++ b/apps/graph/graph/intersection_graph_controller.cpp @@ -33,7 +33,8 @@ void IntersectionGraphController::reloadBannerView() { numberOfChar += strlcpy(buffer+numberOfChar, legend, bufferSize-numberOfChar); numberOfChar += PoincareHelpers::ConvertFloatToText(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) { diff --git a/apps/graph/graph/tangent_graph_controller.cpp b/apps/graph/graph/tangent_graph_controller.cpp index 7032cc726..79a79dd9b 100644 --- a/apps/graph/graph/tangent_graph_controller.cpp +++ b/apps/graph/graph/tangent_graph_controller.cpp @@ -49,13 +49,14 @@ void TangentGraphController::reloadBannerView() { ExpiringPointer function = myApp->functionStore()->modelForRecord(m_record); double y = function->approximateDerivative(m_cursor->x(), myApp->localContext()); PoincareHelpers::ConvertFloatToText(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(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) { diff --git a/apps/regression/banner_view.cpp b/apps/regression/banner_view.cpp index 1780cc68f..69fbccb6b 100644 --- a/apps/regression/banner_view.cpp +++ b/apps/regression/banner_view.cpp @@ -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); } } diff --git a/apps/regression/banner_view.h b/apps/regression/banner_view.h index 64fed0e06..b48496e1b 100644 --- a/apps/regression/banner_view.h +++ b/apps/regression/banner_view.h @@ -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; }; } diff --git a/apps/regression/graph_controller.cpp b/apps/regression/graph_controller.cpp index 04be6f253..b4da31972 100644 --- a/apps/regression/graph_controller.cpp +++ b/apps/regression/graph_controller.cpp @@ -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(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(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(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(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(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) { diff --git a/apps/shared/banner_view.cpp b/apps/shared/banner_view.cpp index 83cdbad45..0f7ff8af2 100644 --- a/apps/shared/banner_view.cpp +++ b/apps/shared/banner_view.cpp @@ -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(subviewAtIndex(index)); - textView->setText(text); - layoutSubviews(); -} - -void BannerView::setMessageAtIndex(I18n::Message text, int index) { - static_cast(subviewAtIndex(index))->setMessage(text); - layoutSubviews(); -} - KDSize BannerView::minimalSizeForOptimalDisplay() const { return KDSize(0, HeightGivenNumberOfLines(numberOfLines())); } diff --git a/apps/shared/banner_view.h b/apps/shared/banner_view.h index 312701350..b659b9cc9 100644 --- a/apps/shared/banner_view.h +++ b/apps/shared/banner_view.h @@ -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; diff --git a/apps/shared/function_banner_delegate.cpp b/apps/shared/function_banner_delegate.cpp index 5775174ad..3d8b5968d 100644 --- a/apps/shared/function_banner_delegate.cpp +++ b/apps/shared/function_banner_delegate.cpp @@ -19,7 +19,7 @@ void FunctionBannerDelegate::reloadBannerViewForCursorOnFunction(CurveViewCursor buffer[0] = symbol; numberOfChar += PoincareHelpers::ConvertFloatToText(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(cursor->y(), buffer+numberOfChar, bufferSize-numberOfChar, Constant::MediumNumberOfSignificantDigits); strlcpy(buffer+numberOfChar, space, bufferSize-numberOfChar); - bannerView()->setLegendAtIndex(buffer, 1); + bannerView()->ordinateView()->setText(buffer); + + bannerView()->reload(); } } diff --git a/apps/shared/xy_banner_view.h b/apps/shared/xy_banner_view.h index 0b5e76e0e..5b13aa2fd 100644 --- a/apps/shared/xy_banner_view.h +++ b/apps/shared/xy_banner_view.h @@ -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; diff --git a/apps/statistics/box_banner_view.h b/apps/statistics/box_banner_view.h index 1f1d87672..d2e98cf0a 100644 --- a/apps/statistics/box_banner_view.h +++ b/apps/statistics/box_banner_view.h @@ -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; } diff --git a/apps/statistics/box_controller.cpp b/apps/statistics/box_controller.cpp index 861f72532..2e26b3565 100644 --- a/apps/statistics/box_controller.cpp +++ b/apps/statistics/box_controller.cpp @@ -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(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(); } } diff --git a/apps/statistics/histogram_banner_view.h b/apps/statistics/histogram_banner_view.h index 7f9e30d0f..84e96896f 100644 --- a/apps/statistics/histogram_banner_view.h +++ b/apps/statistics/histogram_banner_view.h @@ -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; } diff --git a/apps/statistics/histogram_controller.cpp b/apps/statistics/histogram_controller.cpp index 90e033036..70d02ac1d 100644 --- a/apps/statistics/histogram_controller.cpp +++ b/apps/statistics/histogram_controller.cpp @@ -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) {