mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-18 21:30:38 +01:00
[Escher] Responder can get a pointer to the parent App
We assume the root parent is the App. This works well because each view controller is a Responder. Change-Id: I5d90053949a4ffbdb78746cc85430a15138e48e7
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
#include "graph_controller.h"
|
||||
|
||||
GraphController::GraphController() :
|
||||
ViewController(),
|
||||
GraphController::GraphController(Responder * parentResponder) :
|
||||
ViewController(parentResponder),
|
||||
m_view(GraphView())
|
||||
{
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
class GraphController : public ViewController {
|
||||
public:
|
||||
GraphController();
|
||||
GraphController(Responder * parentResponder);
|
||||
View * view() override;
|
||||
const char * title() const override;
|
||||
void setFocused(bool focused) override;
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
GraphApp::GraphApp() :
|
||||
App(),
|
||||
m_listController(ListController()),
|
||||
m_graphController(GraphController()),
|
||||
m_tabViewController(&m_listController, &m_graphController)
|
||||
m_listController(ListController(nullptr)),
|
||||
m_graphController(GraphController(nullptr)),
|
||||
m_tabViewController(this, &m_listController, &m_graphController)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
FunctionCell::FunctionCell() :
|
||||
ChildlessView(),
|
||||
Responder(nullptr),
|
||||
m_focused(false),
|
||||
m_even(false)
|
||||
{
|
||||
|
||||
@@ -8,8 +8,8 @@ static const char * sMessages[] = {
|
||||
"PPP15", "QQQ16", "RRR17", "SSS18", "TTT19"
|
||||
};
|
||||
|
||||
ListController::ListController() :
|
||||
ViewController(),
|
||||
ListController::ListController(Responder * parentResponder) :
|
||||
ViewController(parentResponder),
|
||||
m_tableView(TableView(this)),
|
||||
m_activeCell(0),
|
||||
m_manualScrolling(0)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
class ListController : public ViewController, public TableViewDataSource {
|
||||
public:
|
||||
ListController();
|
||||
ListController(Responder * parentResponder);
|
||||
|
||||
void setActiveCell(int index);
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include <escher/responder.h>
|
||||
#include <escher/view_controller.h>
|
||||
|
||||
class App {
|
||||
class App : public Responder {
|
||||
public:
|
||||
App();
|
||||
static App * runningApp();
|
||||
|
||||
@@ -5,13 +5,16 @@ extern "C" {
|
||||
#include <ion.h>
|
||||
}
|
||||
|
||||
class App;
|
||||
|
||||
class Responder {
|
||||
public:
|
||||
Responder();
|
||||
Responder(Responder * parentResponder);
|
||||
virtual bool handleEvent(ion_event_t event); // Default implementation does nothing
|
||||
virtual void setFocused(bool focused); // Default implementation does nothing. Used by subclasses to know when active or not
|
||||
Responder * parentResponder();
|
||||
Responder * parentResponder() const;
|
||||
void setParentResponder(Responder * responder);
|
||||
App * app();
|
||||
private:
|
||||
Responder * m_parentResponder;
|
||||
};
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
class TabViewController : public ViewController {
|
||||
public:
|
||||
TabViewController(ViewController * one, ViewController * two);
|
||||
TabViewController(Responder * parentResponder, ViewController * one, ViewController * two);
|
||||
//TabViewController(ViewController ** children, uint8_t numberOfChildren);
|
||||
View * view() override;
|
||||
void handleKeyEvent(int key) override;
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
class TextField : public ChildlessView, public Responder {
|
||||
public:
|
||||
TextField(char * textBuffer, size_t textBufferSize);
|
||||
TextField(Responder * parentResponder, char * textBuffer, size_t textBufferSize);
|
||||
// View
|
||||
void drawRect(KDContext * ctx, KDRect rect) const override;
|
||||
// Responder
|
||||
|
||||
@@ -16,7 +16,7 @@ extern "C" {
|
||||
|
||||
class ViewController : public Responder {
|
||||
public:
|
||||
ViewController();
|
||||
ViewController(Responder * parentResponder);
|
||||
virtual const char * title() const;
|
||||
virtual void handleKeyEvent(int key);
|
||||
virtual View * view() = 0;
|
||||
|
||||
@@ -7,6 +7,7 @@ extern "C" {
|
||||
static App * sRunningApp = nullptr;
|
||||
|
||||
App::App() :
|
||||
Responder(nullptr),
|
||||
m_focusedResponder(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
#include <escher/responder.h>
|
||||
|
||||
Responder::Responder() :
|
||||
m_parentResponder(nullptr)
|
||||
Responder::Responder(Responder * parentResponder) :
|
||||
m_parentResponder(parentResponder)
|
||||
{
|
||||
}
|
||||
|
||||
Responder * Responder::parentResponder() {
|
||||
Responder * Responder::parentResponder() const {
|
||||
return m_parentResponder;
|
||||
}
|
||||
|
||||
@@ -19,3 +19,15 @@ bool Responder::handleEvent(ion_event_t event) {
|
||||
|
||||
void Responder::setFocused(bool focused) {
|
||||
}
|
||||
|
||||
/* We assume the app is the root parent. */
|
||||
App * Responder::app() {
|
||||
Responder * rootResponder = this;
|
||||
while (rootResponder->parentResponder() != nullptr) {
|
||||
rootResponder = rootResponder->parentResponder();
|
||||
}
|
||||
/* If we used RTTI we could use a dynamic_cast, which would be a lot more
|
||||
* safe, as such:
|
||||
* return dynamic_cast<App *>(rootResponder); */
|
||||
return (App *)rootResponder;
|
||||
}
|
||||
|
||||
@@ -53,8 +53,8 @@ const char * TabViewController::ContentView::className() const {
|
||||
}
|
||||
#endif
|
||||
|
||||
TabViewController::TabViewController(ViewController * one, ViewController * two) :
|
||||
ViewController(),
|
||||
TabViewController::TabViewController(Responder * parentResponder, ViewController * one, ViewController * two) :
|
||||
ViewController(parentResponder),
|
||||
m_numberOfChildren(2),
|
||||
m_activeChildIndex(-1)
|
||||
{
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include <escher/text_field.h>
|
||||
|
||||
TextField::TextField(char * textBuffer, size_t textBufferSize) :
|
||||
TextField::TextField(Responder * parentResponder, char * textBuffer, size_t textBufferSize) :
|
||||
Responder(parentResponder),
|
||||
ChildlessView(),
|
||||
m_textBuffer(textBuffer),
|
||||
m_textBufferSize(textBufferSize),
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
#include <escher/view_controller.h>
|
||||
|
||||
ViewController::ViewController() :
|
||||
Responder() {
|
||||
ViewController::ViewController(Responder * parentResponder) :
|
||||
Responder(parentResponder)
|
||||
{
|
||||
}
|
||||
|
||||
const char * ViewController::title() const {
|
||||
|
||||
Reference in New Issue
Block a user