Files
Upsilon/escher/include/escher/stack_view_controller.h
Émilie Feral 70fc734f7b [escher] Change dynamic view controller paradigm
Change-Id: I57fd41c9b9ad8a1e8b684b97fdf80ddffd71881d
2017-05-03 14:22:51 +02:00

74 lines
2.5 KiB
C++

#ifndef ESCHER_STACK_VIEW_CONTROLLER_H
#define ESCHER_STACK_VIEW_CONTROLLER_H
#include <escher/view_controller.h>
#include <escher/stack_view.h>
#include <escher/palette.h>
constexpr uint8_t kMaxNumberOfStacks = 4;
class StackViewController : public ViewController {
public:
StackViewController(Responder * parentResponder, ViewController * rootViewController, bool displayFirstStackHeader = false,
KDColor textColor = Palette::SubTab, KDColor backgroundColor = KDColorWhite, KDColor separatorColor = Palette::GreyBright);
/* Push creates a new StackView and adds it */
void push(ViewController * vc, KDColor textColor = Palette::SubTab, KDColor backgroundColor = KDColorWhite, KDColor separatorColor = Palette::GreyBright);
void pop();
View * view() override;
const char * title() override;
bool handleEvent(Ion::Events::Event event) override;
void didBecomeFirstResponder() override;
void viewWillAppear() override;
void viewDidDisappear() override;
private:
class Frame {
public:
Frame(ViewController * viewController = nullptr, KDColor textColor = Palette::SubTab, KDColor backgroundColor = KDColorWhite, KDColor separatorColor = Palette::GreyBright) :
m_viewController(viewController),
m_textColor(textColor),
m_backgroundColor(backgroundColor),
m_separatorColor(separatorColor) {}
ViewController * viewController() { return m_viewController; }
KDColor textColor() { return m_textColor; }
KDColor backgroundColor() { return m_backgroundColor; }
KDColor separatorColor() { return m_separatorColor; }
private:
ViewController * m_viewController;
KDColor m_textColor;
KDColor m_backgroundColor;
KDColor m_separatorColor;
};
class ControllerView : public View {
public:
ControllerView(bool displayFirstStackHeader);
void setContentView(View * view);
void pushStack(Frame frame);
void popStack();
protected:
#if ESCHER_VIEW_LOGGING
const char * className() const override;
#endif
private:
static constexpr KDCoordinate k_stackHeight = 20;
int numberOfSubviews() const override;
View * subviewAtIndex(int index) override;
void layoutSubviews() override;
StackView m_stackViews[kMaxNumberOfStacks];
View * m_contentView;
int8_t m_numberOfStacks;
bool m_displayFirstStackHeader;
};
ControllerView m_view;
void pushModel(Frame frame);
void setupActiveViewController();
static constexpr uint8_t k_maxNumberOfChildren = 4;
Frame m_childrenFrame[k_maxNumberOfChildren];
uint8_t m_numberOfChildren;
};
#endif