From 3ce71b4ef9c5b7f0c3bb0dde94d2eaa0dcf75fa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Fri, 25 May 2018 12:10:08 +0200 Subject: [PATCH] [apps/stats] Give bigger frame the box view that display axis --- apps/statistics/multiple_boxes_view.cpp | 21 ++++++++++---- apps/statistics/multiple_boxes_view.h | 2 +- apps/statistics/multiple_data_view.cpp | 37 +++++++++++++++---------- apps/statistics/multiple_data_view.h | 12 ++++---- 4 files changed, 47 insertions(+), 25 deletions(-) diff --git a/apps/statistics/multiple_boxes_view.cpp b/apps/statistics/multiple_boxes_view.cpp index 33ff18383..078694c71 100644 --- a/apps/statistics/multiple_boxes_view.cpp +++ b/apps/statistics/multiple_boxes_view.cpp @@ -31,12 +31,23 @@ int MultipleBoxesView::seriesOfSubviewAtIndex(int index) { return static_cast(subviewAtIndex(index))->series(); } -void MultipleBoxesView::layoutSubviews() { - MultipleDataView::layoutSubviews(); - int numberOfDataSubviews = numberOfSubviews() - 1; +void MultipleBoxesView::layoutDataSubviews() { + int numberOfDataSubviews = m_store->numberOfNonEmptySeries(); assert(numberOfDataSubviews > 0); - for (int i = 0; i < numberOfDataSubviews; i++) { - static_cast(subviewAtIndex(i))->setDisplayAxis(i == numberOfDataSubviews - 1); + KDCoordinate bannerHeight = bannerFrame().height(); + KDCoordinate axisHeight = 30; + KDCoordinate subviewHeight = (bounds().height() - bannerHeight - axisHeight)/numberOfDataSubviews; + int displayedSubviewIndex = 0; + for (int i = 0; i < Store::k_numberOfSeries; i++) { + if (!m_store->seriesIsEmpty(i)) { + BoxView * boxView = dataViewAtIndex(i); + bool displaysAxis = displayedSubviewIndex == numberOfDataSubviews - 1; + boxView->setDisplayAxis(displaysAxis); + KDCoordinate currentSubviewHeight = subviewHeight + (displaysAxis ? axisHeight : 0); + KDRect frame = KDRect(0, displayedSubviewIndex*subviewHeight, bounds().width(), currentSubviewHeight); + boxView->setFrame(frame); + displayedSubviewIndex++; + } } } diff --git a/apps/statistics/multiple_boxes_view.h b/apps/statistics/multiple_boxes_view.h index bfcbd5aed..769bdec7b 100644 --- a/apps/statistics/multiple_boxes_view.h +++ b/apps/statistics/multiple_boxes_view.h @@ -16,7 +16,7 @@ public: int seriesOfSubviewAtIndex(int index) override; const BoxBannerView * bannerView() const override { return &m_bannerView; } BoxView * dataViewAtIndex(int index) override; - void layoutSubviews() override; + void layoutDataSubviews() override; private: BoxView m_boxView1; BoxView m_boxView2; diff --git a/apps/statistics/multiple_data_view.cpp b/apps/statistics/multiple_data_view.cpp index c07f49685..4e9ebd224 100644 --- a/apps/statistics/multiple_data_view.cpp +++ b/apps/statistics/multiple_data_view.cpp @@ -36,24 +36,12 @@ void MultipleDataView::deselectDataView(int index) { changeDataViewSelection(index, false); } -void MultipleDataView::drawRect(KDContext * ctx, KDRect rect) const { - if (!m_displayBanner) { - ctx->fillRect(bannerFrame(), KDColorWhite); - } -} - int MultipleDataView::numberOfSubviews() const { int result = m_store->numberOfNonEmptySeries(); assert(result <= Store::k_numberOfSeries); return result + 1; // +1 for the banner view } -KDRect MultipleDataView::bannerFrame() const { - KDCoordinate bannerHeight = bannerView()->minimalSizeForOptimalDisplay().height(); - KDRect frame = KDRect(0, bounds().height() - bannerHeight, bounds().width(), bannerHeight); - return frame; -} - View * MultipleDataView::subviewAtIndex(int index) { if (index == numberOfSubviews() -1) { return editableBannerView(); @@ -74,6 +62,11 @@ View * MultipleDataView::subviewAtIndex(int index) { } void MultipleDataView::layoutSubviews() { + layoutDataSubviews(); + layoutBanner(); +} + +void MultipleDataView::layoutDataSubviews() { int numberDataSubviews = m_store->numberOfNonEmptySeries(); assert(numberDataSubviews > 0); KDCoordinate bannerHeight = bannerFrame().height(); @@ -87,6 +80,20 @@ void MultipleDataView::layoutSubviews() { displayedSubviewIndex++; } } +} + +void MultipleDataView::changeDataViewSelection(int index, bool select) { + dataViewAtIndex(index)->selectMainView(select); +} + +KDRect MultipleDataView::bannerFrame() const { + KDCoordinate bannerHeight = bannerView()->minimalSizeForOptimalDisplay().height(); + KDRect frame = KDRect(0, bounds().height() - bannerHeight, bounds().width(), bannerHeight); + return frame; +} + +void MultipleDataView::layoutBanner() { + KDCoordinate bannerHeight = bannerFrame().height(); if (m_displayBanner) { editableBannerView()->setFrame(bannerFrame()); } else { @@ -95,8 +102,10 @@ void MultipleDataView::layoutSubviews() { } } -void MultipleDataView::changeDataViewSelection(int index, bool select) { - dataViewAtIndex(index)->selectMainView(select); +void MultipleDataView::drawRect(KDContext * ctx, KDRect rect) const { + if (!m_displayBanner) { + ctx->fillRect(bannerFrame(), KDColorWhite); + } } } diff --git a/apps/statistics/multiple_data_view.h b/apps/statistics/multiple_data_view.h index c53b52cde..116c7f199 100644 --- a/apps/statistics/multiple_data_view.h +++ b/apps/statistics/multiple_data_view.h @@ -11,8 +11,8 @@ namespace Statistics { class MultipleDataView : public View { public: MultipleDataView(Store * store) : - m_displayBanner(false), - m_store(store) + m_store(store), + m_displayBanner(false) {} // Data views void selectDataView(int index); @@ -33,13 +33,15 @@ public: protected: virtual const Shared::BannerView * bannerView() const = 0; void layoutSubviews() override; + virtual void layoutDataSubviews(); View * subviewAtIndex(int index) override; virtual void changeDataViewSelection(int index, bool select); -private: - void drawRect(KDContext * ctx, KDRect rect) const override; KDRect bannerFrame() const; - bool m_displayBanner; Store * m_store; +private: + void layoutBanner(); + void drawRect(KDContext * ctx, KDRect rect) const override; + bool m_displayBanner; }; }