presentersStack_.back()->notOnTop();
presentersStack_.push_back(std::move(presenter));
presentersStack_.back()->onTop();
- presenterToBroadcast_ = presentersStack_.back().get();
- countOfPagesToPop_ = 1;
- notify();
+ Observable<Presenter *, size_t>::notify(presentersStack_.back().get(), 1);
}
void AppContext::pop(size_t countOfPagesToPop)
if (countOfPagesToPop < 1)
return;
- presenterToBroadcast_ = nullptr;
if (countOfPagesToPop > presentersStack_.size())
- countOfPagesToPop_ = presentersStack_.size();
- else
- countOfPagesToPop_ = countOfPagesToPop;
+ countOfPagesToPop = presentersStack_.size();
if (presentersStack_.size() > 0)
presentersStack_.back()->notOnTop();
- for (auto i = 0u; i < countOfPagesToPop_; ++i)
+ for (auto i = 0u; i < countOfPagesToPop; ++i)
presentersStack_.pop_back();
if (presentersStack_.empty()) {
ui_app_exit();
} else {
presentersStack_.back()->onTop();
- notify();
+ Observable<Presenter *, size_t>::notify(nullptr, countOfPagesToPop);
}
}
if (presentersStack_.size() > 0)
presentersStack_.back()->notOnTop();
modalPresentersStack_.push_back(std::move(presenter));
- modalPresenterToBroadcast_ = modalPresentersStack_.back().get();
- notifyAboutModal();
+ Observable<ModalPresenter *>::notify(modalPresentersStack_.back().get());
}
void AppContext::popModal()
if (presentersStack_.size() > 0)
presentersStack_.back()->onTop();
modalPresentersStack_.pop_back();
- modalPresenterToBroadcast_ = nullptr;
- notifyAboutModal();
+ Observable<ModalPresenter *>::notify(nullptr);
}
ModalPresenter *AppContext::modalsBack()
{
return modalPresentersStack_.empty();
}
-
-void AppContext::notify()
-{
- for (auto &c : this->Observable<Presenter *, size_t>::onChangeCallbacks_)
- if (c)
- c(presenterToBroadcast_, countOfPagesToPop_);
-}
-
-void AppContext::notifyAboutModal()
-{
- for (auto &c : this->Observable<ModalPresenter *>::onChangeCallbacks_)
- if (c)
- c(modalPresenterToBroadcast_);
-}
void pop(size_t countOfPagesToPop = 1);
Presenter *back();
bool empty();
- void notify();
- void notifyAboutModal();
void pushModal(std::unique_ptr<ModalPresenter> presenter);
void popModal();
private:
std::vector<std::unique_ptr<Presenter>> presentersStack_;
std::vector<std::unique_ptr<ModalPresenter>> modalPresentersStack_;
- Presenter *presenterToBroadcast_ = nullptr;
- size_t countOfPagesToPop_ = 1;
- ModalPresenter *modalPresenterToBroadcast_ = nullptr;
};
#endif
\ No newline at end of file