Numworks Epsilon  1.4.1
Graphing Calculator Operating System
button_row_controller.h
Go to the documentation of this file.
1 #ifndef BUTTON_ROW_CONTROLLER_H
2 #define BUTTON_ROW_CONTROLLER_H
3 
5 #include <escher/view.h>
6 #include <escher/invocation.h>
7 #include <escher/i18n.h>
8 #include <escher/button.h>
9 #include <escher/app.h>
10 #include <assert.h>
11 
12 class ButtonRowDelegate;
13 
15 public:
16  enum class Position {
17  Top,
18  Bottom
19  };
20  enum class Style {
21  PlainWhite,
23  };
24  enum class Size {
25  Small,
26  Large
27  };
29  View * view() override { return &m_contentView; }
30  const char * title() override;
31  void didBecomeFirstResponder() override;
32  bool handleEvent(Ion::Events::Event event) override;
33  int selectedButton();
35  void viewWillAppear() override;
36  void viewDidDisappear() override;
38 private:
39  class ContentView : public View {
40  public:
41  ContentView(ViewController * mainViewController, ButtonRowDelegate * delegate, Position position, Style style, Size size);
42  int numberOfButtons() const;
43  Button * buttonAtIndex(int index) const;
44  int numberOfSubviews() const override;
45  View * subviewAtIndex(int index) override;
46  void layoutSubviews() override;
47  void drawRect(KDContext * ctx, KDRect rect) const override;
49  int selectedButton() const { return m_selectedButton; }
50  ViewController * mainViewController() const { return m_mainViewController; }
51  ButtonRowDelegate * buttonRowDelegate() const { return m_delegate; }
52  private:
53  constexpr static KDCoordinate k_plainStyleHeight = 20;
54  constexpr static KDCoordinate k_embossedStyleHeightSmall = 36;
55  constexpr static KDCoordinate k_embossedStyleHeightLarge = 52;
56  constexpr static KDCoordinate k_embossedStyleHeightMarginSmall = 6;
57  constexpr static KDCoordinate k_embossedStyleHeightMarginLarge = 8;
58  constexpr static KDColor k_separatorHeaderColor = KDColor::RGB24(0xDEE0E2);
59  constexpr static KDColor k_selectedBackgroundColor = KDColor::RGB24(0x426DA7);
60  ViewController * m_mainViewController;
61  int m_selectedButton;
62  ButtonRowDelegate * m_delegate;
63  Position m_position;
64  Style m_style;
65  Size m_size;
66  };
67  ContentView m_contentView;
68 };
69 
71 public:
73  virtual int numberOfButtons(ButtonRowController::Position position) const { return 0; }
74  virtual Button * buttonAtIndex(int index, ButtonRowController::Position position) const {
75  assert(false);
76  return nullptr;
77  }
78  ButtonRowController * header() { return m_header; }
79  ButtonRowController * footer() { return m_footer; }
80 private:
81  ButtonRowController * m_header;
82  ButtonRowController * m_footer;
83 };
84 
85 #endif
const char * title() override
ButtonRowDelegate(ButtonRowController *header, ButtonRowController *footer)
#define assert(e)
Definition: assert.h:9
void viewDidDisappear() override
int16_t KDCoordinate
Definition: coordinate.h:6
Responder * parentResponder() const
Definition: responder.cpp:12
ButtonRowController(Responder *parentResponder, ViewController *mainViewController, ButtonRowDelegate *delegate, Position position=Position::Top, Style=Style::PlainWhite, Size size=Size::Small)
ButtonRowController * header()
ButtonRowController * footer()
bool handleEvent(Ion::Events::Event event) override
void didBecomeFirstResponder() override
Definition: app.h:23
bool setSelectedButton(int selectedButton)
Definition: rect.h:26
virtual Button * buttonAtIndex(int index, ButtonRowController::Position position) const
Definition: color.h:6
ViewController::DisplayParameter displayParameter() override
Definition: view.h:23
virtual int numberOfButtons(ButtonRowController::Position position) const
App * app()
Definition: responder.cpp:77
Definition: button.h:10
View * view() override
static constexpr KDColor RGB24(uint32_t rgb)
Definition: color.h:13