Files
Upsilon/apps/node_navigation_controller.h
Émilie Feral 74ee0ec63a [apps] enable node navigation to decide the leaf row height
Change-Id: Ib013dd50c4d57df31e9be7813440037173415330
2016-11-15 12:01:35 +01:00

52 lines
1.5 KiB
C++

#ifndef APPS_NODE_NAVIGATION_CONTROLLER_H
#define APPS_NODE_NAVIGATION_CONTROLLER_H
#include <escher.h>
#include "node.h"
#include "node_list_view_controller.h"
class NodeNavigationController : public StackViewController {
public:
NodeNavigationController();
const char * title() const override;
bool handleEvent(Ion::Events::Event event) override;
void didBecomeFirstResponder() override;
void setTextFieldCaller(TextField * textField);
virtual TableViewCell * leafCellAtIndex(int index) = 0;
virtual TableViewCell * nodeCellAtIndex(int index) = 0;
virtual void willDisplayCellForIndex(TableViewCell * cell, int index);
virtual KDCoordinate leafRowHeight(int index) = 0;
protected:
TextField * m_textFieldCaller;
NodeListViewController m_listViewController;
private:
class Stack {
public:
class State {
public:
State(int selectedRow = -1, KDCoordinate verticalScroll = 0);
bool isNull();
int selectedRow();
KDCoordinate verticalScroll();
private:
int m_selectedRow;
KDCoordinate m_verticalScroll;
};
void push(int selectedRow, KDCoordinate verticalScroll);
void pop();
State * stateAtIndex(int index);
int depth();
void resetStack();
private:
constexpr static int k_maxModelTreeDepth = 2;
State m_statesStack[k_maxModelTreeDepth];
};
virtual Node * nodeModel() = 0;
virtual bool selectLeaf(Node * selectedNode) = 0;
bool selectSubMenu(Node * selectedNode);
bool returnToPreviousMenu();
Stack m_stack;
};
#endif