From 6a3cd4c144b2fef5c74730020c5e8d7295042b5f Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 17 May 2016 09:33:16 -0700 Subject: [PATCH] Centralize handling of modal error display. --- firmware/application/analog_audio_app.cpp | 2 +- firmware/application/capture_app.cpp | 2 +- firmware/application/ui_navigation.cpp | 11 +++++++++++ firmware/application/ui_navigation.hpp | 3 +++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/firmware/application/analog_audio_app.cpp b/firmware/application/analog_audio_app.cpp index 520b5684..408b13be 100644 --- a/firmware/application/analog_audio_app.cpp +++ b/firmware/application/analog_audio_app.cpp @@ -140,7 +140,7 @@ AnalogAudioView::AnalogAudioView( }; record_view.on_error = [&nav](std::string message) { - nav.push(message); + nav.display_error(message); }; audio::output::start(); diff --git a/firmware/application/capture_app.cpp b/firmware/application/capture_app.cpp index 1226a575..160066b0 100644 --- a/firmware/application/capture_app.cpp +++ b/firmware/application/capture_app.cpp @@ -71,7 +71,7 @@ CaptureAppView::CaptureAppView(NavigationView& nav) { record_view.set_sampling_rate(sampling_rate / 8); record_view.on_error = [&nav](std::string message) { - nav.push(message); + nav.display_error(message); }; } diff --git a/firmware/application/ui_navigation.cpp b/firmware/application/ui_navigation.cpp index bc1a7734..6fb735af 100644 --- a/firmware/application/ui_navigation.cpp +++ b/firmware/application/ui_navigation.cpp @@ -117,6 +117,10 @@ View* NavigationView::push_view(std::unique_ptr new_view) { } void NavigationView::pop() { + if( view() == modal_view ) { + modal_view = nullptr; + } + // Can't pop last item from stack. if( view_stack.size() > 1 ) { free_view(); @@ -127,6 +131,13 @@ void NavigationView::pop() { } } +void NavigationView::display_error(const std::string& message) { + /* If a modal view is already visible, don't display another */ + if( !modal_view ) { + modal_view = push(message); + } +} + void NavigationView::free_view() { remove_child(view()); } diff --git a/firmware/application/ui_navigation.hpp b/firmware/application/ui_navigation.hpp index a932c907..b103189b 100644 --- a/firmware/application/ui_navigation.hpp +++ b/firmware/application/ui_navigation.hpp @@ -102,10 +102,13 @@ public: void pop(); + void display_error(const std::string& message); + void focus() override; private: std::vector> view_stack; + Widget* modal_view { nullptr }; Widget* view() const;