mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[escher] Add methods viewWillAppear/Disappear in view controller instead
of keeping track of dataHasChanged in the selectable table view Change-Id: Id2626f527f44714e29b9bd66e2c843193e1b57b5
This commit is contained in:
@@ -85,7 +85,6 @@ void ListController::editExpression(FunctionExpressionCell * functionCell, Ion::
|
||||
},
|
||||
[](void * context, void * sender){
|
||||
});
|
||||
m_selectableTableView.dataHasChanged(true);
|
||||
}
|
||||
|
||||
ListParameterController * ListController::parameterController() {
|
||||
@@ -110,8 +109,6 @@ void ListController::configureFunction(Shared::Function * function) {
|
||||
StackViewController * stack = stackController();
|
||||
parameterController()->setFunction(function);
|
||||
stack->push(parameterController());
|
||||
// Force to reload the table (deleted functions, desactivated function)
|
||||
m_selectableTableView.dataHasChanged(true);
|
||||
}
|
||||
|
||||
void ListController::willDisplayTitleCellAtIndex(TableViewCell * cell, int j) {
|
||||
|
||||
@@ -35,7 +35,7 @@ void FunctionParameterController::setFunction(Function * function) {
|
||||
}
|
||||
|
||||
void FunctionParameterController::didBecomeFirstResponder() {
|
||||
m_selectableTableView.dataHasChanged(true);
|
||||
m_selectableTableView.reloadData();
|
||||
m_selectableTableView.selectCellAtLocation(0, 0);
|
||||
app()->setFirstResponder(&m_selectableTableView);
|
||||
}
|
||||
|
||||
@@ -25,7 +25,6 @@ ValuesController::ValuesController(Responder * parentResponder, FunctionStore *
|
||||
m_derivativeParameterController(DerivativeParameterController(this)),
|
||||
m_setIntervalButton(Button(this, "Regler l'intervalle",Invocation([](void * context, void * sender) {
|
||||
ValuesController * valuesController = (ValuesController *) context;
|
||||
valuesController->hasChangedTableData();
|
||||
StackViewController * stack = ((StackViewController *)valuesController->stackController());
|
||||
stack->push(valuesController->intervalParameterController());
|
||||
}, this), KDText::FontSize::Small)),
|
||||
@@ -83,20 +82,16 @@ bool ValuesController::handleEvent(Ion::Events::Event event) {
|
||||
}
|
||||
if (event == Ion::Events::OK) {
|
||||
if (activeRow() == -1) {
|
||||
m_selectableTableView.dataHasChanged(true);
|
||||
return headerViewController()->handleEvent(event);
|
||||
}
|
||||
if (activeRow() == 0) {
|
||||
if (activeColumn() == 0) {
|
||||
m_selectableTableView.dataHasChanged(true);
|
||||
configureAbscissa();
|
||||
return true;
|
||||
}
|
||||
if (isDerivativeColumn(activeColumn())) {
|
||||
m_selectableTableView.dataHasChanged(true);
|
||||
configureDerivativeFunction();
|
||||
} else {
|
||||
m_selectableTableView.dataHasChanged(true);
|
||||
configureFunction();
|
||||
}
|
||||
return true;
|
||||
@@ -291,10 +286,6 @@ Responder * ValuesController::defaultController() {
|
||||
return tabController();
|
||||
}
|
||||
|
||||
void ValuesController::hasChangedTableData() {
|
||||
m_selectableTableView.dataHasChanged(true);
|
||||
}
|
||||
|
||||
void ValuesController::selectCellAtLocation(int i, int j) {
|
||||
m_selectableTableView.selectCellAtLocation(i, j);
|
||||
}
|
||||
|
||||
@@ -35,7 +35,6 @@ public:
|
||||
bool isEmpty() const override;
|
||||
const char * emptyMessage() override;
|
||||
Responder * defaultController() override;
|
||||
void hasChangedTableData();
|
||||
void selectCellAtLocation(int i, int j);
|
||||
int activeRow();
|
||||
int activeColumn();
|
||||
|
||||
@@ -25,6 +25,7 @@ Node * NodeListViewController::nodeModel() {
|
||||
|
||||
void NodeListViewController::setNodeModel(Node * nodeModel) {
|
||||
m_nodeModel = nodeModel;
|
||||
m_selectableTableView.reloadData();
|
||||
}
|
||||
|
||||
void NodeListViewController::setFirstSelectedRow(int firstSelectedRow) {
|
||||
|
||||
@@ -59,7 +59,7 @@ void ImageTableView::setCalculation(Calculation * calculation, int index) {
|
||||
}
|
||||
|
||||
void ImageTableView::didBecomeFirstResponder() {
|
||||
m_selectableTableView.dataHasChanged(true);
|
||||
m_selectableTableView.reloadData();
|
||||
m_isSelected = true;
|
||||
if (m_selectableTableView.selectedRow() == -1) {
|
||||
m_selectableTableView.selectCellAtLocation(0, 0);
|
||||
|
||||
@@ -220,6 +220,10 @@ int CalculationController::typeAtLocation(int i, int j) {
|
||||
return 3;
|
||||
}
|
||||
|
||||
void CalculationController::viewWillAppear() {
|
||||
m_selectableTableView.reloadData();
|
||||
}
|
||||
|
||||
Responder * CalculationController::tabController() const {
|
||||
return (parentResponder()->parentResponder()->parentResponder());
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@ public:
|
||||
TableViewCell * reusableCell(int index, int type) override;
|
||||
int reusableCellCount(int type) override;
|
||||
int typeAtLocation(int i, int j) override;
|
||||
void viewWillAppear() override;
|
||||
private:
|
||||
Responder * tabController() const;
|
||||
constexpr static int k_totalNumberOfRows = 11;
|
||||
|
||||
@@ -33,7 +33,7 @@ View * ChangeTypeParameterController::view() {
|
||||
}
|
||||
|
||||
void ChangeTypeParameterController::didBecomeFirstResponder() {
|
||||
m_selectableTableView.dataHasChanged(true);
|
||||
m_selectableTableView.reloadData();
|
||||
m_selectableTableView.selectCellAtLocation(0, 0);
|
||||
app()->setFirstResponder(&m_selectableTableView);
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ bool ListController::handleEvent(Ion::Events::Event event) {
|
||||
}
|
||||
if (event == Ion::Events::OK && m_selectableTableView.selectedColumn() == 1
|
||||
&& m_selectableTableView.selectedRow() == numberOfRows() - 1) {
|
||||
m_selectableTableView.dataHasChanged(true);
|
||||
m_selectableTableView.reloadData();
|
||||
app()->displayModalViewController(&m_typeStackController, 0.f, 0.f, 32, 20, 20, 20);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ bool SequenceTitleCell::handleEvent(Ion::Events::Event event) {
|
||||
m_listParameterController->setSequence(m_sequence);
|
||||
stack->push(m_listParameterController);
|
||||
SelectableTableView * table = (SelectableTableView *)parentResponder();
|
||||
table->dataHasChanged(true);
|
||||
table->reloadData();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
@@ -35,7 +35,7 @@ View * TypeParameterController::view() {
|
||||
}
|
||||
|
||||
void TypeParameterController::didBecomeFirstResponder() {
|
||||
m_selectableTableView.dataHasChanged(true);
|
||||
m_selectableTableView.reloadData();
|
||||
m_selectableTableView.selectCellAtLocation(0, 0);
|
||||
app()->setFirstResponder(&m_selectableTableView);
|
||||
}
|
||||
|
||||
@@ -35,7 +35,6 @@ View * MainController::view() {
|
||||
}
|
||||
|
||||
void MainController::didBecomeFirstResponder() {
|
||||
m_selectableTableView.dataHasChanged(true);
|
||||
if (m_selectableTableView.selectedRow() < 0) {
|
||||
m_selectableTableView.selectCellAtLocation(0, 0);
|
||||
}
|
||||
@@ -45,7 +44,6 @@ void MainController::didBecomeFirstResponder() {
|
||||
bool MainController::handleEvent(Ion::Events::Event event) {
|
||||
if (event == Ion::Events::OK) {
|
||||
m_subController.setNodeModel(m_nodeModel->children(m_selectableTableView.selectedRow()), m_selectableTableView.selectedRow());
|
||||
m_selectableTableView.dataHasChanged(true);
|
||||
StackViewController * stack = stackController();
|
||||
stack->push(&m_subController);
|
||||
}
|
||||
@@ -92,6 +90,10 @@ void MainController::willDisplayCellForIndex(TableViewCell * cell, int index) {
|
||||
}
|
||||
}
|
||||
|
||||
void MainController::viewWillAppear() {
|
||||
m_selectableTableView.reloadData();
|
||||
}
|
||||
|
||||
StackViewController * MainController::stackController() const {
|
||||
return (StackViewController *)parentResponder();
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ public:
|
||||
TableViewCell * reusableCell(int index) override;
|
||||
int reusableCellCount() override;
|
||||
void willDisplayCellForIndex(TableViewCell * cell, int index) override;
|
||||
void viewWillAppear() override;
|
||||
private:
|
||||
StackViewController * stackController() const;
|
||||
constexpr static int k_totalNumberOfCell = 5;
|
||||
|
||||
@@ -30,7 +30,6 @@ View * SubController::view() {
|
||||
}
|
||||
|
||||
void SubController::didBecomeFirstResponder() {
|
||||
m_selectableTableView.dataHasChanged(true);
|
||||
m_selectableTableView.selectCellAtLocation(0, valueIndexAtPreferenceIndex(m_preferenceIndex));
|
||||
app()->setFirstResponder(&m_selectableTableView);
|
||||
}
|
||||
@@ -77,6 +76,10 @@ void SubController::setNodeModel(const Node * nodeModel, int preferenceIndex) {
|
||||
m_preferenceIndex = preferenceIndex;
|
||||
}
|
||||
|
||||
void SubController::viewWillAppear() {
|
||||
m_selectableTableView.reloadData();
|
||||
}
|
||||
|
||||
StackViewController * SubController::stackController() const {
|
||||
return (StackViewController *)parentResponder();
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ public:
|
||||
int reusableCellCount() override;
|
||||
void willDisplayCellForIndex(TableViewCell * cell, int index) override;
|
||||
void setNodeModel(const Node * nodeModel, int preferenceIndex);
|
||||
void viewWillAppear() override;
|
||||
private:
|
||||
StackViewController * stackController() const;
|
||||
void setPreferenceAtIndexWithValueIndex(int preferenceIndex, int valueIndex);
|
||||
|
||||
@@ -78,14 +78,16 @@ void EditableCellTableViewController::willDisplayCellAtLocationWithDisplayMode(T
|
||||
if (j == numberOfRows() - 1) {
|
||||
/* Display an empty line only if there is enough space for a new element in
|
||||
* data */
|
||||
if (numberOfElements() < maxNumberOfElements()) {
|
||||
if (numberOfElements() < maxNumberOfElements() && !myEditableValueCell->isEditing()) {
|
||||
buffer[0] = 0;
|
||||
myEditableValueCell->setText(buffer);
|
||||
return;
|
||||
}
|
||||
}
|
||||
Complex::convertFloatToText(dataAtLocation(i, j), buffer, Complex::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits, displayMode);
|
||||
myEditableValueCell->setText(buffer);
|
||||
if (!myEditableValueCell->isEditing()) {
|
||||
Complex::convertFloatToText(dataAtLocation(i, j), buffer, Complex::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits, displayMode);
|
||||
myEditableValueCell->setText(buffer);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -103,4 +105,9 @@ void EditableCellTableViewController::didBecomeFirstResponder() {
|
||||
app()->setFirstResponder(&m_selectableTableView);
|
||||
}
|
||||
|
||||
|
||||
void EditableCellTableViewController::viewWillAppear() {
|
||||
m_selectableTableView.reloadData();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ public:
|
||||
int indexFromCumulatedHeight(KDCoordinate offsetY) override;
|
||||
|
||||
void didBecomeFirstResponder() override;
|
||||
void viewWillAppear() override;
|
||||
protected:
|
||||
SelectableTableView m_selectableTableView;
|
||||
private:
|
||||
|
||||
@@ -159,6 +159,10 @@ bool ListController::handleEvent(Ion::Events::Event event) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void ListController::viewWillAppear() {
|
||||
m_selectableTableView.reloadData();
|
||||
}
|
||||
|
||||
StackViewController * ListController::stackController() const{
|
||||
return (StackViewController *)(parentResponder()->parentResponder());
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ public:
|
||||
void willDisplayCellAtLocation(TableViewCell * cell, int i, int j) override;
|
||||
void didBecomeFirstResponder() override;
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
void viewWillAppear() override;
|
||||
protected:
|
||||
static constexpr KDCoordinate k_emptyRowHeight = 50;
|
||||
StackViewController * stackController() const;
|
||||
|
||||
@@ -23,7 +23,7 @@ View * ListParameterController::view() {
|
||||
}
|
||||
|
||||
void ListParameterController::didBecomeFirstResponder() {
|
||||
m_selectableTableView.dataHasChanged(true);
|
||||
m_selectableTableView.reloadData();
|
||||
if (m_selectableTableView.selectedRow() == -1) {
|
||||
m_selectableTableView.selectCellAtLocation(0, 0);
|
||||
} else {
|
||||
|
||||
@@ -79,7 +79,6 @@ bool StoreController::handleEvent(Ion::Events::Event event) {
|
||||
}
|
||||
if (event == Ion::Events::OK && m_selectableTableView.selectedRow() == 0) {
|
||||
m_storeParameterController.selectXColumn(m_selectableTableView.selectedColumn() == 0);
|
||||
m_selectableTableView.dataHasChanged(true);
|
||||
StackViewController * stack = ((StackViewController *)parentResponder()->parentResponder());
|
||||
stack->push(&m_storeParameterController);
|
||||
return true;
|
||||
|
||||
@@ -136,6 +136,10 @@ int CalculationController::typeAtLocation(int i, int j) {
|
||||
return i;
|
||||
}
|
||||
|
||||
void CalculationController::viewWillAppear() {
|
||||
m_selectableTableView.reloadData();
|
||||
}
|
||||
|
||||
Responder * CalculationController::tabController() const {
|
||||
return (parentResponder()->parentResponder()->parentResponder());
|
||||
}
|
||||
|
||||
@@ -31,6 +31,7 @@ public:
|
||||
TableViewCell * reusableCell(int index, int type) override;
|
||||
int reusableCellCount(int type) override;
|
||||
int typeAtLocation(int i, int j) override;
|
||||
void viewWillAppear() override;
|
||||
private:
|
||||
Responder * tabController() const;
|
||||
constexpr static int k_totalNumberOfRows = 13;
|
||||
|
||||
@@ -12,6 +12,8 @@ public:
|
||||
const char * title() const override;
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
void didBecomeFirstResponder() override;
|
||||
void viewWillAppear() override;
|
||||
void viewWillDisappear() override;
|
||||
private:
|
||||
class ContentView : public View {
|
||||
public:
|
||||
|
||||
@@ -22,7 +22,6 @@ class App : public Responder {
|
||||
public:
|
||||
constexpr static uint8_t Magic = 0xA8;
|
||||
App(Container * container, ViewController * rootViewController, const char * name = nullptr, const char * upperName = nullptr, const Image * icon = nullptr);
|
||||
void setWindow(Window * window);
|
||||
void setFirstResponder(Responder * responder);
|
||||
Responder * firstResponder();
|
||||
void processEvent(Ion::Events::Event event);
|
||||
@@ -35,6 +34,11 @@ public:
|
||||
const char * upperName();
|
||||
const Image * icon();
|
||||
uint8_t m_magic; // Poor man's RTTI
|
||||
|
||||
|
||||
virtual void didBecomeActive(Window * window);
|
||||
virtual void willBecomeInactive();
|
||||
|
||||
protected:
|
||||
ModalViewController m_modalViewController;
|
||||
private:
|
||||
|
||||
@@ -18,6 +18,7 @@ public:
|
||||
View * subviewAtIndex(int index) override;
|
||||
void layoutSubviews() override;
|
||||
void didBecomeFirstResponder() override;
|
||||
bool isEditing();
|
||||
void setEditing(bool isEditing);
|
||||
constexpr static int k_bufferLength = 255;
|
||||
private:
|
||||
|
||||
@@ -17,6 +17,7 @@ public:
|
||||
View * subviewAtIndex(int index) override;
|
||||
void layoutSubviews() override;
|
||||
void didBecomeFirstResponder() override;
|
||||
bool isEditing();
|
||||
void setEditing(bool isEditing);
|
||||
private:
|
||||
EditableTextCell m_editableCell;
|
||||
|
||||
@@ -16,6 +16,8 @@ public:
|
||||
void didBecomeFirstResponder() override;
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
bool setSelectedButton(int selectedButton);
|
||||
void viewWillAppear() override;
|
||||
void viewWillDisappear() override;
|
||||
private:
|
||||
class ContentView : public View {
|
||||
public:
|
||||
|
||||
@@ -16,6 +16,8 @@ public:
|
||||
KDCoordinate topMargin = 0, KDCoordinate leftMargin = 0, KDCoordinate bottomMargin = 0, KDCoordinate rightMargin = 0);
|
||||
void dismissModalViewController();
|
||||
bool isDisplayingModal();
|
||||
void viewWillAppear() override;
|
||||
void viewWillDisappear() override;
|
||||
private:
|
||||
class ContentView : public View {
|
||||
public:
|
||||
|
||||
@@ -30,13 +30,11 @@ public:
|
||||
void deselectTable();
|
||||
bool selectCellAtLocation(int i, int j);
|
||||
TableViewCell * selectedCell();
|
||||
void dataHasChanged(bool dataHasChanged);
|
||||
protected:
|
||||
SelectableTableViewDelegate * m_delegate;
|
||||
private:
|
||||
int m_selectedCellX;
|
||||
int m_selectedCellY;
|
||||
bool m_dataHasChanged;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -21,6 +21,8 @@ public:
|
||||
const char * title() const override;
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
void didBecomeFirstResponder() override;
|
||||
void viewWillAppear() override;
|
||||
void viewWillDisappear() override;
|
||||
private:
|
||||
class ControllerView : public View {
|
||||
public:
|
||||
|
||||
@@ -17,6 +17,8 @@ public:
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
void didBecomeFirstResponder() override;
|
||||
void didResignFirstResponder() override;
|
||||
void viewWillAppear() override;
|
||||
void viewWillDisappear() override;
|
||||
private:
|
||||
class ContentView : public View {
|
||||
public:
|
||||
|
||||
@@ -19,6 +19,8 @@ public:
|
||||
ViewController(Responder * parentResponder);
|
||||
virtual const char * title() const;
|
||||
virtual View * view() = 0;
|
||||
virtual void viewWillAppear();
|
||||
virtual void viewWillDisappear();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -74,3 +74,15 @@ void AlternateEmptyViewController::didBecomeFirstResponder() {
|
||||
app()->setFirstResponder(m_contentView.mainViewController());
|
||||
}
|
||||
}
|
||||
|
||||
void AlternateEmptyViewController::viewWillAppear() {
|
||||
if (!m_contentView.alternateEmptyViewDelegate()->isEmpty()) {
|
||||
m_contentView.mainViewController()->viewWillAppear();
|
||||
}
|
||||
}
|
||||
|
||||
void AlternateEmptyViewController::viewWillDisappear() {
|
||||
if (!m_contentView.alternateEmptyViewDelegate()->isEmpty()) {
|
||||
m_contentView.mainViewController()->viewWillDisappear();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,16 +17,6 @@ App::App(Container * container, ViewController * rootViewController, const char
|
||||
{
|
||||
}
|
||||
|
||||
void App::setWindow(Window * window) {
|
||||
View * view = m_modalViewController.view();
|
||||
assert(m_modalViewController.app() == this);
|
||||
window->setContentView(view);
|
||||
if (m_firstResponder == nullptr) {
|
||||
setFirstResponder(&m_modalViewController);
|
||||
}
|
||||
window->redraw();
|
||||
}
|
||||
|
||||
void App::processEvent(Ion::Events::Event event) {
|
||||
Responder * responder = m_firstResponder;
|
||||
bool didHandleEvent = false;
|
||||
@@ -81,4 +71,19 @@ void App::displayWarning(const char * warningMessage) {
|
||||
|
||||
const Container * App::container() const {
|
||||
return m_container;
|
||||
}
|
||||
}
|
||||
|
||||
void App::didBecomeActive(Window * window) {
|
||||
View * view = m_modalViewController.view();
|
||||
assert(m_modalViewController.app() == this);
|
||||
window->setContentView(view);
|
||||
if (m_firstResponder == nullptr) {
|
||||
setFirstResponder(&m_modalViewController);
|
||||
}
|
||||
window->redraw();
|
||||
m_modalViewController.viewWillAppear();
|
||||
}
|
||||
|
||||
void App::willBecomeInactive() {
|
||||
m_modalViewController.viewWillDisappear();
|
||||
}
|
||||
|
||||
@@ -10,8 +10,13 @@ Container::Container() :
|
||||
}
|
||||
|
||||
void Container::switchTo(App * app) {
|
||||
if (m_activeApp) {
|
||||
m_activeApp->willBecomeInactive();
|
||||
}
|
||||
m_activeApp = app;
|
||||
m_activeApp->setWindow(window());
|
||||
if (m_activeApp) {
|
||||
m_activeApp->didBecomeActive(window());
|
||||
}
|
||||
}
|
||||
|
||||
App * Container::activeApp() {
|
||||
|
||||
@@ -48,6 +48,10 @@ void EditableTextCell::didBecomeFirstResponder() {
|
||||
app()->setFirstResponder(&m_textField);
|
||||
}
|
||||
|
||||
bool EditableTextCell::isEditing() {
|
||||
return m_textField.isEditing();
|
||||
}
|
||||
|
||||
void EditableTextCell::setEditing(bool isEditing) {
|
||||
m_textField.setEditing(isEditing);
|
||||
}
|
||||
|
||||
@@ -48,6 +48,10 @@ void EvenOddEditableTextCell::didBecomeFirstResponder() {
|
||||
app()->setFirstResponder(&m_editableCell);
|
||||
}
|
||||
|
||||
bool EvenOddEditableTextCell::isEditing() {
|
||||
return m_editableCell.isEditing();
|
||||
}
|
||||
|
||||
void EvenOddEditableTextCell::setEditing(bool isEditing) {
|
||||
m_editableCell.setEditing(isEditing);
|
||||
}
|
||||
|
||||
@@ -131,3 +131,11 @@ bool HeaderViewController::handleEvent(Ion::Events::Event event) {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void HeaderViewController::viewWillAppear() {
|
||||
m_contentView.mainViewController()->viewWillAppear();
|
||||
}
|
||||
|
||||
void HeaderViewController::viewWillDisappear() {
|
||||
m_contentView.mainViewController()->viewWillDisappear();
|
||||
}
|
||||
|
||||
@@ -115,14 +115,18 @@ void ModalViewController::displayModalViewController(ViewController * vc, float
|
||||
m_currentModalViewController = vc;
|
||||
vc->setParentResponder(this);
|
||||
m_previousResponder = app()->firstResponder();
|
||||
m_regularViewController->viewWillDisappear();
|
||||
m_contentView.presentModalView(vc->view(), verticalAlignment, horizontalAlignment, topMargin, leftMargin, bottomMargin, rightMargin);
|
||||
app()->setFirstResponder(vc);
|
||||
m_currentModalViewController->viewWillAppear();
|
||||
}
|
||||
|
||||
void ModalViewController::dismissModalViewController() {
|
||||
m_currentModalViewController->viewWillDisappear();
|
||||
m_currentModalViewController = nullptr;
|
||||
app()->setFirstResponder(m_previousResponder);
|
||||
m_contentView.dismissModalView();
|
||||
m_regularViewController->viewWillAppear();
|
||||
}
|
||||
|
||||
void ModalViewController::didBecomeFirstResponder() {
|
||||
@@ -142,3 +146,17 @@ bool ModalViewController::handleEvent(Ion::Events::Event event) {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void ModalViewController::viewWillAppear() {
|
||||
if (m_contentView.isDisplayingModal()) {
|
||||
m_currentModalViewController->viewWillAppear();
|
||||
}
|
||||
m_regularViewController->viewWillAppear();
|
||||
}
|
||||
|
||||
void ModalViewController::viewWillDisappear() {
|
||||
if (m_contentView.isDisplayingModal()) {
|
||||
m_currentModalViewController->viewWillDisappear();
|
||||
}
|
||||
m_regularViewController->viewWillDisappear();
|
||||
}
|
||||
|
||||
@@ -9,8 +9,7 @@ SelectableTableView::SelectableTableView(Responder * parentResponder, TableViewD
|
||||
Responder(parentResponder),
|
||||
m_delegate(delegate),
|
||||
m_selectedCellX(0),
|
||||
m_selectedCellY(-1),
|
||||
m_dataHasChanged(true)
|
||||
m_selectedCellY(-1)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -27,11 +26,6 @@ int SelectableTableView::selectedColumn() {
|
||||
}
|
||||
|
||||
void SelectableTableView::didBecomeFirstResponder() {
|
||||
if (m_dataHasChanged) {
|
||||
reloadData();
|
||||
scrollToCell(m_selectedCellX, m_selectedCellY);
|
||||
m_dataHasChanged = false;
|
||||
}
|
||||
if (m_delegate) {
|
||||
m_delegate->tableViewDidChangeSelection(this, 0, -1);
|
||||
}
|
||||
@@ -98,7 +92,3 @@ bool SelectableTableView::handleEvent(Ion::Events::Event event) {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void SelectableTableView::dataHasChanged(bool dataHasChanged) {
|
||||
m_dataHasChanged = dataHasChanged;
|
||||
}
|
||||
|
||||
@@ -91,6 +91,10 @@ void StackViewController::push(ViewController * vc, KDColor textColor, KDColor b
|
||||
m_view.pushStack(vc->title(), textColor, backgroundColor, separatorColor);
|
||||
m_children[m_numberOfChildren++] = vc;
|
||||
setupActiveViewController();
|
||||
if (m_numberOfChildren > 1) {
|
||||
m_children[m_numberOfChildren-2]->viewWillDisappear();
|
||||
}
|
||||
vc->viewWillAppear();
|
||||
}
|
||||
|
||||
void StackViewController::pop() {
|
||||
@@ -100,6 +104,8 @@ void StackViewController::pop() {
|
||||
vc->setParentResponder(nullptr);
|
||||
m_numberOfChildren--;
|
||||
setupActiveViewController();
|
||||
vc->viewWillDisappear();
|
||||
m_children[m_numberOfChildren-1]->viewWillAppear();
|
||||
}
|
||||
|
||||
void StackViewController::setupActiveViewController() {
|
||||
@@ -129,3 +135,17 @@ bool StackViewController::handleEvent(Ion::Events::Event event) {
|
||||
View * StackViewController::view() {
|
||||
return &m_view;
|
||||
}
|
||||
|
||||
void StackViewController::viewWillAppear() {
|
||||
ViewController * vc = m_children[m_numberOfChildren-1];
|
||||
if (m_numberOfChildren > 0 && vc) {
|
||||
vc->viewWillAppear();
|
||||
}
|
||||
}
|
||||
|
||||
void StackViewController::viewWillDisappear() {
|
||||
ViewController * vc = m_children[m_numberOfChildren-1];
|
||||
if (m_numberOfChildren > 0 && vc) {
|
||||
vc->viewWillDisappear();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,12 +94,17 @@ bool TabViewController::handleEvent(Ion::Events::Event event) {
|
||||
void TabViewController::setActiveTab(int8_t i) {
|
||||
ViewController * activeVC = m_children[i];
|
||||
if (i != m_activeChildIndex) {
|
||||
//TODO assert(i <= m_numberOfchildren);
|
||||
assert(i <= m_numberOfChildren);
|
||||
m_view.setActiveView(activeVC->view());
|
||||
m_view.m_tabView.setActiveIndex(i);
|
||||
if (m_activeChildIndex >= 0) {
|
||||
m_children[m_activeChildIndex]->viewWillDisappear();
|
||||
}
|
||||
m_activeChildIndex = i;
|
||||
}
|
||||
|
||||
if (i >= 0) {
|
||||
m_children[i]->viewWillAppear();
|
||||
}
|
||||
} else {}
|
||||
app()->setFirstResponder(activeVC);
|
||||
}
|
||||
|
||||
@@ -141,3 +146,13 @@ uint8_t TabViewController::numberOfTabs() {
|
||||
const char * TabViewController::tabName(uint8_t index) {
|
||||
return m_children[index]->title();
|
||||
}
|
||||
|
||||
void TabViewController::viewWillAppear() {
|
||||
ViewController * activeVC = m_children[m_activeChildIndex];
|
||||
activeVC->viewWillAppear();
|
||||
}
|
||||
|
||||
void TabViewController::viewWillDisappear() {
|
||||
ViewController * activeVC = m_children[m_activeChildIndex];
|
||||
activeVC->viewWillDisappear();
|
||||
}
|
||||
|
||||
@@ -8,3 +8,9 @@ ViewController::ViewController(Responder * parentResponder) :
|
||||
const char * ViewController::title() const {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void ViewController::viewWillAppear() {
|
||||
}
|
||||
|
||||
void ViewController::viewWillDisappear() {
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user