diff --git a/apps/statistics/histogram_controller.cpp b/apps/statistics/histogram_controller.cpp index 2a546fbae..669d4aa6e 100644 --- a/apps/statistics/histogram_controller.cpp +++ b/apps/statistics/histogram_controller.cpp @@ -20,8 +20,11 @@ HistogramController::ContentView::ContentView(HistogramController * controller, m_store(store) { m_histogramView1.setDisplayBannerView(false); + m_histogramView1.setDisplayLabels(false); m_histogramView2.setDisplayBannerView(false); + m_histogramView2.setDisplayLabels(false); m_histogramView3.setDisplayBannerView(false); + m_histogramView3.setDisplayLabels(false); } void HistogramController::ContentView::reload() { @@ -58,6 +61,14 @@ int HistogramController::ContentView::indexOfSubviewAtSeries(int series) { return -1; } +void HistogramController::ContentView::selectHistogram(int index) { + changeHistogramSelection(index, true); +} + +void HistogramController::ContentView::deselectHistogram(int index) { + changeHistogramSelection(index, false); +} + void HistogramController::ContentView::drawRect(KDContext * ctx, KDRect rect) const { if (!m_displayBanner) { ctx->fillRect(bannerFrame(), KDColorWhite); @@ -101,18 +112,13 @@ void HistogramController::ContentView::layoutSubviews() { KDCoordinate bannerHeight = bannerFrame().height(); KDCoordinate subviewHeight = (bounds().height() - bannerHeight)/numberHistogramSubviews; int displayedSubviewIndex = 0; - int bottomSeriesDisplayed = -1; for (int i = 0; i < 3; i++) { if (!m_store->seriesIsEmpty(i)) { - histogramViewAtIndex(i)->setDisplayLabels(false); KDRect frame = KDRect(0, displayedSubviewIndex*subviewHeight, bounds().width(), subviewHeight); subviewAtIndex(displayedSubviewIndex)->setFrame(frame); displayedSubviewIndex++; - bottomSeriesDisplayed = i; } } - assert(bottomSeriesDisplayed >= 0); - histogramViewAtIndex(bottomSeriesDisplayed)->setDisplayLabels(true); if (m_displayBanner) { m_bannerView.setFrame(bannerFrame()); } else { @@ -121,6 +127,11 @@ void HistogramController::ContentView::layoutSubviews() { } } +void HistogramController::ContentView::changeHistogramSelection(int index, bool select) { + histogramViewAtIndex(index)->selectMainView(select); + histogramViewAtIndex(index)->setDisplayLabels(select); +} + HistogramController::HistogramController(Responder * parentResponder, ButtonRowController * header, Store * store, int series, uint32_t * storeVersion, uint32_t * barVersion, uint32_t * rangeVersion, int * selectedBarIndex) : ViewController(parentResponder), ButtonRowDelegate(header, nullptr), @@ -164,7 +175,7 @@ void HistogramController::viewWillAppear() { m_view.setDisplayBanner(true); if (m_selectedSeries < 0) { m_selectedSeries = m_view.seriesOfSubviewAtIndex(0); - m_view.histogramViewAtIndex(m_selectedSeries)->selectMainView(true); + m_view.selectHistogram(m_selectedSeries); } reloadBannerView(); m_view.reload(); @@ -175,10 +186,10 @@ bool HistogramController::handleEvent(Ion::Events::Event event) { if (event == Ion::Events::Down) { int currentSelectedSubview = m_view.indexOfSubviewAtSeries(m_selectedSeries); if (currentSelectedSubview < m_view.numberOfSubviews() - 2) { - m_view.histogramViewAtIndex(m_selectedSeries)->selectMainView(false); + m_view.deselectHistogram(m_selectedSeries); m_selectedSeries = m_view.seriesOfSubviewAtIndex(currentSelectedSubview+1); *m_selectedBarIndex = 0; - m_view.histogramViewAtIndex(m_selectedSeries)->selectMainView(true); + m_view.selectHistogram(m_selectedSeries); reloadBannerView(); m_view.reload(); app()->setFirstResponder(this); @@ -187,12 +198,12 @@ bool HistogramController::handleEvent(Ion::Events::Event event) { return false; } if (event == Ion::Events::Up) { - m_view.histogramViewAtIndex(m_selectedSeries)->selectMainView(false); + m_view.deselectHistogram(m_selectedSeries); int currentSelectedSubview = m_view.indexOfSubviewAtSeries(m_selectedSeries); if (currentSelectedSubview > 0) { assert(currentSelectedSubview > 0); m_selectedSeries = m_view.seriesOfSubviewAtIndex(currentSelectedSubview-1); - m_view.histogramViewAtIndex(m_selectedSeries)->selectMainView(true); + m_view.selectHistogram(m_selectedSeries); *m_selectedBarIndex = 0; app()->setFirstResponder(this); } else { @@ -218,10 +229,10 @@ void HistogramController::didBecomeFirstResponder() { m_view.setDisplayBanner(true); if (m_selectedSeries < 0 || m_store->sumOfOccurrences(m_selectedSeries) == 0) { if (m_selectedSeries >= 0) { - m_view.histogramViewAtIndex(m_selectedSeries)->selectMainView(false); + m_view.deselectHistogram(m_selectedSeries); } m_selectedSeries = m_view.seriesOfSubviewAtIndex(0); - m_view.histogramViewAtIndex(m_selectedSeries)->selectMainView(true); + m_view.selectHistogram(m_selectedSeries); m_view.reload(); } uint32_t storeChecksum = m_store->storeChecksum(); @@ -247,7 +258,7 @@ void HistogramController::didBecomeFirstResponder() { void HistogramController::willExitResponderChain(Responder * nextFirstResponder) { if (nextFirstResponder == nullptr || nextFirstResponder == tabController()) { if (m_selectedSeries >= 0) { - m_view.histogramViewAtIndex(m_selectedSeries)->selectMainView(false); + m_view.deselectHistogram(m_selectedSeries); m_selectedSeries = -1; m_view.setDisplayBanner(false); } diff --git a/apps/statistics/histogram_controller.h b/apps/statistics/histogram_controller.h index 828c2782e..8e0210b81 100644 --- a/apps/statistics/histogram_controller.h +++ b/apps/statistics/histogram_controller.h @@ -46,6 +46,8 @@ private: int indexOfSubviewAtSeries(int series); HistogramBannerView * bannerView() { return &m_bannerView; } void setDisplayBanner(bool display) { m_displayBanner = display; } + void selectHistogram(int index); + void deselectHistogram(int index); // View void drawRect(KDContext * ctx, KDRect rect) const override; int numberOfSubviews() const override; @@ -53,6 +55,7 @@ private: KDRect bannerFrame() const; View * subviewAtIndex(int index) override; void layoutSubviews() override; + void changeHistogramSelection(int index, bool select); HistogramView m_histogramView1; HistogramView m_histogramView2; HistogramView m_histogramView3;