mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
74 lines
2.5 KiB
C++
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
|