[statistics] Fix histogram_controller and multiple_data_view_controller

life cycle (viewWillAppear, didEnterResponderChain)

This fixes the histogram labels when a serie is added
This commit is contained in:
Émilie Feral
2018-11-15 11:47:37 +01:00
committed by LeaNumworks
parent fe3b9ad5ba
commit 737393072e
4 changed files with 21 additions and 27 deletions

View File

@@ -47,9 +47,8 @@ bool HistogramController::handleEvent(Ion::Events::Event event) {
return MultipleDataViewController::handleEvent(event);
}
void HistogramController::didBecomeFirstResponder() {
MultipleDataViewController::didBecomeFirstResponder();
void HistogramController::viewWillAppear() {
MultipleDataViewController::viewWillAppear();
uint32_t storeChecksum = m_store->storeChecksum();
if (*m_storeVersion != storeChecksum) {
*m_storeVersion = storeChecksum;
@@ -67,8 +66,6 @@ void HistogramController::didBecomeFirstResponder() {
initBarSelection();
reloadBannerView();
}
HistogramView * selectedHistogramView = static_cast<HistogramView *>(m_view.dataViewAtIndex(selectedSeriesIndex()));
selectedHistogramView->setHighlight(m_store->startOfBarAtIndex(selectedSeriesIndex(), *m_selectedBarIndex), m_store->endOfBarAtIndex(selectedSeriesIndex(), *m_selectedBarIndex));
}
void HistogramController::willExitResponderChain(Responder * nextFirstResponder) {
@@ -80,6 +77,11 @@ void HistogramController::willExitResponderChain(Responder * nextFirstResponder)
MultipleDataViewController::willExitResponderChain(nextFirstResponder);
}
void HistogramController::highlightSelection() {
HistogramView * selectedHistogramView = static_cast<HistogramView *>(m_view.dataViewAtIndex(selectedSeriesIndex()));
selectedHistogramView->setHighlight(m_store->startOfBarAtIndex(selectedSeriesIndex(), *m_selectedBarIndex), m_store->endOfBarAtIndex(selectedSeriesIndex(), *m_selectedBarIndex));
}
Responder * HistogramController::tabController() const {
return (parentResponder()->parentResponder()->parentResponder()->parentResponder());
}

View File

@@ -19,17 +19,18 @@ public:
// ViewController
const char * title() override;
void viewWillAppear() override;
MultipleDataView * multipleDataView() override { return &m_view; }
// Responder
bool handleEvent(Ion::Events::Event event) override;
void didBecomeFirstResponder() override;
void willExitResponderChain(Responder * nextFirstResponder) override;
private:
constexpr static int k_maxNumberOfBarsPerWindow = 100;
constexpr static int k_maxIntervalLegendLength = 33;
constexpr static int k_maxLegendLength = 13;
constexpr static int k_maxNumberOfCharacters = 30;
void highlightSelection() override;
Responder * tabController() const override;
void reloadBannerView() override;
void initRangeParameters();

View File

@@ -27,11 +27,9 @@ Responder * MultipleDataViewController::defaultController() {
}
void MultipleDataViewController::viewWillAppear() {
multipleDataView()->setDisplayBanner(true);
if (*m_selectedSeriesIndex < 0) {
if (*m_selectedSeriesIndex < 0 || m_store->sumOfOccurrences(*m_selectedSeriesIndex) == 0) {
*m_selectedSeriesIndex = multipleDataView()->seriesOfSubviewAtIndex(0);
}
multipleDataView()->selectDataView(*m_selectedSeriesIndex);
reloadBannerView();
multipleDataView()->reload();
}
@@ -45,8 +43,8 @@ bool MultipleDataViewController::handleEvent(Ion::Events::Event event) {
*m_selectedSeriesIndex = multipleDataView()->seriesOfSubviewAtIndex(currentSelectedSubview+1);
*m_selectedBarIndex = MultipleDataView::k_defaultSelectedBar;
multipleDataView()->selectDataView(*m_selectedSeriesIndex);
highlightSelection();
reloadBannerView();
app()->setFirstResponder(this);
return true;
}
return false;
@@ -58,7 +56,7 @@ bool MultipleDataViewController::handleEvent(Ion::Events::Event event) {
*m_selectedSeriesIndex = multipleDataView()->seriesOfSubviewAtIndex(currentSelectedSubview-1);
*m_selectedBarIndex = MultipleDataView::k_defaultSelectedBar;
multipleDataView()->selectDataView(*m_selectedSeriesIndex);
app()->setFirstResponder(this);
highlightSelection();
} else {
app()->setFirstResponder(tabController());
}
@@ -73,26 +71,18 @@ bool MultipleDataViewController::handleEvent(Ion::Events::Event event) {
return false;
}
void MultipleDataViewController::didBecomeFirstResponder() {
void MultipleDataViewController::didEnterResponderChain(Responder * firstResponder) {
assert(*m_selectedSeriesIndex >= 0);
multipleDataView()->setDisplayBanner(true);
if (*m_selectedSeriesIndex < 0 || m_store->sumOfOccurrences(*m_selectedSeriesIndex) == 0) {
if (*m_selectedSeriesIndex >= 0) {
multipleDataView()->deselectDataView(*m_selectedSeriesIndex);
}
*m_selectedSeriesIndex = multipleDataView()->seriesOfSubviewAtIndex(0);
multipleDataView()->selectDataView(*m_selectedSeriesIndex);
multipleDataView()->reload();
} else {
multipleDataView()->dataViewAtIndex(*m_selectedSeriesIndex)->selectMainView(true);
}
multipleDataView()->selectDataView(*m_selectedSeriesIndex);
highlightSelection();
}
void MultipleDataViewController::willExitResponderChain(Responder * nextFirstResponder) {
if (nextFirstResponder == nullptr || nextFirstResponder == tabController()) {
if (*m_selectedSeriesIndex >= 0) {
multipleDataView()->dataViewAtIndex(*m_selectedSeriesIndex)->selectMainView(false);
multipleDataView()->setDisplayBanner(false);
}
assert(*m_selectedSeriesIndex >= 0);
multipleDataView()->deselectDataView(*m_selectedSeriesIndex);
multipleDataView()->setDisplayBanner(false);
}
}

View File

@@ -24,9 +24,10 @@ public:
// Responder
bool handleEvent(Ion::Events::Event event) override;
void didBecomeFirstResponder() override;
void didEnterResponderChain(Responder * previousFirstResponder) override;
void willExitResponderChain(Responder * nextFirstResponder) override;
protected:
virtual void highlightSelection() {}
virtual Responder * tabController() const = 0;
virtual void reloadBannerView() = 0;
virtual bool moveSelectionHorizontally(int deltaIndex) = 0;